From b96cafa338471cd9acbc9d8d20e47040e99d0ebd Mon Sep 17 00:00:00 2001 From: Chirag Shah Date: Thu, 24 Oct 2019 14:32:49 -0700 Subject: [PATCH] bgpd: fix self type-2 routes rmac and nexhtop For self type-2 routes, do not assign system-rmac as attribute RMAC value if advertise-pip is disable or macvlan is not present. Ticket:CM-26923 Reviewed By:CCR-9397 Testing Done: pip is disabled under bgp vrf2 instance. Trigger frr-restart. Before fix: *> [2]:[0]:[48]:[00:02:00:00:00:2e]:[32]:[45.0.4.4] 36.0.0.11 32768 i ET:8 RT:5546:1004 RT:5546:4002 Rmac:00:02:00:00:00:2e After fix: *> [2]:[0]:[48]:[00:02:00:00:00:2e]:[32]:[45.0.4.4] 36.0.0.11 32768 i ET:8 RT:5546:1004 RT:5546:4002 Rmac:44:38:39:ff:ff:01 TOR# ifquery vlan1004 auto vlan1004 iface vlan1004 address 45.0.4.4/24 vlan-id 1004 vrf vrf2 VNI: 4002 (known to the kernel) Type: L3 Tenant VRF: vrf2 RD: 45.0.6.4:3 Originator IP: 36.0.0.11 Advertise-pip: Yes System-IP: 27.0.0.11 System-MAC: 00:02:00:00:00:2e Router-MAC: 44:38:39:ff:ff:01 Signed-off-by: Chirag Shah --- bgpd/bgp_evpn.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index d051ec87d9..320e070a0f 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -504,29 +504,29 @@ static void bgp_evpn_get_rmac_nexthop(struct bgpevpn *vpn, if (!bgp_vrf) return; - if (p->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE) { - /* Copy sys (pip) RMAC and PIP IP as nexthop - * in case of route is self MAC-IP, - * advertise-pip and advertise-svi-ip features - * are enabled. - * Otherwise, for all host MAC-IP route's - * copy anycast RMAC - */ - if (CHECK_FLAG(flags, BGP_EVPN_MACIP_TYPE_SVI_IP) - && bgp_evpn_is_svi_macip_enabled(vpn)) { - /* copy sys rmac */ - memcpy(&attr->rmac, &bgp_vrf->evpn_info->pip_rmac, - ETH_ALEN); - if (bgp_vrf->evpn_info->advertise_pip && - bgp_vrf->evpn_info->is_anycast_mac) { - attr->nexthop = bgp_vrf->evpn_info->pip_ip; - attr->mp_nexthop_global_in = - bgp_vrf->evpn_info->pip_ip; - } - } else - memcpy(&attr->rmac, &bgp_vrf->rmac, ETH_ALEN); - } + if (p->prefix.route_type != BGP_EVPN_MAC_IP_ROUTE) + return; + + /* Copy sys (pip) RMAC and PIP IP as nexthop + * in case of route is self MAC-IP, + * advertise-pip and advertise-svi-ip features + * are enabled. + * Otherwise, for all host MAC-IP route's + * copy anycast RMAC + */ + if (CHECK_FLAG(flags, BGP_EVPN_MACIP_TYPE_SVI_IP) + && bgp_vrf->evpn_info->advertise_pip && + bgp_vrf->evpn_info->is_anycast_mac) { + /* copy sys rmac */ + memcpy(&attr->rmac, &bgp_vrf->evpn_info->pip_rmac, + ETH_ALEN); + attr->nexthop = bgp_vrf->evpn_info->pip_ip; + attr->mp_nexthop_global_in = + bgp_vrf->evpn_info->pip_ip; + } else + memcpy(&attr->rmac, &bgp_vrf->rmac, ETH_ALEN); } + /* * Create RT extended community automatically from passed information: * of the form AS:VNI. -- 2.39.5