else
stream_put(s, &p_evpn_p->prefix_addr.ip.ipaddr_v6, 16);
if (attr) {
+ const struct bgp_route_evpn *evpn_overlay =
+ bgp_attr_get_evpn_overlay(attr);
+
if (IS_IPADDR_V4(&p_evpn_p->prefix_addr.ip))
- stream_put_ipv4(s,
- attr->evpn_overlay.gw_ip.ipv4.s_addr);
+ stream_put_ipv4(s, evpn_overlay->gw_ip.ipv4.s_addr);
else
- stream_put(s, &(attr->evpn_overlay.gw_ip.ipv6), 16);
+ stream_put(s, &(evpn_overlay->gw_ip.ipv6), 16);
} else {
if (IS_IPADDR_V4(&p_evpn_p->prefix_addr.ip))
stream_put_ipv4(s, 0);
struct prefix_rd prd;
uint32_t num_labels = 0;
mpls_label_t *label_pnt = NULL;
- struct bgp_route_evpn evpn;
+ struct bgp_route_evpn *evpn;
if (pevpn->family == AF_EVPN
&& pevpn->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE
continue;
}
- memcpy(&evpn, &pi->attr->evpn_overlay, sizeof(evpn));
+ memcpy(&evpn, bgp_attr_get_evpn_overlay(pi->attr),
+ sizeof(evpn));
int32_t ret = bgp_update(peer, p,
pi->addpath_rx_id,
pi->attr, AFI_L2VPN, SAFI_EVPN,
ZEBRA_ROUTE_BGP,
BGP_ROUTE_NORMAL, &prd,
label_pnt, num_labels,
- 1, &evpn);
+ 1, evpn);
if (ret < 0)
bgp_dest_unlock_node(dest);
if (!attr)
return;
if (gw_ip == NULL) {
- memset(&(attr->evpn_overlay.gw_ip), 0, sizeof(union gw_addr));
+ struct bgp_route_evpn eo;
+
+ memset(&eo, 0, sizeof(eo));
+ bgp_attr_set_evpn_overlay(attr, &eo);
} else {
- memcpy(&(attr->evpn_overlay.gw_ip), gw_ip,
- sizeof(union gw_addr));
+ struct bgp_route_evpn eo = {.gw_ip = *gw_ip};
+
+ bgp_attr_set_evpn_overlay(attr, &eo);
}
}
static bool overlay_index_equal(afi_t afi, struct bgp_path_info *path,
union gw_addr *gw_ip)
{
- union gw_addr *path_gw_ip, *path_gw_ip_remote;
+ const struct bgp_route_evpn *eo = bgp_attr_get_evpn_overlay(path->attr);
+ union gw_addr path_gw_ip, *path_gw_ip_remote;
union {
esi_t esi;
union gw_addr ip;
if (afi != AFI_L2VPN)
return true;
- path_gw_ip = &(path->attr->evpn_overlay.gw_ip);
+ path_gw_ip = eo->gw_ip;
if (gw_ip == NULL) {
memset(&temp, 0, sizeof(temp));
} else
path_gw_ip_remote = gw_ip;
- return !!memcmp(path_gw_ip, path_gw_ip_remote, sizeof(union gw_addr));
+ return !!memcmp(&path_gw_ip, path_gw_ip_remote, sizeof(union gw_addr));
}
/* Check if received nexthop is valid or not. */
if (num_labels)
label_pnt = &pi->extra->label[0];
if (pi)
- memcpy(&evpn, &pi->attr->evpn_overlay,
+ memcpy(&evpn,
+ bgp_attr_get_evpn_overlay(pi->attr),
sizeof(evpn));
else
memset(&evpn, 0, sizeof(evpn));
}
}
- if (is_evpn_prefix_ipaddr_v4((struct prefix_evpn *)p)) {
- inet_ntop(AF_INET, &(attr->evpn_overlay.gw_ip.ipv4), buf,
- BUFSIZ);
- } else if (is_evpn_prefix_ipaddr_v6((struct prefix_evpn *)p)) {
- inet_ntop(AF_INET6, &(attr->evpn_overlay.gw_ip.ipv6), buf,
- BUFSIZ);
- }
+ const struct bgp_route_evpn *eo = bgp_attr_get_evpn_overlay(attr);
+
+ if (is_evpn_prefix_ipaddr_v4((struct prefix_evpn *)p))
+ inet_ntop(AF_INET, &eo->gw_ip.ipv4, buf, BUFSIZ);
+ else if (is_evpn_prefix_ipaddr_v6((struct prefix_evpn *)p))
+ inet_ntop(AF_INET6, &eo->gw_ip.ipv6, buf, BUFSIZ);
if (!json_path)
vty_out(vty, "/%s", buf);