]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_igmp_mtrace.c
Merge pull request #5494 from opensourcerouting/mlag-module
[mirror_frr.git] / pimd / pim_igmp_mtrace.c
index 95d0278a34317a789275e5357ee9dab41b33e310..0758e2f784eb6c7ddec8300fe0b7b1d39e1fd701 100644 (file)
@@ -66,16 +66,13 @@ static bool mtrace_fwd_info_weak(struct pim_instance *pim,
        struct pim_nexthop nexthop;
        struct interface *ifp_in;
        struct in_addr nh_addr;
-       int ret;
        char nexthop_str[INET_ADDRSTRLEN];
 
        nh_addr.s_addr = 0;
 
        memset(&nexthop, 0, sizeof(nexthop));
 
-       ret = pim_nexthop_lookup(pim, &nexthop, mtracep->src_addr, 1);
-
-       if (ret != 0) {
+       if (!pim_nexthop_lookup(pim, &nexthop, mtracep->src_addr, 1)) {
                if (PIM_DEBUG_MTRACE)
                        zlog_debug("mtrace not found neighbor");
                return false;
@@ -133,6 +130,13 @@ static bool mtrace_fwd_info(struct pim_instance *pim,
        if (!up)
                return false;
 
+       if (!up->rpf.source_nexthop.interface) {
+               if (PIM_DEBUG_TRACE)
+                       zlog_debug("%s: up %s RPF is not present",
+                       __PRETTY_FUNCTION__, up->sg_str);
+               return false;
+       }
+
        ifp_in = up->rpf.source_nexthop.interface;
        nh_addr = up->rpf.source_nexthop.mrib_nexthop_addr.u.prefix4;
        total = htonl(MTRACE_UNKNOWN_COUNT);
@@ -411,9 +415,7 @@ static int mtrace_un_forward_packet(struct pim_instance *pim, struct ip *ip_hdr,
 
        if (interface == NULL) {
                memset(&nexthop, 0, sizeof(nexthop));
-               ret = pim_nexthop_lookup(pim, &nexthop, ip_hdr->ip_dst, 0);
-
-               if (ret != 0) {
+               if (!pim_nexthop_lookup(pim, &nexthop, ip_hdr->ip_dst, 0)) {
                        close(fd);
                        if (PIM_DEBUG_MTRACE)
                                zlog_warn(
@@ -561,7 +563,6 @@ static int mtrace_send_response(struct pim_instance *pim,
                                struct igmp_mtrace *mtracep, size_t mtrace_len)
 {
        struct pim_nexthop nexthop;
-       int ret;
 
        mtracep->type = PIM_IGMP_MTRACE_RESPONSE;
 
@@ -592,9 +593,7 @@ static int mtrace_send_response(struct pim_instance *pim,
        } else {
                memset(&nexthop, 0, sizeof(nexthop));
                /* TODO: should use unicast rib lookup */
-               ret = pim_nexthop_lookup(pim, &nexthop, mtracep->rsp_addr, 1);
-
-               if (ret != 0) {
+               if (!pim_nexthop_lookup(pim, &nexthop, mtracep->rsp_addr, 1)) {
                        if (PIM_DEBUG_MTRACE)
                                zlog_warn(
                                        "Dropped response qid=%ud, no route to "
@@ -615,7 +614,7 @@ int igmp_mtrace_recv_qry_req(struct igmp_sock *igmp, struct ip *ip_hdr,
        static uint32_t qry_id, qry_src;
        char mtrace_buf[MTRACE_HDR_SIZE + MTRACE_MAX_HOPS * MTRACE_RSP_SIZE];
        struct interface *ifp;
-       struct interface *out_ifp;
+       struct interface *out_ifp = NULL;
        struct pim_interface *pim_ifp;
        struct pim_instance *pim;
        struct igmp_mtrace *mtracep;