summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_mplsvpn.c
diff options
context:
space:
mode:
authorwhitespace / reindent <invalid@invalid.invalid>2017-07-17 14:03:14 +0200
committerwhitespace / reindent <invalid@invalid.invalid>2017-07-17 14:04:07 +0200
commitd62a17aedeb0eebdba98238874bb13d62c48dbf9 (patch)
tree3b319b1d61c8b85b4d1f06adf8b844bb8a9b5107 /bgpd/bgp_mplsvpn.c
parent*: add indent control files (diff)
downloadfrr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.tar.xz
frr-d62a17aedeb0eebdba98238874bb13d62c48dbf9.zip
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'` Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'bgpd/bgp_mplsvpn.c')
-rw-r--r--bgpd/bgp_mplsvpn.c1497
1 files changed, 786 insertions, 711 deletions
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index 3a8398d8a..5d2966d1a 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -43,200 +43,193 @@
#include "bgpd/rfapi/rfapi_backend.h"
#endif
-extern int
-argv_find_and_parse_vpnvx(struct cmd_token **argv, int argc, int *index, afi_t *afi)
+extern int argv_find_and_parse_vpnvx(struct cmd_token **argv, int argc,
+ int *index, afi_t *afi)
{
- int ret = 0;
- if (argv_find (argv, argc, "vpnv4", index))
- {
- ret = 1;
- if (afi)
- *afi = AFI_IP;
- }
- else if (argv_find (argv, argc, "vpnv6", index))
- {
- ret = 1;
- if (afi)
- *afi = AFI_IP6;
- }
- return ret;
+ int ret = 0;
+ if (argv_find(argv, argc, "vpnv4", index)) {
+ ret = 1;
+ if (afi)
+ *afi = AFI_IP;
+ } else if (argv_find(argv, argc, "vpnv6", index)) {
+ ret = 1;
+ if (afi)
+ *afi = AFI_IP6;
+ }
+ return ret;
}
-u_int32_t
-decode_label (mpls_label_t *label_pnt)
+u_int32_t decode_label(mpls_label_t *label_pnt)
{
- u_int32_t l;
- u_char *pnt = (u_char *) label_pnt;
+ u_int32_t l;
+ u_char *pnt = (u_char *)label_pnt;
- l = ((u_int32_t) *pnt++ << 12);
- l |= (u_int32_t) *pnt++ << 4;
- l |= (u_int32_t) ((*pnt & 0xf0) >> 4);
- return l;
+ l = ((u_int32_t)*pnt++ << 12);
+ l |= (u_int32_t)*pnt++ << 4;
+ l |= (u_int32_t)((*pnt & 0xf0) >> 4);
+ return l;
}
-void
-encode_label(mpls_label_t label,
- mpls_label_t *label_pnt)
+void encode_label(mpls_label_t label, mpls_label_t *label_pnt)
{
- u_char *pnt = (u_char *) label_pnt;
- if (pnt == NULL)
- return;
- *pnt++ = (label>>12) & 0xff;
- *pnt++ = (label>>4) & 0xff;
- *pnt++ = ((label<<4)+1) & 0xff; /* S=1 */
+ u_char *pnt = (u_char *)label_pnt;
+ if (pnt == NULL)
+ return;
+ *pnt++ = (label >> 12) & 0xff;
+ *pnt++ = (label >> 4) & 0xff;
+ *pnt++ = ((label << 4) + 1) & 0xff; /* S=1 */
}
-int
-bgp_nlri_parse_vpn (struct peer *peer, struct attr *attr,
- struct bgp_nlri *packet)
+int bgp_nlri_parse_vpn(struct peer *peer, struct attr *attr,
+ struct bgp_nlri *packet)
{
- u_char *pnt;
- u_char *lim;
- struct prefix p;
- int psize = 0;
- int prefixlen;
- u_int16_t type;
- struct rd_as rd_as;
- struct rd_ip rd_ip;
- struct prefix_rd prd;
- mpls_label_t label;
- afi_t afi;
- safi_t safi;
- int addpath_encoded;
- u_int32_t addpath_id;
-
- /* Check peer status. */
- if (peer->status != Established)
- return 0;
-
- /* Make prefix_rd */
- prd.family = AF_UNSPEC;
- prd.prefixlen = 64;
-
- pnt = packet->nlri;
- lim = pnt + packet->length;
- afi = packet->afi;
- safi = packet->safi;
- addpath_id = 0;
-
- addpath_encoded = (CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV) &&
- CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV));
+ u_char *pnt;
+ u_char *lim;
+ struct prefix p;
+ int psize = 0;
+ int prefixlen;
+ u_int16_t type;
+ struct rd_as rd_as;
+ struct rd_ip rd_ip;
+ struct prefix_rd prd;
+ mpls_label_t label;
+ afi_t afi;
+ safi_t safi;
+ int addpath_encoded;
+ u_int32_t addpath_id;
+
+ /* Check peer status. */
+ if (peer->status != Established)
+ return 0;
+
+ /* Make prefix_rd */
+ prd.family = AF_UNSPEC;
+ prd.prefixlen = 64;
+
+ pnt = packet->nlri;
+ lim = pnt + packet->length;
+ afi = packet->afi;
+ safi = packet->safi;
+ addpath_id = 0;
+
+ addpath_encoded =
+ (CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV)
+ && CHECK_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV));
#define VPN_PREFIXLEN_MIN_BYTES (3 + 8) /* label + RD */
- for (; pnt < lim; pnt += psize)
- {
- /* Clear prefix structure. */
- memset (&p, 0, sizeof (struct prefix));
-
- if (addpath_encoded)
- {
-
- /* When packet overflow occurs return immediately. */
- if (pnt + BGP_ADDPATH_ID_LEN > lim)
- return -1;
-
- addpath_id = ntohl(*((uint32_t*) pnt));
- pnt += BGP_ADDPATH_ID_LEN;
- }
-
- /* Fetch prefix length. */
- prefixlen = *pnt++;
- p.family = afi2family (packet->afi);
- psize = PSIZE (prefixlen);
-
- if (prefixlen < VPN_PREFIXLEN_MIN_BYTES*8)
- {
- zlog_err ("%s [Error] Update packet error / VPN (prefix length %d less than VPN min length)",
- peer->host, prefixlen);
- return -1;
- }
-
- /* sanity check against packet data */
- if ((pnt + psize) > lim)
- {
- zlog_err ("%s [Error] Update packet error / VPN (prefix length %d exceeds packet size %u)",
- peer->host,
- prefixlen, (uint)(lim-pnt));
- return -1;
- }
-
- /* sanity check against storage for the IP address portion */
- if ((psize - VPN_PREFIXLEN_MIN_BYTES) > (ssize_t) sizeof(p.u))
- {
- zlog_err ("%s [Error] Update packet error / VPN (psize %d exceeds storage size %zu)",
- peer->host,
- prefixlen - VPN_PREFIXLEN_MIN_BYTES*8, sizeof(p.u));
- return -1;
- }
-
- /* Sanity check against max bitlen of the address family */
- if ((psize - VPN_PREFIXLEN_MIN_BYTES) > prefix_blen (&p))
- {
- zlog_err ("%s [Error] Update packet error / VPN (psize %d exceeds family (%u) max byte len %u)",
- peer->host,
- prefixlen - VPN_PREFIXLEN_MIN_BYTES*8,
- p.family, prefix_blen (&p));
- return -1;
- }
-
- /* Copy label to prefix. */
- memcpy(&label, pnt, BGP_LABEL_BYTES);
- bgp_set_valid_label(&label);
-
- /* Copy routing distinguisher to rd. */
- memcpy (&prd.val, pnt + BGP_LABEL_BYTES, 8);
-
- /* Decode RD type. */
- type = decode_rd_type (pnt + BGP_LABEL_BYTES);
-
- switch (type)
- {
- case RD_TYPE_AS:
- decode_rd_as (pnt + 5, &rd_as);
- break;
-
- case RD_TYPE_AS4:
- decode_rd_as4 (pnt + 5, &rd_as);
- break;
-
- case RD_TYPE_IP:
- decode_rd_ip (pnt + 5, &rd_ip);
- break;
+ for (; pnt < lim; pnt += psize) {
+ /* Clear prefix structure. */
+ memset(&p, 0, sizeof(struct prefix));
+
+ if (addpath_encoded) {
+
+ /* When packet overflow occurs return immediately. */
+ if (pnt + BGP_ADDPATH_ID_LEN > lim)
+ return -1;
+
+ addpath_id = ntohl(*((uint32_t *)pnt));
+ pnt += BGP_ADDPATH_ID_LEN;
+ }
+
+ /* Fetch prefix length. */
+ prefixlen = *pnt++;
+ p.family = afi2family(packet->afi);
+ psize = PSIZE(prefixlen);
+
+ if (prefixlen < VPN_PREFIXLEN_MIN_BYTES * 8) {
+ zlog_err(
+ "%s [Error] Update packet error / VPN (prefix length %d less than VPN min length)",
+ peer->host, prefixlen);
+ return -1;
+ }
+
+ /* sanity check against packet data */
+ if ((pnt + psize) > lim) {
+ zlog_err(
+ "%s [Error] Update packet error / VPN (prefix length %d exceeds packet size %u)",
+ peer->host, prefixlen, (uint)(lim - pnt));
+ return -1;
+ }
+
+ /* sanity check against storage for the IP address portion */
+ if ((psize - VPN_PREFIXLEN_MIN_BYTES) > (ssize_t)sizeof(p.u)) {
+ zlog_err(
+ "%s [Error] Update packet error / VPN (psize %d exceeds storage size %zu)",
+ peer->host,
+ prefixlen - VPN_PREFIXLEN_MIN_BYTES * 8,
+ sizeof(p.u));
+ return -1;
+ }
+
+ /* Sanity check against max bitlen of the address family */
+ if ((psize - VPN_PREFIXLEN_MIN_BYTES) > prefix_blen(&p)) {
+ zlog_err(
+ "%s [Error] Update packet error / VPN (psize %d exceeds family (%u) max byte len %u)",
+ peer->host,
+ prefixlen - VPN_PREFIXLEN_MIN_BYTES * 8,
+ p.family, prefix_blen(&p));
+ return -1;
+ }
+
+ /* Copy label to prefix. */
+ memcpy(&label, pnt, BGP_LABEL_BYTES);
+ bgp_set_valid_label(&label);
+
+ /* Copy routing distinguisher to rd. */
+ memcpy(&prd.val, pnt + BGP_LABEL_BYTES, 8);
+
+ /* Decode RD type. */
+ type = decode_rd_type(pnt + BGP_LABEL_BYTES);
+
+ switch (type) {
+ case RD_TYPE_AS:
+ decode_rd_as(pnt + 5, &rd_as);
+ break;
+
+ case RD_TYPE_AS4:
+ decode_rd_as4(pnt + 5, &rd_as);
+ break;
+
+ case RD_TYPE_IP:
+ decode_rd_ip(pnt + 5, &rd_ip);
+ break;
#if ENABLE_BGP_VNC
- case RD_TYPE_VNC_ETH:
- break;
+ case RD_TYPE_VNC_ETH:
+ break;
#endif
- default:
- zlog_err ("Unknown RD type %d", type);
- break; /* just report */
- }
-
- p.prefixlen = prefixlen - VPN_PREFIXLEN_MIN_BYTES*8;/* exclude label & RD */
- memcpy (&p.u.prefix, pnt + VPN_PREFIXLEN_MIN_BYTES,
- psize - VPN_PREFIXLEN_MIN_BYTES);
-
- if (attr)
- {
- bgp_update (peer, &p, addpath_id, attr, packet->afi, SAFI_MPLS_VPN,
- ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, &prd, &label, 0, NULL);
- }
- else
- {
- bgp_withdraw (peer, &p, addpath_id, attr, packet->afi, SAFI_MPLS_VPN,
- ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, &prd, &label, NULL);
- }
- }
- /* Packet length consistency check. */
- if (pnt != lim)
- {
- zlog_err ("%s [Error] Update packet error / VPN (%zu data remaining after parsing)",
- peer->host, lim - pnt);
- return -1;
- }
-
- return 0;
+ default:
+ zlog_err("Unknown RD type %d", type);
+ break; /* just report */
+ }
+
+ p.prefixlen =
+ prefixlen
+ - VPN_PREFIXLEN_MIN_BYTES * 8; /* exclude label & RD */
+ memcpy(&p.u.prefix, pnt + VPN_PREFIXLEN_MIN_BYTES,
+ psize - VPN_PREFIXLEN_MIN_BYTES);
+
+ if (attr) {
+ bgp_update(peer, &p, addpath_id, attr, packet->afi,
+ SAFI_MPLS_VPN, ZEBRA_ROUTE_BGP,
+ BGP_ROUTE_NORMAL, &prd, &label, 0, NULL);
+ } else {
+ bgp_withdraw(peer, &p, addpath_id, attr, packet->afi,
+ SAFI_MPLS_VPN, ZEBRA_ROUTE_BGP,
+ BGP_ROUTE_NORMAL, &prd, &label, NULL);
+ }
+ }
+ /* Packet length consistency check. */
+ if (pnt != lim) {
+ zlog_err(
+ "%s [Error] Update packet error / VPN (%zu data remaining after parsing)",
+ peer->host, lim - pnt);
+ return -1;
+ }
+
+ return 0;
#undef VPN_PREFIXLEN_MIN_BYTES
}
@@ -252,11 +245,13 @@ DEFUN (vpnv4_network,
"VPN NLRI label (tag)\n"
"Label value\n")
{
- int idx_ipv4_prefixlen = 1;
- int idx_ext_community = 3;
- int idx_label = 5;
- return bgp_static_set_safi (AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg, argv[idx_ext_community]->arg,
- argv[idx_label]->arg, NULL, 0, NULL, NULL, NULL, NULL);
+ int idx_ipv4_prefixlen = 1;
+ int idx_ext_community = 3;
+ int idx_label = 5;
+ return bgp_static_set_safi(
+ AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg,
+ argv[idx_ext_community]->arg, argv[idx_label]->arg, NULL, 0,
+ NULL, NULL, NULL, NULL);
}
DEFUN (vpnv4_network_route_map,
@@ -272,12 +267,14 @@ DEFUN (vpnv4_network_route_map,
"route map\n"
"route map name\n")
{
- int idx_ipv4_prefixlen = 1;
- int idx_ext_community = 3;
- int idx_label = 5;
- int idx_word_2 = 7;
- return bgp_static_set_safi (AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg, argv[idx_ext_community]->arg, argv[idx_label]->arg,
- argv[idx_word_2]->arg, 0, NULL, NULL, NULL, NULL);
+ int idx_ipv4_prefixlen = 1;
+ int idx_ext_community = 3;
+ int idx_label = 5;
+ int idx_word_2 = 7;
+ return bgp_static_set_safi(
+ AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg,
+ argv[idx_ext_community]->arg, argv[idx_label]->arg,
+ argv[idx_word_2]->arg, 0, NULL, NULL, NULL, NULL);
}
/* For testing purpose, static route of MPLS-VPN. */
@@ -293,12 +290,13 @@ DEFUN (no_vpnv4_network,
"VPN NLRI label (tag)\n"
"Label value\n")
{
- int idx_ipv4_prefixlen = 2;
- int idx_ext_community = 4;
- int idx_label = 6;
- return bgp_static_unset_safi (AFI_IP, SAFI_MPLS_VPN, vty, argv[idx_ipv4_prefixlen]->arg,
- argv[idx_ext_community]->arg, argv[idx_label]->arg,
- 0, NULL, NULL, NULL);
+ int idx_ipv4_prefixlen = 2;
+ int idx_ext_community = 4;
+ int idx_label = 6;
+ return bgp_static_unset_safi(AFI_IP, SAFI_MPLS_VPN, vty,
+ argv[idx_ipv4_prefixlen]->arg,
+ argv[idx_ext_community]->arg,
+ argv[idx_label]->arg, 0, NULL, NULL, NULL);
}
DEFUN (vpnv6_network,
@@ -314,14 +312,20 @@ DEFUN (vpnv6_network,
"route map\n"
"route map name\n")
{
- int idx_ipv6_prefix = 1;
- int idx_ext_community = 3;
- int idx_label = 5;
- int idx_word_2 = 7;
- if (argc == 8)
- return bgp_static_set_safi (AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg, argv[idx_ext_community]->arg, argv[idx_label]->arg, argv[idx_word_2]->arg, 0, NULL, NULL, NULL, NULL);
- else
- return bgp_static_set_safi (AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg, argv[idx_ext_community]->arg, argv[idx_label]->arg, NULL, 0, NULL, NULL, NULL, NULL);
+ int idx_ipv6_prefix = 1;
+ int idx_ext_community = 3;
+ int idx_label = 5;
+ int idx_word_2 = 7;
+ if (argc == 8)
+ return bgp_static_set_safi(
+ AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg,
+ argv[idx_ext_community]->arg, argv[idx_label]->arg,
+ argv[idx_word_2]->arg, 0, NULL, NULL, NULL, NULL);
+ else
+ return bgp_static_set_safi(
+ AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg,
+ argv[idx_ext_community]->arg, argv[idx_label]->arg,
+ NULL, 0, NULL, NULL, NULL, NULL);
}
/* For testing purpose, static route of MPLS-VPN. */
@@ -337,225 +341,291 @@ DEFUN (no_vpnv6_network,
"VPN NLRI label (tag)\n"
"Label value\n")
{
- int idx_ipv6_prefix = 2;
- int idx_ext_community = 4;
- int idx_label = 6;
- return bgp_static_unset_safi (AFI_IP6, SAFI_MPLS_VPN, vty, argv[idx_ipv6_prefix]->arg, argv[idx_ext_community]->arg, argv[idx_label]->arg, 0, NULL, NULL, NULL);
+ int idx_ipv6_prefix = 2;
+ int idx_ext_community = 4;
+ int idx_label = 6;
+ return bgp_static_unset_safi(AFI_IP6, SAFI_MPLS_VPN, vty,
+ argv[idx_ipv6_prefix]->arg,
+ argv[idx_ext_community]->arg,
+ argv[idx_label]->arg, 0, NULL, NULL, NULL);
}
-int
-bgp_show_mpls_vpn (struct vty *vty, afi_t afi, struct prefix_rd *prd,
- enum bgp_show_type type, void *output_arg, int tags, u_char use_json)
+int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
+ enum bgp_show_type type, void *output_arg, int tags,
+ u_char use_json)
{
- struct bgp *bgp;
- struct bgp_table *table;
- struct bgp_node *rn;
- struct bgp_node *rm;
- struct bgp_info *ri;
- int rd_header;
- int header = 1;
- unsigned long output_count = 0;
- unsigned long total_count = 0;
- json_object *json = NULL;
- json_object *json_mroute = NULL;
- json_object *json_nroute = NULL;
- json_object *json_array = NULL;
- json_object *json_scode = NULL;
- json_object *json_ocode = NULL;
-
- bgp = bgp_get_default ();
- if (bgp == NULL)
- {
- if (!use_json)
- vty_out (vty, "No BGP process is configured\n");
- return CMD_WARNING;
- }
-
- if (use_json)
- {
- json_scode = json_object_new_object();
- json_ocode = json_object_new_object();
- json = json_object_new_object();
- json_mroute = json_object_new_object();
- json_nroute = json_object_new_object();
-
- json_object_string_add(json_scode, "suppressed", "s");
- json_object_string_add(json_scode, "damped", "d");
- json_object_string_add(json_scode, "history", "h");
- json_object_string_add(json_scode, "valid", "*");
- json_object_string_add(json_scode, "best", ">");
- json_object_string_add(json_scode, "internal", "i");
-
- json_object_string_add(json_ocode, "igp", "i");
- json_object_string_add(json_ocode, "egp", "e");
- json_object_string_add(json_ocode, "incomplete", "?");
- }
-
- if ((afi != AFI_IP) && (afi != AFI_IP6))
- {
- vty_out (vty, "Afi %d not supported\n", afi);
- return CMD_WARNING;
- }
-
- for (rn = bgp_table_top (bgp->rib[afi][SAFI_MPLS_VPN]); rn; rn = bgp_route_next (rn))
- {
- if (prd && memcmp (rn->p.u.val, prd->val, 8) != 0)
- continue;
-
- if ((table = rn->info) != NULL)
- {
- rd_header = 1;
-
- for (rm = bgp_table_top (table); rm; rm = bgp_route_next (rm))
- {
- total_count++;
- if (use_json)
- json_array = json_object_new_array();
- else
- json_array = NULL;
-
- for (ri = rm->info; ri; ri = ri->next)
- {
- if (type == bgp_show_type_neighbor)
- {
- union sockunion *su = output_arg;
-
- if (ri->peer->su_remote == NULL || ! sockunion_same(ri->peer->su_remote, su))
- continue;
- }
- if (header)
- {
- if (use_json)
- {
- if (!tags)
- {
- json_object_int_add(json, "bgpTableVersion", 0);
- json_object_string_add(json, "bgpLocalRouterId", inet_ntoa (bgp->router_id));
- json_object_object_add(json, "bgpStatusCodes", json_scode);
- json_object_object_add(json, "bgpOriginCodes", json_ocode);
- }
- }
- else
- {
- if (tags)
- vty_out (vty, V4_HEADER_TAG);
- else
- {
- vty_out (vty, "BGP table version is 0, local router ID is %s\n",
- inet_ntoa(bgp->router_id));
- vty_out (vty,
- "Status codes: s suppressed, d damped, h history, * valid, > best, i - internal\n");
- vty_out (vty, "Origin codes: i - IGP, e - EGP, ? - incomplete\n\n");
- vty_out (vty, V4_HEADER);
- }
- }
- header = 0;
- }
-
- if (rd_header)
- {
- u_int16_t type;
- struct rd_as rd_as;
- struct rd_ip rd_ip = {0};
+ struct bgp *bgp;
+ struct bgp_table *table;
+ struct bgp_node *rn;
+ struct bgp_node *rm;
+ struct bgp_info *ri;
+ int rd_header;
+ int header = 1;
+ unsigned long output_count = 0;
+ unsigned long total_count = 0;
+ json_object *json = NULL;
+ json_object *json_mroute = NULL;
+ json_object *json_nroute = NULL;
+ json_object *json_array = NULL;
+ json_object *json_scode = NULL;
+ json_object *json_ocode = NULL;
+
+ bgp = bgp_get_default();
+ if (bgp == NULL) {
+ if (!use_json)
+ vty_out(vty, "No BGP process is configured\n");
+ return CMD_WARNING;
+ }
+
+ if (use_json) {
+ json_scode = json_object_new_object();
+ json_ocode = json_object_new_object();
+ json = json_object_new_object();
+ json_mroute = json_object_new_object();
+ json_nroute = json_object_new_object();
+
+ json_object_string_add(json_scode, "suppressed", "s");
+ json_object_string_add(json_scode, "damped", "d");
+ json_object_string_add(json_scode, "history", "h");
+ json_object_string_add(json_scode, "valid", "*");
+ json_object_string_add(json_scode, "best", ">");
+ json_object_string_add(json_scode, "internal", "i");
+
+ json_object_string_add(json_ocode, "igp", "i");
+ json_object_string_add(json_ocode, "egp", "e");
+ json_object_string_add(json_ocode, "incomplete", "?");
+ }
+
+ if ((afi != AFI_IP) && (afi != AFI_IP6)) {
+ vty_out(vty, "Afi %d not supported\n", afi);
+ return CMD_WARNING;
+ }
+
+ for (rn = bgp_table_top(bgp->rib[afi][SAFI_MPLS_VPN]); rn;
+ rn = bgp_route_next(rn)) {
+ if (prd && memcmp(rn->p.u.val, prd->val, 8) != 0)
+ continue;
+
+ if ((table = rn->info) != NULL) {
+ rd_header = 1;
+
+ for (rm = bgp_table_top(table); rm;
+ rm = bgp_route_next(rm)) {
+ total_count++;
+ if (use_json)
+ json_array = json_object_new_array();
+ else
+ json_array = NULL;
+
+ for (ri = rm->info; ri; ri = ri->next) {
+ if (type == bgp_show_type_neighbor) {
+ union sockunion *su =
+ output_arg;
+
+ if (ri->peer->su_remote == NULL
+ || !sockunion_same(
+ ri->peer->su_remote,
+ su))
+ continue;
+ }
+ if (header) {
+ if (use_json) {
+ if (!tags) {
+ json_object_int_add(
+ json,
+ "bgpTableVersion",
+ 0);
+ json_object_string_add(
+ json,
+ "bgpLocalRouterId",
+ inet_ntoa(
+ bgp->router_id));
+ json_object_object_add(
+ json,
+ "bgpStatusCodes",
+ json_scode);
+ json_object_object_add(
+ json,
+ "bgpOriginCodes",
+ json_ocode);
+ }
+ } else {
+ if (tags)
+ vty_out(vty,
+ V4_HEADER_TAG);
+ else {
+ vty_out(vty,
+ "BGP table version is 0, local router ID is %s\n",
+ inet_ntoa(
+ bgp->router_id));
+ vty_out(vty,
+ "Status codes: s suppressed, d damped, h history, * valid, > best, i - internal\n");
+ vty_out(vty,
+ "Origin codes: i - IGP, e - EGP, ? - incomplete\n\n");
+ vty_out(vty,
+ V4_HEADER);
+ }
+ }
+ header = 0;
+ }
+
+ if (rd_header) {
+ u_int16_t type;
+ struct rd_as rd_as;
+ struct rd_ip rd_ip = {0};
#if ENABLE_BGP_VNC
- struct rd_vnc_eth rd_vnc_eth = {0};
+ struct rd_vnc_eth rd_vnc_eth = {
+ 0};
#endif
- u_char *pnt;
-
- pnt = rn->p.u.val;
-
- /* Decode RD type. */
- type = decode_rd_type (pnt);
- /* Decode RD value. */
- if (type == RD_TYPE_AS)
- decode_rd_as (pnt + 2, &rd_as);
- else if (type == RD_TYPE_AS4)
- decode_rd_as4 (pnt + 2, &rd_as);
- else if (type == RD_TYPE_IP)
- decode_rd_ip (pnt + 2, &rd_ip);
+ u_char *pnt;
+
+ pnt = rn->p.u.val;
+
+ /* Decode RD type. */
+ type = decode_rd_type(pnt);
+ /* Decode RD value. */
+ if (type == RD_TYPE_AS)
+ decode_rd_as(pnt + 2,
+ &rd_as);
+ else if (type == RD_TYPE_AS4)
+ decode_rd_as4(pnt + 2,
+ &rd_as);
+ else if (type == RD_TYPE_IP)
+ decode_rd_ip(pnt + 2,
+ &rd_ip);
#if ENABLE_BGP_VNC
- else if (type == RD_TYPE_VNC_ETH)
- decode_rd_vnc_eth (pnt, &rd_vnc_eth);
+ else if (type
+ == RD_TYPE_VNC_ETH)
+ decode_rd_vnc_eth(
+ pnt,
+ &rd_vnc_eth);
#endif
- if (use_json)
- {
- char buffer[BUFSIZ];
- if (type == RD_TYPE_AS || type == RD_TYPE_AS4)
- sprintf (buffer, "%u:%d", rd_as.as, rd_as.val);
- else if (type == RD_TYPE_IP)
- sprintf (buffer, "%s:%d", inet_ntoa (rd_ip.ip), rd_ip.val);
- json_object_string_add(json_nroute, "routeDistinguisher", buffer);
- }
- else
- {
- vty_out (vty, "Route Distinguisher: ");
-
- if (type == RD_TYPE_AS || type == RD_TYPE_AS4)
- vty_out (vty, "%u:%d", rd_as.as, rd_as.val);
- else if (type == RD_TYPE_IP)
- vty_out (vty, "%s:%d", inet_ntoa (rd_ip.ip), rd_ip.val);
+ if (use_json) {
+ char buffer[BUFSIZ];
+ if (type == RD_TYPE_AS
+ || type == RD_TYPE_AS4)
+ sprintf(buffer,
+ "%u:%d",
+ rd_as.as,
+ rd_as.val);
+ else if (type
+ == RD_TYPE_IP)
+ sprintf(buffer,
+ "%s:%d",
+ inet_ntoa(
+ rd_ip.ip),
+ rd_ip.val);
+ json_object_string_add(
+ json_nroute,
+ "routeDistinguisher",
+ buffer);
+ } else {
+ vty_out(vty,
+ "Route Distinguisher: ");
+
+ if (type == RD_TYPE_AS
+ || type == RD_TYPE_AS4)
+ vty_out(vty,
+ "%u:%d",
+ rd_as.as,
+ rd_as.val);
+ else if (type
+ == RD_TYPE_IP)
+ vty_out(vty,
+ "%s:%d",
+ inet_ntoa(
+ rd_ip.ip),
+ rd_ip.val);
#if ENABLE_BGP_VNC
- else if (type == RD_TYPE_VNC_ETH)
- vty_out (vty, "%u:%02x:%02x:%02x:%02x:%02x:%02x",
- rd_vnc_eth.local_nve_id,
- rd_vnc_eth.macaddr.octet[0],
- rd_vnc_eth.macaddr.octet[1],
- rd_vnc_eth.macaddr.octet[2],
- rd_vnc_eth.macaddr.octet[3],
- rd_vnc_eth.macaddr.octet[4],
- rd_vnc_eth.macaddr.octet[5]);
+ else if (
+ type
+ == RD_TYPE_VNC_ETH)
+ vty_out(vty,
+ "%u:%02x:%02x:%02x:%02x:%02x:%02x",
+ rd_vnc_eth
+ .local_nve_id,
+ rd_vnc_eth
+ .macaddr
+ .octet[0],
+ rd_vnc_eth
+ .macaddr
+ .octet[1],
+ rd_vnc_eth
+ .macaddr
+ .octet[2],
+ rd_vnc_eth
+ .macaddr
+ .octet[3],
+ rd_vnc_eth
+ .macaddr
+ .octet[4],
+ rd_vnc_eth
+ .macaddr
+ .octet[5]);
#endif
- vty_out (vty, "\n");
- }
- rd_header = 0;
- }
- if (tags)
- route_vty_out_tag (vty, &rm->p, ri, 0, SAFI_MPLS_VPN, json_array);
- else
- route_vty_out (vty, &rm->p, ri, 0, SAFI_MPLS_VPN, json_array);
- output_count++;
- }
-
- if (use_json)
- {
- struct prefix *p;
- char buf_a[BUFSIZ];
- char buf_b[BUFSIZ];
- p = &rm->p;
- sprintf(buf_a, "%s/%d", inet_ntop (p->family, &p->u.prefix, buf_b, BUFSIZ), p->prefixlen);
- json_object_object_add(json_mroute, buf_a, json_array);
- }
- }
-
- if (use_json)
- {
- struct prefix *p;
- char buf_a[BUFSIZ];
- char buf_b[BUFSIZ];
- p = &rn->p;
- sprintf(buf_a, "%s/%d", inet_ntop (p->family, &p->u.prefix, buf_b, BUFSIZ), p->prefixlen);
- json_object_object_add(json_nroute, buf_a, json_mroute);
- }
- }
- }
-
- if (use_json)
- {
- json_object_object_add(json, "routes", json_nroute);
- vty_out (vty, "%s\n",
- json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
- }
- else
- {
- if (output_count == 0)
- vty_out (vty, "No prefixes displayed, %ld exist\n", total_count);
- else
- vty_out (vty, "\nDisplayed %ld routes and %ld total paths\n", output_count, total_count);
- }
-
- return CMD_SUCCESS;
+ vty_out(vty, "\n");
+ }
+ rd_header = 0;
+ }
+ if (tags)
+ route_vty_out_tag(vty, &rm->p,
+ ri, 0,
+ SAFI_MPLS_VPN,
+ json_array);
+ else
+ route_vty_out(vty, &rm->p, ri,
+ 0, SAFI_MPLS_VPN,
+ json_array);
+ output_count++;
+ }
+
+ if (use_json) {
+ struct prefix *p;
+ char buf_a[BUFSIZ];
+ char buf_b[BUFSIZ];
+ p = &rm->p;
+ sprintf(buf_a, "%s/%d",
+ inet_ntop(p->family,
+ &p->u.prefix, buf_b,
+ BUFSIZ),
+ p->prefixlen);
+ json_object_object_add(
+ json_mroute, buf_a, json_array);
+ }
+ }
+
+ if (use_json) {
+ struct prefix *p;
+ char buf_a[BUFSIZ];
+ char buf_b[BUFSIZ];
+ p = &rn->p;
+ sprintf(buf_a, "%s/%d",
+ inet_ntop(p->family, &p->u.prefix,
+ buf_b, BUFSIZ),
+ p->prefixlen);
+ json_object_object_add(json_nroute, buf_a,
+ json_mroute);
+ }
+ }
+ }
+
+ if (use_json) {
+ json_object_object_add(json, "routes", json_nroute);
+ vty_out(vty, "%s\n", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ } else {
+ if (output_count == 0)
+ vty_out(vty, "No prefixes displayed, %ld exist\n",
+ total_count);
+ else
+ vty_out(vty,
+ "\nDisplayed %ld routes and %ld total paths\n",
+ output_count, total_count);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_ip_vpn_all_rd,
@@ -570,30 +640,30 @@ DEFUN (show_bgp_ip_vpn_all_rd,
"VPN Route Distinguisher\n"
JSON_STR)
{
- int idx_rd = 5;
- int ret;
- struct prefix_rd prd;
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
- {
- if (argc >= 7 && argv[idx_rd]->arg)
- {
- ret = str2prefix_rd (argv[idx_rd]->arg, &prd);
- if (! ret)
- {
- vty_out (vty, "%% Malformed Route Distinguisher\n");
- return CMD_WARNING;
- }
- return bgp_show_mpls_vpn (vty, afi, &prd, bgp_show_type_normal, NULL, 0, use_json (argc, argv));
- }
- else
- {
- return bgp_show_mpls_vpn (vty, afi, NULL, bgp_show_type_normal, NULL, 0, use_json (argc, argv));
- }
- }
- return CMD_SUCCESS;
+ int idx_rd = 5;
+ int ret;
+ struct prefix_rd prd;
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_afi(argv, argc, &idx, &afi)) {
+ if (argc >= 7 && argv[idx_rd]->arg) {
+ ret = str2prefix_rd(argv[idx_rd]->arg, &prd);
+ if (!ret) {
+ vty_out(vty,
+ "%% Malformed Route Distinguisher\n");
+ return CMD_WARNING;
+ }
+ return bgp_show_mpls_vpn(vty, afi, &prd,
+ bgp_show_type_normal, NULL, 0,
+ use_json(argc, argv));
+ } else {
+ return bgp_show_mpls_vpn(vty, afi, NULL,
+ bgp_show_type_normal, NULL, 0,
+ use_json(argc, argv));
+ }
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_rd,
@@ -607,24 +677,23 @@ DEFUN (show_ip_bgp_vpn_rd,
"Display information for a route distinguisher\n"
"VPN Route Distinguisher\n")
{
- int idx_ext_community = argc-1;
- int ret;
- struct prefix_rd prd;
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- {
- ret = str2prefix_rd (argv[idx_ext_community]->arg, &prd);
- if (! ret)
- {
- vty_out (vty, "%% Malformed Route Distinguisher\n");
- return CMD_WARNING;
- }
- return bgp_show_mpls_vpn (vty, afi, &prd, bgp_show_type_normal, NULL, 0, 0);
- }
- return CMD_SUCCESS;
- }
+ int idx_ext_community = argc - 1;
+ int ret;
+ struct prefix_rd prd;
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+ ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+ if (!ret) {
+ vty_out(vty, "%% Malformed Route Distinguisher\n");
+ return CMD_WARNING;
+ }
+ return bgp_show_mpls_vpn(vty, afi, &prd, bgp_show_type_normal,
+ NULL, 0, 0);
+ }
+ return CMD_SUCCESS;
+}
#ifdef KEEP_OLD_VPN_COMMANDS
DEFUN (show_ip_bgp_vpn_all,
@@ -635,12 +704,13 @@ DEFUN (show_ip_bgp_vpn_all,
BGP_STR
BGP_VPNVX_HELP_STR)
{
- afi_t afi;
- int idx = 0;
+ afi_t afi;
+ int idx = 0;
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- return bgp_show_mpls_vpn (vty, afi, NULL, bgp_show_type_normal, NULL, 0, 0);
- return CMD_SUCCESS;
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi))
+ return bgp_show_mpls_vpn(vty, afi, NULL, bgp_show_type_normal,
+ NULL, 0, 0);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_all_tags,
@@ -653,12 +723,13 @@ DEFUN (show_ip_bgp_vpn_all_tags,
"Display information about all VPNv4/VPNV6 NLRIs\n"
"Display BGP tags for prefixes\n")
{
- afi_t afi;
- int idx = 0;
+ afi_t afi;
+ int idx = 0;
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- return bgp_show_mpls_vpn (vty, afi, NULL, bgp_show_type_normal, NULL, 1, 0);
- return CMD_SUCCESS;
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi))
+ return bgp_show_mpls_vpn(vty, afi, NULL, bgp_show_type_normal,
+ NULL, 1, 0);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_rd_tags,
@@ -672,23 +743,22 @@ DEFUN (show_ip_bgp_vpn_rd_tags,
"VPN Route Distinguisher\n"
"Display BGP tags for prefixes\n")
{
- int idx_ext_community = 5;
- int ret;
- struct prefix_rd prd;
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- {
- ret = str2prefix_rd (argv[idx_ext_community]->arg, &prd);
- if (! ret)
- {
- vty_out (vty, "%% Malformed Route Distinguisher\n");
- return CMD_WARNING;
- }
- return bgp_show_mpls_vpn (vty, afi, &prd, bgp_show_type_normal, NULL, 1, 0);
- }
- return CMD_SUCCESS;
+ int idx_ext_community = 5;
+ int ret;
+ struct prefix_rd prd;
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+ ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+ if (!ret) {
+ vty_out(vty, "%% Malformed Route Distinguisher\n");
+ return CMD_WARNING;
+ }
+ return bgp_show_mpls_vpn(vty, afi, &prd, bgp_show_type_normal,
+ NULL, 1, 0);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_all_neighbor_routes,
@@ -704,51 +774,52 @@ DEFUN (show_ip_bgp_vpn_all_neighbor_routes,
"Display routes learned from neighbor\n"
JSON_STR)
{
- int idx_ipv4 = 6;
- union sockunion su;
- struct peer *peer;
- int ret;
- u_char uj = use_json(argc, argv);
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- {
- ret = str2sockunion (argv[idx_ipv4]->arg, &su);
- if (ret < 0)
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "Malformed address");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "Malformed address: %s\n", argv[idx_ipv4]->arg);
- return CMD_WARNING;
- }
-
- peer = peer_lookup (NULL, &su);
- if (! peer || ! peer->afc[afi][SAFI_MPLS_VPN])
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "No such neighbor or address family");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "%% No such neighbor or address family\n");
- return CMD_WARNING;
- }
-
- return bgp_show_mpls_vpn (vty, afi, NULL, bgp_show_type_neighbor, &su, 0, uj);
- }
- return CMD_SUCCESS;
+ int idx_ipv4 = 6;
+ union sockunion su;
+ struct peer *peer;
+ int ret;
+ u_char uj = use_json(argc, argv);
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+ ret = str2sockunion(argv[idx_ipv4]->arg, &su);
+ if (ret < 0) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(json_no, "warning",
+ "Malformed address");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty, "Malformed address: %s\n",
+ argv[idx_ipv4]->arg);
+ return CMD_WARNING;
+ }
+
+ peer = peer_lookup(NULL, &su);
+ if (!peer || !peer->afc[afi][SAFI_MPLS_VPN]) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(
+ json_no, "warning",
+ "No such neighbor or address family");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty,
+ "%% No such neighbor or address family\n");
+ return CMD_WARNING;
+ }
+
+ return bgp_show_mpls_vpn(vty, afi, NULL, bgp_show_type_neighbor,
+ &su, 0, uj);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_rd_neighbor_routes,
@@ -765,70 +836,71 @@ DEFUN (show_ip_bgp_vpn_rd_neighbor_routes,
"Display routes learned from neighbor\n"
JSON_STR)
{
- int idx_ext_community = 5;
- int idx_ipv4 = 7;
- int ret;
- union sockunion su;
- struct peer *peer;
- struct prefix_rd prd;
- u_char uj = use_json(argc, argv);
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- {
- ret = str2prefix_rd (argv[idx_ext_community]->arg, &prd);
- if (! ret)
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "Malformed Route Distinguisher");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "%% Malformed Route Distinguisher\n");
- return CMD_WARNING;
- }
-
- ret = str2sockunion (argv[idx_ipv4]->arg, &su);
- if (ret < 0)
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "Malformed address");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "Malformed address: %s\n",
- argv[idx_ext_community]->arg);
- return CMD_WARNING;
- }
-
- peer = peer_lookup (NULL, &su);
- if (! peer || ! peer->afc[afi][SAFI_MPLS_VPN])
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "No such neighbor or address family");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "%% No such neighbor or address family\n");
- return CMD_WARNING;
- }
-
- return bgp_show_mpls_vpn (vty, afi, &prd, bgp_show_type_neighbor, &su, 0, uj);
- }
- return CMD_SUCCESS;
+ int idx_ext_community = 5;
+ int idx_ipv4 = 7;
+ int ret;
+ union sockunion su;
+ struct peer *peer;
+ struct prefix_rd prd;
+ u_char uj = use_json(argc, argv);
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+ ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+ if (!ret) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(
+ json_no, "warning",
+ "Malformed Route Distinguisher");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty,
+ "%% Malformed Route Distinguisher\n");
+ return CMD_WARNING;
+ }
+
+ ret = str2sockunion(argv[idx_ipv4]->arg, &su);
+ if (ret < 0) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(json_no, "warning",
+ "Malformed address");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty, "Malformed address: %s\n",
+ argv[idx_ext_community]->arg);
+ return CMD_WARNING;
+ }
+
+ peer = peer_lookup(NULL, &su);
+ if (!peer || !peer->afc[afi][SAFI_MPLS_VPN]) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(
+ json_no, "warning",
+ "No such neighbor or address family");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty,
+ "%% No such neighbor or address family\n");
+ return CMD_WARNING;
+ }
+
+ return bgp_show_mpls_vpn(vty, afi, &prd, bgp_show_type_neighbor,
+ &su, 0, uj);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_all_neighbor_advertised_routes,
@@ -844,49 +916,50 @@ DEFUN (show_ip_bgp_vpn_all_neighbor_advertised_routes,
"Display the routes advertised to a BGP neighbor\n"
JSON_STR)
{
- int idx_ipv4 = 6;
- int ret;
- struct peer *peer;
- union sockunion su;
- u_char uj = use_json(argc, argv);
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- {
- ret = str2sockunion (argv[idx_ipv4]->arg, &su);
- if (ret < 0)
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "Malformed address");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "Malformed address: %s\n", argv[idx_ipv4]->arg);
- return CMD_WARNING;
- }
- peer = peer_lookup (NULL, &su);
- if (! peer || ! peer->afc[afi][SAFI_MPLS_VPN])
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "No such neighbor or address family");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "%% No such neighbor or address family\n");
- return CMD_WARNING;
- }
- return show_adj_route_vpn (vty, peer, NULL, AFI_IP, SAFI_MPLS_VPN, uj);
- }
- return CMD_SUCCESS;
+ int idx_ipv4 = 6;
+ int ret;
+ struct peer *peer;
+ union sockunion su;
+ u_char uj = use_json(argc, argv);
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+ ret = str2sockunion(argv[idx_ipv4]->arg, &su);
+ if (ret < 0) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(json_no, "warning",
+ "Malformed address");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty, "Malformed address: %s\n",
+ argv[idx_ipv4]->arg);
+ return CMD_WARNING;
+ }
+ peer = peer_lookup(NULL, &su);
+ if (!peer || !peer->afc[afi][SAFI_MPLS_VPN]) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(
+ json_no, "warning",
+ "No such neighbor or address family");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty,
+ "%% No such neighbor or address family\n");
+ return CMD_WARNING;
+ }
+ return show_adj_route_vpn(vty, peer, NULL, AFI_IP,
+ SAFI_MPLS_VPN, uj);
+ }
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_vpn_rd_neighbor_advertised_routes,
@@ -903,91 +976,93 @@ DEFUN (show_ip_bgp_vpn_rd_neighbor_advertised_routes,
"Display the routes advertised to a BGP neighbor\n"
JSON_STR)
{
- int idx_ext_community = 5;
- int idx_ipv4 = 7;
- int ret;
- struct peer *peer;
- struct prefix_rd prd;
- union sockunion su;
- u_char uj = use_json(argc, argv);
- afi_t afi;
- int idx = 0;
-
- if (argv_find_and_parse_vpnvx (argv, argc, &idx, &afi))
- {
- ret = str2sockunion (argv[idx_ipv4]->arg, &su);
- if (ret < 0)
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "Malformed address");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "Malformed address: %s\n",
- argv[idx_ext_community]->arg);
- return CMD_WARNING;
- }
- peer = peer_lookup (NULL, &su);
- if (! peer || ! peer->afc[afi][SAFI_MPLS_VPN])
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "No such neighbor or address family");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "%% No such neighbor or address family\n");
- return CMD_WARNING;
- }
-
- ret = str2prefix_rd (argv[idx_ext_community]->arg, &prd);
- if (! ret)
- {
- if (uj)
- {
- json_object *json_no = NULL;
- json_no = json_object_new_object();
- json_object_string_add(json_no, "warning", "Malformed Route Distinguisher");
- vty_out (vty, "%s\n", json_object_to_json_string(json_no));
- json_object_free(json_no);
- }
- else
- vty_out (vty, "%% Malformed Route Distinguisher\n");
- return CMD_WARNING;
- }
-
- return show_adj_route_vpn (vty, peer, &prd, AFI_IP, SAFI_MPLS_VPN, uj);
- }
- return CMD_SUCCESS;
+ int idx_ext_community = 5;
+ int idx_ipv4 = 7;
+ int ret;
+ struct peer *peer;
+ struct prefix_rd prd;
+ union sockunion su;
+ u_char uj = use_json(argc, argv);
+ afi_t afi;
+ int idx = 0;
+
+ if (argv_find_and_parse_vpnvx(argv, argc, &idx, &afi)) {
+ ret = str2sockunion(argv[idx_ipv4]->arg, &su);
+ if (ret < 0) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(json_no, "warning",
+ "Malformed address");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty, "Malformed address: %s\n",
+ argv[idx_ext_community]->arg);
+ return CMD_WARNING;
+ }
+ peer = peer_lookup(NULL, &su);
+ if (!peer || !peer->afc[afi][SAFI_MPLS_VPN]) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(
+ json_no, "warning",
+ "No such neighbor or address family");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty,
+ "%% No such neighbor or address family\n");
+ return CMD_WARNING;
+ }
+
+ ret = str2prefix_rd(argv[idx_ext_community]->arg, &prd);
+ if (!ret) {
+ if (uj) {
+ json_object *json_no = NULL;
+ json_no = json_object_new_object();
+ json_object_string_add(
+ json_no, "warning",
+ "Malformed Route Distinguisher");
+ vty_out(vty, "%s\n",
+ json_object_to_json_string(json_no));
+ json_object_free(json_no);
+ } else
+ vty_out(vty,
+ "%% Malformed Route Distinguisher\n");
+ return CMD_WARNING;
+ }
+
+ return show_adj_route_vpn(vty, peer, &prd, AFI_IP,
+ SAFI_MPLS_VPN, uj);
+ }
+ return CMD_SUCCESS;
}
#endif /* KEEP_OLD_VPN_COMMANDS */
-void
-bgp_mplsvpn_init (void)
+void bgp_mplsvpn_init(void)
{
- install_element (BGP_VPNV4_NODE, &vpnv4_network_cmd);
- install_element (BGP_VPNV4_NODE, &vpnv4_network_route_map_cmd);
- install_element (BGP_VPNV4_NODE, &no_vpnv4_network_cmd);
+ install_element(BGP_VPNV4_NODE, &vpnv4_network_cmd);
+ install_element(BGP_VPNV4_NODE, &vpnv4_network_route_map_cmd);
+ install_element(BGP_VPNV4_NODE, &no_vpnv4_network_cmd);
- install_element (BGP_VPNV6_NODE, &vpnv6_network_cmd);
- install_element (BGP_VPNV6_NODE, &no_vpnv6_network_cmd);
+ install_element(BGP_VPNV6_NODE, &vpnv6_network_cmd);
+ install_element(BGP_VPNV6_NODE, &no_vpnv6_network_cmd);
- install_element (VIEW_NODE, &show_bgp_ip_vpn_all_rd_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_rd_cmd);
+ install_element(VIEW_NODE, &show_bgp_ip_vpn_all_rd_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_vpn_rd_cmd);
#ifdef KEEP_OLD_VPN_COMMANDS
- install_element (VIEW_NODE, &show_ip_bgp_vpn_all_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_all_tags_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_rd_tags_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_all_neighbor_routes_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_rd_neighbor_routes_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_all_neighbor_advertised_routes_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_vpn_rd_neighbor_advertised_routes_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_vpn_all_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_vpn_all_tags_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_vpn_rd_tags_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_vpn_all_neighbor_routes_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_vpn_rd_neighbor_routes_cmd);
+ install_element(VIEW_NODE,
+ &show_ip_bgp_vpn_all_neighbor_advertised_routes_cmd);
+ install_element(VIEW_NODE,
+ &show_ip_bgp_vpn_rd_neighbor_advertised_routes_cmd);
#endif /* KEEP_OLD_VPN_COMMANDS */
}