From: Donald Sharp Date: Wed, 7 Dec 2016 13:15:16 +0000 (-0500) Subject: pimd: Modify pim_upstream_new behavior X-Git-Tag: frr-3.0-branchpoint~64^2~10^2~27 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=07335c8d082da51619883a9b4fff6f848e3dba1b;p=mirror%2Ffrr.git pimd: Modify pim_upstream_new behavior Modify pim_usptream_new to auto create the pim channel oil. Why? Because there exists situations where we have upstream state and we are attempting to set the inherited_olist on it and we have not created the channel oil yet. When that happens we end up with mroutes that are being meanies. Signed-off-by: Donald Sharp --- diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 60893c8c10..53bae4d5fd 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -2909,7 +2909,7 @@ static void show_mroute(struct vty *vty, u_char uj) struct interface *ifp_in; found_oif = 0; first = 1; - if (!c_oil->installed) + if (!c_oil->installed && !uj) continue; pim_inet4_dump("", c_oil->oil.mfcc_mcastgrp, grp_str, sizeof(grp_str)); @@ -2941,6 +2941,9 @@ static void show_mroute(struct vty *vty, u_char uj) /* Find the inbound interface nested under the source, create it if it doesn't exist */ json_object_object_get_ex(json_source, in_ifname, &json_ifp_in); + json_object_int_add(json_source, "installed", c_oil->installed); + json_object_int_add(json_source, "refCount", c_oil->oil_ref_count); + json_object_int_add(json_source, "oilSize", c_oil->oil_size); if (!json_ifp_in) { json_ifp_in = json_object_new_object(); diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index 2b76cb9172..14508ad184 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -519,12 +519,14 @@ pim_upstream_compare (void *arg1, void *arg2) return 0; } -static struct pim_upstream *pim_upstream_new(struct prefix_sg *sg, - struct interface *incoming, - int flags) +static struct pim_upstream * +pim_upstream_new (struct prefix_sg *sg, + struct interface *incoming, + int flags) { - struct pim_upstream *up; enum pim_rpf_result rpf_result; + struct pim_interface *pim_ifp; + struct pim_upstream *up; up = XCALLOC(MTYPE_PIM_UPSTREAM, sizeof(*up)); if (!up) { @@ -602,6 +604,10 @@ static struct pim_upstream *pim_upstream_new(struct prefix_sg *sg, return NULL; } + pim_ifp = up->rpf.source_nexthop.interface->info; + if (pim_ifp) + up->channel_oil = pim_channel_oil_add(&up->sg, pim_ifp->mroute_vif_index); + listnode_add_sort(pim_upstream_list, up); if (PIM_DEBUG_TRACE)