diff options
author | Jafar Al-Gharaibeh <jafar@atcorp.com> | 2022-07-14 19:24:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-14 19:24:35 +0200 |
commit | 6286ce45bc8891a8c45c6e2fc541a6abfc083123 (patch) | |
tree | ad54d76ac9c0e3a28edb2d39af72d79180c2528d | |
parent | Merge pull request #11598 from patrasar/pim_get_instance (diff) | |
parent | pimd: During prune pending, behave as NOINFO state (diff) | |
download | frr-6286ce45bc8891a8c45c6e2fc541a6abfc083123.tar.xz frr-6286ce45bc8891a8c45c6e2fc541a6abfc083123.zip |
Merge pull request #11536 from mobash-rasool/temp1
pimd: During prune pending, behave as NOINFO state (conformance issue)
-rw-r--r-- | pimd/pim_nht.c | 2 | ||||
-rw-r--r-- | pimd/pim_upstream.c | 11 |
2 files changed, 11 insertions, 2 deletions
diff --git a/pimd/pim_nht.c b/pimd/pim_nht.c index ac1315bd4..2e5c0598c 100644 --- a/pimd/pim_nht.c +++ b/pimd/pim_nht.c @@ -436,7 +436,7 @@ static int pim_update_upstream_nh_helper(struct hash_bucket *bucket, void *arg) * RPF nbr is now unreachable the MFC has already been updated * by pim_rpf_clear */ - if (rpf_result != PIM_RPF_FAILURE) + if (rpf_result != PIM_RPF_CHANGED) pim_upstream_mroute_iif_update(up->channel_oil, __func__); if (rpf_result == PIM_RPF_CHANGED || diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c index 4dcdee34f..25e7e5270 100644 --- a/pimd/pim_upstream.c +++ b/pimd/pim_upstream.c @@ -930,7 +930,16 @@ static struct pim_upstream *pim_upstream_new(struct pim_instance *pim, __func__, up->sg_str); } - if (up->rpf.source_nexthop.interface) { + /* Consider a case where (S,G,rpt) prune is received and this + * upstream is getting created due to that, then as per RFC + * until prune pending time we need to behave same as NOINFO + * state, therefore do not install if OIF is NULL until then + * This is for PIM Conformance PIM-SM 16.3 fix + * When the prune pending timer pop, this mroute will get + * installed with none as OIF */ + if (up->rpf.source_nexthop.interface && + !(pim_upstream_empty_inherited_olist(up) && (ch != NULL) && + PIM_IF_FLAG_TEST_S_G_RPT(ch->flags))) { pim_upstream_mroute_iif_update(up->channel_oil, __func__); } |