X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=pimd%2Fpim_igmp_mtrace.c;h=0758e2f784eb6c7ddec8300fe0b7b1d39e1fd701;hb=37f4c2fb028c74d6b69215e9ec42f30ac008459f;hp=95d0278a34317a789275e5357ee9dab41b33e310;hpb=81ef2361a338f711874dd36be20ce5e464ae1b14;p=mirror_frr.git diff --git a/pimd/pim_igmp_mtrace.c b/pimd/pim_igmp_mtrace.c index 95d0278a3..0758e2f78 100644 --- a/pimd/pim_igmp_mtrace.c +++ b/pimd/pim_igmp_mtrace.c @@ -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;