]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: extract neigbor processing from zevpn_gw_macip_add
authorPat Ruddy <pat@voltanet.io>
Fri, 24 Apr 2020 13:27:49 +0000 (14:27 +0100)
committerPat Ruddy <pat@voltanet.io>
Wed, 12 Aug 2020 11:39:34 +0000 (12:39 +0100)
extract the neighbor part of process_remote_macip_add into a new
function zebra_evpn_neigh_gw_macip_add in zebra_evpn_neigh.c.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
zebra/zebra_evpn.h
zebra/zebra_evpn_neigh.c
zebra/zebra_evpn_neigh.h
zebra/zebra_vxlan.c

index 5445ccc15d81ae7098e9bd8a43f6bf85120a90c6..007d6013f93e8e5f31a1f701c1f629052427a8b3 100644 (file)
@@ -137,6 +137,9 @@ static inline struct interface *zevpn_map_to_svi(zebra_evpn_t *zevpn)
        return zvni_map_to_svi(zl2_info.access_vlan, zif->brslave_info.br_if);
 }
 
+int advertise_gw_macip_enabled(zebra_evpn_t *zevpn);
+int advertise_svi_macip_enabled(zebra_evpn_t *zevpn);
+
 #ifdef __cplusplus
 }
 #endif
index 858f0b99f6117a477caf822c37820c67fed1fdec..d00115c9b0a4ad472aa3e2f02d0b4a6bdc856925 100644 (file)
@@ -2285,3 +2285,66 @@ void process_neigh_remote_macip_add(zebra_evpn_t *zevpn, struct zebra_vrf *zvrf,
        /* Update seq number. */
        n->rem_seq = seq;
 }
+
+int zebra_evpn_neigh_gw_macip_add(struct interface *ifp, zebra_evpn_t *zevpn,
+                                 struct ipaddr *ip, zebra_mac_t *mac)
+{
+       zebra_neigh_t *n;
+       char buf[ETHER_ADDR_STRLEN];
+       char buf2[INET6_ADDRSTRLEN];
+
+
+       n = zebra_evpn_neigh_lookup(zevpn, ip);
+       if (!n) {
+               n = zebra_evpn_neigh_add(zevpn, ip, &mac->macaddr, mac, 0);
+               if (!n) {
+                       flog_err(
+                               EC_ZEBRA_MAC_ADD_FAILED,
+                               "Failed to add neighbor %s MAC %s intf %s(%u) -> VNI %u",
+                               ipaddr2str(ip, buf2, sizeof(buf2)),
+                               prefix_mac2str(&mac->macaddr, buf, sizeof(buf)),
+                               ifp->name, ifp->ifindex, zevpn->vni);
+                       return -1;
+               }
+       }
+
+       /* Set "local" forwarding info. */
+       SET_FLAG(n->flags, ZEBRA_NEIGH_LOCAL);
+       ZEBRA_NEIGH_SET_ACTIVE(n);
+       memcpy(&n->emac, &mac->macaddr, ETH_ALEN);
+       n->ifindex = ifp->ifindex;
+
+       /* Only advertise in BGP if the knob is enabled */
+       if (advertise_gw_macip_enabled(zevpn)) {
+
+               SET_FLAG(mac->flags, ZEBRA_MAC_DEF_GW);
+               SET_FLAG(n->flags, ZEBRA_NEIGH_DEF_GW);
+               /* Set Router flag (R-bit) */
+               if (ip->ipa_type == IPADDR_V6)
+                       SET_FLAG(n->flags, ZEBRA_NEIGH_ROUTER_FLAG);
+
+               if (IS_ZEBRA_DEBUG_VXLAN)
+                       zlog_debug(
+                               "SVI %s(%u) L2-VNI %u, sending GW MAC %s IP %s add to BGP with flags 0x%x",
+                               ifp->name, ifp->ifindex, zevpn->vni,
+                               prefix_mac2str(&mac->macaddr, buf, sizeof(buf)),
+                               ipaddr2str(ip, buf2, sizeof(buf2)), n->flags);
+
+               zebra_evpn_neigh_send_add_to_client(
+                       zevpn->vni, ip, &n->emac, n->mac, n->flags, n->loc_seq);
+       } else if (advertise_svi_macip_enabled(zevpn)) {
+
+               SET_FLAG(n->flags, ZEBRA_NEIGH_SVI_IP);
+               if (IS_ZEBRA_DEBUG_VXLAN)
+                       zlog_debug(
+                               "SVI %s(%u) L2-VNI %u, sending SVI MAC %s IP %s add to BGP with flags 0x%x",
+                               ifp->name, ifp->ifindex, zevpn->vni,
+                               prefix_mac2str(&mac->macaddr, buf, sizeof(buf)),
+                               ipaddr2str(ip, buf2, sizeof(buf2)), n->flags);
+
+               zebra_evpn_neigh_send_add_to_client(
+                       zevpn->vni, ip, &n->emac, n->mac, n->flags, n->loc_seq);
+       }
+
+       return 0;
+}
index ddeb6ab8bad6502278354b3bf19a722dd7f07637..3438afb336be711d4294520851e64e3573c66e55 100644 (file)
@@ -279,6 +279,8 @@ void process_neigh_remote_macip_add(zebra_evpn_t *zevpn, struct zebra_vrf *zvrf,
                                    struct ipaddr *ipaddr, zebra_mac_t *mac,
                                    struct in_addr vtep_ip, uint8_t flags,
                                    uint32_t seq);
