Mailing List Archive

[PATCH 34/57] bgpd: nexthop attribute overwritten with RT-5 gw IP presence
When EVPN RT-5 message is received, next hop parameter is extracted
from the gw ip field of the message.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
---
bgpd/bgp_route.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)

diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index d9cbc45ef292..af191f64a472 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -2775,6 +2775,12 @@ bgp_update_rsclient (struct peer *rsclient, afi_t afi, safi_t safi,
{
overlay_index_update(ri->attr, evpn==NULL?NULL:&evpn->eth_s_id,
evpn==NULL?NULL:&evpn->gw_ip);
+ /* overwrite nexthop ip address */
+ if(evpn && ri->attr && p->family == AF_INET && evpn->gw_ip.ipv4.s_addr)
+ {
+ ri->attr->nexthop.s_addr = evpn->gw_ip.ipv4.s_addr;
+ ri->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
+ }
if(ri->attr && ri->attr->extra)
{
if(evpn && evpn->eth_t_id)
@@ -2817,6 +2823,12 @@ bgp_update_rsclient (struct peer *rsclient, afi_t afi, safi_t safi,
{
overlay_index_update(new->attr, evpn==NULL?NULL:&evpn->eth_s_id,
evpn==NULL?NULL:&evpn->gw_ip);
+ /* overwrite nexthop ip address */
+ if(evpn && new->attr && p->family == AF_INET && evpn->gw_ip.ipv4.s_addr)
+ {
+ new->attr->nexthop.s_addr = evpn->gw_ip.ipv4.s_addr;
+ new->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
+ }
if(new->attr && new->attr->extra)
{
if(evpn && evpn->eth_t_id)
@@ -3112,6 +3124,12 @@ bgp_update_main (struct peer *peer, struct prefix *p, struct attr *attr,
{
overlay_index_update(ri->attr, evpn==NULL?NULL:&evpn->eth_s_id,
evpn==NULL?NULL:&evpn->gw_ip);
+ /* overwrite nexthop ip address */
+ if(evpn && ri->attr && p->family == AF_INET && evpn->gw_ip.ipv4.s_addr)
+ {
+ ri->attr->nexthop.s_addr = evpn->gw_ip.ipv4.s_addr;
+ ri->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
+ }
if(ri->attr && ri->attr->extra)
{
if(evpn && evpn->eth_t_id)
@@ -3198,6 +3216,12 @@ bgp_update_main (struct peer *peer, struct prefix *p, struct attr *attr,
{
overlay_index_update(new->attr, evpn==NULL?NULL:&evpn->eth_s_id,
evpn==NULL?NULL:&evpn->gw_ip);
+ /* overwrite nexthop ip address */
+ if(evpn && new->attr && p->family == AF_INET && evpn->gw_ip.ipv4.s_addr)
+ {
+ new->attr->nexthop.s_addr = evpn->gw_ip.ipv4.s_addr;
+ new->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
+ }
if(new->attr && new->attr->extra)
{
if(evpn && evpn->eth_t_id)
@@ -4733,6 +4757,12 @@ bgp_static_update_safi (struct bgp *bgp, struct prefix *p,
memset(&add, 0, sizeof(union gw_addr));
add.ipv4.s_addr = bgp_static->igpnexthop.s_addr;
overlay_index_update(&attr, bgp_static->eth_s_id, &add);
+ /* overwrite nexthop ip address */
+ if(p->family == AF_INET)
+ {
+ (&attr)->nexthop.s_addr = (&add)->ipv4.s_addr;
+ (&attr)->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
+ }
}
else
{
--
2.1.4


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev