#include "lib/routemap.h"
#include "bgpd/bgpd.h"
#include "bgpd/bgp_routemap_nb.h"
+#include "bgpd/bgp_ecommunity.h"
/* Add bgp route map rule. */
static int bgp_route_match_add(struct route_map_index *index,
return NB_OK;
}
-enum e_community_lb_type {
- EXPLICIT_BANDWIDTH,
- CUMULATIVE_BANDWIDTH,
- COMPUTED_BANDWIDTH
-};
-
/*
* XPath:
* /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:extcommunity-lb
struct nb_cb_apply_finish_args *args)
{
struct routemap_hook_context *rhc;
- int lb_type;
+ enum ecommunity_lb_type lb_type;
char str[VTY_BUFSIZ];
uint16_t bandwidth;
(strmatch(A, "frr-bgp-route-map:set-extcommunity-rt"))
#define IS_SET_EXTCOMMUNITY_SOO(A) \
(strmatch(A, "frr-bgp-route-map:set-extcommunity-soo"))
+#define IS_SET_EXTCOMMUNITY_LB(A) \
+ (strmatch(A, "frr-bgp-route-map:set-extcommunity-lb"))
#define IS_SET_AGGREGATOR(A) \
(strmatch(A, "frr-bgp-route-map:aggregator"))
#define IS_SET_AS_PREPEND(A) \
#include "lib/command.h"
#include "lib/northbound_cli.h"
#include "lib/routemap.h"
+#include "bgpd/bgp_ecommunity.h"
#ifndef VTYSH_EXTRACT_PL
#include "lib/routemap_cli_clippy.c"
yang_dnode_get_string(
dnode,
"./rmap-set-action/frr-bgp-route-map:extcommunity-soo"));
+ } else if (IS_SET_EXTCOMMUNITY_LB(action)) {
+ enum ecommunity_lb_type lb_type;
+ char str[VTY_BUFSIZ];
+ uint16_t bandwidth;
+
+ lb_type = yang_dnode_get_enum(
+ dnode,
+ "./rmap-set-action/frr-bgp-route-map:extcommunity-lb/lb-type");
+ switch (lb_type) {
+ case EXPLICIT_BANDWIDTH:
+ bandwidth = yang_dnode_get_uint16(
+ dnode,
+ "./rmap-set-action/frr-bgp-route-map:extcommunity-lb/bandwidth");
+ snprintf(str, sizeof(str), "%d", bandwidth);
+ break;
+ case CUMULATIVE_BANDWIDTH:
+ snprintf(str, sizeof(str), "%s", "cumulative");
+ break;
+ case COMPUTED_BANDWIDTH:
+ snprintf(str, sizeof(str), "%s", "num-multipaths");
+ }
+
+ if (yang_dnode_get_bool(
+ dnode,
+ "./rmap-set-action/frr-bgp-route-map:extcommunity-lb/two-octet-as-specific"))
+ strlcat(str, " non-transitive", sizeof(str));
+
+ vty_out(vty, " set extcommunity bandwidth %s\n", str);
} else if (IS_SET_AGGREGATOR(action)) {
vty_out(vty, " set aggregator as %s %s\n",
yang_dnode_get_string(