]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: Allow igmp join messages to return more detailed errors
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 14 Sep 2017 15:15:52 +0000 (11:15 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 14 Sep 2017 15:17:32 +0000 (11:17 -0400)
Start the conversion of pim configuration commands to use
the ferr side channel to allow more detailed information
to be returned to cli commands.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c
pimd/pim_iface.c
pimd/pim_iface.h

index ab6212710086f09373ee9a9aabd3e848d3245fbc..4066614f4b893d215dca1ce45a76d6957c51a87a 100644 (file)
@@ -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;
 }
index 1afcff7cb1e06f8493bcb26d5e3a5521b732685a..6cf18d08e44671f81898a509181c9ee35074e82e 100644 (file)
@@ -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();
 }
 
 
index ed885ff0e375c6f282fceca3bff82c5304719ba2..2f27a1401077097dec3f55791b3a8218a3728f84 100644 (file)
@@ -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);