+int zebra_evpn_neigh_gw_macip_add(struct interface *ifp, zebra_evpn_t *zevpn,
+                                 struct ipaddr *ip, zebra_mac_t *mac);
 
 zebra_neigh_t *zebra_evpn_neigh_add(zebra_evpn_t *zevpn, struct ipaddr *ip,
                                    struct ethaddr *mac, zebra_mac_t *zmac,
index 5cb124682beae2ca4110d236e53c55ccaafc5f5e..7e1791e4d7f5ef06e2556bf2e44dd59a8b9ee2af 100644 (file)
@@ -151,8 +151,6 @@ static int zevpn_gw_macip_add(struct interface *ifp, zebra_evpn_t *zevpn,
 static int zevpn_gw_macip_del(struct interface *ifp, zebra_evpn_t *zevpn,
                             struct ipaddr *ip);
 struct interface *zebra_get_vrr_intf_for_svi(struct interface *ifp);
-static int advertise_gw_macip_enabled(zebra_evpn_t *zevpn);
-static int advertise_svi_macip_enabled(zebra_evpn_t *zevpn);
 static unsigned int zebra_vxlan_sg_hash_key_make(const void *p);
 static bool zebra_vxlan_sg_hash_eq(const void *p1, const void *p2);
 static void zebra_vxlan_sg_do_deref(struct zebra_vrf *zvrf,
@@ -211,7 +209,7 @@ static uint32_t rb_host_count(struct host_rb_tree_entry *hrbe)
        return count;
 }
 
-static int advertise_gw_macip_enabled(zebra_evpn_t *zevpn)
+int advertise_gw_macip_enabled(zebra_evpn_t *zevpn)
 {
        struct zebra_vrf *zvrf;
 
@@ -225,7 +223,7 @@ static int advertise_gw_macip_enabled(zebra_evpn_t *zevpn)
        return 0;
 }
 
-static int advertise_svi_macip_enabled(zebra_evpn_t *zevpn)
+int advertise_svi_macip_enabled(zebra_evpn_t *zevpn)
 {
        struct zebra_vrf *zvrf;
 
@@ -1174,9 +1172,6 @@ static int zevpn_advertise_subnet(zebra_evpn_t *zevpn, struct interface *ifp,
 static int zevpn_gw_macip_add(struct interface *ifp, zebra_evpn_t *zevpn,
                             struct ethaddr *macaddr, struct ipaddr *ip)
 {
-       char buf[ETHER_ADDR_STRLEN];
-       char buf2[INET6_ADDRSTRLEN];
-       zebra_neigh_t *n = NULL;
        zebra_mac_t *mac = NULL;
        struct zebra_if *zif = NULL;
        struct zebra_l2info_vxlan *vxl = NULL;
@@ -1192,59 +1187,7 @@ static int zevpn_gw_macip_add(struct interface *ifp, zebra_evpn_t *zevpn,
            != 0)
                return -1;
 
-       n = zebra_evpn_neigh_lookup(zevpn, ip);
-       if (!n) {
-               n = zebra_evpn_neigh_add(zevpn, ip, macaddr, mac, 0);
-               if (!n) {
-                       flog_err(
-                               EC_ZEBRA_MAC_ADD_FAILED,
-                               "Failed to add neighbor %s MAC %s intf %s(%u) -> VNI %u",
-                               ipaddr2str(ip, buf2, sizeof(buf2)),
-                               prefix_mac2str(macaddr, buf, sizeof(buf)),
-                               ifp->name, ifp->ifindex, zevpn->vni);
-                       return -1;
-               }
-       }
-
-       /* Set "local" forwarding info. */
-       SET_FLAG(n->flags, ZEBRA_NEIGH_LOCAL);
-       ZEBRA_NEIGH_SET_ACTIVE(n);
-       memcpy(&n->emac, macaddr, ETH_ALEN);
-       n->ifindex = ifp->ifindex;
-
-       /* Only advertise in BGP if the knob is enabled */
-       if (advertise_gw_macip_enabled(zevpn)) {
-
-               SET_FLAG(mac->flags, ZEBRA_MAC_DEF_GW);
-               SET_FLAG(n->flags, ZEBRA_NEIGH_DEF_GW);
-               /* Set Router flag (R-bit) */
-               if (ip->ipa_type == IPADDR_V6)
-                       SET_FLAG(n->flags, ZEBRA_NEIGH_ROUTER_FLAG);
-
-               if (IS_ZEBRA_DEBUG_VXLAN)
-                       zlog_debug(
-                       "SVI %s(%u) L2-VNI %u, sending GW MAC %s IP %s add to BGP with flags 0x%x",
-                       ifp->name, ifp->ifindex, zevpn->vni,
-                       prefix_mac2str(macaddr, buf, sizeof(buf)),
-                       ipaddr2str(ip, buf2, sizeof(buf2)), n->flags);
-
-               zebra_evpn_neigh_send_add_to_client(
-                       zevpn->vni, ip, &n->emac, n->mac, n->flags, n->loc_seq);
-       } else if (advertise_svi_macip_enabled(zevpn)) {
-
-               SET_FLAG(n->flags, ZEBRA_NEIGH_SVI_IP);
-               if (IS_ZEBRA_DEBUG_VXLAN)
-                       zlog_debug(
-                       "SVI %s(%u) L2-VNI %u, sending SVI MAC %s IP %s add to BGP with flags 0x%x",
-                       ifp->name, ifp->ifindex, zevpn->vni,
-                       prefix_mac2str(macaddr, buf, sizeof(buf)),
-                       ipaddr2str(ip, buf2, sizeof(buf2)), n->flags);
-
-               zebra_evpn_neigh_send_add_to_client(
-                       zevpn->vni, ip, &n->emac, n->mac, n->flags, n->loc_seq);
-       }
-
-       return 0;
+       return zebra_evpn_neigh_gw_macip_add(ifp, zevpn, ip, mac);
 }
 
 /*