summaryrefslogtreecommitdiff
path: root/bgpd/rfapi/bgp_rfapi_cfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/rfapi/bgp_rfapi_cfg.c')
-rw-r--r--bgpd/rfapi/bgp_rfapi_cfg.c7868
1 files changed, 3760 insertions, 4108 deletions
diff --git a/bgpd/rfapi/bgp_rfapi_cfg.c b/bgpd/rfapi/bgp_rfapi_cfg.c
index d04b186dff..8a93d3984e 100644
--- a/bgpd/rfapi/bgp_rfapi_cfg.c
+++ b/bgpd/rfapi/bgp_rfapi_cfg.c
@@ -1,4 +1,4 @@
-/*
+/*
*
* Copyright 2009-2016, LabN Consulting, L.L.C.
*
@@ -52,32 +52,32 @@
DEFINE_MGROUP(RFAPI, "rfapi")
-DEFINE_MTYPE(RFAPI, RFAPI_CFG, "NVE Configuration")
-DEFINE_MTYPE(RFAPI, RFAPI_GROUP_CFG, "NVE Group Configuration")
-DEFINE_MTYPE(RFAPI, RFAPI_L2_CFG, "RFAPI L2 Group Configuration")
-DEFINE_MTYPE(RFAPI, RFAPI_RFP_GROUP_CFG, "RFAPI RFP Group Configuration")
-DEFINE_MTYPE(RFAPI, RFAPI, "RFAPI Generic")
-DEFINE_MTYPE(RFAPI, RFAPI_DESC, "RFAPI Descriptor")
-DEFINE_MTYPE(RFAPI, RFAPI_IMPORTTABLE, "RFAPI Import Table")
-DEFINE_MTYPE(RFAPI, RFAPI_MONITOR, "RFAPI Monitor VPN")
-DEFINE_MTYPE(RFAPI, RFAPI_MONITOR_ENCAP, "RFAPI Monitor Encap")
-DEFINE_MTYPE(RFAPI, RFAPI_NEXTHOP, "RFAPI Next Hop")
-DEFINE_MTYPE(RFAPI, RFAPI_VN_OPTION, "RFAPI VN Option")
-DEFINE_MTYPE(RFAPI, RFAPI_UN_OPTION, "RFAPI UN Option")
-DEFINE_MTYPE(RFAPI, RFAPI_WITHDRAW, "RFAPI Withdraw")
-DEFINE_MTYPE(RFAPI, RFAPI_RFG_NAME, "RFAPI RFGName")
-DEFINE_MTYPE(RFAPI, RFAPI_ADB, "RFAPI Advertisement Data")
-DEFINE_MTYPE(RFAPI, RFAPI_ETI, "RFAPI Export Table Info")
-DEFINE_MTYPE(RFAPI, RFAPI_NVE_ADDR, "RFAPI NVE Address")
-DEFINE_MTYPE(RFAPI, RFAPI_PREFIX_BAG, "RFAPI Prefix Bag")
-DEFINE_MTYPE(RFAPI, RFAPI_IT_EXTRA, "RFAPI IT Extra")
-DEFINE_MTYPE(RFAPI, RFAPI_INFO, "RFAPI Info")
-DEFINE_MTYPE(RFAPI, RFAPI_ADDR, "RFAPI Addr")
+DEFINE_MTYPE(RFAPI, RFAPI_CFG, "NVE Configuration")
+DEFINE_MTYPE(RFAPI, RFAPI_GROUP_CFG, "NVE Group Configuration")
+DEFINE_MTYPE(RFAPI, RFAPI_L2_CFG, "RFAPI L2 Group Configuration")
+DEFINE_MTYPE(RFAPI, RFAPI_RFP_GROUP_CFG, "RFAPI RFP Group Configuration")
+DEFINE_MTYPE(RFAPI, RFAPI, "RFAPI Generic")
+DEFINE_MTYPE(RFAPI, RFAPI_DESC, "RFAPI Descriptor")
+DEFINE_MTYPE(RFAPI, RFAPI_IMPORTTABLE, "RFAPI Import Table")
+DEFINE_MTYPE(RFAPI, RFAPI_MONITOR, "RFAPI Monitor VPN")
+DEFINE_MTYPE(RFAPI, RFAPI_MONITOR_ENCAP, "RFAPI Monitor Encap")
+DEFINE_MTYPE(RFAPI, RFAPI_NEXTHOP, "RFAPI Next Hop")
+DEFINE_MTYPE(RFAPI, RFAPI_VN_OPTION, "RFAPI VN Option")
+DEFINE_MTYPE(RFAPI, RFAPI_UN_OPTION, "RFAPI UN Option")
+DEFINE_MTYPE(RFAPI, RFAPI_WITHDRAW, "RFAPI Withdraw")
+DEFINE_MTYPE(RFAPI, RFAPI_RFG_NAME, "RFAPI RFGName")
+DEFINE_MTYPE(RFAPI, RFAPI_ADB, "RFAPI Advertisement Data")
+DEFINE_MTYPE(RFAPI, RFAPI_ETI, "RFAPI Export Table Info")
+DEFINE_MTYPE(RFAPI, RFAPI_NVE_ADDR, "RFAPI NVE Address")
+DEFINE_MTYPE(RFAPI, RFAPI_PREFIX_BAG, "RFAPI Prefix Bag")
+DEFINE_MTYPE(RFAPI, RFAPI_IT_EXTRA, "RFAPI IT Extra")
+DEFINE_MTYPE(RFAPI, RFAPI_INFO, "RFAPI Info")
+DEFINE_MTYPE(RFAPI, RFAPI_ADDR, "RFAPI Addr")
DEFINE_MTYPE(RFAPI, RFAPI_UPDATED_RESPONSE_QUEUE, "RFAPI Updated Rsp Queue")
-DEFINE_MTYPE(RFAPI, RFAPI_RECENT_DELETE, "RFAPI Recently Deleted Route")
-DEFINE_MTYPE(RFAPI, RFAPI_L2ADDR_OPT, "RFAPI L2 Address Option")
-DEFINE_MTYPE(RFAPI, RFAPI_AP, "RFAPI Advertised Prefix")
-DEFINE_MTYPE(RFAPI, RFAPI_MONITOR_ETH, "RFAPI Monitor Ethernet")
+DEFINE_MTYPE(RFAPI, RFAPI_RECENT_DELETE, "RFAPI Recently Deleted Route")
+DEFINE_MTYPE(RFAPI, RFAPI_L2ADDR_OPT, "RFAPI L2 Address Option")
+DEFINE_MTYPE(RFAPI, RFAPI_AP, "RFAPI Advertised Prefix")
+DEFINE_MTYPE(RFAPI, RFAPI_MONITOR_ETH, "RFAPI Monitor Ethernet")
DEFINE_QOBJ_TYPE(rfapi_nve_group_cfg)
DEFINE_QOBJ_TYPE(rfapi_l2_group_cfg)
@@ -86,139 +86,127 @@ DEFINE_QOBJ_TYPE(rfapi_l2_group_cfg)
***********************************************************************/
-/*
+/*
* compaitibility to old quagga_time call
- * time_t value in terms of stabilised absolute time.
+ * time_t value in terms of stabilised absolute time.
* replacement for POSIX time()
*/
-time_t
-rfapi_time (time_t *t)
+time_t rfapi_time(time_t *t)
{
- time_t clock = bgp_clock();
- if (t)
- *t = clock;
- return clock;
+ time_t clock = bgp_clock();
+ if (t)
+ *t = clock;
+ return clock;
}
-void
-nve_group_to_nve_list (
- struct rfapi_nve_group_cfg *rfg,
- struct list **nves,
- uint8_t family) /* AF_INET, AF_INET6 */
+void nve_group_to_nve_list(struct rfapi_nve_group_cfg *rfg, struct list **nves,
+ uint8_t family) /* AF_INET, AF_INET6 */
{
- struct listnode *hln;
- struct rfapi_descriptor *rfd;
-
- /*
- * loop over nves in this grp, add to list
- */
- for (ALL_LIST_ELEMENTS_RO (rfg->nves, hln, rfd))
- {
- if (rfd->vn_addr.addr_family == family)
- {
- if (!*nves)
- *nves = list_new ();
- listnode_add (*nves, rfd);
- }
- }
+ struct listnode *hln;
+ struct rfapi_descriptor *rfd;
+
+ /*
+ * loop over nves in this grp, add to list
+ */
+ for (ALL_LIST_ELEMENTS_RO(rfg->nves, hln, rfd)) {
+ if (rfd->vn_addr.addr_family == family) {
+ if (!*nves)
+ *nves = list_new();
+ listnode_add(*nves, rfd);
+ }
+ }
}
-struct rfapi_nve_group_cfg *
-bgp_rfapi_cfg_match_group (
- struct rfapi_cfg *hc,
- struct prefix *vn,
- struct prefix *un)
+struct rfapi_nve_group_cfg *bgp_rfapi_cfg_match_group(struct rfapi_cfg *hc,
+ struct prefix *vn,
+ struct prefix *un)
{
- struct rfapi_nve_group_cfg *rfg_vn = NULL;
- struct rfapi_nve_group_cfg *rfg_un = NULL;
-
- struct route_table *rt_vn;
- struct route_table *rt_un;
- struct route_node *rn_vn;
- struct route_node *rn_un;
-
- struct rfapi_nve_group_cfg *rfg;
- struct listnode *node, *nnode;
-
- switch (vn->family)
- {
- case AF_INET:
- rt_vn = &(hc->nve_groups_vn[AFI_IP]);
- break;
- case AF_INET6:
- rt_vn = &(hc->nve_groups_vn[AFI_IP6]);
- break;
- default:
- return NULL;
- }
-
- switch (un->family)
- {
- case AF_INET:
- rt_un = &(hc->nve_groups_un[AFI_IP]);
- break;
- case AF_INET6:
- rt_un = &(hc->nve_groups_un[AFI_IP6]);
- break;
- default:
- return NULL;
- }
-
- rn_vn = route_node_match (rt_vn, vn); /* NB locks node */
- if (rn_vn)
- {
- rfg_vn = rn_vn->info;
- route_unlock_node (rn_vn);
- }
-
- rn_un = route_node_match (rt_un, un); /* NB locks node */
- if (rn_un)
- {
- rfg_un = rn_un->info;
- route_unlock_node (rn_un);
- }
+ struct rfapi_nve_group_cfg *rfg_vn = NULL;
+ struct rfapi_nve_group_cfg *rfg_un = NULL;
+
+ struct route_table *rt_vn;
+ struct route_table *rt_un;
+ struct route_node *rn_vn;
+ struct route_node *rn_un;
+
+ struct rfapi_nve_group_cfg *rfg;
+ struct listnode *node, *nnode;
+
+ switch (vn->family) {
+ case AF_INET:
+ rt_vn = &(hc->nve_groups_vn[AFI_IP]);
+ break;
+ case AF_INET6:
+ rt_vn = &(hc->nve_groups_vn[AFI_IP6]);
+ break;
+ default:
+ return NULL;
+ }
+
+ switch (un->family) {
+ case AF_INET:
+ rt_un = &(hc->nve_groups_un[AFI_IP]);
+ break;
+ case AF_INET6:
+ rt_un = &(hc->nve_groups_un[AFI_IP6]);
+ break;
+ default:
+ return NULL;
+ }
+
+ rn_vn = route_node_match(rt_vn, vn); /* NB locks node */
+ if (rn_vn) {
+ rfg_vn = rn_vn->info;
+ route_unlock_node(rn_vn);
+ }
+
+ rn_un = route_node_match(rt_un, un); /* NB locks node */
+ if (rn_un) {
+ rfg_un = rn_un->info;
+ route_unlock_node(rn_un);
+ }
#if BGP_VNC_DEBUG_MATCH_GROUP
- {
- char buf[BUFSIZ];
+ {
+ char buf[BUFSIZ];
- prefix2str (vn, buf, BUFSIZ);
- vnc_zlog_debug_verbose ("%s: vn prefix: %s", __func__, buf);
+ prefix2str(vn, buf, BUFSIZ);
+ vnc_zlog_debug_verbose("%s: vn prefix: %s", __func__, buf);
- prefix2str (un, buf, BUFSIZ);
- vnc_zlog_debug_verbose ("%s: un prefix: %s", __func__, buf);
+ prefix2str(un, buf, BUFSIZ);
+ vnc_zlog_debug_verbose("%s: un prefix: %s", __func__, buf);
- vnc_zlog_debug_verbose ("%s: rn_vn=%p, rn_un=%p, rfg_vn=%p, rfg_un=%p",
- __func__, rn_vn, rn_un, rfg_vn, rfg_un);
- }
+ vnc_zlog_debug_verbose(
+ "%s: rn_vn=%p, rn_un=%p, rfg_vn=%p, rfg_un=%p",
+ __func__, rn_vn, rn_un, rfg_vn, rfg_un);
+ }
#endif
- if (rfg_un == rfg_vn) /* same group */
- return rfg_un;
- if (!rfg_un) /* un doesn't match, return vn-matched grp */
- return rfg_vn;
- if (!rfg_vn) /* vn doesn't match, return un-matched grp */
- return rfg_un;
-
- /*
- * Two different nve groups match: the group configured earlier wins.
- * For now, just walk the sequential list and pick the first one.
- * If this approach is too slow, then store serial numbers in the
- * nve group structures as they are defined and just compare
- * serial numbers.
- */
- for (ALL_LIST_ELEMENTS (hc->nve_groups_sequential, node, nnode, rfg))
- {
- if ((rfg == rfg_un) || (rfg == rfg_vn))
- {
- return rfg;
- }
- }
- vnc_zlog_debug_verbose ("%s: shouldn't happen, returning NULL when un and vn match",
- __func__);
- return NULL; /* shouldn't happen */
+ if (rfg_un == rfg_vn) /* same group */
+ return rfg_un;
+ if (!rfg_un) /* un doesn't match, return vn-matched grp */
+ return rfg_vn;
+ if (!rfg_vn) /* vn doesn't match, return un-matched grp */
+ return rfg_un;
+
+ /*
+ * Two different nve groups match: the group configured earlier wins.
+ * For now, just walk the sequential list and pick the first one.
+ * If this approach is too slow, then store serial numbers in the
+ * nve group structures as they are defined and just compare
+ * serial numbers.
+ */
+ for (ALL_LIST_ELEMENTS(hc->nve_groups_sequential, node, nnode, rfg)) {
+ if ((rfg == rfg_un) || (rfg == rfg_vn)) {
+ return rfg;
+ }
+ }
+ vnc_zlog_debug_verbose(
+ "%s: shouldn't happen, returning NULL when un and vn match",
+ __func__);
+ return NULL; /* shouldn't happen */
}
/*------------------------------------------
@@ -230,15 +218,14 @@ bgp_rfapi_cfg_match_group (
* void * bgp structure
*
* returns:
- * void *
+ * void *
*------------------------------------------*/
-void *
-rfapi_get_rfp_start_val (void *bgpv)
+void *rfapi_get_rfp_start_val(void *bgpv)
{
- struct bgp *bgp = bgpv;
- if (bgp == NULL || bgp->rfapi == NULL)
- return NULL;
- return bgp->rfapi->rfp;
+ struct bgp *bgp = bgpv;
+ if (bgp == NULL || bgp->rfapi == NULL)
+ return NULL;
+ return bgp->rfapi->rfp;
}
/*------------------------------------------
@@ -246,7 +233,7 @@ rfapi_get_rfp_start_val (void *bgpv)
*
* Returns if VNC (BGP VPN messaging /VPN & encap SAFIs) are configured
*
- * input:
+ * input:
* bgp NULL (=use default instance)
*
* output:
@@ -255,32 +242,28 @@ rfapi_get_rfp_start_val (void *bgpv)
* 0 Success
* ENXIO VNC not configured
--------------------------------------------*/
-int
-bgp_rfapi_is_vnc_configured (struct bgp *bgp)
+int bgp_rfapi_is_vnc_configured(struct bgp *bgp)
{
- if (bgp == NULL)
- bgp = bgp_get_default ();
-
- if (bgp && bgp->rfapi_cfg)
- {
- struct peer *peer;
- struct peer_group *group;
- struct listnode *node, *nnode;
- /* if have configured VPN neighbors, assume running VNC */
- for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
- {
- if (group->conf->afc[AFI_IP][SAFI_MPLS_VPN] ||
- group->conf->afc[AFI_IP6][SAFI_MPLS_VPN])
- return 0;
- }
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (peer->afc[AFI_IP][SAFI_MPLS_VPN] ||
- peer->afc[AFI_IP6][SAFI_MPLS_VPN])
- return 0;
- }
- }
- return ENXIO;
+ if (bgp == NULL)
+ bgp = bgp_get_default();
+
+ if (bgp && bgp->rfapi_cfg) {
+ struct peer *peer;
+ struct peer_group *group;
+ struct listnode *node, *nnode;
+ /* if have configured VPN neighbors, assume running VNC */
+ for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
+ if (group->conf->afc[AFI_IP][SAFI_MPLS_VPN]
+ || group->conf->afc[AFI_IP6][SAFI_MPLS_VPN])
+ return 0;
+ }
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (peer->afc[AFI_IP][SAFI_MPLS_VPN]
+ || peer->afc[AFI_IP6][SAFI_MPLS_VPN])
+ return 0;
+ }
+ }
+ return ENXIO;
}
/***********************************************************************
@@ -295,25 +278,21 @@ DEFUN (vnc_advertise_un_method,
"Method of advertising UN addresses\n"
"Via Tunnel Encap attribute (in VPN SAFI)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "VNC not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "VNC not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- if (!strncmp (argv[2]->arg, "encap-safi", 7))
- {
- bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP;
- }
- else
- {
- bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP;
- }
+ if (!strncmp(argv[2]->arg, "encap-safi", 7)) {
+ bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP;
+ } else {
+ bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/*-------------------------------------------------------------------------
@@ -325,50 +304,41 @@ DEFUN_NOSH (vnc_defaults,
vnc_defaults_cmd,
"vnc defaults", VNC_CONFIG_STR "Configure default NVE group\n")
{
- vty->node = BGP_VNC_DEFAULTS_NODE;
- return CMD_SUCCESS;
+ vty->node = BGP_VNC_DEFAULTS_NODE;
+ return CMD_SUCCESS;
}
-static int
-set_ecom_list (
- struct vty *vty,
- int argc,
- struct cmd_token **argv,
- struct ecommunity **list)
+static int set_ecom_list(struct vty *vty, int argc, struct cmd_token **argv,
+ struct ecommunity **list)
{
- struct ecommunity *ecom = NULL;
- struct ecommunity *ecomadd;
-
- for (; argc; --argc, ++argv)
- {
-
- ecomadd = ecommunity_str2com (argv[0]->arg, ECOMMUNITY_ROUTE_TARGET, 0);
- if (!ecomadd)
- {
- vty_out (vty, "Malformed community-list value\n");
- if (ecom)
- ecommunity_free (&ecom);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (ecom)
- {
- ecommunity_merge (ecom, ecomadd);
- ecommunity_free (&ecomadd);
- }
- else
- {
- ecom = ecomadd;
- }
- }
-
- if (*list)
- {
- ecommunity_free (&*list);
- }
- *list = ecom;
-
- return CMD_SUCCESS;
+ struct ecommunity *ecom = NULL;
+ struct ecommunity *ecomadd;
+
+ for (; argc; --argc, ++argv) {
+
+ ecomadd = ecommunity_str2com(argv[0]->arg,
+ ECOMMUNITY_ROUTE_TARGET, 0);
+ if (!ecomadd) {
+ vty_out(vty, "Malformed community-list value\n");
+ if (ecom)
+ ecommunity_free(&ecom);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (ecom) {
+ ecommunity_merge(ecom, ecomadd);
+ ecommunity_free(&ecomadd);
+ } else {
+ ecom = ecomadd;
+ }
+ }
+
+ if (*list) {
+ ecommunity_free(&*list);
+ }
+ *list = ecom;
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_defaults_rt_import,
@@ -378,9 +348,9 @@ DEFUN (vnc_defaults_rt_import,
"Import filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- return set_ecom_list (vty, argc - 2, argv + 2,
- &bgp->rfapi_cfg->default_rt_import_list);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ return set_ecom_list(vty, argc - 2, argv + 2,
+ &bgp->rfapi_cfg->default_rt_import_list);
}
DEFUN (vnc_defaults_rt_export,
@@ -390,9 +360,9 @@ DEFUN (vnc_defaults_rt_export,
"Export filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- return set_ecom_list (vty, argc - 2, argv + 2,
- &bgp->rfapi_cfg->default_rt_export_list);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ return set_ecom_list(vty, argc - 2, argv + 2,
+ &bgp->rfapi_cfg->default_rt_export_list);
}
DEFUN (vnc_defaults_rt_both,
@@ -402,15 +372,15 @@ DEFUN (vnc_defaults_rt_both,
"Export+import filters\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int rc;
-
- rc = set_ecom_list (vty, argc - 2, argv + 2,
- &bgp->rfapi_cfg->default_rt_import_list);
- if (rc != CMD_SUCCESS)
- return rc;
- return set_ecom_list (vty, argc - 2, argv + 2,
- &bgp->rfapi_cfg->default_rt_export_list);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int rc;
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2,
+ &bgp->rfapi_cfg->default_rt_import_list);
+ if (rc != CMD_SUCCESS)
+ return rc;
+ return set_ecom_list(vty, argc - 2, argv + 2,
+ &bgp->rfapi_cfg->default_rt_export_list);
}
DEFUN (vnc_defaults_rd,
@@ -419,54 +389,48 @@ DEFUN (vnc_defaults_rd,
"Specify default route distinguisher\n"
"Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:vn:<number> )\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int ret;
- struct prefix_rd prd;
-
- if (!strncmp (argv[1]->arg, "auto:vn:", 8))
- {
- /*
- * use AF_UNIX to designate automatically-assigned RD
- * auto:vn:nn where nn is a 2-octet quantity
- */
- char *end = NULL;
- uint32_t value32 = strtoul (argv[1]->arg + 8, &end, 10);
- uint16_t value = value32 & 0xffff;
-
- if (!argv[1]->arg[8] || *end)
- {
- vty_out (vty, "%% Malformed rd\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (value32 > 0xffff)
- {
- vty_out (vty, "%% Malformed rd (must be less than %u\n",
- 0x0ffff);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- memset (&prd, 0, sizeof (prd));
- prd.family = AF_UNIX;
- prd.prefixlen = 64;
- prd.val[0] = (RD_TYPE_IP >> 8) & 0x0ff;
- prd.val[1] = RD_TYPE_IP & 0x0ff;
- prd.val[6] = (value >> 8) & 0x0ff;
- prd.val[7] = value & 0x0ff;
-
- }
- else
- {
-
- ret = str2prefix_rd (argv[1]->arg, &prd);
- if (!ret)
- {
- vty_out (vty, "%% Malformed rd\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- bgp->rfapi_cfg->default_rd = prd;
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int ret;
+ struct prefix_rd prd;
+
+ if (!strncmp(argv[1]->arg, "auto:vn:", 8)) {
+ /*
+ * use AF_UNIX to designate automatically-assigned RD
+ * auto:vn:nn where nn is a 2-octet quantity
+ */
+ char *end = NULL;
+ uint32_t value32 = strtoul(argv[1]->arg + 8, &end, 10);
+ uint16_t value = value32 & 0xffff;
+
+ if (!argv[1]->arg[8] || *end) {
+ vty_out(vty, "%% Malformed rd\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (value32 > 0xffff) {
+ vty_out(vty, "%% Malformed rd (must be less than %u\n",
+ 0x0ffff);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ memset(&prd, 0, sizeof(prd));
+ prd.family = AF_UNIX;
+ prd.prefixlen = 64;
+ prd.val[0] = (RD_TYPE_IP >> 8) & 0x0ff;
+ prd.val[1] = RD_TYPE_IP & 0x0ff;
+ prd.val[6] = (value >> 8) & 0x0ff;
+ prd.val[7] = value & 0x0ff;
+
+ } else {
+
+ ret = str2prefix_rd(argv[1]->arg, &prd);
+ if (!ret) {
+ vty_out(vty, "%% Malformed rd\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ bgp->rfapi_cfg->default_rd = prd;
+ return CMD_SUCCESS;
}
DEFUN (vnc_defaults_l2rd,
@@ -476,36 +440,32 @@ DEFUN (vnc_defaults_l2rd,
"Fixed value 1-255\n"
"use the low-order octet of the NVE's VN address\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- uint8_t value = 0;
-
- if (strmatch(argv[1]->text, "auto-vn"))
- {
- value = 0;
- }
- else
- {
- char *end = NULL;
- unsigned long value_l = strtoul (argv[1]->arg, &end, 10);
-
- value = value_l & 0xff;
- if (!argv[1]->arg[0] || *end)
- {
- vty_out (vty, "%% Malformed l2 nve ID \"%s\"\n",argv[1]->arg);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if ((value_l < 1) || (value_l > 0xff))
- {
- vty_out (vty,
- "%% Malformed l2 nve id (must be greater than 0 and less than %u\n",
- 0x100);
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
- bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_L2RD;
- bgp->rfapi_cfg->default_l2rd = value;
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ uint8_t value = 0;
+
+ if (strmatch(argv[1]->text, "auto-vn")) {
+ value = 0;
+ } else {
+ char *end = NULL;
+ unsigned long value_l = strtoul(argv[1]->arg, &end, 10);
+
+ value = value_l & 0xff;
+ if (!argv[1]->arg[0] || *end) {
+ vty_out(vty, "%% Malformed l2 nve ID \"%s\"\n",
+ argv[1]->arg);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if ((value_l < 1) || (value_l > 0xff)) {
+ vty_out(vty,
+ "%% Malformed l2 nve id (must be greater than 0 and less than %u\n",
+ 0x100);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+ bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_L2RD;
+ bgp->rfapi_cfg->default_l2rd = value;
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_defaults_no_l2rd,
@@ -514,12 +474,12 @@ DEFUN (vnc_defaults_no_l2rd,
NO_STR
"Specify default Local Nve ID value to use in RD for L2 routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp->rfapi_cfg->default_l2rd = 0;
- bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_L2RD;
+ bgp->rfapi_cfg->default_l2rd = 0;
+ bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_L2RD;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (vnc_defaults_responselifetime,
@@ -528,262 +488,240 @@ DEFUN (vnc_defaults_responselifetime,
"Specify default response lifetime\n"
"Response lifetime in seconds\n" "Infinite response lifetime\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- uint32_t rspint;
- struct rfapi *h = NULL;
- struct listnode *hdnode;
- struct rfapi_descriptor *rfd;
-
- h = bgp->rfapi;
- if (!h)
- return CMD_WARNING_CONFIG_FAILED;
-
- if (strmatch(argv[1]->text, "infinite"))
- {
- rspint = RFAPI_INFINITE_LIFETIME;
- }
- else
- {
- rspint = strtoul(argv[1]->arg, NULL, 10);
- if (rspint > INT32_MAX)
- rspint = INT32_MAX; /* is really an int, not an unsigned int */
- }
-
- bgp->rfapi_cfg->default_response_lifetime = rspint;
-
- for (ALL_LIST_ELEMENTS_RO (&h->descriptors, hdnode, rfd))
- if (rfd->rfg && !(rfd->rfg->flags & RFAPI_RFG_RESPONSE_LIFETIME))
- rfd->response_lifetime = rfd->rfg->response_lifetime = rspint;
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ uint32_t rspint;
+ struct rfapi *h = NULL;
+ struct listnode *hdnode;
+ struct rfapi_descriptor *rfd;
+
+ h = bgp->rfapi;
+ if (!h)
+ return CMD_WARNING_CONFIG_FAILED;
+
+ if (strmatch(argv[1]->text, "infinite")) {
+ rspint = RFAPI_INFINITE_LIFETIME;
+ } else {
+ rspint = strtoul(argv[1]->arg, NULL, 10);
+ if (rspint > INT32_MAX)
+ rspint =
+ INT32_MAX; /* is really an int, not an unsigned
+ int */
+ }
+
+ bgp->rfapi_cfg->default_response_lifetime = rspint;
+
+ for (ALL_LIST_ELEMENTS_RO(&h->descriptors, hdnode, rfd))
+ if (rfd->rfg
+ && !(rfd->rfg->flags & RFAPI_RFG_RESPONSE_LIFETIME))
+ rfd->response_lifetime = rfd->rfg->response_lifetime =
+ rspint;
+
+ return CMD_SUCCESS;
}
struct rfapi_nve_group_cfg *
-bgp_rfapi_cfg_match_byname (struct bgp *bgp, const char *name,
- rfapi_group_cfg_type_t type) /* _MAX = any */
+bgp_rfapi_cfg_match_byname(struct bgp *bgp, const char *name,
+ rfapi_group_cfg_type_t type) /* _MAX = any */
{
- struct rfapi_nve_group_cfg *rfg;
- struct listnode *node, *nnode;
-
- for (ALL_LIST_ELEMENTS
- (bgp->rfapi_cfg->nve_groups_sequential, node, nnode, rfg))
- {
- if ((type == RFAPI_GROUP_CFG_MAX || type == rfg->type) &&
- !strcmp (rfg->name, name))
- return rfg;
- }
- return NULL;
+ struct rfapi_nve_group_cfg *rfg;
+ struct listnode *node, *nnode;
+
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->nve_groups_sequential, node,
+ nnode, rfg)) {
+ if ((type == RFAPI_GROUP_CFG_MAX || type == rfg->type)
+ && !strcmp(rfg->name, name))
+ return rfg;
+ }
+ return NULL;
}
static struct rfapi_nve_group_cfg *
-rfapi_group_new (struct bgp *bgp,
- rfapi_group_cfg_type_t type,
- const char *name)
+rfapi_group_new(struct bgp *bgp, rfapi_group_cfg_type_t type, const char *name)
{
- struct rfapi_nve_group_cfg *rfg;
-
- rfg = XCALLOC (MTYPE_RFAPI_GROUP_CFG, sizeof (struct rfapi_nve_group_cfg));
- if (rfg)
- {
- rfg->type = type;
- rfg->name = strdup (name);
- /* add to tail of list */
- listnode_add (bgp->rfapi_cfg->nve_groups_sequential, rfg);
- }
- rfg->label = MPLS_LABEL_ILLEGAL;
- QOBJ_REG (rfg, rfapi_nve_group_cfg);
-
- return rfg;
+ struct rfapi_nve_group_cfg *rfg;
+
+ rfg = XCALLOC(MTYPE_RFAPI_GROUP_CFG,
+ sizeof(struct rfapi_nve_group_cfg));
+ if (rfg) {
+ rfg->type = type;
+ rfg->name = strdup(name);
+ /* add to tail of list */
+ listnode_add(bgp->rfapi_cfg->nve_groups_sequential, rfg);
+ }
+ rfg->label = MPLS_LABEL_ILLEGAL;
+ QOBJ_REG(rfg, rfapi_nve_group_cfg);
+
+ return rfg;
}
-static struct rfapi_l2_group_cfg *
-rfapi_l2_group_lookup_byname (struct bgp *bgp, const char *name)
+static struct rfapi_l2_group_cfg *rfapi_l2_group_lookup_byname(struct bgp *bgp,
+ const char *name)
{
- struct rfapi_l2_group_cfg *rfg;
- struct listnode *node, *nnode;
-
- if (bgp->rfapi_cfg->l2_groups == NULL) /* not the best place for this */
- bgp->rfapi_cfg->l2_groups = list_new ();
-
- for (ALL_LIST_ELEMENTS (bgp->rfapi_cfg->l2_groups, node, nnode, rfg))
- {
- if (!strcmp (rfg->name, name))
- return rfg;
- }
- return NULL;
+ struct rfapi_l2_group_cfg *rfg;
+ struct listnode *node, *nnode;
+
+ if (bgp->rfapi_cfg->l2_groups == NULL) /* not the best place for this */
+ bgp->rfapi_cfg->l2_groups = list_new();
+
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->l2_groups, node, nnode, rfg)) {
+ if (!strcmp(rfg->name, name))
+ return rfg;
+ }
+ return NULL;
}
-static struct rfapi_l2_group_cfg *
-rfapi_l2_group_new ()
+static struct rfapi_l2_group_cfg *rfapi_l2_group_new()
{
- struct rfapi_l2_group_cfg *rfg;
+ struct rfapi_l2_group_cfg *rfg;
- rfg = XCALLOC (MTYPE_RFAPI_L2_CFG, sizeof (struct rfapi_l2_group_cfg));
- QOBJ_REG (rfg, rfapi_l2_group_cfg);
+ rfg = XCALLOC(MTYPE_RFAPI_L2_CFG, sizeof(struct rfapi_l2_group_cfg));
+ QOBJ_REG(rfg, rfapi_l2_group_cfg);
- return rfg;
+ return rfg;
}
-static void
-rfapi_l2_group_del (struct rfapi_l2_group_cfg *rfg)
+static void rfapi_l2_group_del(struct rfapi_l2_group_cfg *rfg)
{
- QOBJ_UNREG (rfg);
- XFREE (MTYPE_RFAPI_L2_CFG, rfg);
+ QOBJ_UNREG(rfg);
+ XFREE(MTYPE_RFAPI_L2_CFG, rfg);
}
-static int
-rfapi_str2route_type (
- const char *l3str,
- const char *pstr,
- afi_t *afi,
- int *type)
+static int rfapi_str2route_type(const char *l3str, const char *pstr, afi_t *afi,
+ int *type)
{
- if (!l3str || !pstr)
- return EINVAL;
-
- if (!strcmp (l3str, "ipv4"))
- {
- *afi = AFI_IP;
- }
- else
- {
- if (!strcmp (l3str, "ipv6"))
- *afi = AFI_IP6;
- else
- return ENOENT;
- }
-
- if (!strcmp (pstr, "connected"))
- *type = ZEBRA_ROUTE_CONNECT;
- if (!strcmp (pstr, "kernel"))
- *type = ZEBRA_ROUTE_KERNEL;
- if (!strcmp (pstr, "static"))
- *type = ZEBRA_ROUTE_STATIC;
- if (!strcmp (pstr, "bgp"))
- *type = ZEBRA_ROUTE_BGP;
- if (!strcmp (pstr, "bgp-direct"))
- *type = ZEBRA_ROUTE_BGP_DIRECT;
- if (!strcmp (pstr, "bgp-direct-to-nve-groups"))
- *type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
-
- if (!strcmp (pstr, "rip"))
- {
- if (*afi == AFI_IP)
- *type = ZEBRA_ROUTE_RIP;
- else
- *type = ZEBRA_ROUTE_RIPNG;
- }
-
- if (!strcmp (pstr, "ripng"))
- {
- if (*afi == AFI_IP)
- return EAFNOSUPPORT;
- *type = ZEBRA_ROUTE_RIPNG;
- }
-
- if (!strcmp (pstr, "ospf"))
- {
- if (*afi == AFI_IP)
- *type = ZEBRA_ROUTE_OSPF;
- else
- *type = ZEBRA_ROUTE_OSPF6;
- }
-
- if (!strcmp (pstr, "ospf6"))
- {
- if (*afi == AFI_IP)
- return EAFNOSUPPORT;
- *type = ZEBRA_ROUTE_OSPF6;
- }
-
- return 0;
+ if (!l3str || !pstr)
+ return EINVAL;
+
+ if (!strcmp(l3str, "ipv4")) {
+ *afi = AFI_IP;
+ } else {
+ if (!strcmp(l3str, "ipv6"))
+ *afi = AFI_IP6;
+ else
+ return ENOENT;
+ }
+
+ if (!strcmp(pstr, "connected"))
+ *type = ZEBRA_ROUTE_CONNECT;
+ if (!strcmp(pstr, "kernel"))
+ *type = ZEBRA_ROUTE_KERNEL;
+ if (!strcmp(pstr, "static"))
+ *type = ZEBRA_ROUTE_STATIC;
+ if (!strcmp(pstr, "bgp"))
+ *type = ZEBRA_ROUTE_BGP;
+ if (!strcmp(pstr, "bgp-direct"))
+ *type = ZEBRA_ROUTE_BGP_DIRECT;
+ if (!strcmp(pstr, "bgp-direct-to-nve-groups"))
+ *type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
+
+ if (!strcmp(pstr, "rip")) {
+ if (*afi == AFI_IP)
+ *type = ZEBRA_ROUTE_RIP;
+ else
+ *type = ZEBRA_ROUTE_RIPNG;
+ }
+
+ if (!strcmp(pstr, "ripng")) {
+ if (*afi == AFI_IP)
+ return EAFNOSUPPORT;
+ *type = ZEBRA_ROUTE_RIPNG;
+ }
+
+ if (!strcmp(pstr, "ospf")) {
+ if (*afi == AFI_IP)
+ *type = ZEBRA_ROUTE_OSPF;
+ else
+ *type = ZEBRA_ROUTE_OSPF6;
+ }
+
+ if (!strcmp(pstr, "ospf6")) {
+ if (*afi == AFI_IP)
+ return EAFNOSUPPORT;
+ *type = ZEBRA_ROUTE_OSPF6;
+ }
+
+ return 0;
}
/*-------------------------------------------------------------------------
* redistribute
*-----------------------------------------------------------------------*/
-#define VNC_REDIST_ENABLE(bgp, afi, type) do { \
- switch (type) { \
- case ZEBRA_ROUTE_BGP_DIRECT: \
- vnc_import_bgp_redist_enable((bgp), (afi)); \
- break; \
- case ZEBRA_ROUTE_BGP_DIRECT_EXT: \
- vnc_import_bgp_exterior_redist_enable((bgp), (afi));\
- break; \
- default: \
- vnc_redistribute_set((bgp), (afi), (type)); \
- break; \
- } \
-} while (0)
-
-#define VNC_REDIST_DISABLE(bgp, afi, type) do { \
- switch (type) { \
- case ZEBRA_ROUTE_BGP_DIRECT: \
- vnc_import_bgp_redist_disable((bgp), (afi)); \
- break; \
- case ZEBRA_ROUTE_BGP_DIRECT_EXT: \
- vnc_import_bgp_exterior_redist_disable((bgp), (afi));\
- break; \
- default: \
- vnc_redistribute_unset((bgp), (afi), (type)); \
- break; \
- } \
-} while (0)
+#define VNC_REDIST_ENABLE(bgp, afi, type) \
+ do { \
+ switch (type) { \
+ case ZEBRA_ROUTE_BGP_DIRECT: \
+ vnc_import_bgp_redist_enable((bgp), (afi)); \
+ break; \
+ case ZEBRA_ROUTE_BGP_DIRECT_EXT: \
+ vnc_import_bgp_exterior_redist_enable((bgp), (afi)); \
+ break; \
+ default: \
+ vnc_redistribute_set((bgp), (afi), (type)); \
+ break; \
+ } \
+ } while (0)
+
+#define VNC_REDIST_DISABLE(bgp, afi, type) \
+ do { \
+ switch (type) { \
+ case ZEBRA_ROUTE_BGP_DIRECT: \
+ vnc_import_bgp_redist_disable((bgp), (afi)); \
+ break; \
+ case ZEBRA_ROUTE_BGP_DIRECT_EXT: \
+ vnc_import_bgp_exterior_redist_disable((bgp), (afi)); \
+ break; \
+ default: \
+ vnc_redistribute_unset((bgp), (afi), (type)); \
+ break; \
+ } \
+ } while (0)
static uint8_t redist_was_enabled[AFI_MAX][ZEBRA_ROUTE_MAX];
-static void
-vnc_redistribute_prechange (struct bgp *bgp)
+static void vnc_redistribute_prechange(struct bgp *bgp)
{
- afi_t afi;
- int type;
-
- vnc_zlog_debug_verbose ("%s: entry", __func__);
- memset (redist_was_enabled, 0, sizeof (redist_was_enabled));
-
- /*
- * Look to see if we have any redistribution enabled. If so, flush
- * the corresponding routes and turn off redistribution temporarily.
- * We need to do it because the RD's used for the redistributed
- * routes depend on the nve group.
- */
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
- for (type = 0; type < ZEBRA_ROUTE_MAX; ++type)
- {
- if (bgp->rfapi_cfg->redist[afi][type])
- {
- redist_was_enabled[afi][type] = 1;
- VNC_REDIST_DISABLE (bgp, afi, type);
- }
- }
- }
- vnc_zlog_debug_verbose ("%s: return", __func__);
+ afi_t afi;
+ int type;
+
+ vnc_zlog_debug_verbose("%s: entry", __func__);
+ memset(redist_was_enabled, 0, sizeof(redist_was_enabled));
+
+ /*
+ * Look to see if we have any redistribution enabled. If so, flush
+ * the corresponding routes and turn off redistribution temporarily.
+ * We need to do it because the RD's used for the redistributed
+ * routes depend on the nve group.
+ */
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+ for (type = 0; type < ZEBRA_ROUTE_MAX; ++type) {
+ if (bgp->rfapi_cfg->redist[afi][type]) {
+ redist_was_enabled[afi][type] = 1;
+ VNC_REDIST_DISABLE(bgp, afi, type);
+ }
+ }
+ }
+ vnc_zlog_debug_verbose("%s: return", __func__);
}
-static void
-vnc_redistribute_postchange (struct bgp *bgp)
+static void vnc_redistribute_postchange(struct bgp *bgp)
{
- afi_t afi;
- int type;
-
- vnc_zlog_debug_verbose ("%s: entry", __func__);
- /*
- * If we turned off redistribution above, turn it back on. Doing so
- * will tell zebra to resend the routes to us
- */
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
- for (type = 0; type < ZEBRA_ROUTE_MAX; ++type)
- {
- if (redist_was_enabled[afi][type])
- {
- VNC_REDIST_ENABLE (bgp, afi, type);
- }
- }
- }
- vnc_zlog_debug_verbose ("%s: return", __func__);
+ afi_t afi;
+ int type;
+
+ vnc_zlog_debug_verbose("%s: entry", __func__);
+ /*
+ * If we turned off redistribution above, turn it back on. Doing so
+ * will tell zebra to resend the routes to us
+ */
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+ for (type = 0; type < ZEBRA_ROUTE_MAX; ++type) {
+ if (redist_was_enabled[afi][type]) {
+ VNC_REDIST_ENABLE(bgp, afi, type);
+ }
+ }
+ }
+ vnc_zlog_debug_verbose("%s: return", __func__);
}
DEFUN (vnc_redistribute_rh_roo_localadmin,
@@ -794,51 +732,46 @@ DEFUN (vnc_redistribute_rh_roo_localadmin,
"Resolve-NVE mode\n"
"Route Origin Extended Community Local Admin Field\n" "Field value\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- uint32_t localadmin;
- char *endptr;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- localadmin = strtoul (argv[4]->arg, &endptr, 0);
- if (!argv[4]->arg[0] || *endptr)
- {
- vty_out (vty, "%% Malformed value\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (localadmin > 0xffff)
- {
- vty_out (vty, "%% Value out of range (0-%d)\n", 0xffff);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (bgp->rfapi_cfg->resolve_nve_roo_local_admin == localadmin)
- return CMD_SUCCESS;
-
- if ((bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS) ==
- BGP_VNC_CONFIG_EXPORT_BGP_MODE_CE)
- {
-
- vnc_export_bgp_prechange (bgp);
- }
- vnc_redistribute_prechange (bgp);
-
- bgp->rfapi_cfg->resolve_nve_roo_local_admin = localadmin;
-
- if ((bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS) ==
- BGP_VNC_CONFIG_EXPORT_BGP_MODE_CE)
- {
-
- vnc_export_bgp_postchange (bgp);
- }
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ uint32_t localadmin;
+ char *endptr;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "RFAPI not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ localadmin = strtoul(argv[4]->arg, &endptr, 0);
+ if (!argv[4]->arg[0] || *endptr) {
+ vty_out(vty, "%% Malformed value\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (localadmin > 0xffff) {
+ vty_out(vty, "%% Value out of range (0-%d)\n", 0xffff);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (bgp->rfapi_cfg->resolve_nve_roo_local_admin == localadmin)
+ return CMD_SUCCESS;
+
+ if ((bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS)
+ == BGP_VNC_CONFIG_EXPORT_BGP_MODE_CE) {
+
+ vnc_export_bgp_prechange(bgp);
+ }
+ vnc_redistribute_prechange(bgp);
+
+ bgp->rfapi_cfg->resolve_nve_roo_local_admin = localadmin;
+
+ if ((bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS)
+ == BGP_VNC_CONFIG_EXPORT_BGP_MODE_CE) {
+
+ vnc_export_bgp_postchange(bgp);
+ }
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
@@ -851,43 +784,40 @@ DEFUN (vnc_redistribute_mode,
"Based on redistribute nve-group\n"
"Unmodified\n" "Resolve each nexthop to connected NVEs\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- vnc_redist_mode_t newmode;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
-
- switch (argv[3]->arg[0])
- {
- case 'n':
- newmode = VNC_REDIST_MODE_RFG;
- break;
-
- case 'p':
- newmode = VNC_REDIST_MODE_PLAIN;
- break;
-
- case 'r':
- newmode = VNC_REDIST_MODE_RESOLVE_NVE;
- break;
-
- default:
- vty_out (vty, "unknown redistribute mode\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (newmode != bgp->rfapi_cfg->redist_mode)
- {
- vnc_redistribute_prechange (bgp);
- bgp->rfapi_cfg->redist_mode = newmode;
- vnc_redistribute_postchange (bgp);
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ vnc_redist_mode_t newmode;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "RFAPI not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+
+ switch (argv[3]->arg[0]) {
+ case 'n':
+ newmode = VNC_REDIST_MODE_RFG;
+ break;
+
+ case 'p':
+ newmode = VNC_REDIST_MODE_PLAIN;
+ break;
+
+ case 'r':
+ newmode = VNC_REDIST_MODE_RESOLVE_NVE;
+ break;
+
+ default:
+ vty_out(vty, "unknown redistribute mode\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (newmode != bgp->rfapi_cfg->redist_mode) {
+ vnc_redistribute_prechange(bgp);
+ bgp->rfapi_cfg->redist_mode = newmode;
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_redistribute_protocol,
@@ -905,36 +835,33 @@ DEFUN (vnc_redistribute_protocol,
"From Open Shortest Path First (OSPF)\n"
"From Routing Information Protocol (RIP)\n" "From Static routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int type = ZEBRA_ROUTE_MAX; /* init to bogus value */
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (rfapi_str2route_type (argv[2]->arg, argv[3]->arg, &afi, &type))
- {
- vty_out (vty, "%% Invalid route type\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (type == ZEBRA_ROUTE_BGP_DIRECT_EXT)
- {
- if (bgp->rfapi_cfg->redist_bgp_exterior_view_name)
- {
- VNC_REDIST_DISABLE (bgp, afi, type); /* disabled view implicitly */
- free (bgp->rfapi_cfg->redist_bgp_exterior_view_name);
- bgp->rfapi_cfg->redist_bgp_exterior_view_name = NULL;
- }
- bgp->rfapi_cfg->redist_bgp_exterior_view = bgp;
- }
-
- VNC_REDIST_ENABLE (bgp, afi, type);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int type = ZEBRA_ROUTE_MAX; /* init to bogus value */
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "RFAPI not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (rfapi_str2route_type(argv[2]->arg, argv[3]->arg, &afi, &type)) {
+ vty_out(vty, "%% Invalid route type\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (type == ZEBRA_ROUTE_BGP_DIRECT_EXT) {
+ if (bgp->rfapi_cfg->redist_bgp_exterior_view_name) {
+ VNC_REDIST_DISABLE(bgp, afi,
+ type); /* disabled view implicitly */
+ free(bgp->rfapi_cfg->redist_bgp_exterior_view_name);
+ bgp->rfapi_cfg->redist_bgp_exterior_view_name = NULL;
+ }
+ bgp->rfapi_cfg->redist_bgp_exterior_view = bgp;
+ }
+
+ VNC_REDIST_ENABLE(bgp, afi, type);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_no_redistribute_protocol,
@@ -953,35 +880,31 @@ DEFUN (vnc_no_redistribute_protocol,
"From Open Shortest Path First (OSPF)\n"
"From Routing Information Protocol (RIP)\n" "From Static routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int type;
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (rfapi_str2route_type (argv[3]->arg, argv[4]->arg, &afi, &type))
- {
- vty_out (vty, "%% Invalid route type\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- VNC_REDIST_DISABLE (bgp, afi, type);
-
- if (type == ZEBRA_ROUTE_BGP_DIRECT_EXT)
- {
- if (bgp->rfapi_cfg->redist_bgp_exterior_view_name)
- {
- free (bgp->rfapi_cfg->redist_bgp_exterior_view_name);
- bgp->rfapi_cfg->redist_bgp_exterior_view_name = NULL;
- }
- bgp->rfapi_cfg->redist_bgp_exterior_view = NULL;
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int type;
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "RFAPI not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (rfapi_str2route_type(argv[3]->arg, argv[4]->arg, &afi, &type)) {
+ vty_out(vty, "%% Invalid route type\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ VNC_REDIST_DISABLE(bgp, afi, type);
+
+ if (type == ZEBRA_ROUTE_BGP_DIRECT_EXT) {
+ if (bgp->rfapi_cfg->redist_bgp_exterior_view_name) {
+ free(bgp->rfapi_cfg->redist_bgp_exterior_view_name);
+ bgp->rfapi_cfg->redist_bgp_exterior_view_name = NULL;
+ }
+ bgp->rfapi_cfg->redist_bgp_exterior_view = NULL;
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_redistribute_bgp_exterior,
@@ -994,31 +917,31 @@ DEFUN (vnc_redistribute_bgp_exterior,
"From BGP without Zebra, only to configured NVE groups\n"
"From BGP view\n" "BGP view name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int type;
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "RFAPI not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (rfapi_str2route_type (argv[2]->arg, "bgp-direct-to-nve-groups", &afi, &type))
- {
- vty_out (vty, "%% Invalid route type\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (bgp->rfapi_cfg->redist_bgp_exterior_view_name)
- free (bgp->rfapi_cfg->redist_bgp_exterior_view_name);
- bgp->rfapi_cfg->redist_bgp_exterior_view_name = strdup (argv[5]->arg);
- /* could be NULL if name is not defined yet */
- bgp->rfapi_cfg->redist_bgp_exterior_view = bgp_lookup_by_name (argv[5]->arg);
-
- VNC_REDIST_ENABLE (bgp, afi, type);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int type;
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "RFAPI not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (rfapi_str2route_type(argv[2]->arg, "bgp-direct-to-nve-groups", &afi,
+ &type)) {
+ vty_out(vty, "%% Invalid route type\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (bgp->rfapi_cfg->redist_bgp_exterior_view_name)
+ free(bgp->rfapi_cfg->redist_bgp_exterior_view_name);
+ bgp->rfapi_cfg->redist_bgp_exterior_view_name = strdup(argv[5]->arg);
+ /* could be NULL if name is not defined yet */
+ bgp->rfapi_cfg->redist_bgp_exterior_view =
+ bgp_lookup_by_name(argv[5]->arg);
+
+ VNC_REDIST_ENABLE(bgp, afi, type);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_redistribute_nvegroup,
@@ -1028,29 +951,28 @@ DEFUN (vnc_redistribute_nvegroup,
"Assign a NVE group to routes redistributed from another routing protocol\n"
"NVE group\n" "Group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- vnc_redistribute_prechange (bgp);
+ vnc_redistribute_prechange(bgp);
- /*
- * OK if nve group doesn't exist yet; we'll set the pointer
- * when the group is defined later
- */
- bgp->rfapi_cfg->rfg_redist = bgp_rfapi_cfg_match_byname (bgp, argv[3]->arg,
- RFAPI_GROUP_CFG_NVE);
- if (bgp->rfapi_cfg->rfg_redist_name)
- free (bgp->rfapi_cfg->rfg_redist_name);
- bgp->rfapi_cfg->rfg_redist_name = strdup (argv[3]->arg);
+ /*
+ * OK if nve group doesn't exist yet; we'll set the pointer
+ * when the group is defined later
+ */
+ bgp->rfapi_cfg->rfg_redist = bgp_rfapi_cfg_match_byname(
+ bgp, argv[3]->arg, RFAPI_GROUP_CFG_NVE);
+ if (bgp->rfapi_cfg->rfg_redist_name)
+ free(bgp->rfapi_cfg->rfg_redist_name);
+ bgp->rfapi_cfg->rfg_redist_name = strdup(argv[3]->arg);
- vnc_redistribute_postchange (bgp);
+ vnc_redistribute_postchange(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (vnc_redistribute_no_nvegroup,
@@ -1061,24 +983,23 @@ DEFUN (vnc_redistribute_no_nvegroup,
"Redistribute from other protocol\n"
"Assign a NVE group to routes redistributed from another routing protocol\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- vnc_redistribute_prechange (bgp);
+ vnc_redistribute_prechange(bgp);
- bgp->rfapi_cfg->rfg_redist = NULL;
- if (bgp->rfapi_cfg->rfg_redist_name)
- free (bgp->rfapi_cfg->rfg_redist_name);
- bgp->rfapi_cfg->rfg_redist_name = NULL;
+ bgp->rfapi_cfg->rfg_redist = NULL;
+ if (bgp->rfapi_cfg->rfg_redist_name)
+ free(bgp->rfapi_cfg->rfg_redist_name);
+ bgp->rfapi_cfg->rfg_redist_name = NULL;
- vnc_redistribute_postchange (bgp);
+ vnc_redistribute_postchange(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1091,28 +1012,25 @@ DEFUN (vnc_redistribute_lifetime,
"lifetime value (32 bit)\n"
"Allow lifetime to never expire\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- vnc_redistribute_prechange (bgp);
+ vnc_redistribute_prechange(bgp);
- if (strmatch(argv[3]->text, "infinite"))
- {
- bgp->rfapi_cfg->redist_lifetime = RFAPI_INFINITE_LIFETIME;
- }
- else
- {
- bgp->rfapi_cfg->redist_lifetime = strtoul(argv[3]->arg, NULL, 10);
- }
+ if (strmatch(argv[3]->text, "infinite")) {
+ bgp->rfapi_cfg->redist_lifetime = RFAPI_INFINITE_LIFETIME;
+ } else {
+ bgp->rfapi_cfg->redist_lifetime =
+ strtoul(argv[3]->arg, NULL, 10);
+ }
- vnc_redistribute_postchange (bgp);
+ vnc_redistribute_postchange(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/*-- redist policy, non-nvegroup start --*/
@@ -1128,45 +1046,38 @@ DEFUN (vnc_redist_bgpdirect_no_prefixlist,
"IPv4 routes\n"
"IPv6 routes\n" "Prefix-list for filtering redistributed routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- afi_t afi;
- struct rfapi_cfg *hc;
- uint8_t route_type = 0;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[3]->text, "bgp-direct"))
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT;
- }
- else
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
- }
-
- if (strmatch(argv[4]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (hc->plist_redist_name[route_type][afi])
- free (hc->plist_redist_name[route_type][afi]);
- hc->plist_redist_name[route_type][afi] = NULL;
- hc->plist_redist[route_type][afi] = NULL;
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ afi_t afi;
+ struct rfapi_cfg *hc;
+ uint8_t route_type = 0;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[3]->text, "bgp-direct")) {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT;
+ } else {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
+ }
+
+ if (strmatch(argv[4]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (hc->plist_redist_name[route_type][afi])
+ free(hc->plist_redist_name[route_type][afi]);
+ hc->plist_redist_name[route_type][afi] = NULL;
+ hc->plist_redist[route_type][afi] = NULL;
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_redist_bgpdirect_prefixlist,
@@ -1181,45 +1092,39 @@ DEFUN (vnc_redist_bgpdirect_prefixlist,
"Prefix-list for filtering redistributed routes\n"
"prefix list name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
- afi_t afi;
- uint8_t route_type = 0;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[2]->text, "bgp-direct"))
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT;
- }
- else
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
- }
-
- if (strmatch(argv[3]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (hc->plist_redist_name[route_type][afi])
- free (hc->plist_redist_name[route_type][afi]);
- hc->plist_redist_name[route_type][afi] = strdup (argv[5]->arg);
- hc->plist_redist[route_type][afi] = prefix_list_lookup (afi, argv[5]->arg);
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+ afi_t afi;
+ uint8_t route_type = 0;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[2]->text, "bgp-direct")) {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT;
+ } else {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
+ }
+
+ if (strmatch(argv[3]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (hc->plist_redist_name[route_type][afi])
+ free(hc->plist_redist_name[route_type][afi]);
+ hc->plist_redist_name[route_type][afi] = strdup(argv[5]->arg);
+ hc->plist_redist[route_type][afi] =
+ prefix_list_lookup(afi, argv[5]->arg);
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_redist_bgpdirect_no_routemap,
@@ -1232,35 +1137,31 @@ DEFUN (vnc_redist_bgpdirect_no_routemap,
"Redistribute from BGP without Zebra, only to configured NVE groups\n"
"Route-map for filtering redistributed routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
- uint8_t route_type = 0;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[3]->text, "bgp-direct"))
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT;
- }
- else
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (hc->routemap_redist_name[route_type])
- free (hc->routemap_redist_name[route_type]);
- hc->routemap_redist_name[route_type] = NULL;
- hc->routemap_redist[route_type] = NULL;
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+ uint8_t route_type = 0;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[3]->text, "bgp-direct")) {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT;
+ } else {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (hc->routemap_redist_name[route_type])
+ free(hc->routemap_redist_name[route_type]);
+ hc->routemap_redist_name[route_type] = NULL;
+ hc->routemap_redist[route_type] = NULL;
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_redist_bgpdirect_routemap,
@@ -1272,35 +1173,32 @@ DEFUN (vnc_redist_bgpdirect_routemap,
"Redistribute from BGP without Zebra, only to configured NVE groups\n"
"Route-map for filtering exported routes\n" "route map name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
- uint8_t route_type = 0;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[2]->text, "bgp-direct"))
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT;
- }
- else
- {
- route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (hc->routemap_redist_name[route_type])
- free (hc->routemap_redist_name[route_type]);
- hc->routemap_redist_name[route_type] = strdup (argv[4]->arg);
- hc->routemap_redist[route_type] = route_map_lookup_by_name (argv[4]->arg);
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+ uint8_t route_type = 0;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[2]->text, "bgp-direct")) {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT;
+ } else {
+ route_type = ZEBRA_ROUTE_BGP_DIRECT_EXT;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (hc->routemap_redist_name[route_type])
+ free(hc->routemap_redist_name[route_type]);
+ hc->routemap_redist_name[route_type] = strdup(argv[4]->arg);
+ hc->routemap_redist[route_type] =
+ route_map_lookup_by_name(argv[4]->arg);
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
/*-- redist policy, non-nvegroup end --*/
@@ -1317,43 +1215,38 @@ DEFUN (vnc_nve_group_redist_bgpdirect_no_prefixlist,
"IPv6 routes\n"
"Prefix-list for filtering redistributed routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg)
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[3]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
- free (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
- rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi] = NULL;
- rfg->plist_redist[ZEBRA_ROUTE_BGP_DIRECT][afi] = NULL;
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg)
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[3]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
+ free(rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
+ rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi] = NULL;
+ rfg->plist_redist[ZEBRA_ROUTE_BGP_DIRECT][afi] = NULL;
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_redist_bgpdirect_prefixlist,
@@ -1366,44 +1259,40 @@ DEFUN (vnc_nve_group_redist_bgpdirect_prefixlist,
"Prefix-list for filtering redistributed routes\n"
"prefix list name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[2]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
- free (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
- rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi] = strdup (argv[4]->arg);
- rfg->plist_redist[ZEBRA_ROUTE_BGP_DIRECT][afi] =
- prefix_list_lookup (afi, argv[4]->arg);
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[2]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
+ free(rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
+ rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi] =
+ strdup(argv[4]->arg);
+ rfg->plist_redist[ZEBRA_ROUTE_BGP_DIRECT][afi] =
+ prefix_list_lookup(afi, argv[4]->arg);
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_redist_bgpdirect_no_routemap,
@@ -1414,33 +1303,31 @@ DEFUN (vnc_nve_group_redist_bgpdirect_no_routemap,
"Redistribute from BGP directly\n"
"Route-map for filtering redistributed routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- vnc_redistribute_prechange (bgp);
+ vnc_redistribute_prechange(bgp);
- if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
- free (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
- rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT] = NULL;
- rfg->routemap_redist[ZEBRA_ROUTE_BGP_DIRECT] = NULL;
+ if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
+ free(rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
+ rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT] = NULL;
+ rfg->routemap_redist[ZEBRA_ROUTE_BGP_DIRECT] = NULL;
- vnc_redistribute_postchange (bgp);
+ vnc_redistribute_postchange(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_redist_bgpdirect_routemap,
@@ -1450,34 +1337,33 @@ DEFUN (vnc_nve_group_redist_bgpdirect_routemap,
"Redistribute from BGP directly\n"
"Route-map for filtering exported routes\n" "route map name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vnc_redistribute_prechange (bgp);
-
- if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
- free (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
- rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT] = strdup (argv[3]->arg);
- rfg->routemap_redist[ZEBRA_ROUTE_BGP_DIRECT] =
- route_map_lookup_by_name (argv[3]->arg);
-
- vnc_redistribute_postchange (bgp);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ vnc_redistribute_prechange(bgp);
+
+ if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
+ free(rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
+ rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT] =
+ strdup(argv[3]->arg);
+ rfg->routemap_redist[ZEBRA_ROUTE_BGP_DIRECT] =
+ route_map_lookup_by_name(argv[3]->arg);
+
+ vnc_redistribute_postchange(bgp);
+
+ return CMD_SUCCESS;
}
/*-- redist policy, nvegroup end --*/
@@ -1498,116 +1384,106 @@ DEFUN (vnc_export_mode,
"Export routes with NVE connected router next-hops\n"
"Disable export\n" "Export routes with registering NVE as next-hop\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- uint32_t oldmode = 0;
- uint32_t newmode = 0;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "VNC not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[2]->arg[0] == 'b')
- {
- oldmode = bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS;
- switch (argv[4]->arg[0])
- {
- case 'g':
- newmode = BGP_VNC_CONFIG_EXPORT_BGP_MODE_GRP;
- break;
- case 'c':
- newmode = BGP_VNC_CONFIG_EXPORT_BGP_MODE_CE;
- break;
- case 'n':
- newmode = 0;
- break;
- case 'r':
- newmode = BGP_VNC_CONFIG_EXPORT_BGP_MODE_RH;
- break;
- default:
- vty_out (vty, "Invalid mode specified\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (newmode == oldmode)
- {
- vty_out (vty, "Mode unchanged\n");
- return CMD_SUCCESS;
- }
-
- vnc_export_bgp_prechange (bgp);
-
- bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS;
- bgp->rfapi_cfg->flags |= newmode;
-
- vnc_export_bgp_postchange (bgp);
-
-
- }
- else
- {
- /*
- * export to zebra with RH mode is not yet implemented
- */
- vty_out (vty,"Changing modes for zebra export not implemented yet\n");
- return CMD_WARNING_CONFIG_FAILED;
-
- oldmode = bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_BITS;
- bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_BITS;
- switch (argv[4]->arg[0])
- {
- case 'g':
- if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH)
- {
- /* TBD */
- }
- bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP;
- if (oldmode != BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP)
- {
- /* TBD */
- }
- break;
- case 'n':
- if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH)
- {
- /* TBD */
- }
- if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP)
- {
- /* TBD */
- }
- break;
- case 'r':
- if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP)
- {
- /* TBD */
- }
- bgp->rfapi_cfg->flags |= BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH;
- if (oldmode != BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH)
- {
- /* TBD */
- }
- break;
- default:
- vty_out (vty, "Invalid mode\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ uint32_t oldmode = 0;
+ uint32_t newmode = 0;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "VNC not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[2]->arg[0] == 'b') {
+ oldmode = bgp->rfapi_cfg->flags
+ & BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS;
+ switch (argv[4]->arg[0]) {
+ case 'g':
+ newmode = BGP_VNC_CONFIG_EXPORT_BGP_MODE_GRP;
+ break;
+ case 'c':
+ newmode = BGP_VNC_CONFIG_EXPORT_BGP_MODE_CE;
+ break;
+ case 'n':
+ newmode = 0;
+ break;
+ case 'r':
+ newmode = BGP_VNC_CONFIG_EXPORT_BGP_MODE_RH;
+ break;
+ default:
+ vty_out(vty, "Invalid mode specified\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (newmode == oldmode) {
+ vty_out(vty, "Mode unchanged\n");
+ return CMD_SUCCESS;
+ }
+
+ vnc_export_bgp_prechange(bgp);
+
+ bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_EXPORT_BGP_MODE_BITS;
+ bgp->rfapi_cfg->flags |= newmode;
+
+ vnc_export_bgp_postchange(bgp);
+
+
+ } else {
+ /*
+ * export to zebra with RH mode is not yet implemented
+ */
+ vty_out(vty,
+ "Changing modes for zebra export not implemented yet\n");
+ return CMD_WARNING_CONFIG_FAILED;
+
+ oldmode = bgp->rfapi_cfg->flags
+ & BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_BITS;
+ bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_BITS;
+ switch (argv[4]->arg[0]) {
+ case 'g':
+ if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH) {
+ /* TBD */
+ }
+ bgp->rfapi_cfg->flags |=
+ BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP;
+ if (oldmode != BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP) {
+ /* TBD */
+ }
+ break;
+ case 'n':
+ if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH) {
+ /* TBD */
+ }
+ if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP) {
+ /* TBD */
+ }
+ break;
+ case 'r':
+ if (oldmode == BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_GRP) {
+ /* TBD */
+ }
+ bgp->rfapi_cfg->flags |=
+ BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH;
+ if (oldmode != BGP_VNC_CONFIG_EXPORT_ZEBRA_MODE_RH) {
+ /* TBD */
+ }
+ break;
+ default:
+ vty_out(vty, "Invalid mode\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ return CMD_SUCCESS;
}
-static struct rfapi_rfg_name *
-rfgn_new ()
+static struct rfapi_rfg_name *rfgn_new()
{
- return XCALLOC (MTYPE_RFAPI_RFG_NAME, sizeof (struct rfapi_rfg_name));
+ return XCALLOC(MTYPE_RFAPI_RFG_NAME, sizeof(struct rfapi_rfg_name));
}
-static void
-rfgn_free (struct rfapi_rfg_name *rfgn)
+static void rfgn_free(struct rfapi_rfg_name *rfgn)
{
- XFREE (MTYPE_RFAPI_RFG_NAME, rfgn);
+ XFREE(MTYPE_RFAPI_RFG_NAME, rfgn);
}
DEFUN (vnc_export_nvegroup,
@@ -1620,91 +1496,86 @@ DEFUN (vnc_export_nvegroup,
"NVE group, used in 'group-nve' export mode\n"
"NVE group\n" "Group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_nve_group_cfg *rfg_new;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rfg_new = bgp_rfapi_cfg_match_byname (bgp, argv[5]->arg, RFAPI_GROUP_CFG_NVE);
-
- if (argv[2]->arg[0] == 'b')
- {
-
- struct listnode *node;
- struct rfapi_rfg_name *rfgn;
-
- /*
- * Set group for export to BGP Direct
- */
-
- /* see if group is already included in export list */
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, rfgn))
- {
-
- if (!strcmp (rfgn->name, argv[5]->arg))
- {
- /* already in the list: we're done */
- return CMD_SUCCESS;
- }
- }
-
- rfgn = rfgn_new ();
- rfgn->name = strdup (argv[5]->arg);
- rfgn->rfg = rfg_new; /* OK if not set yet */
-
- listnode_add (bgp->rfapi_cfg->rfg_export_direct_bgp_l, rfgn);
-
- vnc_zlog_debug_verbose ("%s: testing rfg_new", __func__);
- if (rfg_new)
- {
- vnc_zlog_debug_verbose ("%s: testing bgp grp mode enabled", __func__);
- if (VNC_EXPORT_BGP_GRP_ENABLED (bgp->rfapi_cfg))
- vnc_zlog_debug_verbose ("%s: calling vnc_direct_bgp_add_group", __func__);
- vnc_direct_bgp_add_group (bgp, rfg_new);
- }
-
- }
- else
- {
-
- struct listnode *node;
- struct rfapi_rfg_name *rfgn;
-
- /*
- * Set group for export to Zebra
- */
-
- /* see if group is already included in export list */
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_zebra_l,
- node, rfgn))
- {
-
- if (!strcmp (rfgn->name, argv[5]->arg))
- {
- /* already in the list: we're done */
- return CMD_SUCCESS;
- }
- }
-
- rfgn = rfgn_new ();
- rfgn->name = strdup (argv[5]->arg);
- rfgn->rfg = rfg_new; /* OK if not set yet */
-
- listnode_add (bgp->rfapi_cfg->rfg_export_zebra_l, rfgn);
-
- if (rfg_new)
- {
- if (VNC_EXPORT_ZEBRA_GRP_ENABLED (bgp->rfapi_cfg))
- vnc_zebra_add_group (bgp, rfg_new);
- }
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_nve_group_cfg *rfg_new;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rfg_new = bgp_rfapi_cfg_match_byname(bgp, argv[5]->arg,
+ RFAPI_GROUP_CFG_NVE);
+
+ if (argv[2]->arg[0] == 'b') {
+
+ struct listnode *node;
+ struct rfapi_rfg_name *rfgn;
+
+ /*
+ * Set group for export to BGP Direct
+ */
+
+ /* see if group is already included in export list */
+ for (ALL_LIST_ELEMENTS_RO(
+ bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
+ rfgn)) {
+
+ if (!strcmp(rfgn->name, argv[5]->arg)) {
+ /* already in the list: we're done */
+ return CMD_SUCCESS;
+ }
+ }
+
+ rfgn = rfgn_new();
+ rfgn->name = strdup(argv[5]->arg);
+ rfgn->rfg = rfg_new; /* OK if not set yet */
+
+ listnode_add(bgp->rfapi_cfg->rfg_export_direct_bgp_l, rfgn);
+
+ vnc_zlog_debug_verbose("%s: testing rfg_new", __func__);
+ if (rfg_new) {
+ vnc_zlog_debug_verbose(
+ "%s: testing bgp grp mode enabled", __func__);
+ if (VNC_EXPORT_BGP_GRP_ENABLED(bgp->rfapi_cfg))
+ vnc_zlog_debug_verbose(
+ "%s: calling vnc_direct_bgp_add_group",
+ __func__);
+ vnc_direct_bgp_add_group(bgp, rfg_new);
+ }
+
+ } else {
+
+ struct listnode *node;
+ struct rfapi_rfg_name *rfgn;
+
+ /*
+ * Set group for export to Zebra
+ */
+
+ /* see if group is already included in export list */
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l,
+ node, rfgn)) {
+
+ if (!strcmp(rfgn->name, argv[5]->arg)) {
+ /* already in the list: we're done */
+ return CMD_SUCCESS;
+ }
+ }
+
+ rfgn = rfgn_new();
+ rfgn->name = strdup(argv[5]->arg);
+ rfgn->rfg = rfg_new; /* OK if not set yet */
+
+ listnode_add(bgp->rfapi_cfg->rfg_export_zebra_l, rfgn);
+
+ if (rfg_new) {
+ if (VNC_EXPORT_ZEBRA_GRP_ENABLED(bgp->rfapi_cfg))
+ vnc_zebra_add_group(bgp, rfg_new);
+ }
+ }
+
+ return CMD_SUCCESS;
}
/*
@@ -1721,54 +1592,52 @@ DEFUN (vnc_no_export_nvegroup,
"NVE group, used in 'group-nve' export mode\n"
"Disable export of VNC routes\n" "NVE group\n" "Group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct listnode *node, *nnode;
- struct rfapi_rfg_name *rfgn;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[2]->arg[0] == 'b')
- {
- for (ALL_LIST_ELEMENTS (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, nnode, rfgn))
- {
-
- if (rfgn->name && !strcmp (rfgn->name, argv[6]->arg))
- {
- vnc_zlog_debug_verbose ("%s: matched \"%s\"", __func__, rfgn->name);
- if (rfgn->rfg)
- vnc_direct_bgp_del_group (bgp, rfgn->rfg);
- free (rfgn->name);
- list_delete_node (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node);
- rfgn_free (rfgn);
- break;
- }
- }
- }
- else
- {
- for (ALL_LIST_ELEMENTS (bgp->rfapi_cfg->rfg_export_zebra_l,
- node, nnode, rfgn))
- {
-
- vnc_zlog_debug_verbose ("does rfg \"%s\" match?", rfgn->name);
- if (rfgn->name && !strcmp (rfgn->name, argv[6]->arg))
- {
- if (rfgn->rfg)
- vnc_zebra_del_group (bgp, rfgn->rfg);
- free (rfgn->name);
- list_delete_node (bgp->rfapi_cfg->rfg_export_zebra_l, node);
- rfgn_free (rfgn);
- break;
- }
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct listnode *node, *nnode;
+ struct rfapi_rfg_name *rfgn;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[2]->arg[0] == 'b') {
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->rfg_export_direct_bgp_l,
+ node, nnode, rfgn)) {
+
+ if (rfgn->name && !strcmp(rfgn->name, argv[6]->arg)) {
+ vnc_zlog_debug_verbose("%s: matched \"%s\"",
+ __func__, rfgn->name);
+ if (rfgn->rfg)
+ vnc_direct_bgp_del_group(bgp,
+ rfgn->rfg);
+ free(rfgn->name);
+ list_delete_node(
+ bgp->rfapi_cfg->rfg_export_direct_bgp_l,
+ node);
+ rfgn_free(rfgn);
+ break;
+ }
+ }
+ } else {
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ nnode, rfgn)) {
+
+ vnc_zlog_debug_verbose("does rfg \"%s\" match?",
+ rfgn->name);
+ if (rfgn->name && !strcmp(rfgn->name, argv[6]->arg)) {
+ if (rfgn->rfg)
+ vnc_zebra_del_group(bgp, rfgn->rfg);
+ free(rfgn->name);
+ list_delete_node(
+ bgp->rfapi_cfg->rfg_export_zebra_l,
+ node);
+ rfgn_free(rfgn);
+ break;
+ }
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_export_no_prefixlist,
@@ -1782,63 +1651,53 @@ DEFUN (vnc_nve_group_export_no_prefixlist,
"IPv6 routes\n"
"Prefix-list for filtering exported routes\n" "prefix list name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[3]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- if (argv[2]->arg[0] == 'b')
- {
- if (((argc > 5)
- && strmatch(argv[5]->text, rfg->plist_export_bgp_name[afi]))
- || (argc <= 5))
- {
-
- if (rfg->plist_export_bgp_name[afi])
- free (rfg->plist_export_bgp_name[afi]);
- rfg->plist_export_bgp_name[afi] = NULL;
- rfg->plist_export_bgp[afi] = NULL;
-
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, afi);
- }
- }
- else
- {
- if (((argc > 5)
- && strmatch(argv[5]->text, rfg->plist_export_zebra_name[afi]))
- || (argc <= 5))
- {
- if (rfg->plist_export_zebra_name[afi])
- free (rfg->plist_export_zebra_name[afi]);
- rfg->plist_export_zebra_name[afi] = NULL;
- rfg->plist_export_zebra[afi] = NULL;
-
- vnc_zebra_reexport_group_afi (bgp, rfg, afi);
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[3]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ if (argv[2]->arg[0] == 'b') {
+ if (((argc > 5) && strmatch(argv[5]->text,
+ rfg->plist_export_bgp_name[afi]))
+ || (argc <= 5)) {
+
+ if (rfg->plist_export_bgp_name[afi])
+ free(rfg->plist_export_bgp_name[afi]);
+ rfg->plist_export_bgp_name[afi] = NULL;
+ rfg->plist_export_bgp[afi] = NULL;
+
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, afi);
+ }
+ } else {
+ if (((argc > 5) && strmatch(argv[5]->text,
+ rfg->plist_export_zebra_name[afi]))
+ || (argc <= 5)) {
+ if (rfg->plist_export_zebra_name[afi])
+ free(rfg->plist_export_zebra_name[afi]);
+ rfg->plist_export_zebra_name[afi] = NULL;
+ rfg->plist_export_zebra[afi] = NULL;
+
+ vnc_zebra_reexport_group_afi(bgp, rfg, afi);
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_export_prefixlist,
@@ -1851,53 +1710,47 @@ DEFUN (vnc_nve_group_export_prefixlist,
"IPv6 routes\n"
"Prefix-list for filtering exported routes\n" "prefix list name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- afi_t afi;
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[2]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- if (argv[1]->arg[0] == 'b')
- {
- if (rfg->plist_export_bgp_name[afi])
- free (rfg->plist_export_bgp_name[afi]);
- rfg->plist_export_bgp_name[afi] = strdup (argv[4]->arg);
- rfg->plist_export_bgp[afi] = prefix_list_lookup (afi, argv[4]->arg);
-
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, afi);
-
- }
- else
- {
- if (rfg->plist_export_zebra_name[afi])
- free (rfg->plist_export_zebra_name[afi]);
- rfg->plist_export_zebra_name[afi] = strdup (argv[4]->arg);
- rfg->plist_export_zebra[afi] = prefix_list_lookup (afi, argv[4]->arg);
-
- vnc_zebra_reexport_group_afi (bgp, rfg, afi);
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ afi_t afi;
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[2]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ if (argv[1]->arg[0] == 'b') {
+ if (rfg->plist_export_bgp_name[afi])
+ free(rfg->plist_export_bgp_name[afi]);
+ rfg->plist_export_bgp_name[afi] = strdup(argv[4]->arg);
+ rfg->plist_export_bgp[afi] =
+ prefix_list_lookup(afi, argv[4]->arg);
+
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, afi);
+
+ } else {
+ if (rfg->plist_export_zebra_name[afi])
+ free(rfg->plist_export_zebra_name[afi]);
+ rfg->plist_export_zebra_name[afi] = strdup(argv[4]->arg);
+ rfg->plist_export_zebra[afi] =
+ prefix_list_lookup(afi, argv[4]->arg);
+
+ vnc_zebra_reexport_group_afi(bgp, rfg, afi);
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_export_no_routemap,
@@ -1909,55 +1762,48 @@ DEFUN (vnc_nve_group_export_no_routemap,
"Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "route map name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[2]->arg[0] == 'b')
- {
- if (((argc > 4)
- && strmatch(argv[4]->text, rfg->routemap_export_bgp_name))
- || (argc <= 4))
- {
-
- if (rfg->routemap_export_bgp_name)
- free (rfg->routemap_export_bgp_name);
- rfg->routemap_export_bgp_name = NULL;
- rfg->routemap_export_bgp = NULL;
-
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, AFI_IP);
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, AFI_IP6);
- }
- }
- else
- {
- if (((argc > 4)
- && strmatch(argv[4]->text, rfg->routemap_export_zebra_name))
- || (argc <= 4))
- {
- if (rfg->routemap_export_zebra_name)
- free (rfg->routemap_export_zebra_name);
- rfg->routemap_export_zebra_name = NULL;
- rfg->routemap_export_zebra = NULL;
-
- vnc_zebra_reexport_group_afi (bgp, rfg, AFI_IP);
- vnc_zebra_reexport_group_afi (bgp, rfg, AFI_IP6);
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[2]->arg[0] == 'b') {
+ if (((argc > 4)
+ && strmatch(argv[4]->text, rfg->routemap_export_bgp_name))
+ || (argc <= 4)) {
+
+ if (rfg->routemap_export_bgp_name)
+ free(rfg->routemap_export_bgp_name);
+ rfg->routemap_export_bgp_name = NULL;
+ rfg->routemap_export_bgp = NULL;
+
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP);
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP6);
+ }
+ } else {
+ if (((argc > 4) && strmatch(argv[4]->text,
+ rfg->routemap_export_zebra_name))
+ || (argc <= 4)) {
+ if (rfg->routemap_export_zebra_name)
+ free(rfg->routemap_export_zebra_name);
+ rfg->routemap_export_zebra_name = NULL;
+ rfg->routemap_export_zebra = NULL;
+
+ vnc_zebra_reexport_group_afi(bgp, rfg, AFI_IP);
+ vnc_zebra_reexport_group_afi(bgp, rfg, AFI_IP6);
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_export_routemap,
@@ -1968,42 +1814,39 @@ DEFUN (vnc_nve_group_export_routemap,
"Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "route map name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
-
- if (!bgp->rfapi_cfg)
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[1]->arg[0] == 'b')
- {
- if (rfg->routemap_export_bgp_name)
- free (rfg->routemap_export_bgp_name);
- rfg->routemap_export_bgp_name = strdup (argv[3]->arg);
- rfg->routemap_export_bgp = route_map_lookup_by_name (argv[3]->arg);
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, AFI_IP);
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, AFI_IP6);
- }
- else
- {
- if (rfg->routemap_export_zebra_name)
- free (rfg->routemap_export_zebra_name);
- rfg->routemap_export_zebra_name = strdup (argv[3]->arg);
- rfg->routemap_export_zebra = route_map_lookup_by_name (argv[3]->arg);
- vnc_zebra_reexport_group_afi (bgp, rfg, AFI_IP);
- vnc_zebra_reexport_group_afi (bgp, rfg, AFI_IP6);
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+
+ if (!bgp->rfapi_cfg) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[1]->arg[0] == 'b') {
+ if (rfg->routemap_export_bgp_name)
+ free(rfg->routemap_export_bgp_name);
+ rfg->routemap_export_bgp_name = strdup(argv[3]->arg);
+ rfg->routemap_export_bgp =
+ route_map_lookup_by_name(argv[3]->arg);
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP);
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP6);
+ } else {
+ if (rfg->routemap_export_zebra_name)
+ free(rfg->routemap_export_zebra_name);
+ rfg->routemap_export_zebra_name = strdup(argv[3]->arg);
+ rfg->routemap_export_zebra =
+ route_map_lookup_by_name(argv[3]->arg);
+ vnc_zebra_reexport_group_afi(bgp, rfg, AFI_IP);
+ vnc_zebra_reexport_group_afi(bgp, rfg, AFI_IP6);
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_export_no_prefixlist,
@@ -2018,54 +1861,44 @@ DEFUN (vnc_nve_export_no_prefixlist,
"IPv6 prefixes\n"
"Prefix-list for filtering exported routes\n" "Prefix list name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
- afi_t afi;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[4]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- if (argv[3]->arg[0] == 'b')
- {
- if (((argc > 6)
- && hc->plist_export_bgp_name[afi]
- && strmatch(argv[6]->text, hc->plist_export_bgp_name[afi]))
- || (argc <= 6))
- {
-
- free (hc->plist_export_bgp_name[afi]);
- hc->plist_export_bgp_name[afi] = NULL;
- hc->plist_export_bgp[afi] = NULL;
- vnc_direct_bgp_reexport (bgp, afi);
- }
- }
- else
- {
- if (((argc > 6)
- && hc->plist_export_zebra_name[afi]
- && strmatch(argv[6]->text, hc->plist_export_zebra_name[afi]))
- || (argc <= 6))
- {
-
- free (hc->plist_export_zebra_name[afi]);
- hc->plist_export_zebra_name[afi] = NULL;
- hc->plist_export_zebra[afi] = NULL;
- /* TBD vnc_zebra_rh_reexport(bgp, afi); */
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+ afi_t afi;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[4]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ if (argv[3]->arg[0] == 'b') {
+ if (((argc > 6) && hc->plist_export_bgp_name[afi]
+ && strmatch(argv[6]->text, hc->plist_export_bgp_name[afi]))
+ || (argc <= 6)) {
+
+ free(hc->plist_export_bgp_name[afi]);
+ hc->plist_export_bgp_name[afi] = NULL;
+ hc->plist_export_bgp[afi] = NULL;
+ vnc_direct_bgp_reexport(bgp, afi);
+ }
+ } else {
+ if (((argc > 6) && hc->plist_export_zebra_name[afi]
+ && strmatch(argv[6]->text,
+ hc->plist_export_zebra_name[afi]))
+ || (argc <= 6)) {
+
+ free(hc->plist_export_zebra_name[afi]);
+ hc->plist_export_zebra_name[afi] = NULL;
+ hc->plist_export_zebra[afi] = NULL;
+ /* TBD vnc_zebra_rh_reexport(bgp, afi); */
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_export_prefixlist,
@@ -2079,42 +1912,37 @@ DEFUN (vnc_nve_export_prefixlist,
"IPv6 prefixes\n"
"Prefix-list for filtering exported routes\n" "Prefix list name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
- afi_t afi;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[3]->text, "ipv4"))
- {
- afi = AFI_IP;
- }
- else
- {
- afi = AFI_IP6;
- }
-
- if (argv[2]->arg[0] == 'b')
- {
- if (hc->plist_export_bgp_name[afi])
- free (hc->plist_export_bgp_name[afi]);
- hc->plist_export_bgp_name[afi] = strdup (argv[5]->arg);
- hc->plist_export_bgp[afi] = prefix_list_lookup (afi, argv[5]->arg);
- vnc_direct_bgp_reexport (bgp, afi);
- }
- else
- {
- if (hc->plist_export_zebra_name[afi])
- free (hc->plist_export_zebra_name[afi]);
- hc->plist_export_zebra_name[afi] = strdup (argv[5]->arg);
- hc->plist_export_zebra[afi] = prefix_list_lookup (afi, argv[5]->arg);
- /* TBD vnc_zebra_rh_reexport(bgp, afi); */
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+ afi_t afi;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[3]->text, "ipv4")) {
+ afi = AFI_IP;
+ } else {
+ afi = AFI_IP6;
+ }
+
+ if (argv[2]->arg[0] == 'b') {
+ if (hc->plist_export_bgp_name[afi])
+ free(hc->plist_export_bgp_name[afi]);
+ hc->plist_export_bgp_name[afi] = strdup(argv[5]->arg);
+ hc->plist_export_bgp[afi] =
+ prefix_list_lookup(afi, argv[5]->arg);
+ vnc_direct_bgp_reexport(bgp, afi);
+ } else {
+ if (hc->plist_export_zebra_name[afi])
+ free(hc->plist_export_zebra_name[afi]);
+ hc->plist_export_zebra_name[afi] = strdup(argv[5]->arg);
+ hc->plist_export_zebra[afi] =
+ prefix_list_lookup(afi, argv[5]->arg);
+ /* TBD vnc_zebra_rh_reexport(bgp, afi); */
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_export_no_routemap,
@@ -2127,46 +1955,38 @@ DEFUN (vnc_nve_export_no_routemap,
"Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "Route map name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[3]->arg[0] == 'b')
- {
- if (((argc > 5)
- && hc->routemap_export_bgp_name
- && strmatch(argv[5]->text, hc->routemap_export_bgp_name))
- || (argc <= 5))
- {
-
- free (hc->routemap_export_bgp_name);
- hc->routemap_export_bgp_name = NULL;
- hc->routemap_export_bgp = NULL;
- vnc_direct_bgp_reexport (bgp, AFI_IP);
- vnc_direct_bgp_reexport (bgp, AFI_IP6);
- }
- }
- else
- {
- if (((argc > 5)
- && hc->routemap_export_zebra_name
- && strmatch(argv[5]->text, hc->routemap_export_zebra_name))
- || (argc <= 5))
- {
-
- free (hc->routemap_export_zebra_name);
- hc->routemap_export_zebra_name = NULL;
- hc->routemap_export_zebra = NULL;
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
- }
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[3]->arg[0] == 'b') {
+ if (((argc > 5) && hc->routemap_export_bgp_name
+ && strmatch(argv[5]->text, hc->routemap_export_bgp_name))
+ || (argc <= 5)) {
+
+ free(hc->routemap_export_bgp_name);
+ hc->routemap_export_bgp_name = NULL;
+ hc->routemap_export_bgp = NULL;
+ vnc_direct_bgp_reexport(bgp, AFI_IP);
+ vnc_direct_bgp_reexport(bgp, AFI_IP6);
+ }
+ } else {
+ if (((argc > 5) && hc->routemap_export_zebra_name
+ && strmatch(argv[5]->text, hc->routemap_export_zebra_name))
+ || (argc <= 5)) {
+
+ free(hc->routemap_export_zebra_name);
+ hc->routemap_export_zebra_name = NULL;
+ hc->routemap_export_zebra = NULL;
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_export_routemap,
@@ -2178,232 +1998,210 @@ DEFUN (vnc_nve_export_routemap,
"Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "Route map name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_cfg *hc;
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vty_out (vty, "rfapi not configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[2]->arg[0] == 'b')
- {
- if (hc->routemap_export_bgp_name)
- free (hc->routemap_export_bgp_name);
- hc->routemap_export_bgp_name = strdup (argv[4]->arg);
- hc->routemap_export_bgp = route_map_lookup_by_name (argv[4]->arg);
- vnc_direct_bgp_reexport (bgp, AFI_IP);
- vnc_direct_bgp_reexport (bgp, AFI_IP6);
- }
- else
- {
- if (hc->routemap_export_zebra_name)
- free (hc->routemap_export_zebra_name);
- hc->routemap_export_zebra_name = strdup (argv[4]->arg);
- hc->routemap_export_zebra = route_map_lookup_by_name (argv[4]->arg);
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_cfg *hc;
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vty_out(vty, "rfapi not configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[2]->arg[0] == 'b') {
+ if (hc->routemap_export_bgp_name)
+ free(hc->routemap_export_bgp_name);
+ hc->routemap_export_bgp_name = strdup(argv[4]->arg);
+ hc->routemap_export_bgp =
+ route_map_lookup_by_name(argv[4]->arg);
+ vnc_direct_bgp_reexport(bgp, AFI_IP);
+ vnc_direct_bgp_reexport(bgp, AFI_IP6);
+ } else {
+ if (hc->routemap_export_zebra_name)
+ free(hc->routemap_export_zebra_name);
+ hc->routemap_export_zebra_name = strdup(argv[4]->arg);
+ hc->routemap_export_zebra =
+ route_map_lookup_by_name(argv[4]->arg);
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
+ }
+ return CMD_SUCCESS;
}
/*
* respond to changes in the global prefix list configuration
*/
-void
-vnc_prefix_list_update (struct bgp *bgp)
+void vnc_prefix_list_update(struct bgp *bgp)
{
- afi_t afi;
- struct listnode *n;
- struct rfapi_nve_group_cfg *rfg;
- struct rfapi_cfg *hc;
- int i;
-
- if (!bgp)
- {
- vnc_zlog_debug_verbose ("%s: No BGP process is configured", __func__);
- return;
- }
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vnc_zlog_debug_verbose ("%s: rfapi not configured", __func__);
- return;
- }
-
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- {
- /*
- * Loop over nve groups
- */
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->nve_groups_sequential,
- n, rfg))
- {
-
- if (rfg->plist_export_bgp_name[afi])
- {
- rfg->plist_export_bgp[afi] =
- prefix_list_lookup (afi, rfg->plist_export_bgp_name[afi]);
- }
- if (rfg->plist_export_zebra_name[afi])
- {
- rfg->plist_export_zebra[afi] =
- prefix_list_lookup (afi, rfg->plist_export_zebra_name[afi]);
- }
- for (i = 0; i < ZEBRA_ROUTE_MAX; ++i)
- {
- if (rfg->plist_redist_name[i][afi])
- {
- rfg->plist_redist[i][afi] =
- prefix_list_lookup (afi, rfg->plist_redist_name[i][afi]);
- }
- }
-
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, afi);
- /* TBD vnc_zebra_reexport_group_afi(bgp, rfg, afi); */
- }
-
- /*
- * RH config, too
- */
- if (hc->plist_export_bgp_name[afi])
- {
- hc->plist_export_bgp[afi] =
- prefix_list_lookup (afi, hc->plist_export_bgp_name[afi]);
- }
- if (hc->plist_export_zebra_name[afi])
- {
- hc->plist_export_zebra[afi] =
- prefix_list_lookup (afi, hc->plist_export_zebra_name[afi]);
- }
-
- for (i = 0; i < ZEBRA_ROUTE_MAX; ++i)
- {
- if (hc->plist_redist_name[i][afi])
- {
- hc->plist_redist[i][afi] =
- prefix_list_lookup (afi, hc->plist_redist_name[i][afi]);
- }
- }
-
- }
-
- vnc_direct_bgp_reexport (bgp, AFI_IP);
- vnc_direct_bgp_reexport (bgp, AFI_IP6);
-
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
-
- vnc_redistribute_prechange (bgp);
- vnc_redistribute_postchange (bgp);
+ afi_t afi;
+ struct listnode *n;
+ struct rfapi_nve_group_cfg *rfg;
+ struct rfapi_cfg *hc;
+ int i;
+
+ if (!bgp) {
+ vnc_zlog_debug_verbose("%s: No BGP process is configured",
+ __func__);
+ return;
+ }
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vnc_zlog_debug_verbose("%s: rfapi not configured", __func__);
+ return;
+ }
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ /*
+ * Loop over nve groups
+ */
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->nve_groups_sequential,
+ n, rfg)) {
+
+ if (rfg->plist_export_bgp_name[afi]) {
+ rfg->plist_export_bgp[afi] = prefix_list_lookup(
+ afi, rfg->plist_export_bgp_name[afi]);
+ }
+ if (rfg->plist_export_zebra_name[afi]) {
+ rfg->plist_export_zebra
+ [afi] = prefix_list_lookup(
+ afi, rfg->plist_export_zebra_name[afi]);
+ }
+ for (i = 0; i < ZEBRA_ROUTE_MAX; ++i) {
+ if (rfg->plist_redist_name[i][afi]) {
+ rfg->plist_redist
+ [i][afi] = prefix_list_lookup(
+ afi,
+ rfg->plist_redist_name[i][afi]);
+ }
+ }
+
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, afi);
+ /* TBD vnc_zebra_reexport_group_afi(bgp, rfg, afi); */
+ }
+
+ /*
+ * RH config, too
+ */
+ if (hc->plist_export_bgp_name[afi]) {
+ hc->plist_export_bgp[afi] = prefix_list_lookup(
+ afi, hc->plist_export_bgp_name[afi]);
+ }
+ if (hc->plist_export_zebra_name[afi]) {
+ hc->plist_export_zebra[afi] = prefix_list_lookup(
+ afi, hc->plist_export_zebra_name[afi]);
+ }
+
+ for (i = 0; i < ZEBRA_ROUTE_MAX; ++i) {
+ if (hc->plist_redist_name[i][afi]) {
+ hc->plist_redist[i][afi] = prefix_list_lookup(
+ afi, hc->plist_redist_name[i][afi]);
+ }
+ }
+ }
+
+ vnc_direct_bgp_reexport(bgp, AFI_IP);
+ vnc_direct_bgp_reexport(bgp, AFI_IP6);
+
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
+
+ vnc_redistribute_prechange(bgp);
+ vnc_redistribute_postchange(bgp);
}
/*
* respond to changes in the global route map configuration
*/
-void
-vnc_routemap_update (struct bgp *bgp, const char *unused)
+void vnc_routemap_update(struct bgp *bgp, const char *unused)
{
- struct listnode *n;
- struct rfapi_nve_group_cfg *rfg;
- struct rfapi_cfg *hc;
- int i;
-
- vnc_zlog_debug_verbose ("%s(arg=%s)", __func__, unused);
-
- if (!bgp)
- {
- vnc_zlog_debug_verbose ("%s: No BGP process is configured", __func__);
- return;
- }
-
- if (!(hc = bgp->rfapi_cfg))
- {
- vnc_zlog_debug_verbose ("%s: rfapi not configured", __func__);
- return;
- }
-
- /*
- * Loop over nve groups
- */
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->nve_groups_sequential, n, rfg))
- {
-
- if (rfg->routemap_export_bgp_name)
- {
- rfg->routemap_export_bgp =
- route_map_lookup_by_name (rfg->routemap_export_bgp_name);
- }
- if (rfg->routemap_export_zebra_name)
- {
- rfg->routemap_export_bgp =
- route_map_lookup_by_name (rfg->routemap_export_zebra_name);
- }
- for (i = 0; i < ZEBRA_ROUTE_MAX; ++i)
- {
- if (rfg->routemap_redist_name[i])
- {
- rfg->routemap_redist[i] =
- route_map_lookup_by_name (rfg->routemap_redist_name[i]);
- }
- }
-
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, AFI_IP);
- vnc_direct_bgp_reexport_group_afi (bgp, rfg, AFI_IP6);
- /* TBD vnc_zebra_reexport_group_afi(bgp, rfg, afi); */
- }
-
- /*
- * RH config, too
- */
- if (hc->routemap_export_bgp_name)
- {
- hc->routemap_export_bgp =
- route_map_lookup_by_name (hc->routemap_export_bgp_name);
- }
- if (hc->routemap_export_zebra_name)
- {
- hc->routemap_export_bgp =
- route_map_lookup_by_name (hc->routemap_export_zebra_name);
- }
- for (i = 0; i < ZEBRA_ROUTE_MAX; ++i)
- {
- if (hc->routemap_redist_name[i])
- {
- hc->routemap_redist[i] =
- route_map_lookup_by_name (hc->routemap_redist_name[i]);
- }
- }
-
- vnc_direct_bgp_reexport (bgp, AFI_IP);
- vnc_direct_bgp_reexport (bgp, AFI_IP6);
-
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
- /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
-
- vnc_redistribute_prechange (bgp);
- vnc_redistribute_postchange (bgp);
-
- vnc_zlog_debug_verbose ("%s done", __func__);
+ struct listnode *n;
+ struct rfapi_nve_group_cfg *rfg;
+ struct rfapi_cfg *hc;
+ int i;
+
+ vnc_zlog_debug_verbose("%s(arg=%s)", __func__, unused);
+
+ if (!bgp) {
+ vnc_zlog_debug_verbose("%s: No BGP process is configured",
+ __func__);
+ return;
+ }
+
+ if (!(hc = bgp->rfapi_cfg)) {
+ vnc_zlog_debug_verbose("%s: rfapi not configured", __func__);
+ return;
+ }
+
+ /*
+ * Loop over nve groups
+ */
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->nve_groups_sequential, n,
+ rfg)) {
+
+ if (rfg->routemap_export_bgp_name) {
+ rfg->routemap_export_bgp = route_map_lookup_by_name(
+ rfg->routemap_export_bgp_name);
+ }
+ if (rfg->routemap_export_zebra_name) {
+ rfg->routemap_export_bgp = route_map_lookup_by_name(
+ rfg->routemap_export_zebra_name);
+ }
+ for (i = 0; i < ZEBRA_ROUTE_MAX; ++i) {
+ if (rfg->routemap_redist_name[i]) {
+ rfg->routemap_redist[i] =
+ route_map_lookup_by_name(
+ rfg->routemap_redist_name[i]);
+ }
+ }
+
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP);
+ vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP6);
+ /* TBD vnc_zebra_reexport_group_afi(bgp, rfg, afi); */
+ }
+
+ /*
+ * RH config, too
+ */
+ if (hc->routemap_export_bgp_name) {
+ hc->routemap_export_bgp =
+ route_map_lookup_by_name(hc->routemap_export_bgp_name);
+ }
+ if (hc->routemap_export_zebra_name) {
+ hc->routemap_export_bgp = route_map_lookup_by_name(
+ hc->routemap_export_zebra_name);
+ }
+ for (i = 0; i < ZEBRA_ROUTE_MAX; ++i) {
+ if (hc->routemap_redist_name[i]) {
+ hc->routemap_redist[i] = route_map_lookup_by_name(
+ hc->routemap_redist_name[i]);
+ }
+ }
+
+ vnc_direct_bgp_reexport(bgp, AFI_IP);
+ vnc_direct_bgp_reexport(bgp, AFI_IP6);
+
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP); */
+ /* TBD vnc_zebra_rh_reexport(bgp, AFI_IP6); */
+
+ vnc_redistribute_prechange(bgp);
+ vnc_redistribute_postchange(bgp);
+
+ vnc_zlog_debug_verbose("%s done", __func__);
}
-static void
-vnc_routemap_event (route_map_event_t type, /* ignored */
- const char *rmap_name) /* ignored */
+static void vnc_routemap_event(route_map_event_t type, /* ignored */
+ const char *rmap_name) /* ignored */
{
- struct listnode *mnode, *mnnode;
- struct bgp *bgp;
+ struct listnode *mnode, *mnnode;
+ struct bgp *bgp;
- vnc_zlog_debug_verbose ("%s(event type=%d)", __func__, type);
- if (bm->bgp == NULL) /* may be called during cleanup */
- return;
+ vnc_zlog_debug_verbose("%s(event type=%d)", __func__, type);
+ if (bm->bgp == NULL) /* may be called during cleanup */
+ return;
- for (ALL_LIST_ELEMENTS (bm->bgp, mnode, mnnode, bgp))
- vnc_routemap_update (bgp, rmap_name);
+ for (ALL_LIST_ELEMENTS(bm->bgp, mnode, mnnode, bgp))
+ vnc_routemap_update(bgp, rmap_name);
- vnc_zlog_debug_verbose ("%s: done", __func__);
+ vnc_zlog_debug_verbose("%s: done", __func__);
}
/*-------------------------------------------------------------------------
@@ -2416,288 +2214,267 @@ DEFUN_NOSH (vnc_nve_group,
"vnc nve-group NAME",
VNC_CONFIG_STR "Configure a NVE group\n" "Group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct rfapi_nve_group_cfg *rfg;
- struct listnode *node, *nnode;
- struct rfapi_rfg_name *rfgn;
-
- /* Search for name */
- rfg = bgp_rfapi_cfg_match_byname (bgp, argv[2]->arg, RFAPI_GROUP_CFG_NVE);
-
- if (!rfg)
- {
- rfg = rfapi_group_new (bgp, RFAPI_GROUP_CFG_NVE, argv[2]->arg);
- if (!rfg)
- {
- /* Error out of memory */
- vty_out (vty, "Can't allocate memory for NVE group\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* Copy defaults from struct rfapi_cfg */
- rfg->rd = bgp->rfapi_cfg->default_rd;
- if (bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_L2RD)
- {
- rfg->l2rd = bgp->rfapi_cfg->default_l2rd;
- rfg->flags |= RFAPI_RFG_L2RD;
- }
- rfg->rd = bgp->rfapi_cfg->default_rd;
- rfg->response_lifetime = bgp->rfapi_cfg->default_response_lifetime;
-
- if (bgp->rfapi_cfg->default_rt_export_list)
- {
- rfg->rt_export_list =
- ecommunity_dup (bgp->rfapi_cfg->default_rt_export_list);
- }
-
- if (bgp->rfapi_cfg->default_rt_import_list)
- {
- rfg->rt_import_list =
- ecommunity_dup (bgp->rfapi_cfg->default_rt_import_list);
- rfg->rfapi_import_table =
- rfapiImportTableRefAdd (bgp, rfg->rt_import_list, rfg);
- }
-
- /*
- * If a redist nve group was named but the group was not defined,
- * make the linkage now
- */
- if (!bgp->rfapi_cfg->rfg_redist)
- {
- if (bgp->rfapi_cfg->rfg_redist_name &&
- !strcmp (bgp->rfapi_cfg->rfg_redist_name, rfg->name))
- {
-
- vnc_redistribute_prechange (bgp);
- bgp->rfapi_cfg->rfg_redist = rfg;
- vnc_redistribute_postchange (bgp);
-
- }
- }
-
- /*
- * Same treatment for bgp-direct export group
- */
- for (ALL_LIST_ELEMENTS (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, nnode, rfgn))
- {
-
- if (!strcmp (rfgn->name, rfg->name))
- {
- rfgn->rfg = rfg;
- vnc_direct_bgp_add_group (bgp, rfg);
- break;
- }
- }
-
- /*
- * Same treatment for zebra export group
- */
- for (ALL_LIST_ELEMENTS (bgp->rfapi_cfg->rfg_export_zebra_l,
- node, nnode, rfgn))
- {
-
- vnc_zlog_debug_verbose ("%s: ezport zebra: checking if \"%s\" == \"%s\"",
- __func__, rfgn->name, rfg->name);
- if (!strcmp (rfgn->name, rfg->name))
- {
- rfgn->rfg = rfg;
- vnc_zebra_add_group (bgp, rfg);
- break;
- }
- }
- }
-
- /*
- * XXX subsequent calls will need to make sure this item is still
- * in the linked list and has the same name
- */
- VTY_PUSH_CONTEXT_SUB (BGP_VNC_NVE_GROUP_NODE, rfg);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct rfapi_nve_group_cfg *rfg;
+ struct listnode *node, *nnode;
+ struct rfapi_rfg_name *rfgn;
+
+ /* Search for name */
+ rfg = bgp_rfapi_cfg_match_byname(bgp, argv[2]->arg,
+ RFAPI_GROUP_CFG_NVE);
+
+ if (!rfg) {
+ rfg = rfapi_group_new(bgp, RFAPI_GROUP_CFG_NVE, argv[2]->arg);
+ if (!rfg) {
+ /* Error out of memory */
+ vty_out(vty, "Can't allocate memory for NVE group\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* Copy defaults from struct rfapi_cfg */
+ rfg->rd = bgp->rfapi_cfg->default_rd;
+ if (bgp->rfapi_cfg->flags & BGP_VNC_CONFIG_L2RD) {
+ rfg->l2rd = bgp->rfapi_cfg->default_l2rd;
+ rfg->flags |= RFAPI_RFG_L2RD;
+ }
+ rfg->rd = bgp->rfapi_cfg->default_rd;
+ rfg->response_lifetime =
+ bgp->rfapi_cfg->default_response_lifetime;
+
+ if (bgp->rfapi_cfg->default_rt_export_list) {
+ rfg->rt_export_list = ecommunity_dup(
+ bgp->rfapi_cfg->default_rt_export_list);
+ }
+
+ if (bgp->rfapi_cfg->default_rt_import_list) {
+ rfg->rt_import_list = ecommunity_dup(
+ bgp->rfapi_cfg->default_rt_import_list);
+ rfg->rfapi_import_table = rfapiImportTableRefAdd(
+ bgp, rfg->rt_import_list, rfg);
+ }
+
+ /*
+ * If a redist nve group was named but the group was not
+ * defined,
+ * make the linkage now
+ */
+ if (!bgp->rfapi_cfg->rfg_redist) {
+ if (bgp->rfapi_cfg->rfg_redist_name
+ && !strcmp(bgp->rfapi_cfg->rfg_redist_name,
+ rfg->name)) {
+
+ vnc_redistribute_prechange(bgp);
+ bgp->rfapi_cfg->rfg_redist = rfg;
+ vnc_redistribute_postchange(bgp);
+ }
+ }
+
+ /*
+ * Same treatment for bgp-direct export group
+ */
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->rfg_export_direct_bgp_l,
+ node, nnode, rfgn)) {
+
+ if (!strcmp(rfgn->name, rfg->name)) {
+ rfgn->rfg = rfg;
+ vnc_direct_bgp_add_group(bgp, rfg);
+ break;
+ }
+ }
+
+ /*
+ * Same treatment for zebra export group
+ */
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ nnode, rfgn)) {
+
+ vnc_zlog_debug_verbose(
+ "%s: ezport zebra: checking if \"%s\" == \"%s\"",
+ __func__, rfgn->name, rfg->name);
+ if (!strcmp(rfgn->name, rfg->name)) {
+ rfgn->rfg = rfg;
+ vnc_zebra_add_group(bgp, rfg);
+ break;
+ }
+ }
+ }
+
+ /*
+ * XXX subsequent calls will need to make sure this item is still
+ * in the linked list and has the same name
+ */
+ VTY_PUSH_CONTEXT_SUB(BGP_VNC_NVE_GROUP_NODE, rfg);
+
+ return CMD_SUCCESS;
}
-static void
-bgp_rfapi_delete_nve_group (
- struct vty *vty, /* NULL = no output */
- struct bgp *bgp,
- struct rfapi_nve_group_cfg *rfg)
+static void bgp_rfapi_delete_nve_group(struct vty *vty, /* NULL = no output */
+ struct bgp *bgp,
+ struct rfapi_nve_group_cfg *rfg)
{
- struct list *orphaned_nves = NULL;
- struct listnode *node, *nnode;
-
- /*
- * If there are currently-open NVEs that belong to this group,
- * zero out their references to this group structure.
- */
- if (rfg->nves)
- {
- struct rfapi_descriptor *rfd;
- orphaned_nves = list_new ();
- while ((rfd = listnode_head (rfg->nves)))
- {
- rfd->rfg = NULL;
- listnode_delete (rfg->nves, rfd);
- listnode_add (orphaned_nves, rfd);
- }
- list_delete (rfg->nves);
- rfg->nves = NULL;
- }
-
- /* delete it */
- free (rfg->name);
- if (rfg->rfapi_import_table)
- rfapiImportTableRefDelByIt (bgp, rfg->rfapi_import_table);
- if (rfg->rt_import_list)
- ecommunity_free (&rfg->rt_import_list);
- if (rfg->rt_export_list)
- ecommunity_free (&rfg->rt_export_list);
-
- if (rfg->vn_node)
- {
- rfg->vn_node->info = NULL;
- route_unlock_node (rfg->vn_node); /* frees */
- }
- if (rfg->un_node)
- {
- rfg->un_node->info = NULL;
- route_unlock_node (rfg->un_node); /* frees */
- }
- if (rfg->rfp_cfg)
- XFREE (MTYPE_RFAPI_RFP_GROUP_CFG, rfg->rfp_cfg);
- listnode_delete (bgp->rfapi_cfg->nve_groups_sequential, rfg);
-
- QOBJ_UNREG (rfg);
- XFREE (MTYPE_RFAPI_GROUP_CFG, rfg);
-
- /*
- * Attempt to reassign the orphaned nves to a new group. If
- * a NVE can not be reassigned, its rfd->rfg will remain NULL
- * and it will become a zombie until released by rfapi_close().
- */
- if (orphaned_nves)
- {
- struct rfapi_descriptor *rfd;
-
- for (ALL_LIST_ELEMENTS (orphaned_nves, node, nnode, rfd))
- {
- /*
- * 1. rfapi_close() equivalent except:
- * a. don't free original descriptor
- * b. remember query list
- * c. remember advertised route list
- * 2. rfapi_open() equivalent except:
- * a. reuse original descriptor
- * 3. rfapi_register() on remembered advertised route list
- * 4. rfapi_query on rememebred query list
- */
-
- int rc;
-
- rc = rfapi_reopen (rfd, bgp);
-
- if (!rc)
- {
- list_delete_node (orphaned_nves, node);
- if (vty)
- vty_out (vty, "WARNING: reassigned NVE vn=");
- rfapiPrintRfapiIpAddr (vty, &rfd->vn_addr);
- if (vty)
- vty_out (vty, " un=");
- rfapiPrintRfapiIpAddr (vty, &rfd->un_addr);
- if (vty)
- vty_out (vty, " to new group \"%s\"\n",rfd->rfg->name);
-
- }
- }
-
- for (ALL_LIST_ELEMENTS_RO (orphaned_nves, node, rfd))
- {
- if (vty)
- vty_out (vty, "WARNING: orphaned NVE vn=");
- rfapiPrintRfapiIpAddr (vty, &rfd->vn_addr);
- if (vty)
- vty_out (vty, " un=");
- rfapiPrintRfapiIpAddr (vty, &rfd->un_addr);
- if (vty)
- vty_out (vty, "\n");
- }
- list_delete (orphaned_nves);
- }
+ struct list *orphaned_nves = NULL;
+ struct listnode *node, *nnode;
+
+ /*
+ * If there are currently-open NVEs that belong to this group,
+ * zero out their references to this group structure.
+ */
+ if (rfg->nves) {
+ struct rfapi_descriptor *rfd;
+ orphaned_nves = list_new();
+ while ((rfd = listnode_head(rfg->nves))) {
+ rfd->rfg = NULL;
+ listnode_delete(rfg->nves, rfd);
+ listnode_add(orphaned_nves, rfd);
+ }
+ list_delete(rfg->nves);
+ rfg->nves = NULL;
+ }
+
+ /* delete it */
+ free(rfg->name);
+ if (rfg->rfapi_import_table)
+ rfapiImportTableRefDelByIt(bgp, rfg->rfapi_import_table);
+ if (rfg->rt_import_list)
+ ecommunity_free(&rfg->rt_import_list);
+ if (rfg->rt_export_list)
+ ecommunity_free(&rfg->rt_export_list);
+
+ if (rfg->vn_node) {
+ rfg->vn_node->info = NULL;
+ route_unlock_node(rfg->vn_node); /* frees */
+ }
+ if (rfg->un_node) {
+ rfg->un_node->info = NULL;
+ route_unlock_node(rfg->un_node); /* frees */
+ }
+ if (rfg->rfp_cfg)
+ XFREE(MTYPE_RFAPI_RFP_GROUP_CFG, rfg->rfp_cfg);
+ listnode_delete(bgp->rfapi_cfg->nve_groups_sequential, rfg);
+
+ QOBJ_UNREG(rfg);
+ XFREE(MTYPE_RFAPI_GROUP_CFG, rfg);
+
+ /*
+ * Attempt to reassign the orphaned nves to a new group. If
+ * a NVE can not be reassigned, its rfd->rfg will remain NULL
+ * and it will become a zombie until released by rfapi_close().
+ */
+ if (orphaned_nves) {
+ struct rfapi_descriptor *rfd;
+
+ for (ALL_LIST_ELEMENTS(orphaned_nves, node, nnode, rfd)) {
+ /*
+ * 1. rfapi_close() equivalent except:
+ * a. don't free original descriptor
+ * b. remember query list
+ * c. remember advertised route list
+ * 2. rfapi_open() equivalent except:
+ * a. reuse original descriptor
+ * 3. rfapi_register() on remembered advertised route
+ * list
+ * 4. rfapi_query on rememebred query list
+ */
+
+ int rc;
+
+ rc = rfapi_reopen(rfd, bgp);
+
+ if (!rc) {
+ list_delete_node(orphaned_nves, node);
+ if (vty)
+ vty_out(vty,
+ "WARNING: reassigned NVE vn=");
+ rfapiPrintRfapiIpAddr(vty, &rfd->vn_addr);
+ if (vty)
+ vty_out(vty, " un=");
+ rfapiPrintRfapiIpAddr(vty, &rfd->un_addr);
+ if (vty)
+ vty_out(vty, " to new group \"%s\"\n",
+ rfd->rfg->name);
+ }
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(orphaned_nves, node, rfd)) {
+ if (vty)
+ vty_out(vty, "WARNING: orphaned NVE vn=");
+ rfapiPrintRfapiIpAddr(vty, &rfd->vn_addr);
+ if (vty)
+ vty_out(vty, " un=");
+ rfapiPrintRfapiIpAddr(vty, &rfd->un_addr);
+ if (vty)
+ vty_out(vty, "\n");
+ }
+ list_delete(orphaned_nves);
+ }
}
static int
-bgp_rfapi_delete_named_nve_group (
- struct vty *vty, /* NULL = no output */
- struct bgp *bgp,
- const char *rfg_name, /* NULL = any */
- rfapi_group_cfg_type_t type) /* _MAX = any */
+bgp_rfapi_delete_named_nve_group(struct vty *vty, /* NULL = no output */
+ struct bgp *bgp,
+ const char *rfg_name, /* NULL = any */
+ rfapi_group_cfg_type_t type) /* _MAX = any */
{
- struct rfapi_nve_group_cfg *rfg = NULL;
- struct listnode *node, *nnode;
- struct rfapi_rfg_name *rfgn;
-
- /* Search for name */
- if (rfg_name)
- {
- rfg = bgp_rfapi_cfg_match_byname (bgp, rfg_name, type);
- if (!rfg)
- {
- if (vty)
- vty_out (vty, "No NVE group named \"%s\"\n",rfg_name);
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- /*
- * If this group is the redist nve group, unlink it
- */
- if (rfg_name == NULL || bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- bgp->rfapi_cfg->rfg_redist = NULL;
- vnc_redistribute_postchange (bgp);
- }
-
-
- /*
- * remove reference from bgp direct export list
- */
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, rfgn))
- {
- if (rfg_name == NULL ||
- (type == RFAPI_GROUP_CFG_NVE && !strcmp (rfgn->name, rfg_name)))
- {
- rfgn->rfg = NULL;
- /* remove exported routes from this group */
- vnc_direct_bgp_del_group (bgp, rfg);
- break;
- }
- }
-
- /*
- * remove reference from zebra export list
- */
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_zebra_l, node, rfgn))
- {
-
- if (rfg_name == NULL ||
- (type == RFAPI_GROUP_CFG_NVE && !strcmp (rfgn->name, rfg_name)))
- {
- rfgn->rfg = NULL;
- /* remove exported routes from this group */
- vnc_zebra_del_group (bgp, rfg);
- break;
- }
- }
- if (rfg)
- bgp_rfapi_delete_nve_group (vty, bgp, rfg);
- else /* must be delete all */
- for (ALL_LIST_ELEMENTS
- (bgp->rfapi_cfg->nve_groups_sequential, node, nnode, rfg))
- bgp_rfapi_delete_nve_group (vty, bgp, rfg);
- return CMD_SUCCESS;
+ struct rfapi_nve_group_cfg *rfg = NULL;
+ struct listnode *node, *nnode;
+ struct rfapi_rfg_name *rfgn;
+
+ /* Search for name */
+ if (rfg_name) {
+ rfg = bgp_rfapi_cfg_match_byname(bgp, rfg_name, type);
+ if (!rfg) {
+ if (vty)
+ vty_out(vty, "No NVE group named \"%s\"\n",
+ rfg_name);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ /*
+ * If this group is the redist nve group, unlink it
+ */
+ if (rfg_name == NULL || bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ bgp->rfapi_cfg->rfg_redist = NULL;
+ vnc_redistribute_postchange(bgp);
+ }
+
+
+ /*
+ * remove reference from bgp direct export list
+ */
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
+ rfgn)) {
+ if (rfg_name == NULL || (type == RFAPI_GROUP_CFG_NVE
+ && !strcmp(rfgn->name, rfg_name))) {
+ rfgn->rfg = NULL;
+ /* remove exported routes from this group */
+ vnc_direct_bgp_del_group(bgp, rfg);
+ break;
+ }
+ }
+
+ /*
+ * remove reference from zebra export list
+ */
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ rfgn)) {
+
+ if (rfg_name == NULL || (type == RFAPI_GROUP_CFG_NVE
+ && !strcmp(rfgn->name, rfg_name))) {
+ rfgn->rfg = NULL;
+ /* remove exported routes from this group */
+ vnc_zebra_del_group(bgp, rfg);
+ break;
+ }
+ }
+ if (rfg)
+ bgp_rfapi_delete_nve_group(vty, bgp, rfg);
+ else /* must be delete all */
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->nve_groups_sequential,
+ node, nnode, rfg))
+ bgp_rfapi_delete_nve_group(vty, bgp, rfg);
+ return CMD_SUCCESS;
}
DEFUN (vnc_no_nve_group,
@@ -2708,9 +2485,10 @@ DEFUN (vnc_no_nve_group,
"Configure a NVE group\n"
"Group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- return bgp_rfapi_delete_named_nve_group (vty, bgp, argv[3]->arg, RFAPI_GROUP_CFG_NVE);
+ return bgp_rfapi_delete_named_nve_group(vty, bgp, argv[3]->arg,
+ RFAPI_GROUP_CFG_NVE);
}
DEFUN (vnc_nve_group_prefix,
@@ -2722,116 +2500,101 @@ DEFUN (vnc_nve_group_prefix,
"IPv4 prefix\n"
"IPv6 prefix\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- struct prefix p;
- int afi;
- struct route_table *rt;
- struct route_node *rn;
- int is_un_prefix = 0;
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (!str2prefix (argv[2]->arg, &p))
- {
- vty_out (vty, "Malformed prefix \"%s\"\n", argv[2]->arg);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- afi = family2afi (p.family);
- if (!afi)
- {
- vty_out (vty, "Unsupported address family\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (argv[1]->arg[0] == 'u')
- {
- rt = &(bgp->rfapi_cfg->nve_groups_un[afi]);
- is_un_prefix = 1;
- }
- else
- {
- rt = &(bgp->rfapi_cfg->nve_groups_vn[afi]);
- }
-
- rn = route_node_get (rt, &p); /* NB locks node */
- if (rn->info)
- {
- /*
- * There is already a group with this prefix
- */
- route_unlock_node (rn);
- if (rn->info != rfg)
- {
- /*
- * different group name: fail
- */
- vty_out (vty, "nve group \"%s\" already has \"%s\" prefix %s\n",
- ((struct rfapi_nve_group_cfg *) (rn->info))->name,
- argv[1]->arg, argv[2]->arg);
- return CMD_WARNING_CONFIG_FAILED;
- }
- else
- {
- /*
- * same group name: it's already in the correct place
- * in the table, so we're done.
- *
- * Implies rfg->(vn|un)_prefix is already correct.
- */
- return CMD_SUCCESS;
- }
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- /* New prefix, new node */
-
- if (is_un_prefix)
- {
-
- /* detach rfg from previous route table location */
- if (rfg->un_node)
- {
- rfg->un_node->info = NULL;
- route_unlock_node (rfg->un_node); /* frees */
- }
- rfg->un_node = rn; /* back ref */
- rfg->un_prefix = p;
-
- }
- else
- {
-
- /* detach rfg from previous route table location */
- if (rfg->vn_node)
- {
- rfg->vn_node->info = NULL;
- route_unlock_node (rfg->vn_node); /* frees */
- }
- rfg->vn_node = rn; /* back ref */
- rfg->vn_prefix = p;
- }
-
- /* attach */
- rn->info = rfg;
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ struct prefix p;
+ int afi;
+ struct route_table *rt;
+ struct route_node *rn;
+ int is_un_prefix = 0;
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (!str2prefix(argv[2]->arg, &p)) {
+ vty_out(vty, "Malformed prefix \"%s\"\n", argv[2]->arg);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ afi = family2afi(p.family);
+ if (!afi) {
+ vty_out(vty, "Unsupported address family\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (argv[1]->arg[0] == 'u') {
+ rt = &(bgp->rfapi_cfg->nve_groups_un[afi]);
+ is_un_prefix = 1;
+ } else {
+ rt = &(bgp->rfapi_cfg->nve_groups_vn[afi]);
+ }
+
+ rn = route_node_get(rt, &p); /* NB locks node */
+ if (rn->info) {
+ /*
+ * There is already a group with this prefix
+ */
+ route_unlock_node(rn);
+ if (rn->info != rfg) {
+ /*
+ * different group name: fail
+ */
+ vty_out(vty,
+ "nve group \"%s\" already has \"%s\" prefix %s\n",
+ ((struct rfapi_nve_group_cfg *)(rn->info))
+ ->name,
+ argv[1]->arg, argv[2]->arg);
+ return CMD_WARNING_CONFIG_FAILED;
+ } else {
+ /*
+ * same group name: it's already in the correct place
+ * in the table, so we're done.
+ *
+ * Implies rfg->(vn|un)_prefix is already correct.
+ */
+ return CMD_SUCCESS;
+ }
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ /* New prefix, new node */
+
+ if (is_un_prefix) {
+
+ /* detach rfg from previous route table location */
+ if (rfg->un_node) {
+ rfg->un_node->info = NULL;
+ route_unlock_node(rfg->un_node); /* frees */
+ }
+ rfg->un_node = rn; /* back ref */
+ rfg->un_prefix = p;
+
+ } else {
+
+ /* detach rfg from previous route table location */
+ if (rfg->vn_node) {
+ rfg->vn_node->info = NULL;
+ route_unlock_node(rfg->vn_node); /* frees */
+ }
+ rfg->vn_node = rn; /* back ref */
+ rfg->vn_prefix = p;
+ }
+
+ /* attach */
+ rn->info = rfg;
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_rt_import,
@@ -2841,67 +2604,64 @@ DEFUN (vnc_nve_group_rt_import,
"Import filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- int rc;
- struct listnode *node;
- struct rfapi_rfg_name *rfgn;
- int is_export_bgp = 0;
- int is_export_zebra = 0;
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rc = set_ecom_list (vty, argc - 2, argv + 2, &rfg->rt_import_list);
- if (rc != CMD_SUCCESS)
- return rc;
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_bgp = 1;
- break;
- }
- }
-
- if (is_export_bgp)
- vnc_direct_bgp_del_group (bgp, rfg);
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_zebra_l, node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_zebra = 1;
- break;
- }
- }
-
- if (is_export_zebra)
- vnc_zebra_del_group (bgp, rfg);
-
- /*
- * stop referencing old import table, now reference new one
- */
- if (rfg->rfapi_import_table)
- rfapiImportTableRefDelByIt (bgp, rfg->rfapi_import_table);
- rfg->rfapi_import_table = rfapiImportTableRefAdd (bgp, rfg->rt_import_list, rfg);
-
- if (is_export_bgp)
- vnc_direct_bgp_add_group (bgp, rfg);
-
- if (is_export_zebra)
- vnc_zebra_add_group (bgp, rfg);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ int rc;
+ struct listnode *node;
+ struct rfapi_rfg_name *rfgn;
+ int is_export_bgp = 0;
+ int is_export_zebra = 0;
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_import_list);
+ if (rc != CMD_SUCCESS)
+ return rc;
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_bgp = 1;
+ break;
+ }
+ }
+
+ if (is_export_bgp)
+ vnc_direct_bgp_del_group(bgp, rfg);
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_zebra = 1;
+ break;
+ }
+ }
+
+ if (is_export_zebra)
+ vnc_zebra_del_group(bgp, rfg);
+
+ /*
+ * stop referencing old import table, now reference new one
+ */
+ if (rfg->rfapi_import_table)
+ rfapiImportTableRefDelByIt(bgp, rfg->rfapi_import_table);
+ rfg->rfapi_import_table =
+ rfapiImportTableRefAdd(bgp, rfg->rt_import_list, rfg);
+
+ if (is_export_bgp)
+ vnc_direct_bgp_add_group(bgp, rfg);
+
+ if (is_export_zebra)
+ vnc_zebra_add_group(bgp, rfg);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_rt_export,
@@ -2911,31 +2671,28 @@ DEFUN (vnc_nve_group_rt_export,
"Export filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- int rc;
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rc = set_ecom_list (vty, argc - 2, argv + 2, &rfg->rt_export_list);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
-
- return rc;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ int rc;
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_export_list);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return rc;
}
DEFUN (vnc_nve_group_rt_both,
@@ -2945,83 +2702,76 @@ DEFUN (vnc_nve_group_rt_both,
"Export+import filters\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- int rc;
- int is_export_bgp = 0;
- int is_export_zebra = 0;
- struct listnode *node;
- struct rfapi_rfg_name *rfgn;
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rc = set_ecom_list (vty, argc - 2, argv + 2, &rfg->rt_import_list);
- if (rc != CMD_SUCCESS)
- return rc;
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_bgp = 1;
- break;
- }
- }
-
- if (is_export_bgp)
- vnc_direct_bgp_del_group (bgp, rfg);
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_zebra_l, node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_zebra = 1;
- break;
- }
- }
-
- if (is_export_zebra)
- {
- vnc_zlog_debug_verbose ("%s: is_export_zebra", __func__);
- vnc_zebra_del_group (bgp, rfg);
- }
-
- /*
- * stop referencing old import table, now reference new one
- */
- if (rfg->rfapi_import_table)
- rfapiImportTableRefDelByIt (bgp, rfg->rfapi_import_table);
- rfg->rfapi_import_table = rfapiImportTableRefAdd (bgp, rfg->rt_import_list, rfg);
-
- if (is_export_bgp)
- vnc_direct_bgp_add_group (bgp, rfg);
-
- if (is_export_zebra)
- vnc_zebra_add_group (bgp, rfg);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rc = set_ecom_list (vty, argc - 2, argv + 2, &rfg->rt_export_list);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
-
- return rc;
-
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ int rc;
+ int is_export_bgp = 0;
+ int is_export_zebra = 0;
+ struct listnode *node;
+ struct rfapi_rfg_name *rfgn;
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_import_list);
+ if (rc != CMD_SUCCESS)
+ return rc;
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_bgp = 1;
+ break;
+ }
+ }
+
+ if (is_export_bgp)
+ vnc_direct_bgp_del_group(bgp, rfg);
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_zebra = 1;
+ break;
+ }
+ }
+
+ if (is_export_zebra) {
+ vnc_zlog_debug_verbose("%s: is_export_zebra", __func__);
+ vnc_zebra_del_group(bgp, rfg);
+ }
+
+ /*
+ * stop referencing old import table, now reference new one
+ */
+ if (rfg->rfapi_import_table)
+ rfapiImportTableRefDelByIt(bgp, rfg->rfapi_import_table);
+ rfg->rfapi_import_table =
+ rfapiImportTableRefAdd(bgp, rfg->rt_import_list, rfg);
+
+ if (is_export_bgp)
+ vnc_direct_bgp_add_group(bgp, rfg);
+
+ if (is_export_zebra)
+ vnc_zebra_add_group(bgp, rfg);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_export_list);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return rc;
}
DEFUN (vnc_nve_group_l2rd,
@@ -3031,45 +2781,40 @@ DEFUN (vnc_nve_group_l2rd,
"Fixed value 1-255\n"
"use the low-order octet of the NVE's VN address\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[1]->text, "auto:vn"))
- {
- rfg->l2rd = 0;
- }
- else
- {
- char *end = NULL;
- unsigned long value_l = strtoul (argv[1]->arg, &end, 10);
- uint8_t value = value_l & 0xff;
-
- if (!argv[1]->arg[0] || *end)
- {
- vty_out (vty, "%% Malformed l2 nve ID \"%s\"\n",argv[1]->arg);
- return CMD_WARNING_CONFIG_FAILED;
- }
- if ((value_l < 1) || (value_l > 0xff))
- {
- vty_out (vty,
- "%% Malformed l2 nve id (must be greater than 0 and less than %u\n",
- 0x100);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rfg->l2rd = value;
- }
- rfg->flags |= RFAPI_RFG_L2RD;
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[1]->text, "auto:vn")) {
+ rfg->l2rd = 0;
+ } else {
+ char *end = NULL;
+ unsigned long value_l = strtoul(argv[1]->arg, &end, 10);
+ uint8_t value = value_l & 0xff;
+
+ if (!argv[1]->arg[0] || *end) {
+ vty_out(vty, "%% Malformed l2 nve ID \"%s\"\n",
+ argv[1]->arg);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if ((value_l < 1) || (value_l > 0xff)) {
+ vty_out(vty,
+ "%% Malformed l2 nve id (must be greater than 0 and less than %u\n",
+ 0x100);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rfg->l2rd = value;
+ }
+ rfg->flags |= RFAPI_RFG_L2RD;
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_no_l2rd,
@@ -3078,21 +2823,20 @@ DEFUN (vnc_nve_group_no_l2rd,
NO_STR
"Specify default Local Nve ID value to use in RD for L2 routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
- rfg->l2rd = 0;
- rfg->flags &= ~RFAPI_RFG_L2RD;
+ rfg->l2rd = 0;
+ rfg->flags &= ~RFAPI_RFG_L2RD;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_rd,
@@ -3101,73 +2845,64 @@ DEFUN (vnc_nve_group_rd,
"Specify route distinguisher\n"
"Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:vn:<number> )\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int ret;
- struct prefix_rd prd;
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (!strncmp (argv[1]->arg, "auto:vn:", 8))
- {
- /*
- * use AF_UNIX to designate automatically-assigned RD
- * auto:vn:nn where nn is a 2-octet quantity
- */
- char *end = NULL;
- uint32_t value32 = strtoul (argv[1]->arg + 8, &end, 10);
- uint16_t value = value32 & 0xffff;
-
- if (!argv[1]->arg[8] || *end)
- {
- vty_out (vty, "%% Malformed rd\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (value32 > 0xffff)
- {
- vty_out (vty, "%% Malformed rd (must be less than %u\n",
- 0x0ffff);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- memset (&prd, 0, sizeof (prd));
- prd.family = AF_UNIX;
- prd.prefixlen = 64;
- prd.val[0] = (RD_TYPE_IP >> 8) & 0x0ff;
- prd.val[1] = RD_TYPE_IP & 0x0ff;
- prd.val[6] = (value >> 8) & 0x0ff;
- prd.val[7] = value & 0x0ff;
-
- }
- else
- {
-
- ret = str2prefix_rd (argv[1]->arg, &prd);
- if (!ret)
- {
- vty_out (vty, "%% Malformed rd\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rfg->rd = prd;
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int ret;
+ struct prefix_rd prd;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (!strncmp(argv[1]->arg, "auto:vn:", 8)) {
+ /*
+ * use AF_UNIX to designate automatically-assigned RD
+ * auto:vn:nn where nn is a 2-octet quantity
+ */
+ char *end = NULL;
+ uint32_t value32 = strtoul(argv[1]->arg + 8, &end, 10);
+ uint16_t value = value32 & 0xffff;
+
+ if (!argv[1]->arg[8] || *end) {
+ vty_out(vty, "%% Malformed rd\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (value32 > 0xffff) {
+ vty_out(vty, "%% Malformed rd (must be less than %u\n",
+ 0x0ffff);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ memset(&prd, 0, sizeof(prd));
+ prd.family = AF_UNIX;
+ prd.prefixlen = 64;
+ prd.val[0] = (RD_TYPE_IP >> 8) & 0x0ff;
+ prd.val[1] = RD_TYPE_IP & 0x0ff;
+ prd.val[6] = (value >> 8) & 0x0ff;
+ prd.val[7] = value & 0x0ff;
+
+ } else {
+
+ ret = str2prefix_rd(argv[1]->arg, &prd);
+ if (!ret) {
+ vty_out(vty, "%% Malformed rd\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rfg->rd = prd;
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_nve_group_responselifetime,
@@ -3176,40 +2911,36 @@ DEFUN (vnc_nve_group_responselifetime,
"Specify response lifetime\n"
"Response lifetime in seconds\n" "Infinite response lifetime\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- unsigned int rspint;
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- struct rfapi_descriptor *rfd;
- struct listnode *hdnode;
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (strmatch(argv[1]->text, "infinite"))
- {
- rspint = RFAPI_INFINITE_LIFETIME;
- }
- else
- {
- rspint = strtoul(argv[1]->arg, NULL, 10);
- }
-
- rfg->response_lifetime = rspint;
- rfg->flags |= RFAPI_RFG_RESPONSE_LIFETIME;
- if (rfg->nves)
- for (ALL_LIST_ELEMENTS_RO (rfg->nves, hdnode, rfd))
- rfd->response_lifetime = rspint;
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ unsigned int rspint;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ struct rfapi_descriptor *rfd;
+ struct listnode *hdnode;
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (strmatch(argv[1]->text, "infinite")) {
+ rspint = RFAPI_INFINITE_LIFETIME;
+ } else {
+ rspint = strtoul(argv[1]->arg, NULL, 10);
+ }
+
+ rfg->response_lifetime = rspint;
+ rfg->flags |= RFAPI_RFG_RESPONSE_LIFETIME;
+ if (rfg->nves)
+ for (ALL_LIST_ELEMENTS_RO(rfg->nves, hdnode, rfd))
+ rfd->response_lifetime = rspint;
+ return CMD_SUCCESS;
}
/*
* Sigh. This command, like exit-address-family, is a hack to deal
- * with the lack of rigorous level control in the command handler.
+ * with the lack of rigorous level control in the command handler.
* TBD fix command handler.
*/
DEFUN_NOSH (exit_vnc,
@@ -3217,27 +2948,20 @@ DEFUN_NOSH (exit_vnc,
"exit-vnc",
"Exit VNC configuration mode\n")
{
- if (vty->node == BGP_VNC_DEFAULTS_NODE ||
- vty->node == BGP_VNC_NVE_GROUP_NODE ||
- vty->node == BGP_VNC_L2_GROUP_NODE)
- {
-
- vty->node = BGP_NODE;
- }
- return CMD_SUCCESS;
+ if (vty->node == BGP_VNC_DEFAULTS_NODE
+ || vty->node == BGP_VNC_NVE_GROUP_NODE
+ || vty->node == BGP_VNC_L2_GROUP_NODE) {
+
+ vty->node = BGP_NODE;
+ }
+ return CMD_SUCCESS;
}
static struct cmd_node bgp_vnc_defaults_node = {
- BGP_VNC_DEFAULTS_NODE,
- "%s(config-router-vnc-defaults)# ",
- 1
-};
+ BGP_VNC_DEFAULTS_NODE, "%s(config-router-vnc-defaults)# ", 1};
static struct cmd_node bgp_vnc_nve_group_node = {
- BGP_VNC_NVE_GROUP_NODE,
- "%s(config-router-vnc-nve-group)# ",
- 1
-};
+ BGP_VNC_NVE_GROUP_NODE, "%s(config-router-vnc-nve-group)# ", 1};
/*-------------------------------------------------------------------------
* VNC nve-group
@@ -3250,35 +2974,33 @@ DEFUN_NOSH (vnc_vrf_policy,
"Configure a VRF policy group\n"
"VRF name\n")
{
- struct rfapi_nve_group_cfg *rfg;
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* Search for name */
- rfg = bgp_rfapi_cfg_match_byname (bgp, argv[1]->arg, RFAPI_GROUP_CFG_VRF);
-
- if (!rfg)
- {
- rfg = rfapi_group_new (bgp, RFAPI_GROUP_CFG_VRF, argv[1]->arg);
- if (!rfg)
- {
- /* Error out of memory */
- vty_out (vty, "Can't allocate memory for NVE group\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
- /*
- * XXX subsequent calls will need to make sure this item is still
- * in the linked list and has the same name
- */
- VTY_PUSH_CONTEXT_SUB (BGP_VRF_POLICY_NODE, rfg);
-
- return CMD_SUCCESS;
+ struct rfapi_nve_group_cfg *rfg;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* Search for name */
+ rfg = bgp_rfapi_cfg_match_byname(bgp, argv[1]->arg,
+ RFAPI_GROUP_CFG_VRF);
+
+ if (!rfg) {
+ rfg = rfapi_group_new(bgp, RFAPI_GROUP_CFG_VRF, argv[1]->arg);
+ if (!rfg) {
+ /* Error out of memory */
+ vty_out(vty, "Can't allocate memory for NVE group\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+ /*
+ * XXX subsequent calls will need to make sure this item is still
+ * in the linked list and has the same name
+ */
+ VTY_PUSH_CONTEXT_SUB(BGP_VRF_POLICY_NODE, rfg);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_no_vrf_policy,
@@ -3288,14 +3010,14 @@ DEFUN (vnc_no_vrf_policy,
"Remove a VRF policy group\n"
"VRF name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- return bgp_rfapi_delete_named_nve_group (vty, bgp, argv[2]->arg, RFAPI_GROUP_CFG_VRF);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ return bgp_rfapi_delete_named_nve_group(vty, bgp, argv[2]->arg,
+ RFAPI_GROUP_CFG_VRF);
}
DEFUN (vnc_vrf_policy_label,
@@ -3304,39 +3026,35 @@ DEFUN (vnc_vrf_policy_label,
"Default label value for VRF\n"
"Label Value <0-1048575>\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
-
- uint32_t label;
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- label = strtoul(argv[1]->arg, NULL, 10);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rfg->label = label;
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+
+ uint32_t label;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ label = strtoul(argv[1]->arg, NULL, 10);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rfg->label = label;
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_vrf_policy_no_label,
@@ -3345,29 +3063,26 @@ DEFUN (vnc_vrf_policy_no_label,
NO_STR
"Remove VRF default label\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current VRF group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rfg->label = MPLS_LABEL_ILLEGAL;
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current VRF group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rfg->label = MPLS_LABEL_ILLEGAL;
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+ return CMD_SUCCESS;
}
DEFUN (vnc_vrf_policy_nexthop,
@@ -3378,45 +3093,40 @@ DEFUN (vnc_vrf_policy_nexthop,
"IPv6 prefix\n"
"Use configured router-id (default)\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- struct prefix p;
-
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current VRF no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- if (!str2prefix (argv[1]->arg, &p) && p.family)
- {
- //vty_out (vty, "Nexthop set to self\n");
- SET_FLAG (rfg->flags, RFAPI_RFG_VPN_NH_SELF);
- memset(&rfg->vn_prefix, 0, sizeof(struct prefix));
- }
- else
- {
- UNSET_FLAG (rfg->flags, RFAPI_RFG_VPN_NH_SELF);
- rfg->vn_prefix = p;
- rfg->un_prefix = p;
- }
-
- /* TBD handle router-id/ nexthop changes when have advertised prefixes */
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ struct prefix p;
+
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current VRF no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ if (!str2prefix(argv[1]->arg, &p) && p.family) {
+ // vty_out (vty, "Nexthop set to self\n");
+ SET_FLAG(rfg->flags, RFAPI_RFG_VPN_NH_SELF);
+ memset(&rfg->vn_prefix, 0, sizeof(struct prefix));
+ } else {
+ UNSET_FLAG(rfg->flags, RFAPI_RFG_VPN_NH_SELF);
+ rfg->vn_prefix = p;
+ rfg->un_prefix = p;
+ }
+
+ /* TBD handle router-id/ nexthop changes when have advertised prefixes
+ */
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return CMD_SUCCESS;
}
/* The RT code should be refactored/simplified with above... */
@@ -3427,73 +3137,69 @@ DEFUN (vnc_vrf_policy_rt_import,
"Import filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int rc;
- struct listnode *node;
- struct rfapi_rfg_name *rfgn;
- int is_export_bgp = 0;
- int is_export_zebra = 0;
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rc = set_ecom_list (vty, argc-2, argv+2, &rfg->rt_import_list);
- if (rc != CMD_SUCCESS)
- return rc;
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_bgp = 1;
- break;
- }
- }
-
- if (is_export_bgp)
- vnc_direct_bgp_del_group (bgp, rfg);
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_zebra_l, node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_zebra = 1;
- break;
- }
- }
-
- if (is_export_zebra)
- vnc_zebra_del_group (bgp, rfg);
-
- /*
- * stop referencing old import table, now reference new one
- */
- if (rfg->rfapi_import_table)
- rfapiImportTableRefDelByIt (bgp, rfg->rfapi_import_table);
- rfg->rfapi_import_table = rfapiImportTableRefAdd (bgp, rfg->rt_import_list, rfg);
-
- if (is_export_bgp)
- vnc_direct_bgp_add_group (bgp, rfg);
-
- if (is_export_zebra)
- vnc_zebra_add_group (bgp, rfg);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int rc;
+ struct listnode *node;
+ struct rfapi_rfg_name *rfgn;
+ int is_export_bgp = 0;
+ int is_export_zebra = 0;
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_import_list);
+ if (rc != CMD_SUCCESS)
+ return rc;
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_bgp = 1;
+ break;
+ }
+ }
+
+ if (is_export_bgp)
+ vnc_direct_bgp_del_group(bgp, rfg);
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_zebra = 1;
+ break;
+ }
+ }
+
+ if (is_export_zebra)
+ vnc_zebra_del_group(bgp, rfg);
+
+ /*
+ * stop referencing old import table, now reference new one
+ */
+ if (rfg->rfapi_import_table)
+ rfapiImportTableRefDelByIt(bgp, rfg->rfapi_import_table);
+ rfg->rfapi_import_table =
+ rfapiImportTableRefAdd(bgp, rfg->rt_import_list, rfg);
+
+ if (is_export_bgp)
+ vnc_direct_bgp_add_group(bgp, rfg);
+
+ if (is_export_zebra)
+ vnc_zebra_add_group(bgp, rfg);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_vrf_policy_rt_export,
@@ -3503,37 +3209,33 @@ DEFUN (vnc_vrf_policy_rt_export,
"Export filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int rc;
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rc = set_ecom_list (vty, argc-2, argv+2, &rfg->rt_export_list);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
-
- return rc;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int rc;
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_export_list);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return rc;
}
DEFUN (vnc_vrf_policy_rt_both,
@@ -3543,89 +3245,81 @@ DEFUN (vnc_vrf_policy_rt_both,
"Export+import filters\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int rc;
- int is_export_bgp = 0;
- int is_export_zebra = 0;
- struct listnode *node;
- struct rfapi_rfg_name *rfgn;
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rc = set_ecom_list (vty, argc-2, argv+2, &rfg->rt_import_list);
- if (rc != CMD_SUCCESS)
- return rc;
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_direct_bgp_l,
- node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_bgp = 1;
- break;
- }
- }
-
- if (is_export_bgp)
- vnc_direct_bgp_del_group (bgp, rfg);
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->rfg_export_zebra_l, node, rfgn))
- {
-
- if (rfgn->rfg == rfg)
- {
- is_export_zebra = 1;
- break;
- }
- }
-
- if (is_export_zebra)
- {
- vnc_zlog_debug_verbose ("%s: is_export_zebra", __func__);
- vnc_zebra_del_group (bgp, rfg);
- }
-
- /*
- * stop referencing old import table, now reference new one
- */
- if (rfg->rfapi_import_table)
- rfapiImportTableRefDelByIt (bgp, rfg->rfapi_import_table);
- rfg->rfapi_import_table = rfapiImportTableRefAdd (bgp, rfg->rt_import_list, rfg);
-
- if (is_export_bgp)
- vnc_direct_bgp_add_group (bgp, rfg);
-
- if (is_export_zebra)
- vnc_zebra_add_group (bgp, rfg);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rc = set_ecom_list (vty, argc-2, argv+2, &rfg->rt_export_list);
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
-
- return rc;
-
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int rc;
+ int is_export_bgp = 0;
+ int is_export_zebra = 0;
+ struct listnode *node;
+ struct rfapi_rfg_name *rfgn;
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_import_list);
+ if (rc != CMD_SUCCESS)
+ return rc;
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_bgp = 1;
+ break;
+ }
+ }
+
+ if (is_export_bgp)
+ vnc_direct_bgp_del_group(bgp, rfg);
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
+ rfgn)) {
+
+ if (rfgn->rfg == rfg) {
+ is_export_zebra = 1;
+ break;
+ }
+ }
+
+ if (is_export_zebra) {
+ vnc_zlog_debug_verbose("%s: is_export_zebra", __func__);
+ vnc_zebra_del_group(bgp, rfg);
+ }
+
+ /*
+ * stop referencing old import table, now reference new one
+ */
+ if (rfg->rfapi_import_table)
+ rfapiImportTableRefDelByIt(bgp, rfg->rfapi_import_table);
+ rfg->rfapi_import_table =
+ rfapiImportTableRefAdd(bgp, rfg->rt_import_list, rfg);
+
+ if (is_export_bgp)
+ vnc_direct_bgp_add_group(bgp, rfg);
+
+ if (is_export_zebra)
+ vnc_zebra_add_group(bgp, rfg);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rc = set_ecom_list(vty, argc - 2, argv + 2, &rfg->rt_export_list);
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+
+ return rc;
}
DEFUN (vnc_vrf_policy_rd,
@@ -3634,79 +3328,69 @@ DEFUN (vnc_vrf_policy_rd,
"Specify default VRF route distinguisher\n"
"Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:nh:<number> )\n")
{
- int ret;
- struct prefix_rd prd;
- VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current NVE group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (!strncmp (argv[1]->arg, "auto:nh:", 8))
- {
- /*
- * use AF_UNIX to designate automatically-assigned RD
- * auto:vn:nn where nn is a 2-octet quantity
- */
- char *end = NULL;
- uint32_t value32 = strtoul (argv[1]->arg + 8, &end, 10);
- uint16_t value = value32 & 0xffff;
-
- if (!*(argv[1]->arg + 5) || *end)
- {
- vty_out (vty, "%% Malformed rd\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- if (value32 > 0xffff)
- {
- vty_out (vty, "%% Malformed rd (must be less than %u\n",
- 0x0ffff);
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- memset (&prd, 0, sizeof (prd));
- prd.family = AF_UNIX;
- prd.prefixlen = 64;
- prd.val[0] = (RD_TYPE_IP >> 8) & 0x0ff;
- prd.val[1] = RD_TYPE_IP & 0x0ff;
- prd.val[6] = (value >> 8) & 0x0ff;
- prd.val[7] = value & 0x0ff;
-
- }
- else
- {
-
- ret = str2prefix_rd (argv[1]->arg, &prd);
- if (!ret)
- {
- vty_out (vty, "%% Malformed rd\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_prechange (bgp);
- }
-
- rfg->rd = prd;
-
- if (bgp->rfapi_cfg->rfg_redist == rfg)
- {
- vnc_redistribute_postchange (bgp);
- }
- return CMD_SUCCESS;
+ int ret;
+ struct prefix_rd prd;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->nve_groups_sequential, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current NVE group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (!strncmp(argv[1]->arg, "auto:nh:", 8)) {
+ /*
+ * use AF_UNIX to designate automatically-assigned RD
+ * auto:vn:nn where nn is a 2-octet quantity
+ */
+ char *end = NULL;
+ uint32_t value32 = strtoul(argv[1]->arg + 8, &end, 10);
+ uint16_t value = value32 & 0xffff;
+
+ if (!*(argv[1]->arg + 5) || *end) {
+ vty_out(vty, "%% Malformed rd\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ if (value32 > 0xffff) {
+ vty_out(vty, "%% Malformed rd (must be less than %u\n",
+ 0x0ffff);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ memset(&prd, 0, sizeof(prd));
+ prd.family = AF_UNIX;
+ prd.prefixlen = 64;
+ prd.val[0] = (RD_TYPE_IP >> 8) & 0x0ff;
+ prd.val[1] = RD_TYPE_IP & 0x0ff;
+ prd.val[6] = (value >> 8) & 0x0ff;
+ prd.val[7] = value & 0x0ff;
+
+ } else {
+
+ ret = str2prefix_rd(argv[1]->arg, &prd);
+ if (!ret) {
+ vty_out(vty, "%% Malformed rd\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_prechange(bgp);
+ }
+
+ rfg->rd = prd;
+
+ if (bgp->rfapi_cfg->rfg_redist == rfg) {
+ vnc_redistribute_postchange(bgp);
+ }
+ return CMD_SUCCESS;
}
DEFUN_NOSH (exit_vrf_policy,
@@ -3714,18 +3398,14 @@ DEFUN_NOSH (exit_vrf_policy,
"exit-vrf-policy",
"Exit VRF policy configuration mode\n")
{
- if (vty->node == BGP_VRF_POLICY_NODE)
- {
- vty->node = BGP_NODE;
- }
- return CMD_SUCCESS;
+ if (vty->node == BGP_VRF_POLICY_NODE) {
+ vty->node = BGP_NODE;
+ }
+ return CMD_SUCCESS;
}
static struct cmd_node bgp_vrf_policy_node = {
- BGP_VRF_POLICY_NODE,
- "%s(config-router-vrf-policy)# ",
- 1
-};
+ BGP_VRF_POLICY_NODE, "%s(config-router-vrf-policy)# ", 1};
/*-------------------------------------------------------------------------
* vnc-l2-group
@@ -3737,88 +3417,82 @@ DEFUN_NOSH (vnc_l2_group,
"vnc l2-group NAME",
VNC_CONFIG_STR "Configure a L2 group\n" "Group name\n")
{
- struct rfapi_l2_group_cfg *rfg;
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* Search for name */
- rfg = rfapi_l2_group_lookup_byname (bgp, argv[1]->arg);
-
- if (!rfg)
- {
- rfg = rfapi_l2_group_new ();
- if (!rfg)
- {
- /* Error out of memory */
- vty_out (vty, "Can't allocate memory for L2 group\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- rfg->name = strdup (argv[1]->arg);
- /* add to tail of list */
- listnode_add (bgp->rfapi_cfg->l2_groups, rfg);
- }
-
- /*
- * XXX subsequent calls will need to make sure this item is still
- * in the linked list and has the same name
- */
- VTY_PUSH_CONTEXT_SUB (BGP_VNC_L2_GROUP_NODE, rfg);
- return CMD_SUCCESS;
+ struct rfapi_l2_group_cfg *rfg;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* Search for name */
+ rfg = rfapi_l2_group_lookup_byname(bgp, argv[1]->arg);
+
+ if (!rfg) {
+ rfg = rfapi_l2_group_new();
+ if (!rfg) {
+ /* Error out of memory */
+ vty_out(vty, "Can't allocate memory for L2 group\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ rfg->name = strdup(argv[1]->arg);
+ /* add to tail of list */
+ listnode_add(bgp->rfapi_cfg->l2_groups, rfg);
+ }
+
+ /*
+ * XXX subsequent calls will need to make sure this item is still
+ * in the linked list and has the same name
+ */
+ VTY_PUSH_CONTEXT_SUB(BGP_VNC_L2_GROUP_NODE, rfg);
+ return CMD_SUCCESS;
}
-static void
-bgp_rfapi_delete_l2_group (
- struct vty *vty, /* NULL = no output */
- struct bgp *bgp,
- struct rfapi_l2_group_cfg *rfg)
+static void bgp_rfapi_delete_l2_group(struct vty *vty, /* NULL = no output */
+ struct bgp *bgp,
+ struct rfapi_l2_group_cfg *rfg)
{
- /* delete it */
- free (rfg->name);
- if (rfg->rt_import_list)
- ecommunity_free (&rfg->rt_import_list);
- if (rfg->rt_export_list)
- ecommunity_free (&rfg->rt_export_list);
- if (rfg->labels)
- list_delete (rfg->labels);
- if (rfg->rfp_cfg)
- XFREE (MTYPE_RFAPI_RFP_GROUP_CFG, rfg->rfp_cfg);
- listnode_delete (bgp->rfapi_cfg->l2_groups, rfg);
-
- rfapi_l2_group_del (rfg);
+ /* delete it */
+ free(rfg->name);
+ if (rfg->rt_import_list)
+ ecommunity_free(&rfg->rt_import_list);
+ if (rfg->rt_export_list)
+ ecommunity_free(&rfg->rt_export_list);
+ if (rfg->labels)
+ list_delete(rfg->labels);
+ if (rfg->rfp_cfg)
+ XFREE(MTYPE_RFAPI_RFP_GROUP_CFG, rfg->rfp_cfg);
+ listnode_delete(bgp->rfapi_cfg->l2_groups, rfg);
+
+ rfapi_l2_group_del(rfg);
}
static int
-bgp_rfapi_delete_named_l2_group (
- struct vty *vty, /* NULL = no output */
- struct bgp *bgp,
- const char *rfg_name) /* NULL = any */
+bgp_rfapi_delete_named_l2_group(struct vty *vty, /* NULL = no output */
+ struct bgp *bgp,
+ const char *rfg_name) /* NULL = any */
{
- struct rfapi_l2_group_cfg *rfg = NULL;
- struct listnode *node, *nnode;
-
- /* Search for name */
- if (rfg_name)
- {
- rfg = rfapi_l2_group_lookup_byname (bgp, rfg_name);
- if (!rfg)
- {
- if (vty)
- vty_out (vty, "No L2 group named \"%s\"\n",rfg_name);
- return CMD_WARNING_CONFIG_FAILED;
- }
- }
-
- if (rfg)
- bgp_rfapi_delete_l2_group (vty, bgp, rfg);
- else /* must be delete all */
- for (ALL_LIST_ELEMENTS (bgp->rfapi_cfg->l2_groups, node, nnode, rfg))
- bgp_rfapi_delete_l2_group (vty, bgp, rfg);
- return CMD_SUCCESS;
+ struct rfapi_l2_group_cfg *rfg = NULL;
+ struct listnode *node, *nnode;
+
+ /* Search for name */
+ if (rfg_name) {
+ rfg = rfapi_l2_group_lookup_byname(bgp, rfg_name);
+ if (!rfg) {
+ if (vty)
+ vty_out(vty, "No L2 group named \"%s\"\n",
+ rfg_name);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ }
+
+ if (rfg)
+ bgp_rfapi_delete_l2_group(vty, bgp, rfg);
+ else /* must be delete all */
+ for (ALL_LIST_ELEMENTS(bgp->rfapi_cfg->l2_groups, node, nnode,
+ rfg))
+ bgp_rfapi_delete_l2_group(vty, bgp, rfg);
+ return CMD_SUCCESS;
}
DEFUN (vnc_no_l2_group,
@@ -3829,14 +3503,13 @@ DEFUN (vnc_no_l2_group,
"Configure a L2 group\n"
"Group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- return bgp_rfapi_delete_named_l2_group (vty, bgp, argv[3]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ return bgp_rfapi_delete_named_l2_group(vty, bgp, argv[3]->arg);
}
@@ -3846,26 +3519,24 @@ DEFUN (vnc_l2_group_lni,
"Specify Logical Network ID associated with group\n"
"value\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current L2 group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- rfg->logical_net_id = strtoul(argv[1]->arg, NULL, 10);
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->l2_groups, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current L2 group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ rfg->logical_net_id = strtoul(argv[1]->arg, NULL, 10);
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_l2_group_labels,
@@ -3874,41 +3545,37 @@ DEFUN (vnc_l2_group_labels,
"Specify label values associated with group\n"
"Space separated list of label values <0-1048575>\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct list *ll;
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current L2 group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ll = rfg->labels;
- if (ll == NULL)
- {
- ll = list_new ();
- rfg->labels = ll;
- }
- argc--;
- argv++;
- for (; argc; --argc, ++argv)
- {
- uint32_t label;
- label = strtoul(argv[0]->arg, NULL, 10);
- if (!listnode_lookup (ll, (void *) (uintptr_t) label))
- listnode_add (ll, (void *) (uintptr_t) label);
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct list *ll;
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->l2_groups, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current L2 group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ll = rfg->labels;
+ if (ll == NULL) {
+ ll = list_new();
+ rfg->labels = ll;
+ }
+ argc--;
+ argv++;
+ for (; argc; --argc, ++argv) {
+ uint32_t label;
+ label = strtoul(argv[0]->arg, NULL, 10);
+ if (!listnode_lookup(ll, (void *)(uintptr_t)label))
+ listnode_add(ll, (void *)(uintptr_t)label);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_l2_group_no_labels,
@@ -3918,41 +3585,37 @@ DEFUN (vnc_l2_group_no_labels,
"Specify label values associated with L2 group\n"
"Space separated list of label values <0-1048575>\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct list *ll;
-
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current L2 group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- ll = rfg->labels;
- if (ll == NULL)
- {
- vty_out (vty, "Label no longer associated with group\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- argc-=2;
- argv+=2;
- for (; argc; --argc, ++argv)
- {
- uint32_t label;
- label = strtoul(argv[0]->arg, NULL, 10);
- listnode_delete (ll, (void *) (uintptr_t) label);
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct list *ll;
+
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->l2_groups, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current L2 group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ ll = rfg->labels;
+ if (ll == NULL) {
+ vty_out(vty, "Label no longer associated with group\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ argc -= 2;
+ argv += 2;
+ for (; argc; --argc, ++argv) {
+ uint32_t label;
+ label = strtoul(argv[0]->arg, NULL, 10);
+ listnode_delete(ll, (void *)(uintptr_t)label);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (vnc_l2_group_rt,
@@ -3964,1086 +3627,1075 @@ DEFUN (vnc_l2_group_rt,
"Import filters\n"
"A route target\n")
{
- VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int rc = CMD_SUCCESS;
- int do_import = 0;
- int do_export = 0;
-
- switch (argv[1]->arg[0])
- {
- case 'b':
- do_export = 1; /* fall through */
- case 'i':
- do_import = 1;
- break;
- case 'e':
- do_export = 1;
- break;
- default:
- vty_out (vty, "Unknown option, %s\n", argv[1]->arg);
- return CMD_ERR_NO_MATCH;
-
- }
- if (!bgp)
- {
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- /* make sure it's still in list */
- if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
- {
- /* Not in list anymore */
- vty_out (vty, "Current L2 group no longer exists\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- if (do_import)
- rc = set_ecom_list (vty, argc-2, argv+2, &rfg->rt_import_list);
- if (rc == CMD_SUCCESS && do_export)
- rc = set_ecom_list (vty, argc-2, argv+2, &rfg->rt_export_list);
- return rc;
+ VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int rc = CMD_SUCCESS;
+ int do_import = 0;
+ int do_export = 0;
+
+ switch (argv[1]->arg[0]) {
+ case 'b':
+ do_export = 1; /* fall through */
+ case 'i':
+ do_import = 1;
+ break;
+ case 'e':
+ do_export = 1;
+ break;
+ default:
+ vty_out(vty, "Unknown option, %s\n", argv[1]->arg);
+ return CMD_ERR_NO_MATCH;
+ }
+ if (!bgp) {
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ /* make sure it's still in list */
+ if (!listnode_lookup(bgp->rfapi_cfg->l2_groups, rfg)) {
+ /* Not in list anymore */
+ vty_out(vty, "Current L2 group no longer exists\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
+ if (do_import)
+ rc = set_ecom_list(vty, argc - 2, argv + 2,
+ &rfg->rt_import_list);
+ if (rc == CMD_SUCCESS && do_export)
+ rc = set_ecom_list(vty, argc - 2, argv + 2,
+ &rfg->rt_export_list);
+ return rc;
}
static struct cmd_node bgp_vnc_l2_group_node = {
- BGP_VNC_L2_GROUP_NODE,
- "%s(config-router-vnc-l2-group)# ",
- 1
-};
+ BGP_VNC_L2_GROUP_NODE, "%s(config-router-vnc-l2-group)# ", 1};
struct rfapi_l2_group_cfg *
-bgp_rfapi_get_group_by_lni_label (
- struct bgp *bgp,
- uint32_t logical_net_id,
- uint32_t label)
+bgp_rfapi_get_group_by_lni_label(struct bgp *bgp, uint32_t logical_net_id,
+ uint32_t label)
{
- struct rfapi_l2_group_cfg *rfg;
- struct listnode *node;
-
- if (bgp->rfapi_cfg->l2_groups == NULL) /* not the best place for this */
- return NULL;
-
- label = label & 0xfffff; /* label is 20 bits! */
-
- for (ALL_LIST_ELEMENTS_RO (bgp->rfapi_cfg->l2_groups, node, rfg))
- {
- if (rfg->logical_net_id == logical_net_id)
- {
- struct listnode *lnode;
- void *data;
- for (ALL_LIST_ELEMENTS_RO (rfg->labels, lnode, data))
- if (((uint32_t) ((uintptr_t) data)) == label)
- { /* match! */
- return rfg;
- }
- }
- }
- return NULL;
+ struct rfapi_l2_group_cfg *rfg;
+ struct listnode *node;
+
+ if (bgp->rfapi_cfg->l2_groups == NULL) /* not the best place for this */
+ return NULL;
+
+ label = label & 0xfffff; /* label is 20 bits! */
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->l2_groups, node, rfg)) {
+ if (rfg->logical_net_id == logical_net_id) {
+ struct listnode *lnode;
+ void *data;
+ for (ALL_LIST_ELEMENTS_RO(rfg->labels, lnode, data))
+ if (((uint32_t)((uintptr_t)data))
+ == label) { /* match! */
+ return rfg;
+ }
+ }
+ }
+ return NULL;
}
-struct list *
-bgp_rfapi_get_labellist_by_lni_label (
- struct bgp *bgp,
- uint32_t logical_net_id,
- uint32_t label)
+struct list *bgp_rfapi_get_labellist_by_lni_label(struct bgp *bgp,
+ uint32_t logical_net_id,
+ uint32_t label)
{
- struct rfapi_l2_group_cfg *rfg;
- rfg = bgp_rfapi_get_group_by_lni_label (bgp, logical_net_id, label);
- if (rfg)
- {
- return rfg->labels;
- }
- return NULL;
+ struct rfapi_l2_group_cfg *rfg;
+ rfg = bgp_rfapi_get_group_by_lni_label(bgp, logical_net_id, label);
+ if (rfg) {
+ return rfg->labels;
+ }
+ return NULL;
}
struct ecommunity *
-bgp_rfapi_get_ecommunity_by_lni_label (
- struct bgp *bgp,
- uint32_t is_import,
- uint32_t logical_net_id,
- uint32_t label)
+bgp_rfapi_get_ecommunity_by_lni_label(struct bgp *bgp, uint32_t is_import,
+ uint32_t logical_net_id, uint32_t label)
{
- struct rfapi_l2_group_cfg *rfg;
- rfg = bgp_rfapi_get_group_by_lni_label (bgp, logical_net_id, label);
- if (rfg)
- {
- if (is_import)
- return rfg->rt_import_list;
- else
- return rfg->rt_export_list;
- }
- return NULL;
+ struct rfapi_l2_group_cfg *rfg;
+ rfg = bgp_rfapi_get_group_by_lni_label(bgp, logical_net_id, label);
+ if (rfg) {
+ if (is_import)
+ return rfg->rt_import_list;
+ else
+ return rfg->rt_export_list;
+ }
+ return NULL;
}
-void
-bgp_rfapi_cfg_init (void)
+void bgp_rfapi_cfg_init(void)
{
- /* main bgpd code does not use this hook, but vnc does */
- route_map_event_hook (vnc_routemap_event);
-
- install_node (&bgp_vnc_defaults_node, NULL);
- install_node (&bgp_vnc_nve_group_node, NULL);
- install_node (&bgp_vrf_policy_node, NULL);
- install_node (&bgp_vnc_l2_group_node, NULL);
- install_default (BGP_VRF_POLICY_NODE);
- install_default (BGP_VNC_DEFAULTS_NODE);
- install_default (BGP_VNC_NVE_GROUP_NODE);
- install_default (BGP_VNC_L2_GROUP_NODE);
-
- /*
- * Add commands
- */
- install_element (BGP_NODE, &vnc_defaults_cmd);
- install_element (BGP_NODE, &vnc_nve_group_cmd);
- install_element (BGP_NODE, &vnc_no_nve_group_cmd);
- install_element (BGP_NODE, &vnc_vrf_policy_cmd);
- install_element (BGP_NODE, &vnc_no_vrf_policy_cmd);
- install_element (BGP_NODE, &vnc_l2_group_cmd);
- install_element (BGP_NODE, &vnc_no_l2_group_cmd);
- install_element (BGP_NODE, &vnc_advertise_un_method_cmd);
- install_element (BGP_NODE, &vnc_export_mode_cmd);
-
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rt_import_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rt_export_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rt_both_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rd_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_l2rd_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_no_l2rd_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &vnc_defaults_responselifetime_cmd);
- install_element (BGP_VNC_DEFAULTS_NODE, &exit_vnc_cmd);
-
- install_element (BGP_NODE, &vnc_redistribute_protocol_cmd);
- install_element (BGP_NODE, &vnc_no_redistribute_protocol_cmd);
- install_element (BGP_NODE, &vnc_redistribute_nvegroup_cmd);
- install_element (BGP_NODE, &vnc_redistribute_no_nvegroup_cmd);
- install_element (BGP_NODE, &vnc_redistribute_lifetime_cmd);
- install_element (BGP_NODE, &vnc_redistribute_rh_roo_localadmin_cmd);
- install_element (BGP_NODE, &vnc_redistribute_mode_cmd);
- install_element (BGP_NODE, &vnc_redistribute_bgp_exterior_cmd);
-
- install_element (BGP_NODE, &vnc_redist_bgpdirect_no_prefixlist_cmd);
- install_element (BGP_NODE, &vnc_redist_bgpdirect_prefixlist_cmd);
- install_element (BGP_NODE, &vnc_redist_bgpdirect_no_routemap_cmd);
- install_element (BGP_NODE, &vnc_redist_bgpdirect_routemap_cmd);
-
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_redist_bgpdirect_no_prefixlist_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_redist_bgpdirect_prefixlist_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_redist_bgpdirect_no_routemap_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_redist_bgpdirect_routemap_cmd);
-
- install_element (BGP_NODE, &vnc_export_nvegroup_cmd);
- install_element (BGP_NODE, &vnc_no_export_nvegroup_cmd);
- install_element (BGP_NODE, &vnc_nve_export_prefixlist_cmd);
- install_element (BGP_NODE, &vnc_nve_export_routemap_cmd);
- install_element (BGP_NODE, &vnc_nve_export_no_prefixlist_cmd);
- install_element (BGP_NODE, &vnc_nve_export_no_routemap_cmd);
-
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_l2rd_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_no_l2rd_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_prefix_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rt_import_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rt_export_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rt_both_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rd_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_responselifetime_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_export_prefixlist_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_export_routemap_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_export_no_prefixlist_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE,
- &vnc_nve_group_export_no_routemap_cmd);
- install_element (BGP_VNC_NVE_GROUP_NODE, &exit_vnc_cmd);
-
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_label_cmd);
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_no_label_cmd);
- //Reenable to support VRF controller use case and testing
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_nexthop_cmd);
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rt_import_cmd);
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rt_export_cmd);
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rt_both_cmd);
- install_element (BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rd_cmd);
- install_element (BGP_VRF_POLICY_NODE, &exit_vrf_policy_cmd);
-
- install_element (BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_lni_cmd);
- install_element (BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_labels_cmd);
- install_element (BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_no_labels_cmd);
- install_element (BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_rt_cmd);
- install_element (BGP_VNC_L2_GROUP_NODE, &exit_vnc_cmd);
+ /* main bgpd code does not use this hook, but vnc does */
+ route_map_event_hook(vnc_routemap_event);
+
+ install_node(&bgp_vnc_defaults_node, NULL);
+ install_node(&bgp_vnc_nve_group_node, NULL);
+ install_node(&bgp_vrf_policy_node, NULL);
+ install_node(&bgp_vnc_l2_group_node, NULL);
+ install_default(BGP_VRF_POLICY_NODE);
+ install_default(BGP_VNC_DEFAULTS_NODE);
+ install_default(BGP_VNC_NVE_GROUP_NODE);
+ install_default(BGP_VNC_L2_GROUP_NODE);
+
+ /*
+ * Add commands
+ */
+ install_element(BGP_NODE, &vnc_defaults_cmd);
+ install_element(BGP_NODE, &vnc_nve_group_cmd);
+ install_element(BGP_NODE, &vnc_no_nve_group_cmd);
+ install_element(BGP_NODE, &vnc_vrf_policy_cmd);
+ install_element(BGP_NODE, &vnc_no_vrf_policy_cmd);
+ install_element(BGP_NODE, &vnc_l2_group_cmd);
+ install_element(BGP_NODE, &vnc_no_l2_group_cmd);
+ install_element(BGP_NODE, &vnc_advertise_un_method_cmd);
+ install_element(BGP_NODE, &vnc_export_mode_cmd);
+
+ install_element(BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rt_import_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rt_export_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rt_both_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE, &vnc_defaults_rd_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE, &vnc_defaults_l2rd_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE, &vnc_defaults_no_l2rd_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE,
+ &vnc_defaults_responselifetime_cmd);
+ install_element(BGP_VNC_DEFAULTS_NODE, &exit_vnc_cmd);
+
+ install_element(BGP_NODE, &vnc_redistribute_protocol_cmd);
+ install_element(BGP_NODE, &vnc_no_redistribute_protocol_cmd);
+ install_element(BGP_NODE, &vnc_redistribute_nvegroup_cmd);
+ install_element(BGP_NODE, &vnc_redistribute_no_nvegroup_cmd);
+ install_element(BGP_NODE, &vnc_redistribute_lifetime_cmd);
+ install_element(BGP_NODE, &vnc_redistribute_rh_roo_localadmin_cmd);
+ install_element(BGP_NODE, &vnc_redistribute_mode_cmd);
+ install_element(BGP_NODE, &vnc_redistribute_bgp_exterior_cmd);
+
+ install_element(BGP_NODE, &vnc_redist_bgpdirect_no_prefixlist_cmd);
+ install_element(BGP_NODE, &vnc_redist_bgpdirect_prefixlist_cmd);
+ install_element(BGP_NODE, &vnc_redist_bgpdirect_no_routemap_cmd);
+ install_element(BGP_NODE, &vnc_redist_bgpdirect_routemap_cmd);
+
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_redist_bgpdirect_no_prefixlist_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_redist_bgpdirect_prefixlist_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_redist_bgpdirect_no_routemap_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_redist_bgpdirect_routemap_cmd);
+
+ install_element(BGP_NODE, &vnc_export_nvegroup_cmd);
+ install_element(BGP_NODE, &vnc_no_export_nvegroup_cmd);
+ install_element(BGP_NODE, &vnc_nve_export_prefixlist_cmd);
+ install_element(BGP_NODE, &vnc_nve_export_routemap_cmd);
+ install_element(BGP_NODE, &vnc_nve_export_no_prefixlist_cmd);
+ install_element(BGP_NODE, &vnc_nve_export_no_routemap_cmd);
+
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_l2rd_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_no_l2rd_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_prefix_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rt_import_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rt_export_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rt_both_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &vnc_nve_group_rd_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_responselifetime_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_export_prefixlist_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_export_routemap_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_export_no_prefixlist_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE,
+ &vnc_nve_group_export_no_routemap_cmd);
+ install_element(BGP_VNC_NVE_GROUP_NODE, &exit_vnc_cmd);
+
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_label_cmd);
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_no_label_cmd);
+ // Reenable to support VRF controller use case and testing
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_nexthop_cmd);
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rt_import_cmd);
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rt_export_cmd);
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rt_both_cmd);
+ install_element(BGP_VRF_POLICY_NODE, &vnc_vrf_policy_rd_cmd);
+ install_element(BGP_VRF_POLICY_NODE, &exit_vrf_policy_cmd);
+
+ install_element(BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_lni_cmd);
+ install_element(BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_labels_cmd);
+ install_element(BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_no_labels_cmd);
+ install_element(BGP_VNC_L2_GROUP_NODE, &vnc_l2_group_rt_cmd);
+ install_element(BGP_VNC_L2_GROUP_NODE, &exit_vnc_cmd);
}
-struct rfapi_cfg *
-bgp_rfapi_cfg_new (struct rfapi_rfp_cfg *cfg)
+struct rfapi_cfg *bgp_rfapi_cfg_new(struct rfapi_rfp_cfg *cfg)
{
- struct rfapi_cfg *h;
- int afi;
-
- h =
- (struct rfapi_cfg *) XCALLOC (MTYPE_RFAPI_CFG, sizeof (struct rfapi_cfg));
- assert (h);
-
- h->nve_groups_sequential = list_new ();
- assert (h->nve_groups_sequential);
-
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- {
- /* ugly, to deal with addition of delegates, part of 0.99.24.1 merge */
- h->nve_groups_vn[afi].delegate = route_table_get_default_delegate ();
- h->nve_groups_un[afi].delegate = route_table_get_default_delegate ();
- }
- h->default_response_lifetime = BGP_VNC_DEFAULT_RESPONSE_LIFETIME_DEFAULT;
- h->rfg_export_direct_bgp_l = list_new ();
- h->rfg_export_zebra_l = list_new ();
- h->resolve_nve_roo_local_admin =
- BGP_VNC_CONFIG_RESOLVE_NVE_ROO_LOCAL_ADMIN_DEFAULT;
-
- SET_FLAG (h->flags, BGP_VNC_CONFIG_FLAGS_DEFAULT);
-
- if (cfg == NULL)
- {
- h->rfp_cfg.download_type = RFAPI_RFP_DOWNLOAD_PARTIAL;
- h->rfp_cfg.ftd_advertisement_interval =
- RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL;
- h->rfp_cfg.holddown_factor = RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR;
- h->rfp_cfg.use_updated_response = 0;
- h->rfp_cfg.use_removes = 0;
- }
- else
- {
- h->rfp_cfg.download_type = cfg->download_type;
- h->rfp_cfg.ftd_advertisement_interval = cfg->ftd_advertisement_interval;
- h->rfp_cfg.holddown_factor = cfg->holddown_factor;
- h->rfp_cfg.use_updated_response = cfg->use_updated_response;
- h->rfp_cfg.use_removes = cfg->use_removes;
- if (cfg->use_updated_response)
- h->flags &= ~BGP_VNC_CONFIG_CALLBACK_DISABLE;
- else
- h->flags |= BGP_VNC_CONFIG_CALLBACK_DISABLE;
- if (cfg->use_removes)
- h->flags &= ~BGP_VNC_CONFIG_RESPONSE_REMOVAL_DISABLE;
- else
- h->flags |= BGP_VNC_CONFIG_RESPONSE_REMOVAL_DISABLE;
- }
- return h;
+ struct rfapi_cfg *h;
+ int afi;
+
+ h = (struct rfapi_cfg *)XCALLOC(MTYPE_RFAPI_CFG,
+ sizeof(struct rfapi_cfg));
+ assert(h);
+
+ h->nve_groups_sequential = list_new();
+ assert(h->nve_groups_sequential);
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ /* ugly, to deal with addition of delegates, part of 0.99.24.1
+ * merge */
+ h->nve_groups_vn[afi].delegate =
+ route_table_get_default_delegate();
+ h->nve_groups_un[afi].delegate =
+ route_table_get_default_delegate();
+ }
+ h->default_response_lifetime =
+ BGP_VNC_DEFAULT_RESPONSE_LIFETIME_DEFAULT;
+ h->rfg_export_direct_bgp_l = list_new();
+ h->rfg_export_zebra_l = list_new();
+ h->resolve_nve_roo_local_admin =
+ BGP_VNC_CONFIG_RESOLVE_NVE_ROO_LOCAL_ADMIN_DEFAULT;
+
+ SET_FLAG(h->flags, BGP_VNC_CONFIG_FLAGS_DEFAULT);
+
+ if (cfg == NULL) {
+ h->rfp_cfg.download_type = RFAPI_RFP_DOWNLOAD_PARTIAL;
+ h->rfp_cfg.ftd_advertisement_interval =
+ RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL;
+ h->rfp_cfg.holddown_factor =
+ RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR;
+ h->rfp_cfg.use_updated_response = 0;
+ h->rfp_cfg.use_removes = 0;
+ } else {
+ h->rfp_cfg.download_type = cfg->download_type;
+ h->rfp_cfg.ftd_advertisement_interval =
+ cfg->ftd_advertisement_interval;
+ h->rfp_cfg.holddown_factor = cfg->holddown_factor;
+ h->rfp_cfg.use_updated_response = cfg->use_updated_response;
+ h->rfp_cfg.use_removes = cfg->use_removes;
+ if (cfg->use_updated_response)
+ h->flags &= ~BGP_VNC_CONFIG_CALLBACK_DISABLE;
+ else
+ h->flags |= BGP_VNC_CONFIG_CALLBACK_DISABLE;
+ if (cfg->use_removes)
+ h->flags &= ~BGP_VNC_CONFIG_RESPONSE_REMOVAL_DISABLE;
+ else
+ h->flags |= BGP_VNC_CONFIG_RESPONSE_REMOVAL_DISABLE;
+ }
+ return h;
}
-void
-bgp_rfapi_cfg_destroy (struct bgp *bgp, struct rfapi_cfg *h)
+void bgp_rfapi_cfg_destroy(struct bgp *bgp, struct rfapi_cfg *h)
{
- if (h == NULL)
- return;
-
- bgp_rfapi_delete_named_nve_group (NULL, bgp, NULL, RFAPI_GROUP_CFG_MAX);
- bgp_rfapi_delete_named_l2_group (NULL, bgp, NULL);
- if (h->l2_groups != NULL)
- list_delete (h->l2_groups);
- list_delete (h->nve_groups_sequential);
- list_delete (h->rfg_export_direct_bgp_l);
- list_delete (h->rfg_export_zebra_l);
- if (h->default_rt_export_list)
- ecommunity_free (&h->default_rt_export_list);
- if (h->default_rt_import_list)
- ecommunity_free (&h->default_rt_import_list);
- if (h->default_rfp_cfg)
- XFREE (MTYPE_RFAPI_RFP_GROUP_CFG, h->default_rfp_cfg);
- XFREE (MTYPE_RFAPI_CFG, h);
-
+ if (h == NULL)
+ return;
+
+ bgp_rfapi_delete_named_nve_group(NULL, bgp, NULL, RFAPI_GROUP_CFG_MAX);
+ bgp_rfapi_delete_named_l2_group(NULL, bgp, NULL);
+ if (h->l2_groups != NULL)
+ list_delete(h->l2_groups);
+ list_delete(h->nve_groups_sequential);
+ list_delete(h->rfg_export_direct_bgp_l);
+ list_delete(h->rfg_export_zebra_l);
+ if (h->default_rt_export_list)
+ ecommunity_free(&h->default_rt_export_list);
+ if (h->default_rt_import_list)
+ ecommunity_free(&h->default_rt_import_list);
+ if (h->default_rfp_cfg)
+ XFREE(MTYPE_RFAPI_RFP_GROUP_CFG, h->default_rfp_cfg);
+ XFREE(MTYPE_RFAPI_CFG, h);
}
-int
-bgp_rfapi_cfg_write (struct vty *vty, struct bgp *bgp)
+int bgp_rfapi_cfg_write(struct vty *vty, struct bgp *bgp)
{
- struct listnode *node, *nnode;
- struct rfapi_nve_group_cfg *rfg;
- struct rfapi_cfg *hc = bgp->rfapi_cfg;
- struct rfapi_rfg_name *rfgn;
- int write = 0;
- afi_t afi;
- int type;
- if (bgp->rfapi == NULL || hc == NULL)
- return write;
-
- vty_out (vty, "!\n");
- for (ALL_LIST_ELEMENTS (hc->nve_groups_sequential, node, nnode, rfg))
- if (rfg->type == RFAPI_GROUP_CFG_VRF)
- {
- ++write;
- vty_out (vty, " vrf-policy %s\n", rfg->name);
- if (rfg->label <= MPLS_LABEL_MAX)
- {
- vty_out (vty, " label %u\n", rfg->label);
-
- }
- if (CHECK_FLAG (rfg->flags, RFAPI_RFG_VPN_NH_SELF))
- {
- vty_out (vty, " nexthop self\n");
-
- }
- else
- {
- if (rfg->vn_prefix.family)
- {
- char buf[BUFSIZ];
- buf[0] = buf[BUFSIZ - 1] = 0;
- inet_ntop(rfg->vn_prefix.family, &rfg->vn_prefix.u.prefix, buf, sizeof(buf));
- if (!buf[0] || buf[BUFSIZ - 1])
- {
- //vty_out (vty, "nexthop self\n");
- }
- else
- {
- vty_out (vty, " nexthop %s\n", buf);
- }
- }
- }
-
- if (rfg->rd.prefixlen)
- {
- char buf[BUFSIZ];
- buf[0] = buf[BUFSIZ - 1] = 0;
-
- if (AF_UNIX == rfg->rd.family)
- {
-
- uint16_t value = 0;
-
- value = ((rfg->rd.val[6] << 8) & 0x0ff00) |
- (rfg->rd.val[7] & 0x0ff);
-
- vty_out (vty, " rd auto:nh:%d\n", value);
-
- }
- else
- {
-
- if (!prefix_rd2str (&rfg->rd, buf, BUFSIZ) ||
- !buf[0] || buf[BUFSIZ - 1])
- {
-
- vty_out (vty, "!Error: Can't convert rd\n");
- }
- else
- {
- vty_out (vty, " rd %s\n", buf);
- }
- }
- }
-
- if (rfg->rt_import_list && rfg->rt_export_list &&
- ecommunity_cmp (rfg->rt_import_list, rfg->rt_export_list))
- {
- char *b = ecommunity_ecom2str (rfg->rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt both %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- else
- {
- if (rfg->rt_import_list)
- {
- char *b = ecommunity_ecom2str (rfg->rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt import %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- if (rfg->rt_export_list)
- {
- char *b = ecommunity_ecom2str (rfg->rt_export_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt export %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- }
-
- /*
- * route filtering: prefix-lists and route-maps
- */
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
-
- const char *afistr = (afi == AFI_IP) ? "ipv4" : "ipv6";
-
- if (rfg->plist_export_bgp_name[afi])
- {
- vty_out (vty, " export bgp %s prefix-list %s\n",
- afistr,rfg->plist_export_bgp_name[afi]);
- }
- if (rfg->plist_export_zebra_name[afi])
- {
- vty_out (vty, " export zebra %s prefix-list %s\n",
- afistr,rfg->plist_export_zebra_name[afi]);
- }
- /*
- * currently we only support redist plists for bgp-direct.
- * If we later add plist support for redistributing other
- * protocols, we'll need to loop over protocols here
- */
- if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
- {
- vty_out (vty, " redistribute bgp-direct %s prefix-list %s\n",
- afistr,
- rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
- }
- if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT][afi])
- {
- vty_out (vty,
- " redistribute bgp-direct-to-nve-groups %s prefix-list %s\n",
- afistr,
- rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT][afi]);
- }
- }
-
- if (rfg->routemap_export_bgp_name)
- {
- vty_out (vty, " export bgp route-map %s\n",
- rfg->routemap_export_bgp_name);
- }
- if (rfg->routemap_export_zebra_name)
- {
- vty_out (vty, " export zebra route-map %s\n",
- rfg->routemap_export_zebra_name);
- }
- if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
- {
- vty_out (vty, " redistribute bgp-direct route-map %s\n",
- rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
- }
- if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT])
- {
- vty_out (vty,
- " redistribute bgp-direct-to-nve-groups route-map %s\n",
- rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT]);
- }
- vty_out (vty, " exit-vrf-policy\n");
- vty_out (vty, "!\n");
- }
- if (hc->flags & BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP)
- {
- vty_out (vty, " vnc advertise-un-method encap-safi\n");
- write++;
- }
-
- { /* was based on listen ports */
- /* for now allow both old and new */
- if (bgp->rfapi->rfp_methods.cfg_cb)
- write += (bgp->rfapi->rfp_methods.cfg_cb) (vty, bgp->rfapi->rfp);
-
- if (write)
- vty_out (vty, "!\n");
-
- if (hc->l2_groups)
- {
- struct rfapi_l2_group_cfg *rfg = NULL;
- struct listnode *gnode;
- for (ALL_LIST_ELEMENTS_RO (hc->l2_groups, gnode, rfg))
- {
- struct listnode *lnode;
- void *data;
- ++write;
- vty_out (vty, " vnc l2-group %s\n", rfg->name);
- if (rfg->logical_net_id != 0)
- vty_out (vty, " logical-network-id %u\n",
- rfg->logical_net_id);
- if (rfg->labels != NULL && listhead (rfg->labels) != NULL)
- {
- vty_out (vty, " labels ");
- for (ALL_LIST_ELEMENTS_RO (rfg->labels, lnode, data))
- {
- vty_out (vty, "%hu ", (uint16_t) ((uintptr_t) data));
- }
- vty_out (vty, "\n");
- }
-
- if (rfg->rt_import_list && rfg->rt_export_list &&
- ecommunity_cmp (rfg->rt_import_list, rfg->rt_export_list))
- {
- char *b = ecommunity_ecom2str (rfg->rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt both %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- else
- {
- if (rfg->rt_import_list)
- {
- char *b = ecommunity_ecom2str (rfg->rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt import %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- if (rfg->rt_export_list)
- {
- char *b = ecommunity_ecom2str (rfg->rt_export_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt export %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- }
- if (bgp->rfapi->rfp_methods.cfg_group_cb)
- write +=
- (bgp->rfapi->rfp_methods.cfg_group_cb) (vty,
- bgp->rfapi->rfp,
- RFAPI_RFP_CFG_GROUP_L2,
- rfg->name,
- rfg->rfp_cfg);
- vty_out (vty, " exit-vnc\n");
- vty_out (vty, "!\n");
- }
- }
-
- if (hc->default_rd.family ||
- hc->default_response_lifetime ||
- hc->default_rt_import_list ||
- hc->default_rt_export_list || hc->nve_groups_sequential->count)
- {
-
-
- ++write;
- vty_out (vty, " vnc defaults\n");
-
- if (hc->default_rd.prefixlen)
- {
- char buf[BUFSIZ];
- buf[0] = buf[BUFSIZ - 1] = 0;
-
- if (AF_UNIX == hc->default_rd.family)
- {
- uint16_t value = 0;
-
- value = ((hc->default_rd.val[6] << 8) & 0x0ff00) |
- (hc->default_rd.val[7] & 0x0ff);
-
- vty_out (vty, " rd auto:vn:%d\n", value);
-
- }
- else
- {
-
- if (!prefix_rd2str (&hc->default_rd, buf, BUFSIZ) ||
- !buf[0] || buf[BUFSIZ - 1])
- {
-
- vty_out (vty, "!Error: Can't convert rd\n");
- }
- else
- {
- vty_out (vty, " rd %s\n", buf);
- }
- }
- }
- if (hc->default_response_lifetime)
- {
- vty_out (vty, " response-lifetime ");
- if (hc->default_response_lifetime != UINT32_MAX)
- vty_out (vty, "%d", hc->default_response_lifetime);
- else
- vty_out (vty, "infinite");
- vty_out (vty, "\n");
- }
- if (hc->default_rt_import_list && hc->default_rt_export_list &&
- ecommunity_cmp (hc->default_rt_import_list,
- hc->default_rt_export_list))
- {
- char *b = ecommunity_ecom2str (hc->default_rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt both %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- else
- {
- if (hc->default_rt_import_list)
- {
- char *b = ecommunity_ecom2str (hc->default_rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt import %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- if (hc->default_rt_export_list)
- {
- char *b = ecommunity_ecom2str (hc->default_rt_export_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt export %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- }
- if (bgp->rfapi->rfp_methods.cfg_group_cb)
- write +=
- (bgp->rfapi->rfp_methods.cfg_group_cb) (vty,
- bgp->rfapi->rfp,
- RFAPI_RFP_CFG_GROUP_DEFAULT,
- NULL,
- bgp->rfapi_cfg->default_rfp_cfg);
- vty_out (vty, " exit-vnc\n");
- vty_out (vty, "!\n");
- }
-
- for (ALL_LIST_ELEMENTS (hc->nve_groups_sequential, node, nnode, rfg))
- if (rfg->type == RFAPI_GROUP_CFG_NVE)
- {
- ++write;
- vty_out (vty, " vnc nve-group %s\n", rfg->name);
-
- if (rfg->vn_prefix.family && rfg->vn_node)
- {
- char buf[BUFSIZ];
- buf[0] = buf[BUFSIZ - 1] = 0;
-
- prefix2str (&rfg->vn_prefix, buf, BUFSIZ);
- if (!buf[0] || buf[BUFSIZ - 1])
- {
- vty_out (vty, "!Error: Can't convert prefix\n");
- }
- else
- {
- vty_out (vty, " prefix %s %s\n", "vn", buf);
- }
- }
-
- if (rfg->un_prefix.family && rfg->un_node)
- {
- char buf[BUFSIZ];
- buf[0] = buf[BUFSIZ - 1] = 0;
- prefix2str (&rfg->un_prefix, buf, BUFSIZ);
- if (!buf[0] || buf[BUFSIZ - 1])
- {
- vty_out (vty, "!Error: Can't convert prefix\n");
- }
- else
- {
- vty_out (vty, " prefix %s %s\n", "un", buf);
- }
- }
-
-
- if (rfg->rd.prefixlen)
- {
- char buf[BUFSIZ];
- buf[0] = buf[BUFSIZ - 1] = 0;
-
- if (AF_UNIX == rfg->rd.family)
- {
-
- uint16_t value = 0;
-
- value = ((rfg->rd.val[6] << 8) & 0x0ff00) |
- (rfg->rd.val[7] & 0x0ff);
-
- vty_out (vty, " rd auto:vn:%d\n", value);
-
- }
- else
- {
-
- if (!prefix_rd2str (&rfg->rd, buf, BUFSIZ) ||
- !buf[0] || buf[BUFSIZ - 1])
- {
-
- vty_out (vty, "!Error: Can't convert rd\n");
- }
- else
- {
- vty_out (vty, " rd %s\n", buf);
- }
- }
- }
- if (rfg->flags & RFAPI_RFG_RESPONSE_LIFETIME)
- {
- vty_out (vty, " response-lifetime ");
- if (rfg->response_lifetime != UINT32_MAX)
- vty_out (vty, "%d", rfg->response_lifetime);
- else
- vty_out (vty, "infinite");
- vty_out (vty, "\n");
- }
-
- if (rfg->rt_import_list && rfg->rt_export_list &&
- ecommunity_cmp (rfg->rt_import_list, rfg->rt_export_list))
- {
- char *b = ecommunity_ecom2str (rfg->rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP,
- ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt both %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- else
- {
- if (rfg->rt_import_list)
- {
- char *b = ecommunity_ecom2str (rfg->rt_import_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP,
- ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt import %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- if (rfg->rt_export_list)
- {
- char *b = ecommunity_ecom2str (rfg->rt_export_list,
- ECOMMUNITY_FORMAT_ROUTE_MAP, ECOMMUNITY_ROUTE_TARGET);
- vty_out (vty, " rt export %s\n", b);
- XFREE (MTYPE_ECOMMUNITY_STR, b);
- }
- }
-
- /*
- * route filtering: prefix-lists and route-maps
- */
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
-
- const char *afistr = (afi == AFI_IP) ? "ipv4" : "ipv6";
-
- if (rfg->plist_export_bgp_name[afi])
- {
- vty_out (vty, " export bgp %s prefix-list %s\n",
- afistr,rfg->plist_export_bgp_name[afi]);
- }
- if (rfg->plist_export_zebra_name[afi])
- {
- vty_out (vty, " export zebra %s prefix-list %s\n",
- afistr,rfg->plist_export_zebra_name[afi]);
- }
- /*
- * currently we only support redist plists for bgp-direct.
- * If we later add plist support for redistributing other
- * protocols, we'll need to loop over protocols here
- */
- if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
- {
- vty_out (vty, " redistribute bgp-direct %s prefix-list %s\n",
- afistr,
- rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
- }
- if (rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT][afi])
- {
- vty_out (vty,
- " redistribute bgp-direct-to-nve-groups %s prefix-list %s\n",
- afistr,
- rfg->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT][afi]);
- }
- }
-
- if (rfg->routemap_export_bgp_name)
- {
- vty_out (vty, " export bgp route-map %s\n",
- rfg->routemap_export_bgp_name);
- }
- if (rfg->routemap_export_zebra_name)
- {
- vty_out (vty, " export zebra route-map %s\n",
- rfg->routemap_export_zebra_name);
- }
- if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
- {
- vty_out (vty, " redistribute bgp-direct route-map %s\n",
- rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
- }
- if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT])
- {
- vty_out (vty,
- " redistribute bgp-direct-to-nve-groups route-map %s\n",
- rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT_EXT]);
- }
- if (bgp->rfapi->rfp_methods.cfg_group_cb)
- write +=
- (bgp->rfapi->rfp_methods.cfg_group_cb) (vty,
- bgp->rfapi->rfp,
- RFAPI_RFP_CFG_GROUP_NVE,
- rfg->name, rfg->rfp_cfg);
- vty_out (vty, " exit-vnc\n");
- vty_out (vty, "!\n");
- }
- } /* have listen ports */
-
- /*
- * route export to other protocols
- */
- if (VNC_EXPORT_BGP_GRP_ENABLED (hc))
- {
- vty_out (vty, " vnc export bgp mode group-nve\n");
- }
- else if (VNC_EXPORT_BGP_RH_ENABLED (hc))
- {
- vty_out (vty, " vnc export bgp mode registering-nve\n");
- }
- else if (VNC_EXPORT_BGP_CE_ENABLED (hc))
- {
- vty_out (vty, " vnc export bgp mode ce\n");
- }
-
- if (VNC_EXPORT_ZEBRA_GRP_ENABLED (hc))
- {
- vty_out (vty, " vnc export zebra mode group-nve\n");
- }
- else if (VNC_EXPORT_ZEBRA_RH_ENABLED (hc))
- {
- vty_out (vty, " vnc export zebra mode registering-nve\n");
- }
-
- if (hc->rfg_export_direct_bgp_l)
- {
- for (ALL_LIST_ELEMENTS (hc->rfg_export_direct_bgp_l, node, nnode, rfgn))
- {
-
- vty_out (vty, " vnc export bgp group-nve group %s\n",
- rfgn->name);
- }
- }
-
- if (hc->rfg_export_zebra_l)
- {
- for (ALL_LIST_ELEMENTS (hc->rfg_export_zebra_l, node, nnode, rfgn))
- {
-
- vty_out (vty, " vnc export zebra group-nve group %s\n",
- rfgn->name);
- }
- }
-
-
- if (hc->rfg_redist_name)
- {
- vty_out (vty, " vnc redistribute nve-group %s\n",
- hc->rfg_redist_name);
- }
- if (hc->redist_lifetime)
- {
- vty_out (vty, " vnc redistribute lifetime %d\n",
- hc->redist_lifetime);
- }
- if (hc->resolve_nve_roo_local_admin !=
- BGP_VNC_CONFIG_RESOLVE_NVE_ROO_LOCAL_ADMIN_DEFAULT)
- {
-
- vty_out (vty, " vnc redistribute resolve-nve roo-ec-local-admin %d\n",
- hc->resolve_nve_roo_local_admin);
- }
-
- if (hc->redist_mode) /* ! default */
- {
- const char *s = "";
-
- switch (hc->redist_mode)
- {
- case VNC_REDIST_MODE_PLAIN:
- s = "plain";
- break;
- case VNC_REDIST_MODE_RFG:
- s = "nve-group";
- break;
- case VNC_REDIST_MODE_RESOLVE_NVE:
- s = "resolve-nve";
- break;
- }
- if (s)
- {
- vty_out (vty, " vnc redistribute mode %s\n", s);
- }
- }
-
- /*
- * route filtering: prefix-lists and route-maps
- */
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
-
- const char *afistr = (afi == AFI_IP) ? "ipv4" : "ipv6";
-
- if (hc->plist_export_bgp_name[afi])
- {
- vty_out (vty, " vnc export bgp %s prefix-list %s\n",
- afistr, hc->plist_export_bgp_name[afi]);
- }
- if (hc->plist_export_zebra_name[afi])
- {
- vty_out (vty, " vnc export zebra %s prefix-list %s\n",
- afistr, hc->plist_export_zebra_name[afi]);
- }
- if (hc->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi])
- {
- vty_out (vty, " vnc redistribute bgp-direct %s prefix-list %s\n",
- afistr,hc->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]);
- }
- }
-
- if (hc->routemap_export_bgp_name)
- {
- vty_out (vty, " vnc export bgp route-map %s\n",
- hc->routemap_export_bgp_name);
- }
- if (hc->routemap_export_zebra_name)
- {
- vty_out (vty, " vnc export zebra route-map %s\n",
- hc->routemap_export_zebra_name);
- }
- if (hc->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT])
- {
- vty_out (vty, " vnc redistribute bgp-direct route-map %s\n",
- hc->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
- }
-
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
- for (type = 0; type < ZEBRA_ROUTE_MAX; ++type)
- {
- if (hc->redist[afi][type])
- {
- if (type == ZEBRA_ROUTE_BGP_DIRECT_EXT &&
- hc->redist_bgp_exterior_view_name)
- {
- vty_out (vty, " vnc redistribute %s %s view %s\n",
- ((afi == AFI_IP) ? "ipv4" : "ipv6"),
- zebra_route_string (type),
- hc->redist_bgp_exterior_view_name);
- }
- else
- {
- vty_out (vty, " vnc redistribute %s %s\n",
- ((afi == AFI_IP) ? "ipv4" : "ipv6"),
- zebra_route_string(type));
- }
- }
- }
- }
- return write;
+ struct listnode *node, *nnode;
+ struct rfapi_nve_group_cfg *rfg;
+ struct rfapi_cfg *hc = bgp->rfapi_cfg;
+ struct rfapi_rfg_name *rfgn;
+ int write = 0;
+ afi_t afi;
+ int type;
+ if (bgp->rfapi == NULL || hc == NULL)
+ return write;
+
+ vty_out(vty, "!\n");
+ for (ALL_LIST_ELEMENTS(hc->nve_groups_sequential, node, nnode, rfg))
+ if (rfg->type == RFAPI_GROUP_CFG_VRF) {
+ ++write;
+ vty_out(vty, " vrf-policy %s\n", rfg->name);
+ if (rfg->label <= MPLS_LABEL_MAX) {
+ vty_out(vty, " label %u\n", rfg->label);
+ }
+ if (CHECK_FLAG(rfg->flags, RFAPI_RFG_VPN_NH_SELF)) {
+ vty_out(vty, " nexthop self\n");
+
+ } else {
+ if (rfg->vn_prefix.family) {
+ char buf[BUFSIZ];
+ buf[0] = buf[BUFSIZ - 1] = 0;
+ inet_ntop(rfg->vn_prefix.family,
+ &rfg->vn_prefix.u.prefix, buf,
+ sizeof(buf));
+ if (!buf[0] || buf[BUFSIZ - 1]) {
+ // vty_out (vty, "nexthop
+ // self\n");
+ } else {
+ vty_out(vty, " nexthop %s\n",
+ buf);
+ }
+ }
+ }
+
+ if (rfg->rd.prefixlen) {
+ char buf[BUFSIZ];
+ buf[0] = buf[BUFSIZ - 1] = 0;
+
+ if (AF_UNIX == rfg->rd.family) {
+
+ uint16_t value = 0;
+
+ value = ((rfg->rd.val[6] << 8)
+ & 0x0ff00)
+ | (rfg->rd.val[7] & 0x0ff);
+
+ vty_out(vty, " rd auto:nh:%d\n",
+ value);
+
+ } else {
+
+ if (!prefix_rd2str(&rfg->rd, buf,
+ BUFSIZ)
+ || !buf[0] || buf[BUFSIZ - 1]) {
+
+ vty_out(vty,
+ "!Error: Can't convert rd\n");
+ } else {
+ vty_out(vty, " rd %s\n", buf);
+ }
+ }
+ }
+
+ if (rfg->rt_import_list && rfg->rt_export_list
+ && ecommunity_cmp(rfg->rt_import_list,
+ rfg->rt_export_list)) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt both %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ } else {
+ if (rfg->rt_import_list) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt import %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ if (rfg->rt_export_list) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_export_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt export %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ }
+
+ /*
+ * route filtering: prefix-lists and route-maps
+ */
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+
+ const char *afistr =
+ (afi == AFI_IP) ? "ipv4" : "ipv6";
+
+ if (rfg->plist_export_bgp_name[afi]) {
+ vty_out(vty,
+ " export bgp %s prefix-list %s\n",
+ afistr,
+ rfg->plist_export_bgp_name
+ [afi]);
+ }
+ if (rfg->plist_export_zebra_name[afi]) {
+ vty_out(vty,
+ " export zebra %s prefix-list %s\n",
+ afistr,
+ rfg->plist_export_zebra_name
+ [afi]);
+ }
+ /*
+ * currently we only support redist plists for
+ * bgp-direct.
+ * If we later add plist support for
+ * redistributing other
+ * protocols, we'll need to loop over protocols
+ * here
+ */
+ if (rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT][afi]) {
+ vty_out(vty,
+ " redistribute bgp-direct %s prefix-list %s\n",
+ afistr,
+ rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT]
+ [afi]);
+ }
+ if (rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT][afi]) {
+ vty_out(vty,
+ " redistribute bgp-direct-to-nve-groups %s prefix-list %s\n",
+ afistr,
+ rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]
+ [afi]);
+ }
+ }
+
+ if (rfg->routemap_export_bgp_name) {
+ vty_out(vty, " export bgp route-map %s\n",
+ rfg->routemap_export_bgp_name);
+ }
+ if (rfg->routemap_export_zebra_name) {
+ vty_out(vty, " export zebra route-map %s\n",
+ rfg->routemap_export_zebra_name);
+ }
+ if (rfg->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]) {
+ vty_out(vty,
+ " redistribute bgp-direct route-map %s\n",
+ rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT]);
+ }
+ if (rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]) {
+ vty_out(vty,
+ " redistribute bgp-direct-to-nve-groups route-map %s\n",
+ rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]);
+ }
+ vty_out(vty, " exit-vrf-policy\n");
+ vty_out(vty, "!\n");
+ }
+ if (hc->flags & BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP) {
+ vty_out(vty, " vnc advertise-un-method encap-safi\n");
+ write++;
+ }
+
+ { /* was based on listen ports */
+ /* for now allow both old and new */
+ if (bgp->rfapi->rfp_methods.cfg_cb)
+ write += (bgp->rfapi->rfp_methods.cfg_cb)(
+ vty, bgp->rfapi->rfp);
+
+ if (write)
+ vty_out(vty, "!\n");
+
+ if (hc->l2_groups) {
+ struct rfapi_l2_group_cfg *rfg = NULL;
+ struct listnode *gnode;
+ for (ALL_LIST_ELEMENTS_RO(hc->l2_groups, gnode, rfg)) {
+ struct listnode *lnode;
+ void *data;
+ ++write;
+ vty_out(vty, " vnc l2-group %s\n", rfg->name);
+ if (rfg->logical_net_id != 0)
+ vty_out(vty,
+ " logical-network-id %u\n",
+ rfg->logical_net_id);
+ if (rfg->labels != NULL
+ && listhead(rfg->labels) != NULL) {
+ vty_out(vty, " labels ");
+ for (ALL_LIST_ELEMENTS_RO(rfg->labels,
+ lnode,
+ data)) {
+ vty_out(vty, "%hu ",
+ (uint16_t)(
+ (uintptr_t)
+ data));
+ }
+ vty_out(vty, "\n");
+ }
+
+ if (rfg->rt_import_list && rfg->rt_export_list
+ && ecommunity_cmp(rfg->rt_import_list,
+ rfg->rt_export_list)) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt both %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ } else {
+ if (rfg->rt_import_list) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt import %s\n",
+ b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ if (rfg->rt_export_list) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_export_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt export %s\n",
+ b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ }
+ if (bgp->rfapi->rfp_methods.cfg_group_cb)
+ write += (bgp->rfapi->rfp_methods
+ .cfg_group_cb)(
+ vty, bgp->rfapi->rfp,
+ RFAPI_RFP_CFG_GROUP_L2,
+ rfg->name, rfg->rfp_cfg);
+ vty_out(vty, " exit-vnc\n");
+ vty_out(vty, "!\n");
+ }
+ }
+
+ if (hc->default_rd.family || hc->default_response_lifetime
+ || hc->default_rt_import_list || hc->default_rt_export_list
+ || hc->nve_groups_sequential->count) {
+
+
+ ++write;
+ vty_out(vty, " vnc defaults\n");
+
+ if (hc->default_rd.prefixlen) {
+ char buf[BUFSIZ];
+ buf[0] = buf[BUFSIZ - 1] = 0;
+
+ if (AF_UNIX == hc->default_rd.family) {
+ uint16_t value = 0;
+
+ value = ((hc->default_rd.val[6] << 8)
+ & 0x0ff00)
+ | (hc->default_rd.val[7]
+ & 0x0ff);
+
+ vty_out(vty, " rd auto:vn:%d\n",
+ value);
+
+ } else {
+
+ if (!prefix_rd2str(&hc->default_rd, buf,
+ BUFSIZ)
+ || !buf[0] || buf[BUFSIZ - 1]) {
+
+ vty_out(vty,
+ "!Error: Can't convert rd\n");
+ } else {
+ vty_out(vty, " rd %s\n", buf);
+ }
+ }
+ }
+ if (hc->default_response_lifetime) {
+ vty_out(vty, " response-lifetime ");
+ if (hc->default_response_lifetime != UINT32_MAX)
+ vty_out(vty, "%d",
+ hc->default_response_lifetime);
+ else
+ vty_out(vty, "infinite");
+ vty_out(vty, "\n");
+ }
+ if (hc->default_rt_import_list
+ && hc->default_rt_export_list
+ && ecommunity_cmp(hc->default_rt_import_list,
+ hc->default_rt_export_list)) {
+ char *b = ecommunity_ecom2str(
+ hc->default_rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt both %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ } else {
+ if (hc->default_rt_import_list) {
+ char *b = ecommunity_ecom2str(
+ hc->default_rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt import %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ if (hc->default_rt_export_list) {
+ char *b = ecommunity_ecom2str(
+ hc->default_rt_export_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt export %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ }
+ if (bgp->rfapi->rfp_methods.cfg_group_cb)
+ write += (bgp->rfapi->rfp_methods.cfg_group_cb)(
+ vty, bgp->rfapi->rfp,
+ RFAPI_RFP_CFG_GROUP_DEFAULT, NULL,
+ bgp->rfapi_cfg->default_rfp_cfg);
+ vty_out(vty, " exit-vnc\n");
+ vty_out(vty, "!\n");
+ }
+
+ for (ALL_LIST_ELEMENTS(hc->nve_groups_sequential, node, nnode,
+ rfg))
+ if (rfg->type == RFAPI_GROUP_CFG_NVE) {
+ ++write;
+ vty_out(vty, " vnc nve-group %s\n", rfg->name);
+
+ if (rfg->vn_prefix.family && rfg->vn_node) {
+ char buf[BUFSIZ];
+ buf[0] = buf[BUFSIZ - 1] = 0;
+
+ prefix2str(&rfg->vn_prefix, buf,
+ BUFSIZ);
+ if (!buf[0] || buf[BUFSIZ - 1]) {
+ vty_out(vty,
+ "!Error: Can't convert prefix\n");
+ } else {
+ vty_out(vty, " prefix %s %s\n",
+ "vn", buf);
+ }
+ }
+
+ if (rfg->un_prefix.family && rfg->un_node) {
+ char buf[BUFSIZ];
+ buf[0] = buf[BUFSIZ - 1] = 0;
+ prefix2str(&rfg->un_prefix, buf,
+ BUFSIZ);
+ if (!buf[0] || buf[BUFSIZ - 1]) {
+ vty_out(vty,
+ "!Error: Can't convert prefix\n");
+ } else {
+ vty_out(vty, " prefix %s %s\n",
+ "un", buf);
+ }
+ }
+
+
+ if (rfg->rd.prefixlen) {
+ char buf[BUFSIZ];
+ buf[0] = buf[BUFSIZ - 1] = 0;
+
+ if (AF_UNIX == rfg->rd.family) {
+
+ uint16_t value = 0;
+
+ value = ((rfg->rd.val[6] << 8)
+ & 0x0ff00)
+ | (rfg->rd.val[7]
+ & 0x0ff);
+
+ vty_out(vty,
+ " rd auto:vn:%d\n",
+ value);
+
+ } else {
+
+ if (!prefix_rd2str(&rfg->rd,
+ buf, BUFSIZ)
+ || !buf[0]
+ || buf[BUFSIZ - 1]) {
+
+ vty_out(vty,
+ "!Error: Can't convert rd\n");
+ } else {
+ vty_out(vty,
+ " rd %s\n",
+ buf);
+ }
+ }
+ }
+ if (rfg->flags & RFAPI_RFG_RESPONSE_LIFETIME) {
+ vty_out(vty, " response-lifetime ");
+ if (rfg->response_lifetime
+ != UINT32_MAX)
+ vty_out(vty, "%d",
+ rfg->response_lifetime);
+ else
+ vty_out(vty, "infinite");
+ vty_out(vty, "\n");
+ }
+
+ if (rfg->rt_import_list && rfg->rt_export_list
+ && ecommunity_cmp(rfg->rt_import_list,
+ rfg->rt_export_list)) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt both %s\n", b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ } else {
+ if (rfg->rt_import_list) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_import_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt import %s\n",
+ b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ if (rfg->rt_export_list) {
+ char *b = ecommunity_ecom2str(
+ rfg->rt_export_list,
+ ECOMMUNITY_FORMAT_ROUTE_MAP,
+ ECOMMUNITY_ROUTE_TARGET);
+ vty_out(vty, " rt export %s\n",
+ b);
+ XFREE(MTYPE_ECOMMUNITY_STR, b);
+ }
+ }
+
+ /*
+ * route filtering: prefix-lists and route-maps
+ */
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+
+ const char *afistr = (afi == AFI_IP)
+ ? "ipv4"
+ : "ipv6";
+
+ if (rfg->plist_export_bgp_name[afi]) {
+ vty_out(vty,
+ " export bgp %s prefix-list %s\n",
+ afistr,
+ rfg->plist_export_bgp_name
+ [afi]);
+ }
+ if (rfg->plist_export_zebra_name[afi]) {
+ vty_out(vty,
+ " export zebra %s prefix-list %s\n",
+ afistr,
+ rfg->plist_export_zebra_name
+ [afi]);
+ }
+ /*
+ * currently we only support redist
+ * plists for bgp-direct.
+ * If we later add plist support for
+ * redistributing other
+ * protocols, we'll need to loop over
+ * protocols here
+ */
+ if (rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT]
+ [afi]) {
+ vty_out(vty,
+ " redistribute bgp-direct %s prefix-list %s\n",
+ afistr,
+ rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT]
+ [afi]);
+ }
+ if (rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]
+ [afi]) {
+ vty_out(vty,
+ " redistribute bgp-direct-to-nve-groups %s prefix-list %s\n",
+ afistr,
+ rfg->plist_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]
+ [afi]);
+ }
+ }
+
+ if (rfg->routemap_export_bgp_name) {
+ vty_out(vty,
+ " export bgp route-map %s\n",
+ rfg->routemap_export_bgp_name);
+ }
+ if (rfg->routemap_export_zebra_name) {
+ vty_out(vty,
+ " export zebra route-map %s\n",
+ rfg->routemap_export_zebra_name);
+ }
+ if (rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT]) {
+ vty_out(vty,
+ " redistribute bgp-direct route-map %s\n",
+ rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT]);
+ }
+ if (rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]) {
+ vty_out(vty,
+ " redistribute bgp-direct-to-nve-groups route-map %s\n",
+ rfg->routemap_redist_name
+ [ZEBRA_ROUTE_BGP_DIRECT_EXT]);
+ }
+ if (bgp->rfapi->rfp_methods.cfg_group_cb)
+ write += (bgp->rfapi->rfp_methods
+ .cfg_group_cb)(
+ vty, bgp->rfapi->rfp,
+ RFAPI_RFP_CFG_GROUP_NVE,
+ rfg->name, rfg->rfp_cfg);
+ vty_out(vty, " exit-vnc\n");
+ vty_out(vty, "!\n");
+ }
+ } /* have listen ports */
+
+ /*
+ * route export to other protocols
+ */
+ if (VNC_EXPORT_BGP_GRP_ENABLED(hc)) {
+ vty_out(vty, " vnc export bgp mode group-nve\n");
+ } else if (VNC_EXPORT_BGP_RH_ENABLED(hc)) {
+ vty_out(vty, " vnc export bgp mode registering-nve\n");
+ } else if (VNC_EXPORT_BGP_CE_ENABLED(hc)) {
+ vty_out(vty, " vnc export bgp mode ce\n");
+ }
+
+ if (VNC_EXPORT_ZEBRA_GRP_ENABLED(hc)) {
+ vty_out(vty, " vnc export zebra mode group-nve\n");
+ } else if (VNC_EXPORT_ZEBRA_RH_ENABLED(hc)) {
+ vty_out(vty, " vnc export zebra mode registering-nve\n");
+ }
+
+ if (hc->rfg_export_direct_bgp_l) {
+ for (ALL_LIST_ELEMENTS(hc->rfg_export_direct_bgp_l, node, nnode,
+ rfgn)) {
+
+ vty_out(vty, " vnc export bgp group-nve group %s\n",
+ rfgn->name);
+ }
+ }
+
+ if (hc->rfg_export_zebra_l) {
+ for (ALL_LIST_ELEMENTS(hc->rfg_export_zebra_l, node, nnode,
+ rfgn)) {
+
+ vty_out(vty, " vnc export zebra group-nve group %s\n",
+ rfgn->name);
+ }
+ }
+
+
+ if (hc->rfg_redist_name) {
+ vty_out(vty, " vnc redistribute nve-group %s\n",
+ hc->rfg_redist_name);
+ }
+ if (hc->redist_lifetime) {
+ vty_out(vty, " vnc redistribute lifetime %d\n",
+ hc->redist_lifetime);
+ }
+ if (hc->resolve_nve_roo_local_admin
+ != BGP_VNC_CONFIG_RESOLVE_NVE_ROO_LOCAL_ADMIN_DEFAULT) {
+
+ vty_out(vty,
+ " vnc redistribute resolve-nve roo-ec-local-admin %d\n",
+ hc->resolve_nve_roo_local_admin);
+ }
+
+ if (hc->redist_mode) /* ! default */
+ {
+ const char *s = "";
+
+ switch (hc->redist_mode) {
+ case VNC_REDIST_MODE_PLAIN:
+ s = "plain";
+ break;
+ case VNC_REDIST_MODE_RFG:
+ s = "nve-group";
+ break;
+ case VNC_REDIST_MODE_RESOLVE_NVE:
+ s = "resolve-nve";
+ break;
+ }
+ if (s) {
+ vty_out(vty, " vnc redistribute mode %s\n", s);
+ }
+ }
+
+ /*
+ * route filtering: prefix-lists and route-maps
+ */
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+
+ const char *afistr = (afi == AFI_IP) ? "ipv4" : "ipv6";
+
+ if (hc->plist_export_bgp_name[afi]) {
+ vty_out(vty, " vnc export bgp %s prefix-list %s\n",
+ afistr, hc->plist_export_bgp_name[afi]);
+ }
+ if (hc->plist_export_zebra_name[afi]) {
+ vty_out(vty, " vnc export zebra %s prefix-list %s\n",
+ afistr, hc->plist_export_zebra_name[afi]);
+ }
+ if (hc->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT][afi]) {
+ vty_out(vty,
+ " vnc redistribute bgp-direct %s prefix-list %s\n",
+ afistr,
+ hc->plist_redist_name[ZEBRA_ROUTE_BGP_DIRECT]
+ [afi]);
+ }
+ }
+
+ if (hc->routemap_export_bgp_name) {
+ vty_out(vty, " vnc export bgp route-map %s\n",
+ hc->routemap_export_bgp_name);
+ }
+ if (hc->routemap_export_zebra_name) {
+ vty_out(vty, " vnc export zebra route-map %s\n",
+ hc->routemap_export_zebra_name);
+ }
+ if (hc->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]) {
+ vty_out(vty, " vnc redistribute bgp-direct route-map %s\n",
+ hc->routemap_redist_name[ZEBRA_ROUTE_BGP_DIRECT]);
+ }
+
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+ for (type = 0; type < ZEBRA_ROUTE_MAX; ++type) {
+ if (hc->redist[afi][type]) {
+ if (type == ZEBRA_ROUTE_BGP_DIRECT_EXT
+ && hc->redist_bgp_exterior_view_name) {
+ vty_out(vty,
+ " vnc redistribute %s %s view %s\n",
+ ((afi == AFI_IP) ? "ipv4"
+ : "ipv6"),
+ zebra_route_string(type),
+ hc->redist_bgp_exterior_view_name);
+ } else {
+ vty_out(vty,
+ " vnc redistribute %s %s\n",
+ ((afi == AFI_IP) ? "ipv4"
+ : "ipv6"),
+ zebra_route_string(type));
+ }
+ }
+ }
+ }
+ return write;
}
-void
-bgp_rfapi_show_summary (struct bgp *bgp, struct vty *vty)
+void bgp_rfapi_show_summary(struct bgp *bgp, struct vty *vty)
{
- struct rfapi_cfg *hc = bgp->rfapi_cfg;
- int afi, type, redist = 0;
- char tmp[40];
- if (hc == NULL)
- return;
-
- vty_out (vty, "%-39s %-19s %s\n", "VNC Advertise method:",
- (hc->flags & BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP
- ? "Encapsulation SAFI" : "Tunnel Encap attribute"),
- ((hc->flags & BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP) == (BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP & BGP_VNC_CONFIG_FLAGS_DEFAULT) ? "(default)" : ""));
- /* export */
- vty_out (vty, "%-39s ", "Export from VNC:");
- /*
- * route export to other protocols
- */
- if (VNC_EXPORT_BGP_GRP_ENABLED (hc))
- {
- redist++;
- vty_out (vty, "ToBGP Groups={");
- if (hc->rfg_export_direct_bgp_l)
- {
- int cnt = 0;
- struct listnode *node, *nnode;
- struct rfapi_rfg_name *rfgn;
- for (ALL_LIST_ELEMENTS (hc->rfg_export_direct_bgp_l,
- node, nnode, rfgn))
- {
- if (cnt++ != 0)
- vty_out (vty, ",");
-
- vty_out (vty, "%s", rfgn->name);
- }
- }
- vty_out (vty, "}");
- }
- else if (VNC_EXPORT_BGP_RH_ENABLED (hc))
- {
- redist++;
- vty_out (vty, "ToBGP {Registering NVE}");
- /* note filters, route-maps not shown */
- }
- else if (VNC_EXPORT_BGP_CE_ENABLED (hc))
- {
- redist++;
- vty_out (vty, "ToBGP {NVE connected router:%d}",
- hc->resolve_nve_roo_local_admin);
- /* note filters, route-maps not shown */
- }
-
- if (VNC_EXPORT_ZEBRA_GRP_ENABLED (hc))
- {
- redist++;
- vty_out (vty, "%sToZebra Groups={", (redist == 1 ? "" : " "));
- if (hc->rfg_export_direct_bgp_l)
- {
- int cnt = 0;
- struct listnode *node, *nnode;
- struct rfapi_rfg_name *rfgn;
- for (ALL_LIST_ELEMENTS (hc->rfg_export_zebra_l, node, nnode, rfgn))
- {
- if (cnt++ != 0)
- vty_out (vty, ",");
- vty_out (vty, "%s", rfgn->name);
- }
- }
- vty_out (vty, "}");
- }
- else if (VNC_EXPORT_ZEBRA_RH_ENABLED (hc))
- {
- redist++;
- vty_out (vty, "%sToZebra {Registering NVE}", (redist == 1 ? "" : " "));
- /* note filters, route-maps not shown */
- }
- vty_out (vty, "%-19s %s\n", (redist ? "" : "Off"),
- (redist ? "" : "(default)"));
-
- /* Redistribution */
- redist = 0;
- vty_out (vty, "%-39s ", "Redistribution into VNC:");
- for (afi = AFI_IP; afi < AFI_MAX; ++afi)
- {
- for (type = 0; type < ZEBRA_ROUTE_MAX; ++type)
- {
- if (hc->redist[afi][type])
- {
- vty_out (vty, "{%s,%s} ",
- ((afi == AFI_IP) ? "ipv4" : "ipv6"),
- zebra_route_string (type));
- redist++;
- }
- }
- }
- vty_out (vty, "%-19s %s\n", (redist ? "" : "Off"),
- (redist ? "" : "(default)"));
-
- vty_out (vty, "%-39s %3u%-16s %s\n", "RFP Registration Hold-Down Factor:",
- hc->rfp_cfg.holddown_factor, "%",
- (hc->rfp_cfg.holddown_factor == RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR ? "(default)" : ""));
- vty_out (vty, "%-39s %-19s %s\n", "RFP Updated responses:",
- (hc->rfp_cfg.use_updated_response == 0 ? "Off" : "On"),
- (hc->rfp_cfg.use_updated_response == 0 ? "(default)" : ""));
- vty_out (vty, "%-39s %-19s %s\n", "RFP Removal responses:",
- (hc->rfp_cfg.use_removes == 0 ? "Off" : "On"),
- (hc->rfp_cfg.use_removes == 0 ? "(default)" : ""));
- vty_out (vty, "%-39s %-19s %s\n", "RFP Full table download:",
- (hc->rfp_cfg.download_type ==
- RFAPI_RFP_DOWNLOAD_FULL ? "On" : "Off"),
- (hc->rfp_cfg.download_type == RFAPI_RFP_DOWNLOAD_PARTIAL ? "(default)" : ""));
- sprintf (tmp, "%u seconds", hc->rfp_cfg.ftd_advertisement_interval);
- vty_out (vty, "%-39s %-19s %s\n", " Advertisement Interval:", tmp,
- (hc->rfp_cfg.ftd_advertisement_interval == RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL ? "(default)" : ""));
- vty_out (vty, "%-39s %d seconds\n", "Default RFP response lifetime:",
- hc->default_response_lifetime);
- vty_out (vty, "\n");
- return;
+ struct rfapi_cfg *hc = bgp->rfapi_cfg;
+ int afi, type, redist = 0;
+ char tmp[40];
+ if (hc == NULL)
+ return;
+
+ vty_out(vty, "%-39s %-19s %s\n", "VNC Advertise method:",
+ (hc->flags & BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP
+ ? "Encapsulation SAFI"
+ : "Tunnel Encap attribute"),
+ ((hc->flags & BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP)
+ == (BGP_VNC_CONFIG_ADV_UN_METHOD_ENCAP
+ & BGP_VNC_CONFIG_FLAGS_DEFAULT)
+ ? "(default)"
+ : ""));
+ /* export */
+ vty_out(vty, "%-39s ", "Export from VNC:");
+ /*
+ * route export to other protocols
+ */
+ if (VNC_EXPORT_BGP_GRP_ENABLED(hc)) {
+ redist++;
+ vty_out(vty, "ToBGP Groups={");
+ if (hc->rfg_export_direct_bgp_l) {
+ int cnt = 0;
+ struct listnode *node, *nnode;
+ struct rfapi_rfg_name *rfgn;
+ for (ALL_LIST_ELEMENTS(hc->rfg_export_direct_bgp_l,
+ node, nnode, rfgn)) {
+ if (cnt++ != 0)
+ vty_out(vty, ",");
+
+ vty_out(vty, "%s", rfgn->name);
+ }
+ }
+ vty_out(vty, "}");
+ } else if (VNC_EXPORT_BGP_RH_ENABLED(hc)) {
+ redist++;
+ vty_out(vty, "ToBGP {Registering NVE}");
+ /* note filters, route-maps not shown */
+ } else if (VNC_EXPORT_BGP_CE_ENABLED(hc)) {
+ redist++;
+ vty_out(vty, "ToBGP {NVE connected router:%d}",
+ hc->resolve_nve_roo_local_admin);
+ /* note filters, route-maps not shown */
+ }
+
+ if (VNC_EXPORT_ZEBRA_GRP_ENABLED(hc)) {
+ redist++;
+ vty_out(vty, "%sToZebra Groups={", (redist == 1 ? "" : " "));
+ if (hc->rfg_export_direct_bgp_l) {
+ int cnt = 0;
+ struct listnode *node, *nnode;
+ struct rfapi_rfg_name *rfgn;
+ for (ALL_LIST_ELEMENTS(hc->rfg_export_zebra_l, node,
+ nnode, rfgn)) {
+ if (cnt++ != 0)
+ vty_out(vty, ",");
+ vty_out(vty, "%s", rfgn->name);
+ }
+ }
+ vty_out(vty, "}");
+ } else if (VNC_EXPORT_ZEBRA_RH_ENABLED(hc)) {
+ redist++;
+ vty_out(vty, "%sToZebra {Registering NVE}",
+ (redist == 1 ? "" : " "));
+ /* note filters, route-maps not shown */
+ }
+ vty_out(vty, "%-19s %s\n", (redist ? "" : "Off"),
+ (redist ? "" : "(default)"));
+
+ /* Redistribution */
+ redist = 0;
+ vty_out(vty, "%-39s ", "Redistribution into VNC:");
+ for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
+ for (type = 0; type < ZEBRA_ROUTE_MAX; ++type) {
+ if (hc->redist[afi][type]) {
+ vty_out(vty, "{%s,%s} ",
+ ((afi == AFI_IP) ? "ipv4" : "ipv6"),
+ zebra_route_string(type));
+ redist++;
+ }
+ }
+ }
+ vty_out(vty, "%-19s %s\n", (redist ? "" : "Off"),
+ (redist ? "" : "(default)"));
+
+ vty_out(vty, "%-39s %3u%-16s %s\n",
+ "RFP Registration Hold-Down Factor:",
+ hc->rfp_cfg.holddown_factor, "%",
+ (hc->rfp_cfg.holddown_factor
+ == RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR
+ ? "(default)"
+ : ""));
+ vty_out(vty, "%-39s %-19s %s\n", "RFP Updated responses:",
+ (hc->rfp_cfg.use_updated_response == 0 ? "Off" : "On"),
+ (hc->rfp_cfg.use_updated_response == 0 ? "(default)" : ""));
+ vty_out(vty, "%-39s %-19s %s\n", "RFP Removal responses:",
+ (hc->rfp_cfg.use_removes == 0 ? "Off" : "On"),
+ (hc->rfp_cfg.use_removes == 0 ? "(default)" : ""));
+ vty_out(vty, "%-39s %-19s %s\n", "RFP Full table download:",
+ (hc->rfp_cfg.download_type == RFAPI_RFP_DOWNLOAD_FULL ? "On"
+ : "Off"),
+ (hc->rfp_cfg.download_type == RFAPI_RFP_DOWNLOAD_PARTIAL
+ ? "(default)"
+ : ""));
+ sprintf(tmp, "%u seconds", hc->rfp_cfg.ftd_advertisement_interval);
+ vty_out(vty, "%-39s %-19s %s\n", " Advertisement Interval:", tmp,
+ (hc->rfp_cfg.ftd_advertisement_interval
+ == RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL
+ ? "(default)"
+ : ""));
+ vty_out(vty, "%-39s %d seconds\n", "Default RFP response lifetime:",
+ hc->default_response_lifetime);
+ vty_out(vty, "\n");
+ return;
}
-struct rfapi_cfg *
-bgp_rfapi_get_config (struct bgp *bgp)
+struct rfapi_cfg *bgp_rfapi_get_config(struct bgp *bgp)
{
- struct rfapi_cfg *hc = NULL;
- if (bgp == NULL)
- bgp = bgp_get_default ();
- if (bgp != NULL)
- hc = bgp->rfapi_cfg;
- return hc;
+ struct rfapi_cfg *hc = NULL;
+ if (bgp == NULL)
+ bgp = bgp_get_default();
+ if (bgp != NULL)
+ hc = bgp->rfapi_cfg;
+ return hc;
}
#endif /* ENABLE_BGP_VNC */