diff options
| author | Chirag Shah <chirag@nvidia.com> | 2020-10-23 11:28:11 -0700 |
|---|---|---|
| committer | Chirag Shah <chirag@nvidia.com> | 2020-10-26 08:57:15 -0700 |
| commit | 90e21f3535ff2d887cbb52f0e4e6fe4907095d70 (patch) | |
| tree | 4cc19955bf53a05ac12dcb9e24292cd662138b67 | |
| parent | 8cc7152af8b10761bd13ccaa0b8c2043bf378bda (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.c | 30 | ||||
| -rw-r--r-- | bgpd/bgp_nb.h | 16 | ||||
| -rw-r--r-- | bgpd/bgp_nb_config.c | 139 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 22 | ||||
| -rw-r--r-- | yang/frr-bgp-common.yang | 7 |
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 { |
