mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 19:02:58 +00:00
commit
2989c6c960
112
bgpd/bgp_route.c
112
bgpd/bgp_route.c
@ -5267,7 +5267,7 @@ bgp_aggregate_increment (struct bgp *bgp, struct prefix *p,
|
|||||||
struct bgp_table *table;
|
struct bgp_table *table;
|
||||||
|
|
||||||
/* MPLS-VPN aggregation is not yet supported. */
|
/* MPLS-VPN aggregation is not yet supported. */
|
||||||
if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP) || (safi = SAFI_EVPN))
|
if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP) || (safi == SAFI_EVPN))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
table = bgp->aggregate[afi][safi];
|
table = bgp->aggregate[afi][safi];
|
||||||
@ -5304,7 +5304,7 @@ bgp_aggregate_decrement (struct bgp *bgp, struct prefix *p,
|
|||||||
struct bgp_table *table;
|
struct bgp_table *table;
|
||||||
|
|
||||||
/* MPLS-VPN aggregation is not yet supported. */
|
/* MPLS-VPN aggregation is not yet supported. */
|
||||||
if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP) || (safi = SAFI_EVPN))
|
if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP) || (safi == SAFI_EVPN))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
table = bgp->aggregate[afi][safi];
|
table = bgp->aggregate[afi][safi];
|
||||||
@ -6097,7 +6097,7 @@ route_vty_out (struct vty *vty, struct prefix *p,
|
|||||||
* neccessarily the same as the prefix address family.
|
* neccessarily the same as the prefix address family.
|
||||||
* Both SAFI_MPLS_VPN and SAFI_ENCAP use the MP nexthop field
|
* Both SAFI_MPLS_VPN and SAFI_ENCAP use the MP nexthop field
|
||||||
*/
|
*/
|
||||||
if ((safi == SAFI_ENCAP) || (safi == SAFI_MPLS_VPN) || (safi = SAFI_EVPN))
|
if ((safi == SAFI_ENCAP) || (safi == SAFI_MPLS_VPN) || (safi == SAFI_EVPN))
|
||||||
{
|
{
|
||||||
if (attr->extra)
|
if (attr->extra)
|
||||||
{
|
{
|
||||||
@ -6129,7 +6129,7 @@ route_vty_out (struct vty *vty, struct prefix *p,
|
|||||||
{
|
{
|
||||||
json_nexthop_global = json_object_new_object();
|
json_nexthop_global = json_object_new_object();
|
||||||
|
|
||||||
if ((safi == SAFI_MPLS_VPN) || (safi = SAFI_EVPN))
|
if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_EVPN))
|
||||||
json_object_string_add(json_nexthop_global, "ip", inet_ntoa (attr->extra->mp_nexthop_global_in));
|
json_object_string_add(json_nexthop_global, "ip", inet_ntoa (attr->extra->mp_nexthop_global_in));
|
||||||
else
|
else
|
||||||
json_object_string_add(json_nexthop_global, "ip", inet_ntoa (attr->nexthop));
|
json_object_string_add(json_nexthop_global, "ip", inet_ntoa (attr->nexthop));
|
||||||
@ -6139,7 +6139,7 @@ route_vty_out (struct vty *vty, struct prefix *p,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((safi == SAFI_MPLS_VPN) || (safi = SAFI_EVPN))
|
if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_EVPN))
|
||||||
vty_out (vty, "%-16s",
|
vty_out (vty, "%-16s",
|
||||||
inet_ntoa (attr->extra->mp_nexthop_global_in));
|
inet_ntoa (attr->extra->mp_nexthop_global_in));
|
||||||
else
|
else
|
||||||
@ -8358,7 +8358,6 @@ DEFUN (show_ip_bgp,
|
|||||||
"Display route and more specific routes\n"
|
"Display route and more specific routes\n"
|
||||||
JSON_STR)
|
JSON_STR)
|
||||||
{
|
{
|
||||||
vrf_id_t vrf = VRF_DEFAULT;
|
|
||||||
afi_t afi = AFI_IP6;
|
afi_t afi = AFI_IP6;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_UNICAST;
|
||||||
int exact_match = 0;
|
int exact_match = 0;
|
||||||
@ -8366,23 +8365,13 @@ DEFUN (show_ip_bgp,
|
|||||||
struct bgp *bgp = NULL;
|
struct bgp *bgp = NULL;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
int uj = use_json (argc, argv);
|
int uj = use_json (argc, argv);
|
||||||
if (uj) argc--;
|
if (uj) argc--;
|
||||||
|
|
||||||
bgp = bgp_lookup_by_vrf_id (vrf);
|
|
||||||
if (bgp == NULL)
|
|
||||||
{
|
|
||||||
if (vrf == VRF_DEFAULT)
|
|
||||||
vty_out (vty, "Can't find BGP instance (default)%s", VTY_NEWLINE);
|
|
||||||
else
|
|
||||||
vty_out (vty, "Can't find BGP instance %d%s", vrf, VTY_NEWLINE);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argv_find(argv, argc, "cidr-only", &idx))
|
if (argv_find(argv, argc, "cidr-only", &idx))
|
||||||
return bgp_show (vty, bgp, afi, safi, bgp_show_type_cidr_only, NULL, uj);
|
return bgp_show (vty, bgp, afi, safi, bgp_show_type_cidr_only, NULL, uj);
|
||||||
|
|
||||||
@ -8465,7 +8454,6 @@ DEFUN (show_ip_bgp_route,
|
|||||||
|
|
||||||
afi_t afi = AFI_IP6;
|
afi_t afi = AFI_IP6;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_UNICAST;
|
||||||
vrf_id_t vrf = VRF_DEFAULT;;
|
|
||||||
char *prefix = NULL;
|
char *prefix = NULL;
|
||||||
struct bgp *bgp = NULL;
|
struct bgp *bgp = NULL;
|
||||||
enum bgp_path_type path_type;
|
enum bgp_path_type path_type;
|
||||||
@ -8473,20 +8461,11 @@ DEFUN (show_ip_bgp_route,
|
|||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
if (vrf != VRF_ALL)
|
if (!bgp)
|
||||||
{
|
|
||||||
bgp = bgp_lookup_by_vrf_id (vrf);
|
|
||||||
if (bgp == NULL)
|
|
||||||
{
|
|
||||||
vty_out (vty, "Can't find BGP instance %s%s", argv[5]->arg, VTY_NEWLINE);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
vty_out (vty, "Specified 'all' vrf's but this command currently only works per view/vrf%s", VTY_NEWLINE);
|
vty_out (vty, "Specified 'all' vrf's but this command currently only works per view/vrf%s", VTY_NEWLINE);
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
@ -8534,12 +8513,12 @@ DEFUN (show_ip_bgp_regexp,
|
|||||||
"Display routes matching the AS path regular expression\n"
|
"Display routes matching the AS path regular expression\n"
|
||||||
"A regular-expression to match the BGP AS paths\n")
|
"A regular-expression to match the BGP AS paths\n")
|
||||||
{
|
{
|
||||||
vrf_id_t vrf = VRF_DEFAULT;
|
|
||||||
afi_t afi = AFI_IP6;
|
afi_t afi = AFI_IP6;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_UNICAST;
|
||||||
|
struct bgp *bgp = NULL;
|
||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
@ -8564,12 +8543,12 @@ DEFUN (show_ip_bgp_instance_all,
|
|||||||
BGP_SAFI_HELP_STR
|
BGP_SAFI_HELP_STR
|
||||||
JSON_STR)
|
JSON_STR)
|
||||||
{
|
{
|
||||||
vrf_id_t vrf = VRF_DEFAULT;
|
|
||||||
afi_t afi = AFI_IP;
|
afi_t afi = AFI_IP;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_UNICAST;
|
||||||
|
struct bgp *bgp = NULL;
|
||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
@ -9253,41 +9232,19 @@ DEFUN (show_ip_bgp_instance_neighbor_prefix_counts,
|
|||||||
"Display detailed prefix count information\n"
|
"Display detailed prefix count information\n"
|
||||||
JSON_STR)
|
JSON_STR)
|
||||||
{
|
{
|
||||||
vrf_id_t vrf = VRF_DEFAULT;
|
|
||||||
afi_t afi = AFI_IP6;
|
afi_t afi = AFI_IP6;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_UNICAST;
|
||||||
struct peer *peer;
|
struct peer *peer;
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
struct bgp *bgp = NULL;
|
struct bgp *bgp = NULL;
|
||||||
|
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
int uj = use_json (argc, argv);
|
int uj = use_json (argc, argv);
|
||||||
if (uj) argc--;
|
if (uj) argc--;
|
||||||
|
|
||||||
if (vrf != VRF_ALL)
|
|
||||||
{
|
|
||||||
bgp = bgp_lookup_by_vrf_id (vrf);
|
|
||||||
if (bgp == NULL)
|
|
||||||
{
|
|
||||||
if (uj)
|
|
||||||
{
|
|
||||||
json_object *json_no = NULL;
|
|
||||||
json_no = json_object_new_object();
|
|
||||||
json_object_string_add(json_no, "warning", "Can't find BGP view");
|
|
||||||
vty_out (vty, "%s%s", json_object_to_json_string(json_no), VTY_NEWLINE);
|
|
||||||
json_object_free(json_no);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
vty_out (vty, "Can't find BGP instance %s%s", argv[5]->arg, VTY_NEWLINE);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
bgp = NULL;
|
|
||||||
|
|
||||||
argv_find (argv, argc, "neighbors", &idx);
|
argv_find (argv, argc, "neighbors", &idx);
|
||||||
peer = peer_lookup_in_view (vty, bgp, argv[idx+1]->arg, uj);
|
peer = peer_lookup_in_view (vty, bgp, argv[idx+1]->arg, uj);
|
||||||
if (! peer)
|
if (! peer)
|
||||||
@ -9629,7 +9586,6 @@ DEFUN (show_ip_bgp_instance_neighbor_advertised_route,
|
|||||||
"Name of the route map\n"
|
"Name of the route map\n"
|
||||||
JSON_STR)
|
JSON_STR)
|
||||||
{
|
{
|
||||||
vrf_id_t vrf = VRF_DEFAULT;
|
|
||||||
afi_t afi = AFI_IP6;
|
afi_t afi = AFI_IP6;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_UNICAST;
|
||||||
char *rmap_name = NULL;
|
char *rmap_name = NULL;
|
||||||
@ -9640,29 +9596,13 @@ DEFUN (show_ip_bgp_instance_neighbor_advertised_route,
|
|||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
int uj = use_json (argc, argv);
|
int uj = use_json (argc, argv);
|
||||||
if (uj) argc--;
|
if (uj) argc--;
|
||||||
|
|
||||||
bgp = bgp_lookup_by_vrf_id (vrf);
|
|
||||||
if (bgp == NULL)
|
|
||||||
{
|
|
||||||
if (uj)
|
|
||||||
{
|
|
||||||
json_object *json_no = NULL;
|
|
||||||
json_no = json_object_new_object();
|
|
||||||
json_object_string_add(json_no, "warning", "Can't find BGP view");
|
|
||||||
vty_out (vty, "%s%s", json_object_to_json_string(json_no), VTY_NEWLINE);
|
|
||||||
json_object_free(json_no);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
vty_out (vty, "Can't find BGP instance %s%s", argv[5]->arg, VTY_NEWLINE);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* neighbors <A.B.C.D|X:X::X:X|WORD> */
|
/* neighbors <A.B.C.D|X:X::X:X|WORD> */
|
||||||
argv_find (argv, argc, "neighbors", &idx);
|
argv_find (argv, argc, "neighbors", &idx);
|
||||||
peerstr = argv[++idx]->arg;
|
peerstr = argv[++idx]->arg;
|
||||||
@ -9809,7 +9749,6 @@ DEFUN (show_ip_bgp_neighbor_routes,
|
|||||||
"Display routes learned from neighbor\n"
|
"Display routes learned from neighbor\n"
|
||||||
JSON_STR)
|
JSON_STR)
|
||||||
{
|
{
|
||||||
vrf_id_t vrf = VRF_DEFAULT;
|
|
||||||
char *peerstr = NULL;
|
char *peerstr = NULL;
|
||||||
struct bgp *bgp = NULL;
|
struct bgp *bgp = NULL;
|
||||||
afi_t afi = AFI_IP6;
|
afi_t afi = AFI_IP6;
|
||||||
@ -9819,34 +9758,13 @@ DEFUN (show_ip_bgp_neighbor_routes,
|
|||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (vty, argv, argc, &idx, &afi, &safi, &vrf);
|
bgp_vty_find_and_parse_afi_safi_bgp (vty, argv, argc, &idx, &afi, &safi, &bgp);
|
||||||
if (!idx)
|
if (!idx)
|
||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
|
|
||||||
int uj = use_json (argc, argv);
|
int uj = use_json (argc, argv);
|
||||||
if (uj) argc--;
|
if (uj) argc--;
|
||||||
|
|
||||||
if (vrf != VRF_ALL)
|
|
||||||
{
|
|
||||||
bgp = bgp_lookup_by_vrf_id (vrf);
|
|
||||||
if (bgp == NULL)
|
|
||||||
{
|
|
||||||
if (uj)
|
|
||||||
{
|
|
||||||
json_object *json_no = NULL;
|
|
||||||
json_no = json_object_new_object();
|
|
||||||
json_object_string_add(json_no, "warning", "Can't find BGP view");
|
|
||||||
vty_out (vty, "%s%s", json_object_to_json_string(json_no), VTY_NEWLINE);
|
|
||||||
json_object_free(json_no);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
vty_out (vty, "Can't find BGP instance %s%s", argv[5]->arg, VTY_NEWLINE);
|
|
||||||
return CMD_WARNING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
bgp = NULL;
|
|
||||||
|
|
||||||
/* neighbors <A.B.C.D|X:X::X:X|WORD> */
|
/* neighbors <A.B.C.D|X:X::X:X|WORD> */
|
||||||
argv_find (argv, argc, "neighbors", &idx);
|
argv_find (argv, argc, "neighbors", &idx);
|
||||||
peerstr = argv[++idx]->arg;
|
peerstr = argv[++idx]->arg;
|
||||||
|
@ -214,10 +214,10 @@ argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bgp_vty_find_and_parse_afi_safi_vrf
|
* bgp_vty_find_and_parse_afi_safi_bgp
|
||||||
*
|
*
|
||||||
* For a given 'show ...' command, correctly parse the afi/safi/vrf out from it
|
* For a given 'show ...' command, correctly parse the afi/safi/bgp out from it
|
||||||
* This function *assumes* that the calling function pre-sets the afi/safi/vrf
|
* This function *assumes* that the calling function pre-sets the afi/safi/bgp
|
||||||
* to appropriate values for the calling function. This is to allow the
|
* to appropriate values for the calling function. This is to allow the
|
||||||
* calling function to make decisions appropriate for the show command
|
* calling function to make decisions appropriate for the show command
|
||||||
* that is being parsed.
|
* that is being parsed.
|
||||||
@ -238,7 +238,7 @@ argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t
|
|||||||
* idx -> The current place in the command, generally should be 0 for this function
|
* idx -> The current place in the command, generally should be 0 for this function
|
||||||
* afi -> The parsed afi if it was included in the show command, returned here
|
* afi -> The parsed afi if it was included in the show command, returned here
|
||||||
* safi -> The parsed safi if it was included in the show command, returned here
|
* safi -> The parsed safi if it was included in the show command, returned here
|
||||||
* vrf -> The parsed vrf id if it was included in the show command, returned here
|
* bgp -> Pointer to the bgp data structure we need to fill in.
|
||||||
*
|
*
|
||||||
* The function returns the correct location in the parse tree for the
|
* The function returns the correct location in the parse tree for the
|
||||||
* last token found.
|
* last token found.
|
||||||
@ -247,14 +247,14 @@ argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t
|
|||||||
* it found the last token.
|
* it found the last token.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (struct vty *vty, struct cmd_token **argv, int argc, int *idx,
|
bgp_vty_find_and_parse_afi_safi_bgp (struct vty *vty, struct cmd_token **argv, int argc, int *idx,
|
||||||
afi_t *afi, safi_t *safi, vrf_id_t *vrf)
|
afi_t *afi, safi_t *safi, struct bgp **bgp)
|
||||||
{
|
{
|
||||||
char *vrf_name = NULL;
|
char *vrf_name = NULL;
|
||||||
|
|
||||||
assert (afi);
|
assert (afi);
|
||||||
assert (safi);
|
assert (safi);
|
||||||
assert (vrf && *vrf != VRF_UNKNOWN);
|
assert (bgp);
|
||||||
|
|
||||||
if (argv_find (argv, argc, "ip", idx))
|
if (argv_find (argv, argc, "ip", idx))
|
||||||
*afi = AFI_IP;
|
*afi = AFI_IP;
|
||||||
@ -263,26 +263,34 @@ bgp_vty_find_and_parse_afi_safi_vrf (struct vty *vty, struct cmd_token **argv, i
|
|||||||
{
|
{
|
||||||
vrf_name = argv[*idx + 1]->arg;
|
vrf_name = argv[*idx + 1]->arg;
|
||||||
*idx += 2;
|
*idx += 2;
|
||||||
|
|
||||||
|
if (strmatch (vrf_name, "all"))
|
||||||
|
*bgp = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*bgp = bgp_lookup_by_name (vrf_name);
|
||||||
|
if (!*bgp)
|
||||||
|
{
|
||||||
|
vty_out (vty, "View/Vrf specified is unknown: %s%s", vrf_name, VTY_NEWLINE);
|
||||||
|
*idx = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*bgp = bgp_get_default ();
|
||||||
|
if (!*bgp)
|
||||||
|
{
|
||||||
|
vty_out (vty, "Unable to find default BGP instance%s", VTY_NEWLINE);
|
||||||
|
*idx = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv_find_and_parse_afi (argv, argc, idx, afi))
|
if (argv_find_and_parse_afi (argv, argc, idx, afi))
|
||||||
argv_find_and_parse_safi (argv, argc, idx, safi);
|
argv_find_and_parse_safi (argv, argc, idx, safi);
|
||||||
|
|
||||||
if (vrf_name)
|
|
||||||
{
|
|
||||||
if (strmatch(vrf_name, "all"))
|
|
||||||
*vrf = VRF_ALL;
|
|
||||||
else
|
|
||||||
*vrf = vrf_name_to_id (vrf_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*vrf == VRF_UNKNOWN)
|
|
||||||
{
|
|
||||||
vty_out (vty, "View/Vrf specified is unknown: %s", vrf_name);
|
|
||||||
*idx = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
*idx += 1;
|
*idx += 1;
|
||||||
return *idx;
|
return *idx;
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,6 @@ extern int
|
|||||||
argv_find_and_parse_safi(struct cmd_token **argv, int argc, int *index, safi_t *safi);
|
argv_find_and_parse_safi(struct cmd_token **argv, int argc, int *index, safi_t *safi);
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
bgp_vty_find_and_parse_afi_safi_vrf (struct vty *vty, struct cmd_token **argv, int argc, int *idx,
|
bgp_vty_find_and_parse_afi_safi_bgp (struct vty *vty, struct cmd_token **argv, int argc, int *idx,
|
||||||
afi_t *afi, safi_t *safi, vrf_id_t *vrf);
|
afi_t *afi, safi_t *safi, struct bgp **bgp);
|
||||||
#endif /* _QUAGGA_BGP_VTY_H */
|
#endif /* _QUAGGA_BGP_VTY_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user