diff options
| author | Louis Scalbert <louis.scalbert@6wind.com> | 2022-04-26 16:57:45 +0200 | 
|---|---|---|
| committer | Louis Scalbert <louis.scalbert@6wind.com> | 2024-02-14 16:39:51 +0100 | 
| commit | b45c5cd959ecf859aa11673ab83d169b76988ba2 (patch) | |
| tree | 896ad07922337b8c4edafeb0999104de6fd870a4 /bgpd/bgp_attr.c | |
| parent | c102adde305f6cc823134235bad9ad9ede31318d (diff) | |
bgpd: update route leak when vrf state changes
Locally leaked routes remain active after the nexthop VRF interface goes
down.
Update route leaking when the loopback or a VRF interface state change is
received from zebra.
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
Diffstat (limited to 'bgpd/bgp_attr.c')
| -rw-r--r-- | bgpd/bgp_attr.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index edfbc6c835..0dec8ea4e4 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -2347,6 +2347,12 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,  				return BGP_ATTR_PARSE_WITHDRAW;  			}  			attr->nh_ifindex = peer->nexthop.ifp->ifindex; +			if (if_is_operative(peer->nexthop.ifp)) +				SET_FLAG(attr->nh_flags, +					 BGP_ATTR_NH_IF_OPERSTATE); +			else +				UNSET_FLAG(attr->nh_flags, +					   BGP_ATTR_NH_IF_OPERSTATE);  		}  		break;  	case BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL: @@ -2364,6 +2370,12 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,  				return BGP_ATTR_PARSE_WITHDRAW;  			}  			attr->nh_ifindex = peer->nexthop.ifp->ifindex; +			if (if_is_operative(peer->nexthop.ifp)) +				SET_FLAG(attr->nh_flags, +					 BGP_ATTR_NH_IF_OPERSTATE); +			else +				UNSET_FLAG(attr->nh_flags, +					   BGP_ATTR_NH_IF_OPERSTATE);  		}  		if (attr->mp_nexthop_len  		    == BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL) {  | 
