]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: allow flowspec entries to be announced to zebra
authorPhilippe Guibert <philippe.guibert@6wind.com>
Fri, 26 Jan 2018 17:36:24 +0000 (18:36 +0100)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Thu, 3 May 2018 13:15:08 +0000 (15:15 +0200)
Flowspec entries are allowed to be announced.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
bgpd/bgp_pbr.c
bgpd/bgp_route.h
bgpd/bgp_zebra.c

index 0e6a0dbbad204cefc764ccbe178de531de59abdb..83710f046d1e2c5db64925ce43806e57e7c86337 100644 (file)
@@ -30,6 +30,7 @@
 #include "bgpd/bgp_route.h"
 #include "bgpd/bgp_attr.h"
 #include "bgpd/bgp_zebra.h"
+#include "bgpd/bgp_mplsvpn.h"
 
 DEFINE_MTYPE_STATIC(BGPD, PBR_MATCH_ENTRY, "PBR match entry")
 DEFINE_MTYPE_STATIC(BGPD, PBR_MATCH, "PBR match")
index 89b8eb70cd1475932d16369afba521751831f505..00e5677fe0f17d0c6bf33fc0705457f63aa60ac7 100644 (file)
@@ -320,7 +320,8 @@ static inline void bgp_bump_version(struct bgp_node *node)
 static inline int bgp_fibupd_safi(safi_t safi)
 {
        if (safi == SAFI_UNICAST || safi == SAFI_MULTICAST
-           || safi == SAFI_LABELED_UNICAST)
+           || safi == SAFI_LABELED_UNICAST
+           || safi == SAFI_FLOWSPEC)
                return 1;
        return 0;
 }
index 852c5fdec957215744effd2690e7d9af97b45587..2c1ccfd932af9776c1d6ed9899cc1b9acf628b05 100644 (file)
@@ -1174,6 +1174,10 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
        if (bgp_debug_zebra(p))
                prefix2str(&api.prefix, buf_prefix, sizeof(buf_prefix));
 
+       if (safi == SAFI_FLOWSPEC)
+               return bgp_pbr_update_entry(bgp, &rn->p,
+                                           info, afi, safi, true);
+
        /*
         * vrf leaking support (will have only one nexthop)
         */
@@ -1467,6 +1471,10 @@ void bgp_zebra_withdraw(struct prefix *p, struct bgp_info *info,
        if (!bgp_install_info_to_zebra(bgp))
                return;
 
+       if (safi == SAFI_FLOWSPEC)
+               return bgp_pbr_update_entry(peer->bgp, p,
+                                           info, AFI_IP, safi, false);
+
        memset(&api, 0, sizeof(api));
        memcpy(&api.rmac, &(info->attr->rmac), sizeof(struct ethaddr));
        api.vrf_id = bgp->vrf_id;