summaryrefslogtreecommitdiff
path: root/pimd
diff options
context:
space:
mode:
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_bfd.c2
-rw-r--r--pimd/pim_br.c1
-rw-r--r--pimd/pim_cmd.c16
-rw-r--r--pimd/pim_errors.c49
-rw-r--r--pimd/pim_errors.h33
-rw-r--r--pimd/pim_ifchannel.c20
-rw-r--r--pimd/pim_igmp.c13
-rw-r--r--pimd/pim_igmpv3.c35
-rw-r--r--pimd/pim_instance.c13
-rw-r--r--pimd/pim_main.c2
-rw-r--r--pimd/pim_mroute.c71
-rw-r--r--pimd/pim_msdp.c4
-rw-r--r--pimd/pim_msdp_packet.c10
-rw-r--r--pimd/pim_msdp_socket.c83
-rw-r--r--pimd/pim_neighbor.c4
-rw-r--r--pimd/pim_pim.c6
-rw-r--r--pimd/pim_rp.c28
-rw-r--r--pimd/pim_sock.c43
-rw-r--r--pimd/pim_ssm.c6
-rw-r--r--pimd/pim_ssmpingd.c9
-rw-r--r--pimd/pim_time.c21
-rw-r--r--pimd/pim_tlv.c6
-rw-r--r--pimd/pim_vty.c5
-rw-r--r--pimd/pim_zlookup.c35
-rw-r--r--pimd/pimd.c4
-rw-r--r--pimd/pimd.h1
-rw-r--r--pimd/subdir.am2
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 \