summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChirag Shah <chirag@nvidia.com>2020-10-23 11:28:11 -0700
committerChirag Shah <chirag@nvidia.com>2020-10-26 08:57:15 -0700
commit90e21f3535ff2d887cbb52f0e4e6fe4907095d70 (patch)
tree4cc19955bf53a05ac12dcb9e24292cd662138b67
parent8cc7152af8b10761bd13ccaa0b8c2043bf378bda (diff)
bgpd: add nb support for suppress-map in aggregate cmd
Signed-off-by: Chirag Shah <chirag@nvidia.com>
-rw-r--r--bgpd/bgp_nb.c30
-rw-r--r--bgpd/bgp_nb.h16
-rw-r--r--bgpd/bgp_nb_config.c139
-rw-r--r--bgpd/bgp_route.c22
-rw-r--r--yang/frr-bgp-common.yang7
5 files changed, 211 insertions, 3 deletions
diff --git a/bgpd/bgp_nb.c b/bgpd/bgp_nb.c
index d8c795242a..333ca3cce9 100644
--- a/bgpd/bgp_nb.c
+++ b/bgpd/bgp_nb.c
@@ -1348,6 +1348,13 @@ const struct frr_yang_module_info frr_bgp_info = {
}
},
{
+ .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-unicast/aggregate-route/suppress-map",
+ .cbs = {
+ .modify = bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_suppress_map_modify,
+ .destroy = bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_suppress_map_destroy,
+ }
+ },
+ {
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-unicast/admin-distance-route",
.cbs = {
.apply_finish = bgp_global_afi_safi_admin_distance_route_apply_finish,
@@ -1658,6 +1665,13 @@ const struct frr_yang_module_info frr_bgp_info = {
}
},
{
+ .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/aggregate-route/suppress-map",
+ .cbs = {
+ .modify = bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_suppress_map_modify,
+ .destroy = bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_suppress_map_destroy,
+ }
+ },
+ {
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/admin-distance-route",
.cbs = {
.apply_finish = bgp_global_afi_safi_admin_distance_route_apply_finish,
@@ -2061,6 +2075,7 @@ const struct frr_yang_module_info frr_bgp_info = {
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/aggregate-route",
.cbs = {
+ .apply_finish = bgp_global_afi_safi_aggregate_route_apply_finish,
.create = bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_create,
.destroy = bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_destroy,
}
@@ -2097,6 +2112,13 @@ const struct frr_yang_module_info frr_bgp_info = {
}
},
{
+ .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/aggregate-route/suppress-map",
+ .cbs = {
+ .modify = bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_suppress_map_modify,
+ .destroy = bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_suppress_map_destroy,
+ }
+ },
+ {
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/admin-distance-route",
.cbs = {
.apply_finish = bgp_global_afi_safi_admin_distance_route_apply_finish,
@@ -2222,6 +2244,7 @@ const struct frr_yang_module_info frr_bgp_info = {
{
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/aggregate-route",
.cbs = {
+ .apply_finish = bgp_global_afi_safi_aggregate_route_apply_finish,
.create = bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_create,
.destroy = bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_destroy,
}
@@ -2258,6 +2281,13 @@ const struct frr_yang_module_info frr_bgp_info = {
}
},
{
+ .xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/aggregate-route/suppress-map",
+ .cbs = {
+ .modify = bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_suppress_map_modify,
+ .destroy = bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_suppress_map_destroy,
+ }
+ },
+ {
.xpath = "/frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/admin-distance-route",
.cbs = {
.apply_finish = bgp_global_afi_safi_admin_distance_route_apply_finish,
diff --git a/bgpd/bgp_nb.h b/bgpd/bgp_nb.h
index 3d4dd988a6..532021425f 100644
--- a/bgpd/bgp_nb.h
+++ b/bgpd/bgp_nb.h
@@ -572,6 +572,10 @@ int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_origin_modify(
struct nb_cb_modify_args *args);
int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_match_med_modify(
struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args);
int bgp_global_afi_safis_afi_safi_ipv4_unicast_admin_distance_route_create(
struct nb_cb_create_args *args);
int bgp_global_afi_safis_afi_safi_ipv4_unicast_admin_distance_route_destroy(
@@ -708,6 +712,10 @@ int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_origin_modify(
struct nb_cb_modify_args *args);
int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_match_med_modify(
struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args);
int bgp_global_afi_safis_afi_safi_ipv6_unicast_admin_distance_route_create(
struct nb_cb_create_args *args);
int bgp_global_afi_safis_afi_safi_ipv6_unicast_admin_distance_route_destroy(
@@ -898,6 +906,10 @@ int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_origin_modify(
struct nb_cb_modify_args *args);
int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_match_med_modify(
struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args);
int bgp_global_afi_safis_afi_safi_ipv4_multicast_admin_distance_route_create(
struct nb_cb_create_args *args);
int bgp_global_afi_safis_afi_safi_ipv4_multicast_admin_distance_route_destroy(
@@ -966,6 +978,10 @@ int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_origin_modify(
struct nb_cb_modify_args *args);
int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_match_med_modify(
struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args);
+int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args);
int bgp_global_afi_safis_afi_safi_ipv6_multicast_admin_distance_route_create(
struct nb_cb_create_args *args);
int bgp_global_afi_safis_afi_safi_ipv6_multicast_admin_distance_route_destroy(
diff --git a/bgpd/bgp_nb_config.c b/bgpd/bgp_nb_config.c
index dc8d0c8619..66dfa2aea7 100644
--- a/bgpd/bgp_nb_config.c
+++ b/bgpd/bgp_nb_config.c
@@ -5747,6 +5747,9 @@ void bgp_global_afi_safi_aggregate_route_apply_finish(
origin = yang_dnode_get_enum(args->dnode, "./origin");
match_med = yang_dnode_get_bool(args->dnode, "./match-med");
+ if (yang_dnode_exists(args->dnode, "./suppress-map"))
+ suppress_map =
+ yang_dnode_get_string(args->dnode, "./suppress-map");
bgp_aggregate_set(bgp, &prefix, afi, safi, rmap_name, summary_only,
as_set, origin, match_med, suppress_map, args->errmsg,
@@ -5924,6 +5927,40 @@ int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_match_med_modify(
return NB_OK;
}
+/*
+ * XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-unicast/aggregate-route/suppress-map
+ */
+int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+int bgp_global_afi_safis_afi_safi_ipv4_unicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
void bgp_global_afi_safi_admin_distance_route_apply_finish(
struct nb_cb_apply_finish_args *args)
{
@@ -7965,6 +8002,40 @@ int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_match_med_modify(
/*
* XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/aggregate-route/suppress-map
+ */
+int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+int bgp_global_afi_safis_afi_safi_ipv6_unicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
* /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-unicast/admin-distance-route
*/
int bgp_global_afi_safis_afi_safi_ipv6_unicast_admin_distance_route_create(
@@ -9729,6 +9800,40 @@ int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_match_med_modif
/*
* XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/aggregate-route/suppress-map
+ */
+int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+int bgp_global_afi_safis_afi_safi_ipv4_multicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
* /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv4-multicast/admin-distance-route
*/
int bgp_global_afi_safis_afi_safi_ipv4_multicast_admin_distance_route_create(
@@ -10520,6 +10625,40 @@ int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_match_med_modif
/*
* XPath:
+ * /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/aggregate-route/suppress-map
+ */
+int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_suppress_map_modify(
+ struct nb_cb_modify_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+int bgp_global_afi_safis_afi_safi_ipv6_multicast_aggregate_route_suppress_map_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ switch (args->event) {
+ case NB_EV_VALIDATE:
+ case NB_EV_PREPARE:
+ case NB_EV_ABORT:
+ case NB_EV_APPLY:
+ /* TODO: implement me. */
+ break;
+ }
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
* /frr-routing:routing/control-plane-protocols/control-plane-protocol/frr-bgp:bgp/global/afi-safis/afi-safi/ipv6-multicast/admin-distance-route
*/
int bgp_global_afi_safis_afi_safi_ipv6_multicast_admin_distance_route_create(
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 826cd4b998..c4291fd120 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -7515,6 +7515,7 @@ DEFPY_YANG(
"|route-map WORD$rmap_name"
"|origin <egp|igp|incomplete>$origin_s"
"|matching-MED-only$match_med"
+ "|suppress-map WORD$suppress_map"
"}",
NO_STR
"Configure BGP aggregate entries\n"
@@ -7530,8 +7531,8 @@ DEFPY_YANG(
"Local IGP\n"
"Unknown heritage\n"
"Only aggregate routes with matching MED\n"
- "Suppress the selected more specific routes\n"
- "Route map with the route selectors\n")
+ "Suppress the selected more specific routes\n"
+ "Route map with the route selectors\n")
{
char base_xpath[XPATH_MAXLEN];
safi_t safi = bgp_node_safi(vty);
@@ -7575,6 +7576,13 @@ DEFPY_YANG(
nb_cli_enqueue_change(vty, "./rmap-policy-export",
NB_OP_DESTROY, NULL);
+ if (suppress_map)
+ nb_cli_enqueue_change(vty, "./suppress-map", NB_OP_MODIFY,
+ suppress_map);
+ else
+ nb_cli_enqueue_change(vty, "./suppress-map", NB_OP_DESTROY,
+ NULL);
+
snprintf(
base_xpath, sizeof(base_xpath),
"./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/aggregate-route[prefix='%s']",
@@ -7596,6 +7604,7 @@ DEFPY_YANG(aggregate_addressv6, aggregate_addressv6_cmd,
"|route-map WORD$rmap_name"
"|origin <egp|igp|incomplete>$origin_s"
"|matching-MED-only$match_med"
+ "|suppress-map WORD$suppress_map"
"}",
NO_STR
"Configure BGP aggregate entries\n"
@@ -7610,7 +7619,7 @@ DEFPY_YANG(aggregate_addressv6, aggregate_addressv6_cmd,
"Unknown heritage\n"
"Only aggregate routes with matching MED\n"
"Suppress the selected more specific routes\n"
- "Route map with the route selectors\n")
+ "Route map with the route selectors\n")
{
char base_xpath[XPATH_MAXLEN];
safi_t safi = bgp_node_safi(vty);
@@ -7640,6 +7649,13 @@ DEFPY_YANG(aggregate_addressv6, aggregate_addressv6_cmd,
nb_cli_enqueue_change(vty, "./rmap-policy-export", NB_OP_MODIFY,
rmap_name);
+ if (suppress_map)
+ nb_cli_enqueue_change(vty, "./suppress-map", NB_OP_MODIFY,
+ suppress_map);
+ else
+ nb_cli_enqueue_change(vty, "./suppress-map", NB_OP_DESTROY,
+ NULL);
+
snprintf(
base_xpath, sizeof(base_xpath),
"./global/afi-safis/afi-safi[afi-safi-name='%s']/%s/aggregate-route[prefix='%s']",
diff --git a/yang/frr-bgp-common.yang b/yang/frr-bgp-common.yang
index 8e93ed35ac..de78758dbb 100644
--- a/yang/frr-bgp-common.yang
+++ b/yang/frr-bgp-common.yang
@@ -807,6 +807,7 @@ submodule frr-bgp-common {
description
"BGP origin type.";
}
+
leaf match-med {
type boolean;
default "false";
@@ -814,6 +815,12 @@ submodule frr-bgp-common {
"When set to 'true' aggregate-route matches only
med.";
}
+
+ leaf suppress-map {
+ type string;
+ description
+ "Suppress more specific routes specified in route-map.";
+ }
}
grouping admin-distance {