summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_cmd.c10
-rw-r--r--pimd/pim_iface.c33
-rw-r--r--pimd/pim_iface.h5
3 files changed, 17 insertions, 31 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index ab6212710..4066614f4 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -28,6 +28,7 @@
#include "hash.h"
#include "nexthop.h"
#include "vrf.h"
+#include "ferr.h"
#include "pimd.h"
#include "pim_mroute.h"
@@ -5839,13 +5840,8 @@ DEFUN (interface_ip_igmp_join,
return CMD_WARNING_CONFIG_FAILED;
}
- result = pim_if_igmp_join_add(ifp, group_addr, source_addr);
- if (result) {
- vty_out(vty,
- "%% Failure joining IGMP group %s source %s on interface %s: %d\n",
- group_str, source_str, ifp->name, result);
- return CMD_WARNING_CONFIG_FAILED;
- }
+ CMD_FERR_RETURN(pim_if_igmp_join_add(ifp, group_addr, source_addr),
+ "Failure joining IGMP group: $ERR");
return CMD_SUCCESS;
}
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index 1afcff7cb..6cf18d08e 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -27,6 +27,7 @@
#include "linklist.h"
#include "plist.h"
#include "hash.h"
+#include "ferr.h"
#include "pimd.h"
#include "pim_instance.h"
@@ -1270,7 +1271,7 @@ static struct igmp_join *igmp_join_new(struct interface *ifp,
return ij;
}
-int pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
+ferr_r pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
struct in_addr source_addr)
{
struct pim_interface *pim_ifp;
@@ -1278,17 +1279,14 @@ int pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
pim_ifp = ifp->info;
if (!pim_ifp) {
- zlog_warn("%s: multicast not enabled on interface %s",
- __PRETTY_FUNCTION__, ifp->name);
- return -1;
+ return ferr_cfg_invalid("multicast not enabled on interface %s",
+ ifp->name);
}
if (!pim_ifp->igmp_join_list) {
pim_ifp->igmp_join_list = list_new();
if (!pim_ifp->igmp_join_list) {
- zlog_err("%s %s: failure: igmp_join_list=list_new()",
- __FILE__, __PRETTY_FUNCTION__);
- return -2;
+ return ferr_cfg_invalid("Insufficient memory");
}
pim_ifp->igmp_join_list->del = (void (*)(void *))igmp_join_free;
}
@@ -1301,24 +1299,15 @@ int pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
sizeof(group_str));
pim_inet4_dump("<src?>", source_addr, source_str,
sizeof(source_str));
- zlog_warn(
- "%s: can't re-join existing IGMP group %s source %s on interface %s",
- __PRETTY_FUNCTION__, group_str, source_str, ifp->name);
- return -3;
+ return ferr_cfg_invalid(
+ "can't re-join existing IGMP group %s source %s on interface %s",
+ group_str, source_str, ifp->name);
}
ij = igmp_join_new(ifp, group_addr, source_addr);
if (!ij) {
- char group_str[INET_ADDRSTRLEN];
- char source_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<grp?>", group_addr, group_str,
- sizeof(group_str));
- pim_inet4_dump("<src?>", source_addr, source_str,
- sizeof(source_str));
- zlog_warn(
- "%s: igmp_join_new() failure for IGMP group %s source %s on interface %s",
- __PRETTY_FUNCTION__, group_str, source_str, ifp->name);
- return -4;
+ return ferr_cfg_invalid(
+ "Failure to create new join data structure, see log file for more information");
}
if (PIM_DEBUG_IGMP_EVENTS) {
@@ -1333,7 +1322,7 @@ int pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
__PRETTY_FUNCTION__, source_str, group_str, ifp->name);
}
- return 0;
+ return ferr_ok();
}
diff --git a/pimd/pim_iface.h b/pimd/pim_iface.h
index ed885ff0e..2f27a1401 100644
--- a/pimd/pim_iface.h
+++ b/pimd/pim_iface.h
@@ -26,6 +26,7 @@
#include "vty.h"
#include "vrf.h"
#include "zclient.h"
+#include "ferr.h"
#include "pim_igmp.h"
#include "pim_upstream.h"
@@ -182,8 +183,8 @@ int pim_if_t_override_msec(struct interface *ifp);
struct in_addr pim_find_primary_addr(struct interface *ifp);
-int pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
- struct in_addr source_addr);
+ferr_r pim_if_igmp_join_add(struct interface *ifp, struct in_addr group_addr,
+ struct in_addr source_addr);
int pim_if_igmp_join_del(struct interface *ifp, struct in_addr group_addr,
struct in_addr source_addr);