summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_main.c16
-rw-r--r--bgpd/bgp_mplsvpn.c2
-rw-r--r--bgpd/bgp_mplsvpn.h6
3 files changed, 23 insertions, 1 deletions
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 8eb1c9e25f..138788194d 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -277,6 +277,14 @@ static int bgp_vrf_enable(struct vrf *vrf)
bgp_instance_up(bgp);
vpn_leak_zebra_vrf_label_update(bgp, AFI_IP);
vpn_leak_zebra_vrf_label_update(bgp, AFI_IP6);
+ vpn_leak_postchange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP,
+ bgp_get_default(), bgp);
+ vpn_leak_postchange(BGP_VPN_POLICY_DIR_FROMVPN, AFI_IP,
+ bgp_get_default(), bgp);
+ vpn_leak_postchange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP6,
+ bgp_get_default(), bgp);
+ vpn_leak_postchange(BGP_VPN_POLICY_DIR_FROMVPN, AFI_IP6,
+ bgp_get_default(), bgp);
}
return 0;
@@ -298,6 +306,14 @@ static int bgp_vrf_disable(struct vrf *vrf)
vpn_leak_zebra_vrf_label_withdraw(bgp, AFI_IP);
vpn_leak_zebra_vrf_label_withdraw(bgp, AFI_IP6);
+ vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP,
+ bgp_get_default(), bgp);
+ vpn_leak_prechange(BGP_VPN_POLICY_DIR_FROMVPN, AFI_IP,
+ bgp_get_default(), bgp);
+ vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP6,
+ bgp_get_default(), bgp);
+ vpn_leak_prechange(BGP_VPN_POLICY_DIR_FROMVPN, AFI_IP6,
+ bgp_get_default(), bgp);
old_vrf_id = bgp->vrf_id;
bgp_handle_socket(bgp, vrf, VRF_UNKNOWN, false);
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index c2cb20b061..b89edfe459 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -586,7 +586,7 @@ leak_update(
zlog_debug("%s: ->%s: %s Found route, changed attr",
__func__, bgp->name_pretty, buf_prefix);
- return NULL;
+ return bi;
}
new = info_make(ZEBRA_ROUTE_BGP, BGP_ROUTE_IMPORTED, 0,
diff --git a/bgpd/bgp_mplsvpn.h b/bgpd/bgp_mplsvpn.h
index b0add40da9..122ae9e905 100644
--- a/bgpd/bgp_mplsvpn.h
+++ b/bgpd/bgp_mplsvpn.h
@@ -151,6 +151,12 @@ static inline int vpn_leak_from_vpn_active(struct bgp *bgp_vrf, afi_t afi,
return 0;
}
+ if (bgp_vrf->vrf_id == VRF_UNKNOWN) {
+ if (pmsg)
+ *pmsg = "destination bgp instance vrf is VRF_UNKNOWN";
+ return 0;
+ }
+
/* Is vrf configured to import from vpn? */
if (!CHECK_FLAG(bgp_vrf->af_flags[afi][SAFI_UNICAST],
BGP_CONFIG_MPLSVPN_TO_VRF_IMPORT)