diff options
Diffstat (limited to 'pimd')
| -rw-r--r-- | pimd/pim_bfd.c | 2 | ||||
| -rw-r--r-- | pimd/pim_br.c | 1 | ||||
| -rw-r--r-- | pimd/pim_cmd.c | 16 | ||||
| -rw-r--r-- | pimd/pim_errors.c | 49 | ||||
| -rw-r--r-- | pimd/pim_errors.h | 33 | ||||
| -rw-r--r-- | pimd/pim_ifchannel.c | 20 | ||||
| -rw-r--r-- | pimd/pim_igmp.c | 13 | ||||
| -rw-r--r-- | pimd/pim_igmpv3.c | 35 | ||||
| -rw-r--r-- | pimd/pim_instance.c | 13 | ||||
| -rw-r--r-- | pimd/pim_main.c | 2 | ||||
| -rw-r--r-- | pimd/pim_mroute.c | 71 | ||||
| -rw-r--r-- | pimd/pim_msdp.c | 4 | ||||
| -rw-r--r-- | pimd/pim_msdp_packet.c | 10 | ||||
| -rw-r--r-- | pimd/pim_msdp_socket.c | 83 | ||||
| -rw-r--r-- | pimd/pim_neighbor.c | 4 | ||||
| -rw-r--r-- | pimd/pim_pim.c | 6 | ||||
| -rw-r--r-- | pimd/pim_rp.c | 28 | ||||
| -rw-r--r-- | pimd/pim_sock.c | 43 | ||||
| -rw-r--r-- | pimd/pim_ssm.c | 6 | ||||
| -rw-r--r-- | pimd/pim_ssmpingd.c | 9 | ||||
| -rw-r--r-- | pimd/pim_time.c | 21 | ||||
| -rw-r--r-- | pimd/pim_tlv.c | 6 | ||||
| -rw-r--r-- | pimd/pim_vty.c | 5 | ||||
| -rw-r--r-- | pimd/pim_zlookup.c | 35 | ||||
| -rw-r--r-- | pimd/pimd.c | 4 | ||||
| -rw-r--r-- | pimd/pimd.h | 1 | ||||
| -rw-r--r-- | pimd/subdir.am | 2 |
27 files changed, 279 insertions, 243 deletions
diff --git a/pimd/pim_bfd.c b/pimd/pim_bfd.c index 4a3cf715da..f7a217b514 100644 --- a/pimd/pim_bfd.c +++ b/pimd/pim_bfd.c @@ -51,10 +51,12 @@ void pim_bfd_write_config(struct vty *vty, struct interface *ifp) if (!bfd_info) return; +#if HAVE_BFDD == 0 if (CHECK_FLAG(bfd_info->flags, BFD_FLAG_PARAM_CFG)) vty_out(vty, " ip pim bfd %d %d %d\n", bfd_info->detect_mult, bfd_info->required_min_rx, bfd_info->desired_min_tx); else +#endif /* ! HAVE_BFDD */ vty_out(vty, " ip pim bfd\n"); } diff --git a/pimd/pim_br.c b/pimd/pim_br.c index 6184ea12c4..fc6a02ec93 100644 --- a/pimd/pim_br.c +++ b/pimd/pim_br.c @@ -64,7 +64,6 @@ void pim_br_set_pmbr(struct prefix_sg *sg, struct in_addr br) if (!pim_br) { pim_br = XCALLOC(MTYPE_PIM_BR, sizeof(*pim_br)); - pim_br->sg = *sg; listnode_add(pim_br_list, pim_br); diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 460bbfeae7..6eb4303fb7 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -5106,11 +5106,6 @@ static int pim_rp_cmd_worker(struct pim_instance *pim, struct vty *vty, result = pim_rp_new(pim, rp, group, plist); - if (result == PIM_MALLOC_FAIL) { - vty_out(vty, "%% Out of memory\n"); - return CMD_WARNING_CONFIG_FAILED; - } - if (result == PIM_GROUP_BAD_ADDRESS) { vty_out(vty, "%% Bad group address specified: %s\n", group); return CMD_WARNING_CONFIG_FAILED; @@ -7547,7 +7542,12 @@ DEFUN (no_ip_pim_bfd, return CMD_SUCCESS; } -DEFUN (ip_pim_bfd_param, +#if HAVE_BFDD > 0 +DEFUN_HIDDEN( +#else +DEFUN( +#endif /* HAVE_BFDD */ + ip_pim_bfd_param, ip_pim_bfd_param_cmd, "ip pim bfd (2-255) (50-60000) (50-60000)", IP_STR @@ -7585,12 +7585,14 @@ DEFUN (ip_pim_bfd_param, return CMD_SUCCESS; } +#if HAVE_BFDD == 0 ALIAS(no_ip_pim_bfd, no_ip_pim_bfd_param_cmd, "no ip pim bfd (2-255) (50-60000) (50-60000)", NO_STR IP_STR PIM_STR "Enables BFD support\n" "Detect Multiplier\n" "Required min receive interval\n" "Desired min transmit interval\n") +#endif /* !HAVE_BFDD */ static int ip_msdp_peer_cmd_worker(struct pim_instance *pim, struct vty *vty, const char *peer, const char *local) @@ -8906,5 +8908,7 @@ void pim_cmd_init(void) install_element(INTERFACE_NODE, &ip_pim_bfd_cmd); install_element(INTERFACE_NODE, &ip_pim_bfd_param_cmd); install_element(INTERFACE_NODE, &no_ip_pim_bfd_cmd); +#if HAVE_BFDD == 0 install_element(INTERFACE_NODE, &no_ip_pim_bfd_param_cmd); +#endif /* !HAVE_BFDD */ } diff --git a/pimd/pim_errors.c b/pimd/pim_errors.c new file mode 100644 index 0000000000..d154752bdc --- /dev/null +++ b/pimd/pim_errors.c @@ -0,0 +1,49 @@ +/* + * PIM-specific error messages. + * Copyright (C) 2018 Cumulus Networks, Inc. + * Donald Sharp + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <zebra.h> + +#include "lib/ferr.h" +#include "pim_errors.h" + +/* clang-format off */ +static struct log_ref ferr_pim_err[] = { + { + .code = PIM_ERR_MSDP_PACKET, + .title = "PIM MSDP Packet Error", + .description = "PIM has received a packet from a peer that does not correctly decode", + .suggestion = "Check MSDP peer and ensure it is correctly working" + }, + { + .code = PIM_ERR_CONFIG, + .title = "PIM Configuration Error", + .description = "PIM has detected a configuration error", + .suggestion = "Ensure the configuration is correct and apply correct configuration" + }, + { + .code = END_FERR, + } +}; +/* clang-format on */ + +void pim_error_init(void) +{ + log_ref_add(ferr_pim_err); +} diff --git a/pimd/pim_errors.h b/pimd/pim_errors.h new file mode 100644 index 0000000000..ad9c95a93d --- /dev/null +++ b/pimd/pim_errors.h @@ -0,0 +1,33 @@ +/* + * PIM-specific error messages. + * Copyright (C) 2018 Cumulus Networks, Inc. + * Donald Sharp + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; see the file COPYING; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __PIM_ERRORS_H__ +#define __PIM_ERRORS_H__ + +#include "lib/ferr.h" + +enum pim_log_refs { + PIM_ERR_MSDP_PACKET = PIM_FERR_START, + PIM_ERR_CONFIG, +}; + +extern void pim_error_init(void); + +#endif diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c index eb3307589e..92a78c4bb4 100644 --- a/pimd/pim_ifchannel.c +++ b/pimd/pim_ifchannel.c @@ -549,26 +549,6 @@ struct pim_ifchannel *pim_ifchannel_add(struct interface *ifp, up = pim_upstream_add(pim_ifp->pim, sg, NULL, up_flags, __PRETTY_FUNCTION__, ch); - if (!up) { - zlog_err( - "%s: could not attach upstream (S,G)=%s on interface %s", - __PRETTY_FUNCTION__, pim_str_sg_dump(sg), ifp->name); - - if (ch->parent) - listnode_delete(ch->parent->sources, ch); - - pim_ifchannel_remove_children(ch); - if (ch->sources) - list_delete_and_null(&ch->sources); - - THREAD_OFF(ch->t_ifjoin_expiry_timer); - THREAD_OFF(ch->t_ifjoin_prune_pending_timer); - THREAD_OFF(ch->t_ifassert_timer); - - RB_REMOVE(pim_ifchannel_rb, &pim_ifp->ifchannel_rb, ch); - XFREE(MTYPE_PIM_IFCHANNEL, ch); - return NULL; - } ch->upstream = up; listnode_add_sort(up->ifchannels, ch); diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c index b46f1b5e9d..270f1e3f27 100644 --- a/pimd/pim_igmp.c +++ b/pimd/pim_igmp.c @@ -24,6 +24,7 @@ #include "if.h" #include "hash.h" #include "jhash.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_igmp.h" @@ -96,7 +97,8 @@ static int igmp_sock_open(struct in_addr ifaddr, struct interface *ifp, } if (!join) { - zlog_err( + flog_err_sys( + LIB_ERR_SOCKET, "IGMP socket fd=%d could not join any group on interface address %s", fd, inet_ntoa(ifaddr)); close(fd); @@ -697,7 +699,8 @@ static void sock_close(struct igmp_sock *igmp) THREAD_OFF(igmp->t_igmp_read); if (close(igmp->fd)) { - zlog_err( + flog_err( + LIB_ERR_SOCKET, "Failure closing IGMP socket %s fd=%d on interface %s: errno=%d: %s", inet_ntoa(igmp->ifaddr), igmp->fd, igmp->interface->name, errno, safe_strerror(errno)); @@ -960,12 +963,6 @@ struct igmp_sock *pim_igmp_sock_add(struct list *igmp_sock_list, } igmp = igmp_sock_new(fd, ifaddr, ifp, mtrace_only); - if (!igmp) { - zlog_err("%s %s: igmp_sock_new() failure", __FILE__, - __PRETTY_FUNCTION__); - close(fd); - return 0; - } igmp_read_on(igmp); diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c index b32d71cc0d..7b21376c99 100644 --- a/pimd/pim_igmpv3.c +++ b/pimd/pim_igmpv3.c @@ -21,6 +21,7 @@ #include "log.h" #include "memory.h" #include "if.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_iface.h" @@ -486,9 +487,6 @@ static struct igmp_source *add_source_by_addr(struct igmp_sock *igmp, } src = source_new(group, src_addr); - if (!src) { - return 0; - } return src; } @@ -579,10 +577,6 @@ static void isex_excl(struct igmp_group *group, int num_sources, /* E.4: if not found, create source with timer=GMI: * (A-X-Y) */ source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } zassert(!source->t_source_timer); /* timer == 0 */ igmp_source_reset_gmi(group->group_igmp_sock, group, source); @@ -637,10 +631,6 @@ static void isex_incl(struct igmp_group *group, int num_sources, /* I.4: if not found, create source with timer=0 (B-A) */ source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } zassert(!source->t_source_timer); /* (B-A) timer=0 */ } @@ -720,10 +710,6 @@ static void toin_incl(struct igmp_group *group, int num_sources, } else { /* If not found, create new source */ source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } } /* (B)=GMI */ @@ -765,10 +751,6 @@ static void toin_excl(struct igmp_group *group, int num_sources, } else { /* If not found, create new source */ source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } } /* (A)=GMI */ @@ -854,10 +836,6 @@ static void toex_incl(struct igmp_group *group, int num_sources, /* If source not found, create source with timer=0: * (B-A)=0 */ source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } zassert(!source->t_source_timer); /* (B-A) timer=0 */ } @@ -917,10 +895,6 @@ static void toex_excl(struct igmp_group *group, int num_sources, * (A-X-Y)=Group Timer */ long group_timer_msec; source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } zassert(!source->t_source_timer); /* timer == 0 */ group_timer_msec = igmp_group_timer_remain_msec(group); @@ -1431,10 +1405,6 @@ static void block_excl(struct igmp_group *group, int num_sources, * (A-X-Y)=Group Timer */ long group_timer_msec; source = source_new(group, *src_addr); - if (!source) { - /* ugh, internal malloc failure, skip source */ - continue; - } zassert(!source->t_source_timer); /* timer == 0 */ group_timer_msec = igmp_group_timer_remain_msec(group); @@ -1614,7 +1584,8 @@ void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname, msg_size = IGMP_V3_SOURCES_OFFSET + (num_sources << 2); if (msg_size > query_buf_size) { - zlog_err( + flog_err( + LIB_ERR_DEVELOPMENT, "%s %s: unable to send: msg_size=%zd larger than query_buf_size=%d", __FILE__, __PRETTY_FUNCTION__, msg_size, query_buf_size); diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c index e664bf3062..8dc48cc004 100644 --- a/pimd/pim_instance.c +++ b/pimd/pim_instance.c @@ -22,6 +22,7 @@ #include "hash.h" #include "vrf.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_ssm.h" @@ -94,10 +95,6 @@ static struct pim_instance *pim_instance_init(struct vrf *vrf) zlog_debug("%s: NHT rpf hash init ", __PRETTY_FUNCTION__); pim->ssm_info = pim_ssm_init(); - if (!pim->ssm_info) { - pim_instance_terminate(pim); - return NULL; - } pim->static_routes = list_new(); pim->static_routes->del = (void (*)(void *))pim_static_route_free; @@ -132,14 +129,6 @@ static int pim_vrf_new(struct vrf *vrf) struct pim_instance *pim = pim_instance_init(vrf); zlog_debug("VRF Created: %s(%u)", vrf->name, vrf->vrf_id); - if (pim == NULL) { - zlog_err("%s %s: pim class init failure ", __FILE__, - __PRETTY_FUNCTION__); - /* - * We will crash and burn otherwise - */ - exit(1); - } vrf->info = (void *)pim; diff --git a/pimd/pim_main.c b/pimd/pim_main.c index c4cab25ae9..578794086d 100644 --- a/pimd/pim_main.c +++ b/pimd/pim_main.c @@ -47,6 +47,7 @@ #include "pim_msdp.h" #include "pim_iface.h" #include "pim_bfd.h" +#include "pim_errors.h" extern struct host host; @@ -108,6 +109,7 @@ int main(int argc, char **argv, char **envp) /* * Initializations */ + pim_error_init(); pim_vrf_init(); access_list_init(); prefix_list_init(); diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index dd30678405..c69e2939e4 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -25,6 +25,7 @@ #include "vty.h" #include "plist.h" #include "sockopt.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_rpf.h" @@ -55,27 +56,22 @@ static int pim_mroute_set(struct pim_instance *pim, int enable) * We need to create the VRF table for the pim mroute_socket */ if (pim->vrf_id != VRF_DEFAULT) { - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err( - "pim_mroute_socket_enable: could not raise privs, %s", - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - opt = pim->vrf->data.l.table_id; - err = setsockopt(pim->mroute_socket, IPPROTO_IP, MRT_TABLE, - &opt, opt_len); - if (err) { - zlog_warn( - "%s %s: failure: setsockopt(fd=%d,IPPROTO_IP, MRT_TABLE=%d): errno=%d: %s", - __FILE__, __PRETTY_FUNCTION__, - pim->mroute_socket, opt, errno, - safe_strerror(errno)); - return -1; - } + opt = pim->vrf->data.l.table_id; + err = setsockopt(pim->mroute_socket, IPPROTO_IP, + MRT_TABLE, + &opt, opt_len); + if (err) { + zlog_warn( + "%s %s: failure: setsockopt(fd=%d,IPPROTO_IP, MRT_TABLE=%d): errno=%d: %s", + __FILE__, __PRETTY_FUNCTION__, + pim->mroute_socket, opt, errno, + safe_strerror(errno)); + return -1; + } - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err( - "pim_mroute_socket_enable: could not lower privs, %s", - safe_strerror(errno)); + } } opt = enable ? MRT_INIT : MRT_DONE; @@ -708,32 +704,29 @@ int pim_mroute_socket_enable(struct pim_instance *pim) { int fd; - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("pim_mroute_socket_enable: could not raise privs, %s", - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP); + fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP); - if (fd < 0) { - zlog_warn("Could not create mroute socket: errno=%d: %s", errno, - safe_strerror(errno)); - return -2; - } + if (fd < 0) { + zlog_warn("Could not create mroute socket: errno=%d: %s", + errno, + safe_strerror(errno)); + return -2; + } #ifdef SO_BINDTODEVICE - if (pim->vrf->vrf_id != VRF_DEFAULT - && setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, pim->vrf->name, - strlen(pim->vrf->name))) { - zlog_warn("Could not setsockopt SO_BINDTODEVICE: %s", - safe_strerror(errno)); - close(fd); - return -3; - } + if (pim->vrf->vrf_id != VRF_DEFAULT + && setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, + pim->vrf->name, strlen(pim->vrf->name))) { + zlog_warn("Could not setsockopt SO_BINDTODEVICE: %s", + safe_strerror(errno)); + close(fd); + return -3; + } #endif - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("pim_mroute_socket_enable: could not lower privs, %s", - safe_strerror(errno)); + } pim->mroute_socket = fd; if (pim_mroute_set(pim, 1)) { diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c index 4910cb8b38..7fcf42e8ce 100644 --- a/pimd/pim_msdp.c +++ b/pimd/pim_msdp.c @@ -28,6 +28,7 @@ #include <lib/thread.h> #include <lib/vty.h> #include <lib/plist.h> +#include <lib/lib_errors.h> #include "pimd.h" #include "pim_cmd.h" @@ -517,7 +518,8 @@ static void pim_msdp_sa_local_del_on_up_del(struct pim_instance *pim, * the flow. Accounting for such cases requires lot of * changes; perhaps * address this in the next release? - XXX */ - zlog_err( + flog_err( + LIB_ERR_DEVELOPMENT, "MSDP sa %s SPT teardown is causing the local entry to be removed", sa->sg_str); return; diff --git a/pimd/pim_msdp_packet.c b/pimd/pim_msdp_packet.c index 978d979245..65232aafa2 100644 --- a/pimd/pim_msdp_packet.c +++ b/pimd/pim_msdp_packet.c @@ -23,9 +23,11 @@ #include <lib/stream.h> #include <lib/thread.h> #include <lib/vty.h> +#include <lib/lib_errors.h> #include "pimd.h" #include "pim_str.h" +#include "pim_errors.h" #include "pim_msdp.h" #include "pim_msdp_packet.h" @@ -145,7 +147,8 @@ static void pim_msdp_connect_check(struct pim_msdp_peer *mp) /* If getsockopt is fail, this is fatal error. */ if (ret < 0) { - zlog_err("can't get sockopt for nonblocking connect"); + flog_err_sys(LIB_ERR_SOCKET, + "can't get sockopt for nonblocking connect"); pim_msdp_peer_reset_tcp_conn(mp, "connect-failed"); return; } @@ -481,8 +484,9 @@ static void pim_msdp_pkt_sa_rx_one(struct pim_msdp_peer *mp, struct in_addr rp) if (prefix_len != 32) { /* ignore SA update if the prefix length is not 32 */ - zlog_err("rxed sa update with invalid prefix length %d", - prefix_len); + flog_err(PIM_ERR_MSDP_PACKET, + "rxed sa update with invalid prefix length %d", + prefix_len); return; } if (PIM_DEBUG_MSDP_PACKETS) { diff --git a/pimd/pim_msdp_socket.c b/pimd/pim_msdp_socket.c index f245a04353..feac42cf53 100644 --- a/pimd/pim_msdp_socket.c +++ b/pimd/pim_msdp_socket.c @@ -26,9 +26,11 @@ #include <lib/vty.h> #include <lib/if.h> #include <lib/vrf.h> +#include <lib/lib_errors.h> #include "pimd.h" #include "pim_sock.h" +#include "pim_errors.h" #include "pim_msdp.h" #include "pim_msdp_socket.h" @@ -41,16 +43,18 @@ static void pim_msdp_update_sock_send_buffer_size(int fd) socklen_t optlen = sizeof(optval); if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, &optval, &optlen) < 0) { - zlog_err("getsockopt of SO_SNDBUF failed %s\n", - safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "getsockopt of SO_SNDBUF failed %s\n", + safe_strerror(errno)); return; } if (optval < size) { if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(size)) < 0) { - zlog_err("Couldn't increase send buffer: %s\n", - safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "Couldn't increase send buffer: %s\n", + safe_strerror(errno)); } } } @@ -70,7 +74,8 @@ static int pim_msdp_sock_accept(struct thread *thread) /* re-register accept thread */ accept_sock = THREAD_FD(thread); if (accept_sock < 0) { - zlog_err("accept_sock is negative value %d", accept_sock); + flog_err(LIB_ERR_DEVELOPMENT, + "accept_sock is negative value %d", accept_sock); return -1; } pim->msdp.listener.thread = NULL; @@ -80,8 +85,8 @@ static int pim_msdp_sock_accept(struct thread *thread) /* accept client connection. */ msdp_sock = sockunion_accept(accept_sock, &su); if (msdp_sock < 0) { - zlog_err("pim_msdp_sock_accept failed (%s)", - safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, "pim_msdp_sock_accept failed (%s)", + safe_strerror(errno)); return -1; } @@ -90,8 +95,9 @@ static int pim_msdp_sock_accept(struct thread *thread) if (!mp || !PIM_MSDP_PEER_IS_LISTENER(mp)) { ++pim->msdp.rejected_accepts; if (PIM_DEBUG_MSDP_EVENTS) { - zlog_err("msdp peer connection refused from %s", - sockunion2str(&su, buf, SU_ADDRSTRLEN)); + flog_err(PIM_ERR_MSDP_PACKET, + "msdp peer connection refused from %s", + sockunion2str(&su, buf, SU_ADDRSTRLEN)); } close(msdp_sock); return -1; @@ -106,7 +112,7 @@ static int pim_msdp_sock_accept(struct thread *thread) * with this one */ if (mp->fd >= 0) { if (PIM_DEBUG_MSDP_EVENTS) { - zlog_err( + zlog_notice( "msdp peer new connection from %s stop old connection", sockunion2str(&su, buf, SU_ADDRSTRLEN)); } @@ -135,7 +141,8 @@ int pim_msdp_sock_listen(struct pim_instance *pim) sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { - zlog_err("socket: %s", safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, "socket: %s", + safe_strerror(errno)); return sock; } @@ -154,42 +161,38 @@ int pim_msdp_sock_listen(struct pim_instance *pim) struct interface *ifp = if_lookup_by_name(pim->vrf->name, pim->vrf_id); if (!ifp) { - zlog_err("%s: Unable to lookup vrf interface: %s", - __PRETTY_FUNCTION__, pim->vrf->name); + flog_err(LIB_ERR_INTERFACE, + "%s: Unable to lookup vrf interface: %s", + __PRETTY_FUNCTION__, pim->vrf->name); close(sock); return -1; } if (pim_socket_bind(sock, ifp)) { - zlog_err("%s: Unable to bind to socket: %s", - __PRETTY_FUNCTION__, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "%s: Unable to bind to socket: %s", + __PRETTY_FUNCTION__, safe_strerror(errno)); close(sock); return -1; } } - if (pimd_privs.change(ZPRIVS_RAISE)) { - zlog_err("pim_msdp_socket: could not raise privs, %s", - safe_strerror(errno)); - } - - /* bind to well known TCP port */ - rc = bind(sock, (struct sockaddr *)&sin, socklen); - - if (pimd_privs.change(ZPRIVS_LOWER)) { - zlog_err("pim_msdp_socket: could not lower privs, %s", - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { + /* bind to well known TCP port */ + rc = bind(sock, (struct sockaddr *)&sin, socklen); } if (rc < 0) { - zlog_err("pim_msdp_socket bind to port %d: %s", - ntohs(sin.sin_port), safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "pim_msdp_socket bind to port %d: %s", + ntohs(sin.sin_port), safe_strerror(errno)); close(sock); return rc; } rc = listen(sock, 3 /* backlog */); if (rc < 0) { - zlog_err("pim_msdp_socket listen: %s", safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, "pim_msdp_socket listen: %s", + safe_strerror(errno)); close(sock); return rc; } @@ -219,7 +222,7 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) * with this one */ if (mp->fd >= 0) { if (PIM_DEBUG_MSDP_EVENTS) { - zlog_err( + zlog_notice( "msdp duplicate connect to %s nuke old connection", mp->key_str); } @@ -229,8 +232,9 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) /* Make socket for the peer. */ mp->fd = sockunion_socket(&mp->su_peer); if (mp->fd < 0) { - zlog_err("pim_msdp_socket socket failure: %s", - safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "pim_msdp_socket socket failure: %s", + safe_strerror(errno)); return -1; } @@ -238,13 +242,15 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) struct interface *ifp = if_lookup_by_name(mp->pim->vrf->name, mp->pim->vrf_id); if (!ifp) { - zlog_err("%s: Unable to lookup vrf interface: %s", - __PRETTY_FUNCTION__, mp->pim->vrf->name); + flog_err(LIB_ERR_INTERFACE, + "%s: Unable to lookup vrf interface: %s", + __PRETTY_FUNCTION__, mp->pim->vrf->name); return -1; } if (pim_socket_bind(mp->fd, ifp)) { - zlog_err("%s: Unable to bind to socket: %s", - __PRETTY_FUNCTION__, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "%s: Unable to bind to socket: %s", + __PRETTY_FUNCTION__, safe_strerror(errno)); close(mp->fd); mp->fd = -1; return -1; @@ -261,8 +267,9 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp) /* source bind */ rc = sockunion_bind(mp->fd, &mp->su_local, 0, &mp->su_local); if (rc < 0) { - zlog_err("pim_msdp_socket connect bind failure: %s", - safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "pim_msdp_socket connect bind failure: %s", + safe_strerror(errno)); close(mp->fd); mp->fd = -1; return rc; diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c index e73422331f..11d8476362 100644 --- a/pimd/pim_neighbor.c +++ b/pimd/pim_neighbor.c @@ -25,6 +25,7 @@ #include "if.h" #include "vty.h" #include "plist.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_neighbor.h" @@ -799,7 +800,8 @@ void pim_neighbor_update(struct pim_neighbor *neigh, if (neigh->prefix_list == addr_list) { if (addr_list) { - zlog_err( + flog_err( + LIB_ERR_DEVELOPMENT, "%s: internal error: trying to replace same prefix list=%p", __PRETTY_FUNCTION__, (void *)addr_list); } diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c index f506875282..b103da2e1b 100644 --- a/pimd/pim_pim.c +++ b/pimd/pim_pim.c @@ -38,6 +38,7 @@ #include "pim_assert.h" #include "pim_msg.h" #include "pim_register.h" +#include "pim_errors.h" static int on_pim_hello_send(struct thread *t); static int pim_hello_send(struct interface *ifp, uint16_t holdtime); @@ -115,8 +116,9 @@ void pim_sock_delete(struct interface *ifp, const char *delete_message) delete_message); if (!ifp->info) { - zlog_err("%s: %s: but PIM not enabled on interface %s (!)", - __PRETTY_FUNCTION__, delete_message, ifp->name); + flog_err(PIM_ERR_CONFIG, + "%s: %s: but PIM not enabled on interface %s (!)", + __PRETTY_FUNCTION__, delete_message, ifp->name); return; } diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c index 783f931752..efcca65993 100644 --- a/pimd/pim_rp.c +++ b/pimd/pim_rp.c @@ -31,6 +31,7 @@ #include "plist.h" #include "nexthop.h" #include "table.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_vty.h" @@ -102,24 +103,16 @@ void pim_rp_init(struct pim_instance *pim) struct route_node *rn; pim->rp_list = list_new(); - if (!pim->rp_list) { - zlog_err("Unable to alloc rp_list"); - return; - } pim->rp_list->del = (void (*)(void *))pim_rp_info_free; pim->rp_list->cmp = pim_rp_list_cmp; pim->rp_table = route_table_init(); - if (!pim->rp_table) { - zlog_err("Unable to alloc rp_table"); - list_delete_and_null(&pim->rp_list); - return; - } rp_info = XCALLOC(MTYPE_PIM_RP, sizeof(*rp_info)); if (!str2prefix("224.0.0.0/4", &rp_info->group)) { - zlog_err("Unable to convert 224.0.0.0/4 to prefix"); + flog_err(LIB_ERR_DEVELOPMENT, + "Unable to convert 224.0.0.0/4 to prefix"); list_delete_and_null(&pim->rp_list); route_table_finish(pim->rp_table); XFREE(MTYPE_PIM_RP, rp_info); @@ -133,14 +126,6 @@ void pim_rp_init(struct pim_instance *pim) listnode_add(pim->rp_list, rp_info); rn = route_node_get(pim->rp_table, &rp_info->group); - if (!rn) { - zlog_err("Failure to get route node for pim->rp_table"); - list_delete_and_null(&pim->rp_list); - route_table_finish(pim->rp_table); - XFREE(MTYPE_PIM_RP, rp_info); - return; - } - rn->info = rp_info; if (PIM_DEBUG_TRACE) zlog_debug( @@ -248,7 +233,8 @@ static struct rp_info *pim_rp_find_match_group(struct pim_instance *pim, rn = route_node_match(pim->rp_table, group); if (!rn) { - zlog_err( + flog_err( + LIB_ERR_DEVELOPMENT, "%s: BUG We should have found default group information\n", __PRETTY_FUNCTION__); return best; @@ -636,7 +622,9 @@ int pim_rp_del(struct pim_instance *pim, const char *rp, rn = route_node_get(pim->rp_table, &rp_info->group); if (rn) { if (rn->info != rp_info) - zlog_err("WTF matey"); + flog_err( + LIB_ERR_DEVELOPMENT, + "Expected rn->info to be equal to rp_info"); if (PIM_DEBUG_TRACE) { char buf[PREFIX_STRLEN]; diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c index fb0d6b5064..1f584a2f9a 100644 --- a/pimd/pim_sock.c +++ b/pimd/pim_sock.c @@ -33,6 +33,7 @@ #include "if.h" #include "vrf.h" #include "sockopt.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_mroute.h" @@ -45,15 +46,11 @@ int pim_socket_raw(int protocol) { int fd; - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("pim_sockek_raw: could not raise privs, %s", - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - fd = socket(AF_INET, SOCK_RAW, protocol); + fd = socket(AF_INET, SOCK_RAW, protocol); - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("pim_socket_raw: could not lower privs, %s", - safe_strerror(errno)); + } if (fd < 0) { zlog_warn("Could not create raw socket: errno=%d: %s", errno, @@ -68,17 +65,13 @@ void pim_socket_ip_hdr(int fd) { const int on = 1; - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))) - zlog_err("%s: Could not turn on IP_HDRINCL option: %s", - __PRETTY_FUNCTION__, safe_strerror(errno)); + if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))) + zlog_err("%s: Could not turn on IP_HDRINCL option: %s", + __PRETTY_FUNCTION__, safe_strerror(errno)); - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + } } /* @@ -90,16 +83,12 @@ int pim_socket_bind(int fd, struct interface *ifp) int ret = 0; #ifdef SO_BINDTODEVICE - if (pimd_privs.change(ZPRIVS_RAISE)) - zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + frr_elevate_privs(&pimd_privs) { - ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name, - strlen(ifp->name)); + ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name, + strlen(ifp->name)); - if (pimd_privs.change(ZPRIVS_LOWER)) - zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__, - safe_strerror(errno)); + } #endif return ret; @@ -161,7 +150,8 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp, fd, errno, safe_strerror(errno)); } #else - zlog_err( + flog_err( + LIB_ERR_DEVELOPMENT, "%s %s: Missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()", __FILE__, __PRETTY_FUNCTION__); close(fd); @@ -298,7 +288,8 @@ int pim_socket_join(int fd, struct in_addr group, struct in_addr ifaddr, sizeof(ifaddr_str))) sprintf(ifaddr_str, "<ifaddr?>"); - zlog_err( + flog_err( + LIB_ERR_SOCKET, "Failure socket joining fd=%d group %s on interface address %s: errno=%d: %s", fd, group_str, ifaddr_str, errno, safe_strerror(errno)); return ret; diff --git a/pimd/pim_ssm.c b/pimd/pim_ssm.c index 1f7cfcaa91..8347878d3f 100644 --- a/pimd/pim_ssm.c +++ b/pimd/pim_ssm.c @@ -24,6 +24,7 @@ #include <lib/vty.h> #include <lib/vrf.h> #include <lib/plist.h> +#include <lib/lib_errors.h> #include "pimd.h" #include "pim_ssm.h" @@ -72,8 +73,9 @@ static int pim_is_grp_standard_ssm(struct prefix *group) if (first) { if (!str2prefix(PIM_SSM_STANDARD_RANGE, &group_ssm)) - zlog_err("%s: Failure to Read Group Address: %s", - __PRETTY_FUNCTION__, PIM_SSM_STANDARD_RANGE); + flog_err(LIB_ERR_DEVELOPMENT, + "%s: Failure to Read Group Address: %s", + __PRETTY_FUNCTION__, PIM_SSM_STANDARD_RANGE); first = 0; } diff --git a/pimd/pim_ssmpingd.c b/pimd/pim_ssmpingd.c index bdf303d5c5..be30d9c73e 100644 --- a/pimd/pim_ssmpingd.c +++ b/pimd/pim_ssmpingd.c @@ -24,6 +24,7 @@ #include "memory.h" #include "sockopt.h" #include "vrf.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_ssmpingd.h" @@ -82,8 +83,9 @@ static int ssmpingd_socket(struct in_addr addr, int port, int mttl) fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { - zlog_err("%s: could not create socket: errno=%d: %s", - __PRETTY_FUNCTION__, errno, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, + "%s: could not create socket: errno=%d: %s", + __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; } @@ -124,7 +126,8 @@ static int ssmpingd_socket(struct in_addr addr, int port, int mttl) safe_strerror(errno)); } #else - zlog_err( + flog_err( + LIB_ERR_DEVELOPMENT, "%s %s: missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()", __FILE__, __PRETTY_FUNCTION__); close(fd); diff --git a/pimd/pim_time.c b/pimd/pim_time.c index 6f011da43e..029e551167 100644 --- a/pimd/pim_time.c +++ b/pimd/pim_time.c @@ -25,6 +25,7 @@ #include "log.h" #include "thread.h" +#include "lib_errors.h" #include "pim_time.h" @@ -34,8 +35,9 @@ static int gettime_monotonic(struct timeval *tv) result = gettimeofday(tv, 0); if (result) { - zlog_err("%s: gettimeofday() failure: errno=%d: %s", - __PRETTY_FUNCTION__, errno, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SYSTEM_CALL, + "%s: gettimeofday() failure: errno=%d: %s", + __PRETTY_FUNCTION__, errno, safe_strerror(errno)); } return result; @@ -50,8 +52,9 @@ int64_t pim_time_monotonic_sec() struct timeval now_tv; if (gettime_monotonic(&now_tv)) { - zlog_err("%s: gettime_monotonic() failure: errno=%d: %s", - __PRETTY_FUNCTION__, errno, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SYSTEM_CALL, + "%s: gettime_monotonic() failure: errno=%d: %s", + __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; } @@ -68,8 +71,9 @@ int64_t pim_time_monotonic_dsec() int64_t now_dsec; if (gettime_monotonic(&now_tv)) { - zlog_err("%s: gettime_monotonic() failure: errno=%d: %s", - __PRETTY_FUNCTION__, errno, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SYSTEM_CALL, + "%s: gettime_monotonic() failure: errno=%d: %s", + __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; } @@ -85,8 +89,9 @@ int64_t pim_time_monotonic_usec(void) int64_t now_dsec; if (gettime_monotonic(&now_tv)) { - zlog_err("%s: gettime_monotonic() failure: errno=%d: %s", - __PRETTY_FUNCTION__, errno, safe_strerror(errno)); + flog_err_sys(LIB_ERR_SYSTEM_CALL, + "%s: gettime_monotonic() failure: errno=%d: %s", + __PRETTY_FUNCTION__, errno, safe_strerror(errno)); return -1; } diff --git a/pimd/pim_tlv.c b/pimd/pim_tlv.c index 80bda336df..70700dd508 100644 --- a/pimd/pim_tlv.c +++ b/pimd/pim_tlv.c @@ -767,12 +767,6 @@ int pim_tlv_parse_addr_list(const char *ifname, struct in_addr src_addr, { struct prefix *p; p = prefix_new(); - if (!p) { - zlog_err("%s %s: failure: prefix_new()", - __FILE__, __PRETTY_FUNCTION__); - FREE_ADDR_LIST(*hello_option_addr_list); - return -3; - } prefix_copy(p, &tmp); listnode_add(*hello_option_addr_list, p); } diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c index f4d833c26f..88be195bee 100644 --- a/pimd/pim_vty.c +++ b/pimd/pim_vty.c @@ -258,6 +258,11 @@ int pim_interface_config_write(struct vty *vty) ifp->name, vrf->name); ++writes; + if (ifp->desc) { + vty_out(vty, " description %s\n", ifp->desc); + ++writes; + } + if (ifp->info) { struct pim_interface *pim_ifp = ifp->info; diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c index fb616e1b0d..baa07a8ec6 100644 --- a/pimd/pim_zlookup.c +++ b/pimd/pim_zlookup.c @@ -28,6 +28,7 @@ #include "thread.h" #include "prefix.h" #include "vty.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_iface.h" @@ -122,7 +123,8 @@ void zclient_lookup_new(void) { zlookup = zclient_new_notify(master, &zclient_options_default); if (!zlookup) { - zlog_err("%s: zclient_new() failure", __PRETTY_FUNCTION__); + flog_err(LIB_ERR_ZAPI_SOCKET, "%s: zclient_new() failure", + __PRETTY_FUNCTION__); return; } @@ -168,8 +170,9 @@ static int zclient_read_nexthop(struct pim_instance *pim, err = zclient_read_header(s, zlookup->sock, &length, &marker, &version, &vrf_id, &command); if (err < 0) { - zlog_err("%s: zclient_read_header() failed", - __PRETTY_FUNCTION__); + flog_err(LIB_ERR_ZAPI_MISSMATCH, + "%s: zclient_read_header() failed", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -1; } @@ -312,14 +315,15 @@ static int zclient_lookup_nexthop_once(struct pim_instance *pim, /* Check socket. */ if (zlookup->sock < 0) { - zlog_err("%s: zclient lookup socket is not connected", - __PRETTY_FUNCTION__); + flog_err(LIB_ERR_ZAPI_SOCKET, + "%s: zclient lookup socket is not connected", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -1; } if (pim->vrf->vrf_id == VRF_UNKNOWN) { - zlog_err( + zlog_notice( "%s: VRF: %s does not fully exist yet, delaying lookup", __PRETTY_FUNCTION__, pim->vrf->name); return -1; @@ -333,15 +337,17 @@ static int zclient_lookup_nexthop_once(struct pim_instance *pim, ret = writen(zlookup->sock, s->data, stream_get_endp(s)); if (ret < 0) { - zlog_err( + flog_err( + LIB_ERR_SOCKET, "%s: writen() failure: %d writing to zclient lookup socket", __PRETTY_FUNCTION__, errno); zclient_lookup_failed(zlookup); return -2; } if (ret == 0) { - zlog_err("%s: connection closed on zclient lookup socket", - __PRETTY_FUNCTION__); + flog_err_sys(LIB_ERR_SOCKET, + "%s: connection closed on zclient lookup socket", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -3; } @@ -509,7 +515,8 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) count = stream_get_endp(s); ret = writen(zlookup->sock, s->data, count); if (ret <= 0) { - zlog_err( + flog_err( + LIB_ERR_SOCKET, "%s: writen() failure: %d writing to zclient lookup socket", __PRETTY_FUNCTION__, errno); return -1; @@ -528,8 +535,9 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) err = zclient_read_header(s, zlookup->sock, &length, &marker, &version, &vrf_id, &command); if (err < 0) { - zlog_err("%s: zclient_read_header() failed", - __PRETTY_FUNCTION__); + flog_err(LIB_ERR_ZAPI_MISSMATCH, + "%s: zclient_read_header() failed", + __PRETTY_FUNCTION__); zclient_lookup_failed(zlookup); return -1; } @@ -544,7 +552,8 @@ int pim_zlookup_sg_statistics(struct channel_oil *c_oil) more.src = c_oil->oil.mfcc_origin; more.grp = c_oil->oil.mfcc_mcastgrp; - zlog_err( + flog_err( + LIB_ERR_ZAPI_MISSMATCH, "%s: Received wrong %s(%s) information requested", __PRETTY_FUNCTION__, pim_str_sg_dump(&more), c_oil->pim->vrf->name); diff --git a/pimd/pimd.c b/pimd/pimd.c index cb7b8b589a..dd0c7e3c2a 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -28,6 +28,7 @@ #include "hash.h" #include "jhash.h" #include "vrf.h" +#include "lib_errors.h" #include "pimd.h" #include "pim_cmd.h" @@ -84,7 +85,8 @@ static void pim_free() void pim_init() { if (!inet_aton(PIM_ALL_PIM_ROUTERS, &qpim_all_pim_routers_addr)) { - zlog_err( + flog_err( + LIB_ERR_SOCKET, "%s %s: could not solve %s to group address: errno=%d: %s", __FILE__, __PRETTY_FUNCTION__, PIM_ALL_PIM_ROUTERS, errno, safe_strerror(errno)); diff --git a/pimd/pimd.h b/pimd/pimd.h index 840e0d7e34..1b11dc3f73 100644 --- a/pimd/pimd.h +++ b/pimd/pimd.h @@ -117,7 +117,6 @@ /* PIM error codes */ #define PIM_SUCCESS 0 -#define PIM_MALLOC_FAIL -1 #define PIM_GROUP_BAD_ADDRESS -2 #define PIM_GROUP_OVERLAP -3 #define PIM_GROUP_PFXLIST_OVERLAP -4 diff --git a/pimd/subdir.am b/pimd/subdir.am index 0696d9b1e8..55d56ece97 100644 --- a/pimd/subdir.am +++ b/pimd/subdir.am @@ -15,6 +15,7 @@ pimd_libpim_a_SOURCES = \ pimd/pim_bfd.c \ pimd/pim_br.c \ pimd/pim_cmd.c \ + pimd/pim_errors.c \ pimd/pim_hello.c \ pimd/pim_iface.c \ pimd/pim_ifchannel.c \ @@ -64,6 +65,7 @@ noinst_HEADERS += \ pimd/pim_bfd.h \ pimd/pim_br.h \ pimd/pim_cmd.h \ + pimd/pim_errors.h \ pimd/pim_hello.h \ pimd/pim_iface.h \ pimd/pim_ifchannel.h \ |
