Merge branch 'dev/osr/vty_index'

Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
David Lamparter 2016-12-15 21:34:53 +01:00 committed by GitHub
commit f4e454eb79
45 changed files with 1015 additions and 1384 deletions

View File

@ -182,12 +182,14 @@ const char *bgp_origin_long_str[] = {"IGP","EGP","incomplete"};
static struct peer * static struct peer *
bgp_find_peer (struct vty *vty, const char *peer_str) bgp_find_peer (struct vty *vty, const char *peer_str)
{ {
struct bgp *bgp = VTY_GET_CONTEXT(bgp);
int ret; int ret;
union sockunion su; union sockunion su;
struct bgp *bgp;
struct peer *peer; struct peer *peer;
bgp = vty->index; if (!bgp) {
return NULL;
}
ret = str2sockunion (peer_str, &su); ret = str2sockunion (peer_str, &su);
/* 'swpX' string */ /* 'swpX' string */
@ -1380,11 +1382,12 @@ DEFUN (no_debug_bgp_update,
BGP_STR BGP_STR
"BGP updates\n") "BGP updates\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
bgp_debug_list_free(bgp_debug_update_in_peers); bgp_debug_list_free(bgp_debug_update_in_peers);
bgp_debug_list_free(bgp_debug_update_out_peers); bgp_debug_list_free(bgp_debug_update_out_peers);
bgp_debug_list_free(bgp_debug_update_prefixes); bgp_debug_list_free(bgp_debug_update_prefixes);
bgp_debug_clear_updgrp_update_dbg(vty->index); bgp_debug_clear_updgrp_update_dbg(bgp);
if (vty->node == CONFIG_NODE) if (vty->node == CONFIG_NODE)
{ {
@ -1615,6 +1618,7 @@ DEFUN (no_debug_bgp,
DEBUG_STR DEBUG_STR
BGP_STR) BGP_STR)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
bgp_debug_list_free(bgp_debug_neighbor_events_peers); bgp_debug_list_free(bgp_debug_neighbor_events_peers);
bgp_debug_list_free(bgp_debug_keepalive_peers); bgp_debug_list_free(bgp_debug_keepalive_peers);
bgp_debug_list_free(bgp_debug_update_in_peers); bgp_debug_list_free(bgp_debug_update_in_peers);
@ -1623,7 +1627,7 @@ DEFUN (no_debug_bgp,
bgp_debug_list_free(bgp_debug_bestpath_prefixes); bgp_debug_list_free(bgp_debug_bestpath_prefixes);
bgp_debug_list_free(bgp_debug_zebra_prefixes); bgp_debug_list_free(bgp_debug_zebra_prefixes);
bgp_debug_clear_updgrp_update_dbg(vty->index); bgp_debug_clear_updgrp_update_dbg(bgp);
TERM_DEBUG_OFF (keepalive, KEEPALIVE); TERM_DEBUG_OFF (keepalive, KEEPALIVE);
TERM_DEBUG_OFF (update, UPDATE_IN); TERM_DEBUG_OFF (update, UPDATE_IN);

View File

@ -3991,9 +3991,10 @@ bgp_static_update_safi (struct bgp *bgp, struct prefix *p,
/* Configure static BGP network. When user don't run zebra, static /* Configure static BGP network. When user don't run zebra, static
route should be installed as valid. */ route should be installed as valid. */
static int static int
bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str, bgp_static_set (struct vty *vty, const char *ip_str,
afi_t afi, safi_t safi, const char *rmap, int backdoor) afi_t afi, safi_t safi, const char *rmap, int backdoor)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix p; struct prefix p;
struct bgp_static *bgp_static; struct bgp_static *bgp_static;
@ -4080,9 +4081,10 @@ bgp_static_set (struct vty *vty, struct bgp *bgp, const char *ip_str,
/* Configure static BGP network. */ /* Configure static BGP network. */
static int static int
bgp_static_unset (struct vty *vty, struct bgp *bgp, const char *ip_str, bgp_static_unset (struct vty *vty, const char *ip_str,
afi_t afi, safi_t safi) afi_t afi, safi_t safi)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix p; struct prefix p;
struct bgp_static *bgp_static; struct bgp_static *bgp_static;
@ -4278,18 +4280,16 @@ bgp_static_set_safi (safi_t safi, struct vty *vty, const char *ip_str,
const char *rd_str, const char *tag_str, const char *rd_str, const char *tag_str,
const char *rmap_str) const char *rmap_str)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix p; struct prefix p;
struct prefix_rd prd; struct prefix_rd prd;
struct bgp *bgp;
struct bgp_node *prn; struct bgp_node *prn;
struct bgp_node *rn; struct bgp_node *rn;
struct bgp_table *table; struct bgp_table *table;
struct bgp_static *bgp_static; struct bgp_static *bgp_static;
u_char tag[3]; u_char tag[3];
bgp = vty->index;
ret = str2prefix (ip_str, &p); ret = str2prefix (ip_str, &p);
if (! ret) if (! ret)
{ {
@ -4359,8 +4359,8 @@ int
bgp_static_unset_safi(safi_t safi, struct vty *vty, const char *ip_str, bgp_static_unset_safi(safi_t safi, struct vty *vty, const char *ip_str,
const char *rd_str, const char *tag_str) const char *rd_str, const char *tag_str)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct bgp *bgp;
struct prefix p; struct prefix p;
struct prefix_rd prd; struct prefix_rd prd;
struct bgp_node *prn; struct bgp_node *prn;
@ -4369,8 +4369,6 @@ bgp_static_unset_safi(safi_t safi, struct vty *vty, const char *ip_str,
struct bgp_static *bgp_static; struct bgp_static *bgp_static;
u_char tag[3]; u_char tag[3];
bgp = vty->index;
/* Convert IP prefix string to struct prefix. */ /* Convert IP prefix string to struct prefix. */
ret = str2prefix (ip_str, &p); ret = str2prefix (ip_str, &p);
if (! ret) if (! ret)
@ -4421,9 +4419,10 @@ bgp_static_unset_safi(safi_t safi, struct vty *vty, const char *ip_str,
} }
static int static int
bgp_table_map_set (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, bgp_table_map_set (struct vty *vty, afi_t afi, safi_t safi,
const char *rmap_name) const char *rmap_name)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct bgp_rmap *rmap; struct bgp_rmap *rmap;
rmap = &bgp->table_map[afi][safi]; rmap = &bgp->table_map[afi][safi];
@ -4448,9 +4447,10 @@ bgp_table_map_set (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
} }
static int static int
bgp_table_map_unset (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, bgp_table_map_unset (struct vty *vty, afi_t afi, safi_t safi,
const char *rmap_name) const char *rmap_name)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct bgp_rmap *rmap; struct bgp_rmap *rmap;
rmap = &bgp->table_map[afi][safi]; rmap = &bgp->table_map[afi][safi];
@ -4486,7 +4486,7 @@ DEFUN (bgp_table_map,
"Name of the route map\n") "Name of the route map\n")
{ {
int idx_word = 1; int idx_word = 1;
return bgp_table_map_set (vty, vty->index, return bgp_table_map_set (vty,
bgp_node_afi (vty), bgp_node_safi (vty), argv[idx_word]->arg); bgp_node_afi (vty), bgp_node_safi (vty), argv[idx_word]->arg);
} }
DEFUN (no_bgp_table_map, DEFUN (no_bgp_table_map,
@ -4497,7 +4497,7 @@ DEFUN (no_bgp_table_map,
"Name of the route map\n") "Name of the route map\n")
{ {
int idx_word = 2; int idx_word = 2;
return bgp_table_map_unset (vty, vty->index, return bgp_table_map_unset (vty,
bgp_node_afi (vty), bgp_node_safi (vty), argv[idx_word]->arg); bgp_node_afi (vty), bgp_node_safi (vty), argv[idx_word]->arg);
} }
@ -4508,7 +4508,7 @@ DEFUN (bgp_network,
"IPv4 prefix\n") "IPv4 prefix\n")
{ {
int idx_ipv4_prefixlen = 1; int idx_ipv4_prefixlen = 1;
return bgp_static_set (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, return bgp_static_set (vty, argv[idx_ipv4_prefixlen]->arg,
AFI_IP, bgp_node_safi (vty), NULL, 0); AFI_IP, bgp_node_safi (vty), NULL, 0);
} }
@ -4522,7 +4522,7 @@ DEFUN (bgp_network_route_map,
{ {
int idx_ipv4_prefixlen = 1; int idx_ipv4_prefixlen = 1;
int idx_word = 3; int idx_word = 3;
return bgp_static_set (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, return bgp_static_set (vty, argv[idx_ipv4_prefixlen]->arg,
AFI_IP, bgp_node_safi (vty), argv[idx_word]->arg, 0); AFI_IP, bgp_node_safi (vty), argv[idx_word]->arg, 0);
} }
@ -4534,7 +4534,7 @@ DEFUN (bgp_network_backdoor,
"Specify a BGP backdoor route\n") "Specify a BGP backdoor route\n")
{ {
int idx_ipv4_prefixlen = 1; int idx_ipv4_prefixlen = 1;
return bgp_static_set (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, AFI_IP, SAFI_UNICAST, return bgp_static_set (vty, argv[idx_ipv4_prefixlen]->arg, AFI_IP, SAFI_UNICAST,
NULL, 1); NULL, 1);
} }
@ -4558,7 +4558,7 @@ DEFUN (bgp_network_mask,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_set (vty, vty->index, prefix_str, return bgp_static_set (vty, prefix_str,
AFI_IP, bgp_node_safi (vty), NULL, 0); AFI_IP, bgp_node_safi (vty), NULL, 0);
} }
@ -4585,7 +4585,7 @@ DEFUN (bgp_network_mask_route_map,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_set (vty, vty->index, prefix_str, return bgp_static_set (vty, prefix_str,
AFI_IP, bgp_node_safi (vty), argv[idx_word]->arg, 0); AFI_IP, bgp_node_safi (vty), argv[idx_word]->arg, 0);
} }
@ -4610,7 +4610,7 @@ DEFUN (bgp_network_mask_backdoor,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_set (vty, vty->index, prefix_str, AFI_IP, SAFI_UNICAST, return bgp_static_set (vty, prefix_str, AFI_IP, SAFI_UNICAST,
NULL, 1); NULL, 1);
} }
@ -4631,7 +4631,7 @@ DEFUN (bgp_network_mask_natural,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_set (vty, vty->index, prefix_str, return bgp_static_set (vty, prefix_str,
AFI_IP, bgp_node_safi (vty), NULL, 0); AFI_IP, bgp_node_safi (vty), NULL, 0);
} }
@ -4655,7 +4655,7 @@ DEFUN (bgp_network_mask_natural_route_map,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_set (vty, vty->index, prefix_str, return bgp_static_set (vty, prefix_str,
AFI_IP, bgp_node_safi (vty), argv[idx_word]->arg, 0); AFI_IP, bgp_node_safi (vty), argv[idx_word]->arg, 0);
} }
@ -4677,7 +4677,7 @@ DEFUN (bgp_network_mask_natural_backdoor,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_set (vty, vty->index, prefix_str, AFI_IP, SAFI_UNICAST, return bgp_static_set (vty, prefix_str, AFI_IP, SAFI_UNICAST,
NULL, 1); NULL, 1);
} }
@ -4692,7 +4692,7 @@ DEFUN (no_bgp_network,
"Name of the route map\n") "Name of the route map\n")
{ {
int idx_ipv4_prefixlen = 2; int idx_ipv4_prefixlen = 2;
return bgp_static_unset (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, AFI_IP, return bgp_static_unset (vty, argv[idx_ipv4_prefixlen]->arg, AFI_IP,
bgp_node_safi (vty)); bgp_node_safi (vty));
} }
@ -4720,7 +4720,7 @@ DEFUN (no_bgp_network_mask,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_unset (vty, vty->index, prefix_str, AFI_IP, return bgp_static_unset (vty, prefix_str, AFI_IP,
bgp_node_safi (vty)); bgp_node_safi (vty));
} }
@ -4745,7 +4745,7 @@ DEFUN (no_bgp_network_mask_natural,
return CMD_WARNING; return CMD_WARNING;
} }
return bgp_static_unset (vty, vty->index, prefix_str, AFI_IP, return bgp_static_unset (vty, prefix_str, AFI_IP,
bgp_node_safi (vty)); bgp_node_safi (vty));
} }
@ -4756,7 +4756,7 @@ DEFUN (ipv6_bgp_network,
"IPv6 prefix\n") "IPv6 prefix\n")
{ {
int idx_ipv6_prefixlen = 1; int idx_ipv6_prefixlen = 1;
return bgp_static_set (vty, vty->index, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, bgp_node_safi(vty), return bgp_static_set (vty, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, bgp_node_safi(vty),
NULL, 0); NULL, 0);
} }
@ -4770,7 +4770,7 @@ DEFUN (ipv6_bgp_network_route_map,
{ {
int idx_ipv6_prefixlen = 1; int idx_ipv6_prefixlen = 1;
int idx_word = 3; int idx_word = 3;
return bgp_static_set (vty, vty->index, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, return bgp_static_set (vty, argv[idx_ipv6_prefixlen]->arg, AFI_IP6,
bgp_node_safi (vty), argv[idx_word]->arg, 0); bgp_node_safi (vty), argv[idx_word]->arg, 0);
} }
@ -4784,7 +4784,7 @@ DEFUN (no_ipv6_bgp_network,
"Name of the route map\n") "Name of the route map\n")
{ {
int idx_ipv6_prefixlen = 2; int idx_ipv6_prefixlen = 2;
return bgp_static_unset (vty, vty->index, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, bgp_node_safi(vty)); return bgp_static_unset (vty, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, bgp_node_safi(vty));
} }
/* Aggreagete address: /* Aggreagete address:
@ -5291,10 +5291,10 @@ static int
bgp_aggregate_unset (struct vty *vty, const char *prefix_str, bgp_aggregate_unset (struct vty *vty, const char *prefix_str,
afi_t afi, safi_t safi) afi_t afi, safi_t safi)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix p; struct prefix p;
struct bgp_node *rn; struct bgp_node *rn;
struct bgp *bgp;
struct bgp_aggregate *aggregate; struct bgp_aggregate *aggregate;
/* Convert string to prefix structure. */ /* Convert string to prefix structure. */
@ -5306,9 +5306,6 @@ bgp_aggregate_unset (struct vty *vty, const char *prefix_str,
} }
apply_mask (&p); apply_mask (&p);
/* Get BGP structure. */
bgp = vty->index;
/* Old configuration check. */ /* Old configuration check. */
rn = bgp_node_lookup (bgp->aggregate[afi][safi], &p); rn = bgp_node_lookup (bgp->aggregate[afi][safi], &p);
if (! rn) if (! rn)
@ -5338,10 +5335,10 @@ bgp_aggregate_set (struct vty *vty, const char *prefix_str,
afi_t afi, safi_t safi, afi_t afi, safi_t safi,
u_char summary_only, u_char as_set) u_char summary_only, u_char as_set)
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix p; struct prefix p;
struct bgp_node *rn; struct bgp_node *rn;
struct bgp *bgp;
struct bgp_aggregate *aggregate; struct bgp_aggregate *aggregate;
/* Convert string to prefix structure. */ /* Convert string to prefix structure. */
@ -5353,9 +5350,6 @@ bgp_aggregate_set (struct vty *vty, const char *prefix_str,
} }
apply_mask (&p); apply_mask (&p);
/* Get BGP structure. */
bgp = vty->index;
/* Old configuration check. */ /* Old configuration check. */
rn = bgp_node_get (bgp->aggregate[afi][safi], &p); rn = bgp_node_get (bgp->aggregate[afi][safi], &p);
@ -9940,14 +9934,13 @@ DEFUN (bgp_distance,
"Distance for routes internal to the AS\n" "Distance for routes internal to the AS\n"
"Distance for local routes\n") "Distance for local routes\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int idx_number = 2; int idx_number = 2;
int idx_number_2 = 3; int idx_number_2 = 3;
int idx_number_3 = 4; int idx_number_3 = 4;
struct bgp *bgp;
afi_t afi; afi_t afi;
safi_t safi; safi_t safi;
bgp = vty->index;
afi = bgp_node_afi (vty); afi = bgp_node_afi (vty);
safi = bgp_node_safi (vty); safi = bgp_node_safi (vty);
@ -9967,11 +9960,10 @@ DEFUN (no_bgp_distance,
"Distance for routes internal to the AS\n" "Distance for routes internal to the AS\n"
"Distance for local routes\n") "Distance for local routes\n")
{ {
struct bgp *bgp; VTY_DECLVAR_CONTEXT(bgp, bgp);
afi_t afi; afi_t afi;
safi_t safi; safi_t safi;
bgp = vty->index;
afi = bgp_node_afi (vty); afi = bgp_node_afi (vty);
safi = bgp_node_safi (vty); safi = bgp_node_safi (vty);
@ -10098,11 +10090,11 @@ DEFUN (bgp_damp_set,
"Value to start suppressing a route\n" "Value to start suppressing a route\n"
"Maximum duration to suppress a stable route\n") "Maximum duration to suppress a stable route\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int idx_half_life = 2; int idx_half_life = 2;
int idx_reuse = 3; int idx_reuse = 3;
int idx_suppress = 4; int idx_suppress = 4;
int idx_max_suppress = 5; int idx_max_suppress = 5;
struct bgp *bgp;
int half = DEFAULT_HALF_LIFE * 60; int half = DEFAULT_HALF_LIFE * 60;
int reuse = DEFAULT_REUSE; int reuse = DEFAULT_REUSE;
int suppress = DEFAULT_SUPPRESS; int suppress = DEFAULT_SUPPRESS;
@ -10121,8 +10113,6 @@ DEFUN (bgp_damp_set,
max = 4 * half; max = 4 * half;
} }
bgp = vty->index;
if (suppress < reuse) if (suppress < reuse)
{ {
vty_out (vty, "Suppress value cannot be less than reuse value %s", vty_out (vty, "Suppress value cannot be less than reuse value %s",
@ -10145,9 +10135,7 @@ DEFUN (bgp_damp_unset,
"Value to start suppressing a route\n" "Value to start suppressing a route\n"
"Maximum duration to suppress a stable route\n") "Maximum duration to suppress a stable route\n")
{ {
struct bgp *bgp; VTY_DECLVAR_CONTEXT(bgp, bgp);
bgp = vty->index;
return bgp_damp_disable (bgp, bgp_node_afi (vty), bgp_node_safi (vty)); return bgp_damp_disable (bgp, bgp_node_afi (vty), bgp_node_safi (vty));
} }

View File

@ -2459,10 +2459,11 @@ struct route_map_rule_cmd route_set_originator_id_cmd =
/* Add bgp route map rule. */ /* Add bgp route map rule. */
static int static int
bgp_route_match_add (struct vty *vty, struct route_map_index *index, bgp_route_match_add (struct vty *vty,
const char *command, const char *arg, const char *command, const char *arg,
route_map_event_t type) route_map_event_t type)
{ {
VTY_DECLVAR_CONTEXT(route_map_index, index);
int ret; int ret;
ret = route_map_add_match (index, command, arg); ret = route_map_add_match (index, command, arg);
@ -2489,10 +2490,11 @@ bgp_route_match_add (struct vty *vty, struct route_map_index *index,
/* Delete bgp route map rule. */ /* Delete bgp route map rule. */
static int static int
bgp_route_match_delete (struct vty *vty, struct route_map_index *index, bgp_route_match_delete (struct vty *vty,
const char *command, const char *arg, const char *command, const char *arg,
route_map_event_t type) route_map_event_t type)
{ {
VTY_DECLVAR_CONTEXT(route_map_index, index);
int ret; int ret;
char *dep_name = NULL; char *dep_name = NULL;
const char *tmpstr; const char *tmpstr;
@ -2892,7 +2894,7 @@ DEFUN (match_peer,
"IPv6 address of peer\n") "IPv6 address of peer\n")
{ {
int idx_ip = 2; int idx_ip = 2;
return bgp_route_match_add (vty, vty->index, "peer", argv[idx_ip]->arg, return bgp_route_match_add (vty, "peer", argv[idx_ip]->arg,
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
} }
@ -2903,7 +2905,7 @@ DEFUN (match_peer_local,
"Match peer address\n" "Match peer address\n"
"Static or Redistributed routes\n") "Static or Redistributed routes\n")
{ {
return bgp_route_match_add (vty, vty->index, "peer", "local", return bgp_route_match_add (vty, "peer", "local",
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
} }
@ -2920,9 +2922,9 @@ DEFUN (no_match_peer,
int idx_peer = 3; int idx_peer = 3;
if (argc <= idx_peer) if (argc <= idx_peer)
return bgp_route_match_delete (vty, vty->index, "peer", NULL, return bgp_route_match_delete (vty, "peer", NULL,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
return bgp_route_match_delete (vty, vty->index, "peer", argv[idx_peer]->arg, return bgp_route_match_delete (vty, "peer", argv[idx_peer]->arg,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
} }
@ -2936,7 +2938,7 @@ DEFUN (match_probability,
"Percentage of routes\n") "Percentage of routes\n")
{ {
int idx_number = 2; int idx_number = 2;
return bgp_route_match_add (vty, vty->index, "probability", argv[idx_number]->arg, return bgp_route_match_add (vty, "probability", argv[idx_number]->arg,
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
} }
@ -2951,9 +2953,9 @@ DEFUN (no_match_probability,
{ {
int idx_number = 3; int idx_number = 3;
if (argc <= idx_number) if (argc <= idx_number)
return bgp_route_match_delete (vty, vty->index, "probability", NULL, return bgp_route_match_delete (vty, "probability", NULL,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
return bgp_route_match_delete (vty, vty->index, "probability", argv[idx_number]->arg, return bgp_route_match_delete (vty, "probability", argv[idx_number]->arg,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
} }
@ -2969,7 +2971,7 @@ DEFUN (match_ip_route_source,
"IP standard access-list name\n") "IP standard access-list name\n")
{ {
int idx_acl = 3; int idx_acl = 3;
return bgp_route_match_add (vty, vty->index, "ip route-source", argv[idx_acl]->arg, return bgp_route_match_add (vty, "ip route-source", argv[idx_acl]->arg,
RMAP_EVENT_FILTER_ADDED); RMAP_EVENT_FILTER_ADDED);
} }
@ -2987,9 +2989,9 @@ DEFUN (no_match_ip_route_source,
{ {
int idx_number = 4; int idx_number = 4;
if (argc <= idx_number) if (argc <= idx_number)
return bgp_route_match_delete (vty, vty->index, "ip route-source", return bgp_route_match_delete (vty, "ip route-source",
NULL, RMAP_EVENT_FILTER_DELETED); NULL, RMAP_EVENT_FILTER_DELETED);
return bgp_route_match_delete (vty, vty->index, "ip route-source", return bgp_route_match_delete (vty, "ip route-source",
argv[idx_number]->arg, RMAP_EVENT_FILTER_DELETED); argv[idx_number]->arg, RMAP_EVENT_FILTER_DELETED);
} }
@ -3004,7 +3006,7 @@ DEFUN (match_ip_route_source_prefix_list,
"IP prefix-list name\n") "IP prefix-list name\n")
{ {
int idx_word = 4; int idx_word = 4;
return bgp_route_match_add (vty, vty->index, "ip route-source prefix-list", return bgp_route_match_add (vty, "ip route-source prefix-list",
argv[idx_word]->arg, RMAP_EVENT_PLIST_ADDED); argv[idx_word]->arg, RMAP_EVENT_PLIST_ADDED);
} }
@ -3021,9 +3023,9 @@ DEFUN (no_match_ip_route_source_prefix_list,
{ {
int idx_word = 5; int idx_word = 5;
if (argc <= idx_word) if (argc <= idx_word)
return bgp_route_match_delete (vty, vty->index, "ip route-source prefix-list", return bgp_route_match_delete (vty, "ip route-source prefix-list",
NULL, RMAP_EVENT_PLIST_DELETED); NULL, RMAP_EVENT_PLIST_DELETED);
return bgp_route_match_delete (vty, vty->index, "ip route-source prefix-list", return bgp_route_match_delete (vty, "ip route-source prefix-list",
argv[idx_word]->arg, RMAP_EVENT_PLIST_DELETED); argv[idx_word]->arg, RMAP_EVENT_PLIST_DELETED);
} }
@ -3036,7 +3038,7 @@ DEFUN (match_local_pref,
"Metric value\n") "Metric value\n")
{ {
int idx_number = 2; int idx_number = 2;
return bgp_route_match_add (vty, vty->index, "local-preference", argv[idx_number]->arg, return bgp_route_match_add (vty, "local-preference", argv[idx_number]->arg,
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
} }
@ -3051,9 +3053,9 @@ DEFUN (no_match_local_pref,
{ {
int idx_localpref = 3; int idx_localpref = 3;
if (argc <= idx_localpref) if (argc <= idx_localpref)
return bgp_route_match_delete (vty, vty->index, "local-preference", return bgp_route_match_delete (vty, "local-preference",
NULL, RMAP_EVENT_MATCH_DELETED); NULL, RMAP_EVENT_MATCH_DELETED);
return bgp_route_match_delete (vty, vty->index, "local-preference", return bgp_route_match_delete (vty, "local-preference",
argv[idx_localpref]->arg, argv[idx_localpref]->arg,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
} }
@ -3069,7 +3071,7 @@ DEFUN (match_community,
"Community-list name\n") "Community-list name\n")
{ {
int idx_comm_list = 2; int idx_comm_list = 2;
return bgp_route_match_add (vty, vty->index, "community", argv[idx_comm_list]->arg, return bgp_route_match_add (vty, "community", argv[idx_comm_list]->arg,
RMAP_EVENT_CLIST_ADDED); RMAP_EVENT_CLIST_ADDED);
} }
@ -3092,7 +3094,7 @@ DEFUN (match_community_exact,
sprintf (argstr, "%s exact-match", argv[idx_comm_list]->arg); sprintf (argstr, "%s exact-match", argv[idx_comm_list]->arg);
ret = bgp_route_match_add (vty, vty->index, "community", argstr, ret = bgp_route_match_add (vty, "community", argstr,
RMAP_EVENT_CLIST_ADDED); RMAP_EVENT_CLIST_ADDED);
XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr); XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr);
@ -3111,7 +3113,7 @@ DEFUN (no_match_community,
"Community-list name\n" "Community-list name\n"
"Do exact matching of communities\n") "Do exact matching of communities\n")
{ {
return bgp_route_match_delete (vty, vty->index, "community", NULL, return bgp_route_match_delete (vty, "community", NULL,
RMAP_EVENT_CLIST_DELETED); RMAP_EVENT_CLIST_DELETED);
} }
@ -3127,7 +3129,7 @@ DEFUN (match_ecommunity,
"Extended community-list name\n") "Extended community-list name\n")
{ {
int idx_comm_list = 2; int idx_comm_list = 2;
return bgp_route_match_add (vty, vty->index, "extcommunity", argv[idx_comm_list]->arg, return bgp_route_match_add (vty, "extcommunity", argv[idx_comm_list]->arg,
RMAP_EVENT_ECLIST_ADDED); RMAP_EVENT_ECLIST_ADDED);
} }
@ -3142,7 +3144,7 @@ DEFUN (no_match_ecommunity,
"Extended community-list number (expanded)\n" "Extended community-list number (expanded)\n"
"Extended community-list name\n") "Extended community-list name\n")
{ {
return bgp_route_match_delete (vty, vty->index, "extcommunity", NULL, return bgp_route_match_delete (vty, "extcommunity", NULL,
RMAP_EVENT_ECLIST_DELETED); RMAP_EVENT_ECLIST_DELETED);
} }
@ -3155,7 +3157,7 @@ DEFUN (match_aspath,
"AS path access-list name\n") "AS path access-list name\n")
{ {
int idx_word = 2; int idx_word = 2;
return bgp_route_match_add (vty, vty->index, "as-path", argv[idx_word]->arg, return bgp_route_match_add (vty, "as-path", argv[idx_word]->arg,
RMAP_EVENT_ASLIST_ADDED); RMAP_EVENT_ASLIST_ADDED);
} }
@ -3168,7 +3170,7 @@ DEFUN (no_match_aspath,
"Match BGP AS path list\n" "Match BGP AS path list\n"
"AS path access-list name\n") "AS path access-list name\n")
{ {
return bgp_route_match_delete (vty, vty->index, "as-path", NULL, return bgp_route_match_delete (vty, "as-path", NULL,
RMAP_EVENT_ASLIST_DELETED); RMAP_EVENT_ASLIST_DELETED);
} }
@ -3184,13 +3186,13 @@ DEFUN (match_origin,
{ {
int idx_origin = 2; int idx_origin = 2;
if (strncmp (argv[idx_origin]->arg, "igp", 2) == 0) if (strncmp (argv[idx_origin]->arg, "igp", 2) == 0)
return bgp_route_match_add (vty, vty->index, "origin", "igp", return bgp_route_match_add (vty, "origin", "igp",
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0) if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0)
return bgp_route_match_add (vty, vty->index, "origin", "egp", return bgp_route_match_add (vty, "origin", "egp",
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0) if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0)
return bgp_route_match_add (vty, vty->index, "origin", "incomplete", return bgp_route_match_add (vty, "origin", "incomplete",
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
return CMD_WARNING; return CMD_WARNING;
@ -3207,7 +3209,7 @@ DEFUN (no_match_origin,
"local IGP\n" "local IGP\n"
"unknown heritage\n") "unknown heritage\n")
{ {
return bgp_route_match_delete (vty, vty->index, "origin", NULL, return bgp_route_match_delete (vty, "origin", NULL,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
} }
@ -3219,7 +3221,8 @@ DEFUN (set_ip_nexthop_peer,
"Next hop address\n" "Next hop address\n"
"Use peer address (for BGP only)\n") "Use peer address (for BGP only)\n")
{ {
return generic_set_add (vty, vty->index, "ip next-hop", "peer-address"); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"ip next-hop", "peer-address");
} }
DEFUN (set_ip_nexthop_unchanged, DEFUN (set_ip_nexthop_unchanged,
@ -3230,7 +3233,8 @@ DEFUN (set_ip_nexthop_unchanged,
"Next hop address\n" "Next hop address\n"
"Don't modify existing Next hop address\n") "Don't modify existing Next hop address\n")
{ {
return generic_set_add (vty, vty->index, "ip next-hop", "unchanged"); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"ip next-hop", "unchanged");
} }
@ -3242,7 +3246,8 @@ DEFUN (set_local_pref,
"Preference value\n") "Preference value\n")
{ {
int idx_number = 2; int idx_number = 2;
return generic_set_add (vty, vty->index, "local-preference", argv[idx_number]->arg); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"local-preference", argv[idx_number]->arg);
} }
@ -3256,8 +3261,10 @@ DEFUN (no_set_local_pref,
{ {
int idx_localpref = 3; int idx_localpref = 3;
if (argc <= idx_localpref) if (argc <= idx_localpref)
return generic_set_delete (vty, vty->index, "local-preference", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
return generic_set_delete (vty, vty->index, "local-preference", argv[idx_localpref]->arg); "local-preference", NULL);
return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"local-preference", argv[idx_localpref]->arg);
} }
@ -3269,7 +3276,8 @@ DEFUN (set_weight,
"Weight value\n") "Weight value\n")
{ {
int idx_number = 2; int idx_number = 2;
return generic_set_add (vty, vty->index, "weight", argv[idx_number]->arg); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "weight",
argv[idx_number]->arg);
} }
@ -3283,8 +3291,10 @@ DEFUN (no_set_weight,
{ {
int idx_weight = 3; int idx_weight = 3;
if (argc <= idx_weight) if (argc <= idx_weight)
return generic_set_delete (vty, vty->index, "weight", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
return generic_set_delete (vty, vty->index, "weight", argv[idx_weight]->arg); "weight", NULL);
return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index), "weight",
argv[idx_weight]->arg);
} }
@ -3301,7 +3311,8 @@ DEFUN (set_aspath_prepend_asn,
char *str; char *str;
str = argv_concat (argv, argc, idx_asn); str = argv_concat (argv, argc, idx_asn);
ret = generic_set_add (vty, vty->index, "as-path prepend", str); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"as-path prepend", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return ret; return ret;
@ -3333,7 +3344,8 @@ DEFUN (no_set_aspath_prepend,
char *str; char *str;
str = argv_concat (argv, argc, idx_asn); str = argv_concat (argv, argc, idx_asn);
ret = generic_set_delete (vty, vty->index, "as-path prepend", str); ret = generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"as-path prepend", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return ret; return ret;
} }
@ -3352,7 +3364,8 @@ DEFUN (set_aspath_exclude,
char *str; char *str;
str = argv_concat (argv, argc, idx_asn); str = argv_concat (argv, argc, idx_asn);
ret = generic_set_add (vty, vty->index, "as-path exclude", str); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"as-path exclude", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return ret; return ret;
} }
@ -3371,7 +3384,8 @@ DEFUN (no_set_aspath_exclude,
char *str; char *str;
str = argv_concat (argv, argc, idx_asn); str = argv_concat (argv, argc, idx_asn);
ret = generic_set_delete (vty, vty->index, "as-path exclude", str); ret = generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"as-path exclude", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return ret; return ret;
} }
@ -3460,11 +3474,13 @@ DEFUN (set_community,
argstr = XCALLOC (MTYPE_TMP, strlen (str) + strlen (" additive") + 1); argstr = XCALLOC (MTYPE_TMP, strlen (str) + strlen (" additive") + 1);
strcpy (argstr, str); strcpy (argstr, str);
strcpy (argstr + strlen (str), " additive"); strcpy (argstr + strlen (str), " additive");
ret = generic_set_add (vty, vty->index, "community", argstr); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"community", argstr);
XFREE (MTYPE_TMP, argstr); XFREE (MTYPE_TMP, argstr);
} }
else else
ret = generic_set_add (vty, vty->index, "community", str); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"community", str);
community_free (com); community_free (com);
@ -3478,7 +3494,8 @@ DEFUN (set_community_none,
"BGP community attribute\n" "BGP community attribute\n"
"No community attribute\n") "No community attribute\n")
{ {
return generic_set_add (vty, vty->index, "community", "none"); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "community",
"none");
} }
DEFUN (no_set_community, DEFUN (no_set_community,
@ -3489,7 +3506,8 @@ DEFUN (no_set_community,
"BGP community attribute\n" "BGP community attribute\n"
COMMUNITY_VAL_STR) COMMUNITY_VAL_STR)
{ {
return generic_set_delete (vty, vty->index, "community", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"community", NULL);
} }
@ -3511,7 +3529,7 @@ DEFUN (set_community_delete,
strcpy (str, argv[idx_comm_list]->arg); strcpy (str, argv[idx_comm_list]->arg);
strcpy (str + strlen (argv[idx_comm_list]->arg), " delete"); strcpy (str + strlen (argv[idx_comm_list]->arg), " delete");
generic_set_add (vty, vty->index, "comm-list", str); generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "comm-list", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return CMD_SUCCESS; return CMD_SUCCESS;
@ -3528,7 +3546,8 @@ DEFUN (no_set_community_delete,
"Community-list name\n" "Community-list name\n"
"Delete matching communities\n") "Delete matching communities\n")
{ {
return generic_set_delete (vty, vty->index, "comm-list", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"comm-list", NULL);
} }
@ -3545,7 +3564,8 @@ DEFUN (set_ecommunity_rt,
char *str; char *str;
str = argv_concat (argv, argc, idx_asn_nn); str = argv_concat (argv, argc, idx_asn_nn);
ret = generic_set_add (vty, vty->index, "extcommunity rt", str); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"extcommunity rt", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return ret; return ret;
@ -3560,7 +3580,8 @@ DEFUN (no_set_ecommunity_rt,
"Route Target extended community\n" "Route Target extended community\n"
"VPN extended community\n") "VPN extended community\n")
{ {
return generic_set_delete (vty, vty->index, "extcommunity rt", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"extcommunity rt", NULL);
} }
@ -3577,7 +3598,8 @@ DEFUN (set_ecommunity_soo,
char *str; char *str;
str = argv_concat (argv, argc, idx_asn_nn); str = argv_concat (argv, argc, idx_asn_nn);
ret = generic_set_add (vty, vty->index, "extcommunity soo", str); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"extcommunity soo", str);
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
return ret; return ret;
} }
@ -3592,7 +3614,8 @@ DEFUN (no_set_ecommunity_soo,
"Site-of-Origin extended community\n" "Site-of-Origin extended community\n"
"VPN extended community\n") "VPN extended community\n")
{ {
return generic_set_delete (vty, vty->index, "extcommunity soo", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"extcommunity soo", NULL);
} }
@ -3607,11 +3630,14 @@ DEFUN (set_origin,
{ {
int idx_origin = 2; int idx_origin = 2;
if (strncmp (argv[idx_origin]->arg, "igp", 2) == 0) if (strncmp (argv[idx_origin]->arg, "igp", 2) == 0)
return generic_set_add (vty, vty->index, "origin", "igp"); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
"igp");
if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0) if (strncmp (argv[idx_origin]->arg, "egp", 1) == 0)
return generic_set_add (vty, vty->index, "origin", "egp"); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
"egp");
if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0) if (strncmp (argv[idx_origin]->arg, "incomplete", 2) == 0)
return generic_set_add (vty, vty->index, "origin", "incomplete"); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index), "origin",
"incomplete");
return CMD_WARNING; return CMD_WARNING;
} }
@ -3627,7 +3653,8 @@ DEFUN (no_set_origin,
"local IGP\n" "local IGP\n"
"unknown heritage\n") "unknown heritage\n")
{ {
return generic_set_delete (vty, vty->index, "origin", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index), "origin",
NULL);
} }
@ -3637,7 +3664,8 @@ DEFUN (set_atomic_aggregate,
SET_STR SET_STR
"BGP atomic aggregate attribute\n" ) "BGP atomic aggregate attribute\n" )
{ {
return generic_set_add (vty, vty->index, "atomic-aggregate", NULL); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"atomic-aggregate", NULL);
} }
DEFUN (no_set_atomic_aggregate, DEFUN (no_set_atomic_aggregate,
@ -3647,7 +3675,8 @@ DEFUN (no_set_atomic_aggregate,
SET_STR SET_STR
"BGP atomic aggregate attribute\n" ) "BGP atomic aggregate attribute\n" )
{ {
return generic_set_delete (vty, vty->index, "atomic-aggregate", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"atomic-aggregate", NULL);
} }
DEFUN (set_aggregator_as, DEFUN (set_aggregator_as,
@ -3677,7 +3706,8 @@ DEFUN (set_aggregator_as,
sprintf (argstr, "%s %s", argv[idx_number]->arg, argv[idx_ipv4]->arg); sprintf (argstr, "%s %s", argv[idx_number]->arg, argv[idx_ipv4]->arg);
ret = generic_set_add (vty, vty->index, "aggregator as", argstr); ret = generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"aggregator as", argstr);
XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr); XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr);
@ -3702,7 +3732,8 @@ DEFUN (no_set_aggregator_as,
char *argstr; char *argstr;
if (argc <= idx_asn) if (argc <= idx_asn)
return generic_set_delete (vty, vty->index, "aggregator as", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"aggregator as", NULL);
ret = inet_aton (argv[idx_ip]->arg, &address); ret = inet_aton (argv[idx_ip]->arg, &address);
if (ret == 0) if (ret == 0)
@ -3716,7 +3747,8 @@ DEFUN (no_set_aggregator_as,
sprintf (argstr, "%s %s", argv[idx_asn]->arg, argv[idx_ip]->arg); sprintf (argstr, "%s %s", argv[idx_asn]->arg, argv[idx_ip]->arg);
ret = generic_set_delete (vty, vty->index, "aggregator as", argstr); ret = generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"aggregator as", argstr);
XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr); XFREE (MTYPE_ROUTE_MAP_COMPILED, argstr);
@ -3733,7 +3765,7 @@ DEFUN (match_ipv6_next_hop,
"IPv6 address of next hop\n") "IPv6 address of next hop\n")
{ {
int idx_ipv6 = 3; int idx_ipv6 = 3;
return bgp_route_match_add (vty, vty->index, "ipv6 next-hop", argv[idx_ipv6]->arg, return bgp_route_match_add (vty, "ipv6 next-hop", argv[idx_ipv6]->arg,
RMAP_EVENT_MATCH_ADDED); RMAP_EVENT_MATCH_ADDED);
} }
@ -3747,7 +3779,7 @@ DEFUN (no_match_ipv6_next_hop,
"IPv6 address of next hop\n") "IPv6 address of next hop\n")
{ {
int idx_ipv6 = 4; int idx_ipv6 = 4;
return bgp_route_match_delete (vty, vty->index, "ipv6 next-hop", argv[idx_ipv6]->arg, return bgp_route_match_delete (vty, "ipv6 next-hop", argv[idx_ipv6]->arg,
RMAP_EVENT_MATCH_DELETED); RMAP_EVENT_MATCH_DELETED);
} }
@ -3760,7 +3792,8 @@ DEFUN (set_ipv6_nexthop_peer,
"Next hop address\n" "Next hop address\n"
"Use peer address (for BGP only)\n") "Use peer address (for BGP only)\n")
{ {
return generic_set_add (vty, vty->index, "ipv6 next-hop peer-address", NULL); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"ipv6 next-hop peer-address", NULL);
} }
DEFUN (no_set_ipv6_nexthop_peer, DEFUN (no_set_ipv6_nexthop_peer,
@ -3772,7 +3805,8 @@ DEFUN (no_set_ipv6_nexthop_peer,
"IPv6 next-hop address\n" "IPv6 next-hop address\n"
"Use peer address (for BGP only)\n") "Use peer address (for BGP only)\n")
{ {
return generic_set_delete (vty, vty->index, "ipv6 next-hop peer-address", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"ipv6 next-hop peer-address", NULL);
} }
DEFUN (set_ipv6_nexthop_prefer_global, DEFUN (set_ipv6_nexthop_prefer_global,
@ -3783,7 +3817,8 @@ DEFUN (set_ipv6_nexthop_prefer_global,
"IPv6 next-hop address\n" "IPv6 next-hop address\n"
"Prefer global over link-local if both exist\n") "Prefer global over link-local if both exist\n")
{ {
return generic_set_add (vty, vty->index, "ipv6 next-hop prefer-global", NULL);; return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"ipv6 next-hop prefer-global", NULL);;
} }
DEFUN (no_set_ipv6_nexthop_prefer_global, DEFUN (no_set_ipv6_nexthop_prefer_global,
@ -3795,7 +3830,8 @@ DEFUN (no_set_ipv6_nexthop_prefer_global,
"IPv6 next-hop address\n" "IPv6 next-hop address\n"
"Prefer global over link-local if both exist\n") "Prefer global over link-local if both exist\n")
{ {
return generic_set_delete (vty, vty->index, "ipv6 next-hop prefer-global", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"ipv6 next-hop prefer-global", NULL);
} }
DEFUN (set_ipv6_nexthop_global, DEFUN (set_ipv6_nexthop_global,
@ -3826,7 +3862,8 @@ DEFUN (set_ipv6_nexthop_global,
return CMD_WARNING; return CMD_WARNING;
} }
return generic_set_add (vty, vty->index, "ipv6 next-hop global", argv[idx_ipv6]->arg); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"ipv6 next-hop global", argv[idx_ipv6]->arg);
} }
@ -3842,8 +3879,10 @@ DEFUN (no_set_ipv6_nexthop_global,
{ {
int idx_ipv6 = 5; int idx_ipv6 = 5;
if (argc <= idx_ipv6) if (argc <= idx_ipv6)
return generic_set_delete (vty, vty->index, "ipv6 next-hop global", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
return generic_set_delete (vty, vty->index, "ipv6 next-hop global", argv[idx_ipv6]->arg); "ipv6 next-hop global", NULL);
return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"ipv6 next-hop global", argv[idx_ipv6]->arg);
} }
#endif /* HAVE_IPV6 */ #endif /* HAVE_IPV6 */
@ -3856,7 +3895,8 @@ DEFUN (set_vpnv4_nexthop,
"IP address of next hop\n") "IP address of next hop\n")
{ {
int idx_ipv4 = 3; int idx_ipv4 = 3;
return generic_set_add (vty, vty->index, "vpnv4 next-hop", argv[idx_ipv4]->arg); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"vpnv4 next-hop", argv[idx_ipv4]->arg);
} }
@ -3871,8 +3911,10 @@ DEFUN (no_set_vpnv4_nexthop,
{ {
int idx_ipv4 = 4; int idx_ipv4 = 4;
if (argc <= idx_ipv4) if (argc <= idx_ipv4)
return generic_set_delete (vty, vty->index, "vpnv4 next-hop", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
return generic_set_delete (vty, vty->index, "vpnv4 next-hop", argv[idx_ipv4]->arg); "vpnv4 next-hop", NULL);
return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"vpnv4 next-hop", argv[idx_ipv4]->arg);
} }
@ -3884,7 +3926,8 @@ DEFUN (set_originator_id,
"IP address of originator\n") "IP address of originator\n")
{ {
int idx_ipv4 = 2; int idx_ipv4 = 2;
return generic_set_add (vty, vty->index, "originator-id", argv[idx_ipv4]->arg); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"originator-id", argv[idx_ipv4]->arg);
} }
@ -3898,8 +3941,10 @@ DEFUN (no_set_originator_id,
{ {
int idx_id = 3; int idx_id = 3;
if (argc < idx_id) if (argc < idx_id)
return generic_set_delete (vty, vty->index, "originator-id", NULL); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
return generic_set_delete (vty, vty->index, "originator-id", argv[idx_id]->arg); "originator-id", NULL);
return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"originator-id", argv[idx_id]->arg);
} }

File diff suppressed because it is too large Load Diff

View File

@ -78,6 +78,10 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "bgpd/bgp_bfd.h" #include "bgpd/bgp_bfd.h"
#include "bgpd/bgp_memory.h" #include "bgpd/bgp_memory.h"
DEFINE_QOBJ_TYPE(bgp_master)
DEFINE_QOBJ_TYPE(bgp)
DEFINE_QOBJ_TYPE(peer)
/* BGP process wide configuration. */ /* BGP process wide configuration. */
static struct bgp_master bgp_master; static struct bgp_master bgp_master;
@ -1018,6 +1022,8 @@ peer_free (struct peer *peer)
{ {
assert (peer->status == Deleted); assert (peer->status == Deleted);
QOBJ_UNREG (peer);
/* this /ought/ to have been done already through bgp_stop earlier, /* this /ought/ to have been done already through bgp_stop earlier,
* but just to be sure.. * but just to be sure..
*/ */
@ -1201,6 +1207,7 @@ peer_new (struct bgp *bgp)
sp = getservbyname ("bgp", "tcp"); sp = getservbyname ("bgp", "tcp");
peer->port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs (sp->s_port); peer->port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs (sp->s_port);
QOBJ_REG (peer, peer);
return peer; return peer;
} }
@ -2917,6 +2924,8 @@ bgp_create (as_t *as, const char *name, enum bgp_instance_type inst_type)
bgp->wpkt_quanta = BGP_WRITE_PACKET_MAX; bgp->wpkt_quanta = BGP_WRITE_PACKET_MAX;
bgp->coalesce_time = BGP_DEFAULT_SUBGROUP_COALESCE_TIME; bgp->coalesce_time = BGP_DEFAULT_SUBGROUP_COALESCE_TIME;
QOBJ_REG (bgp, bgp);
update_bgp_group_init(bgp); update_bgp_group_init(bgp);
return bgp; return bgp;
} }
@ -3233,6 +3242,8 @@ bgp_free (struct bgp *bgp)
afi_t afi; afi_t afi;
safi_t safi; safi_t safi;
QOBJ_UNREG (bgp);
list_delete (bgp->group); list_delete (bgp->group);
list_delete (bgp->peer); list_delete (bgp->peer);
@ -7481,6 +7492,8 @@ bgp_master_init (void)
/* Enable multiple instances by default. */ /* Enable multiple instances by default. */
bgp_option_set (BGP_OPT_MULTIPLE_INSTANCE); bgp_option_set (BGP_OPT_MULTIPLE_INSTANCE);
QOBJ_REG (bm, bgp_master);
} }
/* /*
@ -7582,6 +7595,8 @@ bgp_terminate (void)
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct listnode *mnode, *mnnode; struct listnode *mnode, *mnnode;
QOBJ_UNREG (bm);
/* Close the listener sockets first as this prevents peers from attempting /* Close the listener sockets first as this prevents peers from attempting
* to reconnect on receiving the peer unconfig message. In the presence * to reconnect on receiving the peer unconfig message. In the presence
* of a large number of peers this will ensure that no peer is left with * of a large number of peers this will ensure that no peer is left with

View File

@ -21,6 +21,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#ifndef _QUAGGA_BGPD_H #ifndef _QUAGGA_BGPD_H
#define _QUAGGA_BGPD_H #define _QUAGGA_BGPD_H
#include "qobj.h"
#include "lib/json.h" #include "lib/json.h"
#include "vrf.h" #include "vrf.h"
@ -120,7 +121,10 @@ struct bgp_master
struct thread *t_rmap_update; /* Handle route map updates */ struct thread *t_rmap_update; /* Handle route map updates */
u_int32_t rmap_update_timer; /* Route map update timer */ u_int32_t rmap_update_timer; /* Route map update timer */
#define RMAP_DEFAULT_UPDATE_TIMER 5 /* disabled by default */ #define RMAP_DEFAULT_UPDATE_TIMER 5 /* disabled by default */
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(bgp_master)
/* BGP route-map structure. */ /* BGP route-map structure. */
struct bgp_rmap struct bgp_rmap
@ -356,7 +360,10 @@ struct bgp
struct rfapi_cfg *rfapi_cfg; struct rfapi_cfg *rfapi_cfg;
struct rfapi *rfapi; struct rfapi *rfapi;
#endif #endif
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(bgp)
#define BGP_ROUTE_ADV_HOLD(bgp) (bgp->main_peers_update_hold) #define BGP_ROUTE_ADV_HOLD(bgp) (bgp->main_peers_update_hold)
@ -879,7 +886,10 @@ u_char last_reset_cause[BGP_MAX_PACKET_SIZE];
/* hostname and domainname advertised by host */ /* hostname and domainname advertised by host */
char *hostname; char *hostname;
char *domainname; char *domainname;
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(peer)
/* Check if suppress start/restart of sessions to peer. */ /* Check if suppress start/restart of sessions to peer. */
#define BGP_PEER_START_SUPPRESSED(P) \ #define BGP_PEER_START_SUPPRESSED(P) \

View File

@ -297,13 +297,7 @@ DEFUN (vnc_advertise_un_method,
"Via Encapsulation SAFI\n" "Via Encapsulation SAFI\n"
"Via Tunnel Encap attribute (in VPN SAFI)\n") "Via Tunnel Encap attribute (in VPN SAFI)\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
@ -386,12 +380,7 @@ DEFUN (vnc_defaults_rt_import,
"Import filter\n" "Import filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n") "Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
return set_ecom_list (vty, argc - 2, argv + 2, return set_ecom_list (vty, argc - 2, argv + 2,
&bgp->rfapi_cfg->default_rt_import_list); &bgp->rfapi_cfg->default_rt_import_list);
} }
@ -403,12 +392,7 @@ DEFUN (vnc_defaults_rt_export,
"Export filter\n" "Export filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n") "Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
return set_ecom_list (vty, argc - 2, argv + 2, return set_ecom_list (vty, argc - 2, argv + 2,
&bgp->rfapi_cfg->default_rt_export_list); &bgp->rfapi_cfg->default_rt_export_list);
} }
@ -420,14 +404,9 @@ DEFUN (vnc_defaults_rt_both,
"Export+import filters\n" "Export+import filters\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n") "Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int rc; int rc;
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
rc = set_ecom_list (vty, argc - 2, argv + 2, rc = set_ecom_list (vty, argc - 2, argv + 2,
&bgp->rfapi_cfg->default_rt_import_list); &bgp->rfapi_cfg->default_rt_import_list);
if (rc != CMD_SUCCESS) if (rc != CMD_SUCCESS)
@ -442,15 +421,9 @@ DEFUN (vnc_defaults_rd,
"Specify default route distinguisher\n" "Specify default route distinguisher\n"
"Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:vn:<number> )\n") "Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:vn:<number> )\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix_rd prd; struct prefix_rd prd;
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!strncmp (argv[1]->arg, "auto:vn:", 8)) if (!strncmp (argv[1]->arg, "auto:vn:", 8))
{ {
@ -505,15 +478,9 @@ DEFUN (vnc_defaults_l2rd,
"Fixed value 1-255\n" "Fixed value 1-255\n"
"use the low-order octet of the NVE's VN address\n") "use the low-order octet of the NVE's VN address\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
uint8_t value = 0; uint8_t value = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!strcmp (argv[1]->arg, "auto:vn")) if (!strcmp (argv[1]->arg, "auto:vn"))
{ {
value = 0; value = 0;
@ -550,13 +517,7 @@ DEFUN (vnc_defaults_no_l2rd,
NO_STR NO_STR
"Specify default Local Nve ID value to use in RD for L2 routes\n") "Specify default Local Nve ID value to use in RD for L2 routes\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
bgp->rfapi_cfg->default_l2rd = 0; bgp->rfapi_cfg->default_l2rd = 0;
bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_L2RD; bgp->rfapi_cfg->flags &= ~BGP_VNC_CONFIG_L2RD;
@ -570,18 +531,12 @@ DEFUN (vnc_defaults_responselifetime,
"Specify default response lifetime\n" "Specify default response lifetime\n"
"Response lifetime in seconds\n" "Infinite response lifetime\n") "Response lifetime in seconds\n" "Infinite response lifetime\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
uint32_t rspint; uint32_t rspint;
struct bgp *bgp = vty->index;
struct rfapi *h = NULL; struct rfapi *h = NULL;
struct listnode *hdnode; struct listnode *hdnode;
struct rfapi_descriptor *rfd; struct rfapi_descriptor *rfd;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
h = bgp->rfapi; h = bgp->rfapi;
if (!h) if (!h)
return CMD_WARNING; return CMD_WARNING;
@ -830,15 +785,10 @@ DEFUN (vnc_redistribute_rh_roo_localadmin,
"Resolve-NVE mode\n" "Resolve-NVE mode\n"
"Route Origin Extended Community Local Admin Field\n" "Field value\n") "Route Origin Extended Community Local Admin Field\n" "Field value\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
uint32_t localadmin; uint32_t localadmin;
char *endptr; char *endptr;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE); vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE);
@ -892,14 +842,9 @@ DEFUN (vnc_redistribute_mode,
"Based on redistribute nve-group\n" "Based on redistribute nve-group\n"
"Unmodified\n" "Resolve each nexthop to connected NVEs\n") "Unmodified\n" "Resolve each nexthop to connected NVEs\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
vnc_redist_mode_t newmode; vnc_redist_mode_t newmode;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE); vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE);
@ -951,15 +896,10 @@ DEFUN (vnc_redistribute_protocol,
"From Open Shortest Path First (OSPF)\n" "From Open Shortest Path First (OSPF)\n"
"From Routing Information Protocol (RIP)\n" "From Static routes\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 */ int type = ZEBRA_ROUTE_MAX; /* init to bogus value */
struct bgp *bgp = vty->index;
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE); vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE);
@ -1004,15 +944,10 @@ DEFUN (vnc_no_redistribute_protocol,
"From Open Shortest Path First (OSPF)\n" "From Open Shortest Path First (OSPF)\n"
"From Routing Information Protocol (RIP)\n" "From Static routes\n") "From Routing Information Protocol (RIP)\n" "From Static routes\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int type; int type;
struct bgp *bgp = vty->index;
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE); vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE);
@ -1050,15 +985,10 @@ DEFUN (vnc_redistribute_bgp_exterior,
"From BGP without Zebra, only to configured NVE groups\n" "From BGP without Zebra, only to configured NVE groups\n"
"From BGP view\n" "BGP view name\n") "From BGP view\n" "BGP view name\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int type; int type;
struct bgp *bgp = vty->index;
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE); vty_out (vty, "RFAPI not configured%s", VTY_NEWLINE);
@ -1089,13 +1019,7 @@ DEFUN (vnc_redistribute_nvegroup,
"Assign a NVE group to routes redistributed from another routing protocol\n" "Assign a NVE group to routes redistributed from another routing protocol\n"
"NVE group\n" "Group name\n") "NVE group\n" "Group name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
@ -1127,13 +1051,7 @@ DEFUN (vnc_redistribute_no_nvegroup,
"Redistribute from other protocol\n" "Redistribute from other protocol\n"
"Assign a NVE group to routes redistributed from another routing protocol\n") "Assign a NVE group to routes redistributed from another routing protocol\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
@ -1161,13 +1079,7 @@ DEFUN (vnc_redistribute_lifetime,
"Assign a lifetime to routes redistributed from another routing protocol\n" "Assign a lifetime to routes redistributed from another routing protocol\n"
"lifetime value (32 bit)\n") "lifetime value (32 bit)\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
@ -1205,17 +1117,11 @@ DEFUN (vnc_redist_bgpdirect_no_prefixlist,
"IPv4 routes\n" "IPv4 routes\n"
"IPv6 routes\n" "Prefix-list for filtering redistributed routes\n") "IPv6 routes\n" "Prefix-list for filtering redistributed routes\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
afi_t afi; afi_t afi;
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
uint8_t route_type = 0; uint8_t route_type = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1264,17 +1170,11 @@ DEFUN (vnc_redist_bgpdirect_prefixlist,
"Prefix-list for filtering redistributed routes\n" "Prefix-list for filtering redistributed routes\n"
"prefix list name\n") "prefix list name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
afi_t afi; afi_t afi;
uint8_t route_type = 0; uint8_t route_type = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1321,16 +1221,10 @@ DEFUN (vnc_redist_bgpdirect_no_routemap,
"Redistribute from BGP without Zebra, only to configured NVE groups\n" "Redistribute from BGP without Zebra, only to configured NVE groups\n"
"Route-map for filtering redistributed routes\n") "Route-map for filtering redistributed routes\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
uint8_t route_type = 0; uint8_t route_type = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1367,16 +1261,10 @@ DEFUN (vnc_redist_bgpdirect_routemap,
"Redistribute from BGP without Zebra, only to configured NVE groups\n" "Redistribute from BGP without Zebra, only to configured NVE groups\n"
"Route-map for filtering exported routes\n" "route map name\n") "Route-map for filtering exported routes\n" "route map name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
uint8_t route_type = 0; uint8_t route_type = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1418,16 +1306,10 @@ DEFUN (vnc_nve_group_redist_bgpdirect_no_prefixlist,
"IPv4 routes\n" "IPv4 routes\n"
"IPv6 routes\n" "Prefix-list for filtering redistributed routes\n") "IPv6 routes\n" "Prefix-list for filtering redistributed routes\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg) VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg)
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1473,16 +1355,10 @@ DEFUN (vnc_nve_group_redist_bgpdirect_prefixlist,
"Prefix-list for filtering redistributed routes\n" "Prefix-list for filtering redistributed routes\n"
"prefix list name\n") "prefix list name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1528,15 +1404,9 @@ DEFUN (vnc_nve_group_redist_bgpdirect_no_routemap,
"Disable redistribute filter\n" "Disable redistribute filter\n"
"Route-map for filtering redistributed routes\n") "Route-map for filtering redistributed routes\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1570,15 +1440,9 @@ DEFUN (vnc_nve_group_redist_bgpdirect_routemap,
"Redistribute from BGP directly\n" "Redistribute from BGP directly\n"
"Route-map for filtering exported routes\n" "route map name\n") "Route-map for filtering exported routes\n" "route map name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1624,16 +1488,10 @@ DEFUN (vnc_export_mode,
"Export routes with NVE connected router next-hops\n" "Export routes with NVE connected router next-hops\n"
"Disable export\n" "Export routes with registering NVE as next-hop\n") "Disable export\n" "Export routes with registering NVE as next-hop\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
uint32_t oldmode = 0; uint32_t oldmode = 0;
uint32_t newmode = 0; uint32_t newmode = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "VNC not configured%s", VTY_NEWLINE); vty_out (vty, "VNC not configured%s", VTY_NEWLINE);
@ -1753,15 +1611,9 @@ DEFUN (vnc_export_nvegroup,
"NVE group, used in 'group-nve' export mode\n" "NVE group, used in 'group-nve' export mode\n"
"NVE group\n" "Group name\n") "NVE group\n" "Group name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_nve_group_cfg *rfg_new; struct rfapi_nve_group_cfg *rfg_new;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1860,16 +1712,10 @@ DEFUN (vnc_no_export_nvegroup,
"NVE group, used in 'group-nve' export mode\n" "NVE group, used in 'group-nve' export mode\n"
"Disable export of VNC routes\n" "NVE group\n" "Group name\n") "Disable export of VNC routes\n" "NVE group\n" "Group name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct rfapi_rfg_name *rfgn; struct rfapi_rfg_name *rfgn;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -1927,16 +1773,10 @@ DEFUN (vnc_nve_group_export_no_prefixlist,
"IPv6 routes\n" "IPv6 routes\n"
"Prefix-list for filtering exported routes\n" "prefix list name\n") "Prefix-list for filtering exported routes\n" "prefix list name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2002,16 +1842,10 @@ DEFUN (vnc_nve_group_export_prefixlist,
"IPv6 routes\n" "IPv6 routes\n"
"Prefix-list for filtering exported routes\n" "prefix list name\n") "Prefix-list for filtering exported routes\n" "prefix list name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2066,15 +1900,9 @@ DEFUN (vnc_nve_group_export_no_routemap,
"Export to Zebra (experimental)\n" "Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "route map name\n") "Route-map for filtering exported routes\n" "route map name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2131,15 +1959,9 @@ DEFUN (vnc_nve_group_export_routemap,
"Export to Zebra (experimental)\n" "Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "route map name\n") "Route-map for filtering exported routes\n" "route map name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!bgp->rfapi_cfg) if (!bgp->rfapi_cfg)
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2187,16 +2009,10 @@ DEFUN (vnc_nve_export_no_prefixlist,
"IPv6 prefixes\n" "IPv6 prefixes\n"
"Prefix-list for filtering exported routes\n" "Prefix list name\n") "Prefix-list for filtering exported routes\n" "Prefix list name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2255,16 +2071,10 @@ DEFUN (vnc_nve_export_prefixlist,
"IPv6 prefixes\n" "IPv6 prefixes\n"
"Prefix-list for filtering exported routes\n" "Prefix list name\n") "Prefix-list for filtering exported routes\n" "Prefix list name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
afi_t afi; afi_t afi;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2309,15 +2119,9 @@ DEFUN (vnc_nve_export_no_routemap,
"Export to Zebra (experimental)\n" "Export to Zebra (experimental)\n"
"Route-map for filtering exported routes\n" "Route map name\n") "Route-map for filtering exported routes\n" "Route map name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2367,15 +2171,9 @@ DEFUN (vnc_nve_export_routemap,
"Filters, used in 'registering-nve' export mode\n" "Filters, used in 'registering-nve' export mode\n"
"Route-map for filtering exported routes\n" "Route map name\n") "Route-map for filtering exported routes\n" "Route map name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_cfg *hc; struct rfapi_cfg *hc;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (!(hc = bgp->rfapi_cfg)) if (!(hc = bgp->rfapi_cfg))
{ {
vty_out (vty, "rfapi not configured%s", VTY_NEWLINE); vty_out (vty, "rfapi not configured%s", VTY_NEWLINE);
@ -2611,17 +2409,11 @@ DEFUN (vnc_nve_group,
"vnc nve-group NAME", "vnc nve-group NAME",
VNC_CONFIG_STR "Configure a NVE group\n" "Group name\n") VNC_CONFIG_STR "Configure a NVE group\n" "Group name\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_nve_group_cfg *rfg; struct rfapi_nve_group_cfg *rfg;
struct bgp *bgp = vty->index;
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct rfapi_rfg_name *rfgn; struct rfapi_rfg_name *rfgn;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* Search for name */ /* Search for name */
rfg = rfapi_group_lookup_byname (bgp, argv[2]->arg); rfg = rfapi_group_lookup_byname (bgp, argv[2]->arg);
@ -2911,13 +2703,8 @@ DEFUN (vnc_no_nve_group,
"Configure a NVE group\n" "Configure a NVE group\n"
"Group name\n") "Group name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
return bgp_rfapi_delete_named_nve_group (vty, bgp, argv[3]->arg); return bgp_rfapi_delete_named_nve_group (vty, bgp, argv[3]->arg);
} }
@ -2930,6 +2717,7 @@ DEFUN (vnc_nve_group_prefix,
"IPv4 prefix\n" "IPv4 prefix\n"
"IPv6 prefix\n") "IPv6 prefix\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct prefix p; struct prefix p;
int afi; int afi;
@ -2937,14 +2725,6 @@ DEFUN (vnc_nve_group_prefix,
struct route_node *rn; struct route_node *rn;
int is_un_prefix = 0; int is_un_prefix = 0;
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
{ {
@ -3056,20 +2836,14 @@ DEFUN (vnc_nve_group_rt_import,
"Import filter\n" "Import filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\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); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
int rc; int rc;
struct listnode *node; struct listnode *node;
struct rfapi_rfg_name *rfgn; struct rfapi_rfg_name *rfgn;
int is_export_bgp = 0; int is_export_bgp = 0;
int is_export_zebra = 0; int is_export_zebra = 0;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
{ {
@ -3132,16 +2906,10 @@ DEFUN (vnc_nve_group_rt_export,
"Export filter\n" "Export filter\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\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); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
int rc; int rc;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
{ {
@ -3172,20 +2940,14 @@ DEFUN (vnc_nve_group_rt_both,
"Export+import filters\n" "Export+import filters\n"
"Space separated route target list (A.B.C.D:MN|EF:OPQR|GHJK:MN)\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); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
int rc; int rc;
int is_export_bgp = 0; int is_export_bgp = 0;
int is_export_zebra = 0; int is_export_zebra = 0;
struct listnode *node; struct listnode *node;
struct rfapi_rfg_name *rfgn; struct rfapi_rfg_name *rfgn;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
{ {
@ -3264,14 +3026,8 @@ DEFUN (vnc_nve_group_l2rd,
"Fixed value 1-255\n" "Fixed value 1-255\n"
"use the low-order octet of the NVE's VN address\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); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
@ -3318,14 +3074,8 @@ DEFUN (vnc_nve_group_no_l2rd,
NO_STR NO_STR
"Specify default Local Nve ID value to use in RD for L2 routes\n") "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_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
@ -3347,16 +3097,10 @@ DEFUN (vnc_nve_group_rd,
"Specify route distinguisher\n" "Specify route distinguisher\n"
"Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:vn:<number> )\n") "Route Distinguisher (<as-number>:<number> | <ip-address>:<number> | auto:vn:<number> )\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
int ret; int ret;
struct prefix_rd prd; struct prefix_rd prd;
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
@ -3428,18 +3172,12 @@ DEFUN (vnc_nve_group_responselifetime,
"Specify response lifetime\n" "Specify response lifetime\n"
"Response lifetime in seconds\n" "Infinite response lifetime\n") "Response lifetime in seconds\n" "Infinite response lifetime\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
unsigned int rspint; unsigned int rspint;
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg);
struct bgp *bgp = vty->index;
struct rfapi_descriptor *rfd; struct rfapi_descriptor *rfd;
struct listnode *hdnode; struct listnode *hdnode;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->nve_groups_sequential, rfg))
{ {
@ -3507,14 +3245,8 @@ DEFUN (vnc_l2_group,
"vnc l2-group NAME", "vnc l2-group NAME",
VNC_CONFIG_STR "Configure a L2 group\n" "Group name\n") VNC_CONFIG_STR "Configure a L2 group\n" "Group name\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
struct rfapi_l2_group_cfg *rfg; struct rfapi_l2_group_cfg *rfg;
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* Search for name */ /* Search for name */
rfg = rfapi_l2_group_lookup_byname (bgp, argv[2]->arg); rfg = rfapi_l2_group_lookup_byname (bgp, argv[2]->arg);
@ -3600,13 +3332,8 @@ DEFUN (vnc_no_l2_group,
"Configure a L2 group\n" "Configure a L2 group\n"
"Group name\n") "Group name\n")
{ {
struct bgp *bgp = vty->index; VTY_DECLVAR_CONTEXT(bgp, bgp);
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
return bgp_rfapi_delete_named_l2_group (vty, bgp, argv[3]->arg); return bgp_rfapi_delete_named_l2_group (vty, bgp, argv[3]->arg);
} }
@ -3617,14 +3344,8 @@ DEFUN (vnc_l2_group_lni,
"Specify Logical Network ID associated with group\n" "Specify Logical Network ID associated with group\n"
"value\n") "value\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
struct bgp *bgp = vty->index;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
@ -3645,16 +3366,10 @@ DEFUN (vnc_l2_group_labels,
"Specify label values associated with group\n" "Specify label values associated with group\n"
"Space separated list of label values <0-1048575>\n") "Space separated list of label values <0-1048575>\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
struct bgp *bgp = vty->index;
struct list *ll; struct list *ll;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
{ {
@ -3691,16 +3406,10 @@ DEFUN (vnc_l2_group_no_labels,
"Specify label values associated with L2 group\n" "Specify label values associated with L2 group\n"
"Space separated list of label values <0-1048575>\n") "Space separated list of label values <0-1048575>\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
struct bgp *bgp = vty->index;
struct list *ll; struct list *ll;
if (!bgp)
{
vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
return CMD_WARNING;
}
/* make sure it's still in list */ /* make sure it's still in list */
if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg)) if (!listnode_lookup (bgp->rfapi_cfg->l2_groups, rfg))
{ {
@ -3737,8 +3446,8 @@ DEFUN (vnc_l2_group_rt,
"Import filters\n" "Import filters\n"
"A route target\n") "A route target\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg); VTY_DECLVAR_CONTEXT_SUB(rfapi_l2_group_cfg, rfg);
struct bgp *bgp = vty->index;
int rc = CMD_SUCCESS; int rc = CMD_SUCCESS;
int do_import = 0; int do_import = 0;
int do_export = 0; int do_export = 0;

View File

@ -45,7 +45,7 @@ DEFUN (rfp_example_config_value,
{ {
uint32_t value = 0; uint32_t value = 0;
struct rfp_instance_t *rfi = NULL; struct rfp_instance_t *rfi = NULL;
rfi = rfapi_get_rfp_start_val (vty->index); /* index=bgp for BGP_NODE */ rfi = rfapi_get_rfp_start_val (VTY_GET_CONTEXT (bgp)); /* BGP_NODE */
assert (rfi != NULL); assert (rfi != NULL);
VTY_GET_INTEGER ("Example value", value, argv[2]->arg); VTY_GET_INTEGER ("Example value", value, argv[2]->arg);

View File

@ -1,7 +1,6 @@
## Process this file with automake to produce Makefile.in. ## Process this file with automake to produce Makefile.in.
AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib \ AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
-DVTY_DEPRECATE_INDEX
DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
INSTALL_SDATA=@INSTALL@ -m 600 INSTALL_SDATA=@INSTALL@ -m 600
LIBS = @LIBS@ LIBS = @LIBS@

View File

@ -320,12 +320,6 @@ area_net_title (struct vty *vty, const char *net_title)
u_char buff[255]; u_char buff[255];
if (!area)
{
vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
return CMD_ERR_NO_MATCH;
}
/* We check that we are not over the maximal number of addresses */ /* We check that we are not over the maximal number of addresses */
if (listcount (area->area_addrs) >= isis->max_area_addrs) if (listcount (area->area_addrs) >= isis->max_area_addrs)
{ {
@ -420,12 +414,6 @@ area_clear_net_title (struct vty *vty, const char *net_title)
struct listnode *node; struct listnode *node;
u_char buff[255]; u_char buff[255];
if (!area)
{
vty_out (vty, "Can't find ISIS instance %s", VTY_NEWLINE);
return CMD_ERR_NO_MATCH;
}
addr.addr_len = dotformat2buff (buff, net_title); addr.addr_len = dotformat2buff (buff, net_title);
if (addr.addr_len < 8 || addr.addr_len > 20) if (addr.addr_len < 8 || addr.addr_len > 20)
{ {

View File

@ -1,7 +1,6 @@
## Process this file with automake to produce Makefile.in. ## Process this file with automake to produce Makefile.in.
AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib \ AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
-DVTY_DEPRECATE_INDEX
DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
INSTALL_SDATA=@INSTALL@ -m 600 INSTALL_SDATA=@INSTALL@ -m 600

View File

@ -1,7 +1,6 @@
## Process this file with automake to produce Makefile.in. ## Process this file with automake to produce Makefile.in.
AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib \ AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
-DVTY_DEPRECATE_INDEX
AM_CFLAGS = $(WERROR) AM_CFLAGS = $(WERROR)
DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
AM_YFLAGS = -d AM_YFLAGS = -d

View File

@ -784,7 +784,7 @@ DEFUN (interface,
vty_out (vty, "%% interface %s not in %s%s", ifname, vrfname, VTY_NEWLINE); vty_out (vty, "%% interface %s not in %s%s", ifname, vrfname, VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
VTY_PUSH_CONTEXT_COMPAT (INTERFACE_NODE, ifp); VTY_PUSH_CONTEXT (INTERFACE_NODE, ifp);
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -251,7 +251,7 @@ DEFUN (key_chain,
struct keychain *keychain; struct keychain *keychain;
keychain = keychain_get (argv[idx_word]->arg); keychain = keychain_get (argv[idx_word]->arg);
VTY_PUSH_CONTEXT_COMPAT (KEYCHAIN_NODE, keychain); VTY_PUSH_CONTEXT (KEYCHAIN_NODE, keychain);
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -49,7 +49,7 @@ void qobj_reg(struct qobj_node *node, struct qobj_nodetype *type)
node->nid = (uint64_t)random(); node->nid = (uint64_t)random();
node->nid ^= (uint64_t)random() << 32; node->nid ^= (uint64_t)random() << 32;
} }
while (hash_get (nodes, node, hash_alloc_intern) != node); while (!node->nid || hash_get (nodes, node, hash_alloc_intern) != node);
} }
void qobj_unreg(struct qobj_node *node) void qobj_unreg(struct qobj_node *node)

View File

@ -109,6 +109,8 @@ void *qobj_get_typed(uint64_t id, struct qobj_nodetype *type);
#define QOBJ_ID(ptr) \ #define QOBJ_ID(ptr) \
((ptr)->qobj_node.nid) ((ptr)->qobj_node.nid)
#define QOBJ_ID_0SAFE(ptr) \
({ typeof (ptr) _ptr = (ptr); _ptr ? _ptr->qobj_node.nid : 0ULL; })
void qobj_init(void); void qobj_init(void);
void qobj_finish(void); void qobj_finish(void);

View File

@ -2549,7 +2549,7 @@ DEFUN (route_map,
map = route_map_get (mapname); map = route_map_get (mapname);
index = route_map_index_get (map, permit, pref); index = route_map_index_get (map, permit, pref);
VTY_PUSH_CONTEXT_COMPAT (RMAP_NODE, index); VTY_PUSH_CONTEXT (RMAP_NODE, index);
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -494,7 +494,7 @@ DEFUN (vrf,
vrfp = vrf_get (VRF_UNKNOWN, vrfname); vrfp = vrf_get (VRF_UNKNOWN, vrfname);
VTY_PUSH_CONTEXT_COMPAT (VRF_NODE, vrfp); VTY_PUSH_CONTEXT (VRF_NODE, vrfp);
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -29,14 +29,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#define VTY_BUFSIZ 512 #define VTY_BUFSIZ 512
#define VTY_MAXHIST 20 #define VTY_MAXHIST 20
#if defined(VTY_DEPRECATE_INDEX) && defined(__GNUC__) && \
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && \
!defined(__ICC)
#define INDEX_WARNING __attribute__((deprecated))
#else
#define INDEX_WARNING
#endif
/* VTY struct. */ /* VTY struct. */
struct vty struct vty
{ {
@ -82,10 +74,6 @@ struct vty
/* History insert end point */ /* History insert end point */
int hindex; int hindex;
/* For current referencing point of interface, route-map,
access-list etc... */
void *index INDEX_WARNING;
/* qobj object ID (replacement for "index") */ /* qobj object ID (replacement for "index") */
uint64_t qobj_index; uint64_t qobj_index;
@ -139,32 +127,23 @@ struct vty
char address[SU_ADDRSTRLEN]; char address[SU_ADDRSTRLEN];
}; };
#undef INDEX_WARNING
static inline void vty_push_context(struct vty *vty, static inline void vty_push_context(struct vty *vty,
int node, uint64_t id, void *idx) int node, uint64_t id)
{ {
vty->node = node; vty->node = node;
vty->qobj_index = id; vty->qobj_index = id;
#if defined(VTY_DEPRECATE_INDEX) && defined(__GNUC__) && \
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
vty->index = idx;
#pragma GCC diagnostic pop
#else
vty->index = idx;
#endif
} }
/* note: VTY_PUSH_CONTEXT(..., NULL) doesn't work, since it will try to
* dereference "NULL->qobj_node.nid" */
#define VTY_PUSH_CONTEXT(nodeval, ptr) \ #define VTY_PUSH_CONTEXT(nodeval, ptr) \
vty_push_context(vty, nodeval, QOBJ_ID(ptr), NULL) vty_push_context(vty, nodeval, QOBJ_ID_0SAFE(ptr))
#define VTY_PUSH_CONTEXT_COMPAT(nodeval, ptr) \ #define VTY_PUSH_CONTEXT_NULL(nodeval) \
vty_push_context(vty, nodeval, QOBJ_ID(ptr), ptr) vty_push_context(vty, nodeval, 0ULL)
#define VTY_PUSH_CONTEXT_SUB(nodeval, ptr) do { \ #define VTY_PUSH_CONTEXT_SUB(nodeval, ptr) do { \
vty->node = nodeval; \ vty->node = nodeval; \
/* qobj_index stays untouched */ \ /* qobj_index stays untouched */ \
vty->qobj_index_sub = QOBJ_ID(ptr); \ vty->qobj_index_sub = QOBJ_ID_0SAFE(ptr); \
} while (0) } while (0)
/* can return NULL if context is invalid! */ /* can return NULL if context is invalid! */

View File

@ -1103,8 +1103,9 @@ DEFUN (ospf6_routemap_match_address_prefixlist,
"Match entries of prefix-lists\n" "Match entries of prefix-lists\n"
"IPv6 prefix-list name\n") "IPv6 prefix-list name\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_word = 4; int idx_word = 4;
int ret = route_map_add_match ((struct route_map_index *) vty->index, int ret = route_map_add_match (route_map_index,
"ipv6 address prefix-list", argv[idx_word]->arg); "ipv6 address prefix-list", argv[idx_word]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1120,8 +1121,9 @@ DEFUN (ospf6_routemap_no_match_address_prefixlist,
"Match entries of prefix-lists\n" "Match entries of prefix-lists\n"
"IPv6 prefix-list name\n") "IPv6 prefix-list name\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_word = 5; int idx_word = 5;
int ret = route_map_delete_match ((struct route_map_index *) vty->index, int ret = route_map_delete_match (route_map_index,
"ipv6 address prefix-list", argv[idx_word]->arg); "ipv6 address prefix-list", argv[idx_word]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1134,8 +1136,9 @@ DEFUN (ospf6_routemap_match_interface,
"Match first hop interface of route\n" "Match first hop interface of route\n"
"Interface name\n") "Interface name\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_word = 2; int idx_word = 2;
return route_map_add_match ((struct route_map_index *) vty->index, return route_map_add_match (route_map_index,
"interface", argv[idx_word]->arg); "interface", argv[idx_word]->arg);
} }
@ -1148,14 +1151,15 @@ DEFUN (ospf6_routemap_no_match_interface,
"Match first hop interface of route\n" "Match first hop interface of route\n"
"Interface name\n") "Interface name\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_word = 3; int idx_word = 3;
int ret; int ret;
if (argc == 4) if (argc == 4)
ret = route_map_delete_match ((struct route_map_index *) vty->index, ret = route_map_delete_match (route_map_index,
"interface", argv[idx_word]->arg); "interface", argv[idx_word]->arg);
else else
ret = route_map_delete_match ((struct route_map_index *) vty->index, ret = route_map_delete_match (route_map_index,
"interface", NULL); "interface", NULL);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1169,8 +1173,9 @@ DEFUN (ospf6_routemap_set_metric_type,
"OSPF6 external type 1 metric\n" "OSPF6 external type 1 metric\n"
"OSPF6 external type 2 metric\n") "OSPF6 external type 2 metric\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_external = 2; int idx_external = 2;
int ret = route_map_add_set ((struct route_map_index *) vty->index, int ret = route_map_add_set (route_map_index,
"metric-type", argv[idx_external]->arg); "metric-type", argv[idx_external]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1185,8 +1190,9 @@ DEFUN (ospf6_routemap_no_set_metric_type,
"OSPF6 external type 1 metric\n" "OSPF6 external type 1 metric\n"
"OSPF6 external type 2 metric\n") "OSPF6 external type 2 metric\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_external = 3; int idx_external = 3;
int ret = route_map_delete_set ((struct route_map_index *) vty->index, int ret = route_map_delete_set (route_map_index,
"metric-type", argv[idx_external]->arg); "metric-type", argv[idx_external]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1199,8 +1205,9 @@ DEFUN (ospf6_routemap_set_forwarding,
"Forwarding Address\n" "Forwarding Address\n"
"IPv6 Address\n") "IPv6 Address\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_ipv6 = 2; int idx_ipv6 = 2;
int ret = route_map_add_set ((struct route_map_index *) vty->index, int ret = route_map_add_set (route_map_index,
"forwarding-address", argv[idx_ipv6]->arg); "forwarding-address", argv[idx_ipv6]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1214,8 +1221,9 @@ DEFUN (ospf6_routemap_no_set_forwarding,
"Forwarding Address\n" "Forwarding Address\n"
"IPv6 Address\n") "IPv6 Address\n")
{ {
VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int idx_ipv6 = 3; int idx_ipv6 = 3;
int ret = route_map_delete_set ((struct route_map_index *) vty->index, int ret = route_map_delete_set (route_map_index,
"forwarding-address", argv[idx_ipv6]->arg); "forwarding-address", argv[idx_ipv6]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }
@ -1228,7 +1236,8 @@ DEFUN (ospf6_routemap_set_tag,
"Tag value for routing protocol\n" "Tag value for routing protocol\n"
"Tag value\n") "Tag value\n")
{ {
int ret = route_map_add_set ((struct route_map_index *) vty->index, VTY_DECLVAR_CONTEXT(route_map_index, route_map_index);
int ret = route_map_add_set (route_map_index,
"tag", argv[2]->arg); "tag", argv[2]->arg);
return route_map_command_status (vty, ret); return route_map_command_status (vty, ret);
} }

View File

@ -328,10 +328,8 @@ DEFUN (ipv6_ospf6_bfd,
"Enables BFD support\n" "Enables BFD support\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -354,17 +352,16 @@ DEFUN (ipv6_ospf6_bfd_param,
"Required min receive interval\n" "Required min receive interval\n"
"Desired min transmit interval\n") "Desired min transmit interval\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
int idx_number_2 = 4; int idx_number_2 = 4;
int idx_number_3 = 5; int idx_number_3 = 5;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
u_int32_t rx_val; u_int32_t rx_val;
u_int32_t tx_val; u_int32_t tx_val;
u_int8_t dm_val; u_int8_t dm_val;
int ret; int ret;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -390,10 +387,8 @@ DEFUN (no_ipv6_ospf6_bfd,
"Disables BFD support\n" "Disables BFD support\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;

View File

@ -46,6 +46,7 @@
#include "ospf6_bfd.h" #include "ospf6_bfd.h"
DEFINE_MTYPE_STATIC(OSPF6D, CFG_PLIST_NAME, "configured prefix list names") DEFINE_MTYPE_STATIC(OSPF6D, CFG_PLIST_NAME, "configured prefix list names")
DEFINE_QOBJ_TYPE(ospf6_interface)
unsigned char conf_debug_ospf6_interface = 0; unsigned char conf_debug_ospf6_interface = 0;
@ -212,6 +213,8 @@ ospf6_interface_create (struct interface *ifp)
oi->ifmtu = iobuflen; oi->ifmtu = iobuflen;
} }
QOBJ_REG (oi, ospf6_interface);
oi->lsupdate_list = ospf6_lsdb_create (oi); oi->lsupdate_list = ospf6_lsdb_create (oi);
oi->lsack_list = ospf6_lsdb_create (oi); oi->lsack_list = ospf6_lsdb_create (oi);
oi->lsdb = ospf6_lsdb_create (oi); oi->lsdb = ospf6_lsdb_create (oi);
@ -238,6 +241,8 @@ ospf6_interface_delete (struct ospf6_interface *oi)
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct ospf6_neighbor *on; struct ospf6_neighbor *on;
QOBJ_UNREG (oi);
for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on)) for (ALL_LIST_ELEMENTS (oi->neighbor_list, node, nnode, on))
ospf6_neighbor_delete (on); ospf6_neighbor_delete (on);
@ -1097,14 +1102,13 @@ DEFUN (ipv6_ospf6_ifmtu,
"OSPFv3 Interface MTU\n" "OSPFv3 Interface MTU\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
unsigned int ifmtu, iobuflen; unsigned int ifmtu, iobuflen;
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct ospf6_neighbor *on; struct ospf6_neighbor *on;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1158,13 +1162,12 @@ DEFUN (no_ipv6_ospf6_ifmtu,
"Interface MTU\n" "Interface MTU\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
unsigned int iobuflen; unsigned int iobuflen;
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct ospf6_neighbor *on; struct ospf6_neighbor *on;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1206,12 +1209,11 @@ DEFUN (ipv6_ospf6_cost,
"Outgoing metric of this interface\n" "Outgoing metric of this interface\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
unsigned long int lcost; unsigned long int lcost;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1247,10 +1249,8 @@ DEFUN (no_ipv6_ospf6_cost,
"Calculate interface cost from bandwidth\n" "Calculate interface cost from bandwidth\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1272,8 +1272,8 @@ DEFUN (auto_cost_reference_bandwidth,
"Use reference bandwidth method to assign OSPF cost\n" "Use reference bandwidth method to assign OSPF cost\n"
"The reference bandwidth in terms of Mbits per second\n") "The reference bandwidth in terms of Mbits per second\n")
{ {
VTY_DECLVAR_CONTEXT(ospf6, o);
int idx_number = 2; int idx_number = 2;
struct ospf6 *o = vty->index;
struct ospf6_area *oa; struct ospf6_area *oa;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct listnode *i, *j; struct listnode *i, *j;
@ -1306,7 +1306,7 @@ DEFUN (no_auto_cost_reference_bandwidth,
"Use reference bandwidth method to assign OSPF cost\n" "Use reference bandwidth method to assign OSPF cost\n"
"The reference bandwidth in terms of Mbits per second\n") "The reference bandwidth in terms of Mbits per second\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
struct ospf6_area *oa; struct ospf6_area *oa;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct listnode *i, *j; struct listnode *i, *j;
@ -1332,11 +1332,9 @@ DEFUN (ipv6_ospf6_hellointerval,
SECONDS_STR SECONDS_STR
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1358,11 +1356,9 @@ DEFUN (ipv6_ospf6_deadinterval,
SECONDS_STR SECONDS_STR
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1383,11 +1379,9 @@ DEFUN (ipv6_ospf6_transmitdelay,
"Link state transmit delay\n" "Link state transmit delay\n"
SECONDS_STR) SECONDS_STR)
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1409,11 +1403,9 @@ DEFUN (ipv6_ospf6_retransmitinterval,
SECONDS_STR SECONDS_STR
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1435,11 +1427,9 @@ DEFUN (ipv6_ospf6_priority,
"Priority value\n" "Priority value\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1467,11 +1457,9 @@ DEFUN (ipv6_ospf6_instance,
"Instance ID value\n" "Instance ID value\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *)vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *)ifp->info; oi = (struct ospf6_interface *)ifp->info;
@ -1491,12 +1479,11 @@ DEFUN (ipv6_ospf6_passive,
"Passive interface; no adjacency will be formed on this interface\n" "Passive interface; no adjacency will be formed on this interface\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct ospf6_neighbor *on; struct ospf6_neighbor *on;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1525,10 +1512,8 @@ DEFUN (no_ipv6_ospf6_passive,
"passive interface: No Adjacency will be formed on this I/F\n" "passive interface: No Adjacency will be formed on this I/F\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1552,10 +1537,8 @@ DEFUN (ipv6_ospf6_mtu_ignore,
"Disable MTU mismatch detection on this interface\n" "Disable MTU mismatch detection on this interface\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1577,10 +1560,8 @@ DEFUN (no_ipv6_ospf6_mtu_ignore,
"Disable MTU mismatch detection on this interface\n" "Disable MTU mismatch detection on this interface\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1603,11 +1584,9 @@ DEFUN (ipv6_ospf6_advertise_prefix_list,
"Prefix list name\n" "Prefix list name\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_word = 4; int idx_word = 4;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1645,10 +1624,8 @@ DEFUN (no_ipv6_ospf6_advertise_prefix_list,
"Filter prefix using prefix-list\n" "Filter prefix using prefix-list\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1688,11 +1665,9 @@ DEFUN (ipv6_ospf6_network,
"Specify OSPF6 point-to-point network\n" "Specify OSPF6 point-to-point network\n"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_network = 3; int idx_network = 3;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;
@ -1733,11 +1708,10 @@ DEFUN (no_ipv6_ospf6_network,
"Default to whatever interface type system specifies" "Default to whatever interface type system specifies"
) )
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp;
int type; int type;
ifp = (struct interface *) vty->index;
assert (ifp); assert (ifp);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;

View File

@ -22,6 +22,7 @@
#ifndef OSPF6_INTERFACE_H #ifndef OSPF6_INTERFACE_H
#define OSPF6_INTERFACE_H #define OSPF6_INTERFACE_H
#include "qobj.h"
#include "if.h" #include "if.h"
/* Debug option */ /* Debug option */
@ -116,7 +117,10 @@ struct ospf6_interface
/* BFD information */ /* BFD information */
void *bfd_info; void *bfd_info;
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(ospf6_interface)
/* interface state */ /* interface state */
#define OSPF6_INTERFACE_NONE 0 #define OSPF6_INTERFACE_NONE 0

View File

@ -866,7 +866,7 @@ ospf6_timers_spf_set (struct vty *vty, unsigned int delay,
unsigned int hold, unsigned int hold,
unsigned int max) unsigned int max)
{ {
struct ospf6 *ospf = vty->index; VTY_DECLVAR_CONTEXT(ospf6, ospf);
ospf->spf_delay = delay; ospf->spf_delay = delay;
ospf->spf_holdtime = hold; ospf->spf_holdtime = hold;

View File

@ -49,6 +49,8 @@
#include "ospf6_spf.h" #include "ospf6_spf.h"
#include "ospf6d.h" #include "ospf6d.h"
DEFINE_QOBJ_TYPE(ospf6)
/* global ospf6d variable */ /* global ospf6d variable */
struct ospf6 *ospf6; struct ospf6 *ospf6;
@ -159,6 +161,7 @@ ospf6_create (void)
/* Enable "log-adjacency-changes" */ /* Enable "log-adjacency-changes" */
SET_FLAG(o->config_flags, OSPF6_LOG_ADJACENCY_CHANGES); SET_FLAG(o->config_flags, OSPF6_LOG_ADJACENCY_CHANGES);
QOBJ_REG (o, ospf6);
return o; return o;
} }
@ -169,6 +172,7 @@ ospf6_delete (struct ospf6 *o)
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct ospf6_area *oa; struct ospf6_area *oa;
QOBJ_UNREG (o);
ospf6_disable (ospf6); ospf6_disable (ospf6);
for (ALL_LIST_ELEMENTS (o->area_list, node, nnode, oa)) for (ALL_LIST_ELEMENTS (o->area_list, node, nnode, oa))
@ -294,8 +298,7 @@ DEFUN (router_ospf6,
ospf6 = ospf6_create (); ospf6 = ospf6_create ();
/* set current ospf point. */ /* set current ospf point. */
vty->node = OSPF6_NODE; VTY_PUSH_CONTEXT(OSPF6_NODE, ospf6);
vty->index = ospf6;
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -309,8 +312,7 @@ DEFUN (no_router_ospf6,
OSPF6_STR) OSPF6_STR)
{ {
/* return to config node . */ /* return to config node . */
vty->node = CONFIG_NODE; VTY_PUSH_CONTEXT_NULL(CONFIG_NODE);
vty->index = NULL;
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -322,12 +324,10 @@ DEFUN (ospf6_router_id,
"Configure OSPF Router-ID\n" "Configure OSPF Router-ID\n"
V4NOTATION_STR) V4NOTATION_STR)
{ {
VTY_DECLVAR_CONTEXT(ospf6, o);
int idx_ipv4 = 1; int idx_ipv4 = 1;
int ret; int ret;
u_int32_t router_id; u_int32_t router_id;
struct ospf6 *o;
o = (struct ospf6 *) vty->index;
ret = inet_pton (AF_INET, argv[idx_ipv4]->arg, &router_id); ret = inet_pton (AF_INET, argv[idx_ipv4]->arg, &router_id);
if (ret == 0) if (ret == 0)
@ -348,7 +348,7 @@ DEFUN (ospf6_log_adjacency_changes,
"log-adjacency-changes", "log-adjacency-changes",
"Log changes in adjacency state\n") "Log changes in adjacency state\n")
{ {
struct ospf6 *ospf6 = vty->index; VTY_DECLVAR_CONTEXT(ospf6, ospf6);
SET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES); SET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES);
UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL); UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL);
@ -361,7 +361,7 @@ DEFUN (ospf6_log_adjacency_changes_detail,
"Log changes in adjacency state\n" "Log changes in adjacency state\n"
"Log all state changes\n") "Log all state changes\n")
{ {
struct ospf6 *ospf6 = vty->index; VTY_DECLVAR_CONTEXT(ospf6, ospf6);
SET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES); SET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES);
SET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL); SET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL);
@ -374,7 +374,7 @@ DEFUN (no_ospf6_log_adjacency_changes,
NO_STR NO_STR
"Log changes in adjacency state\n") "Log changes in adjacency state\n")
{ {
struct ospf6 *ospf6 = vty->index; VTY_DECLVAR_CONTEXT(ospf6, ospf6);
UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL); UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL);
UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES); UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES);
@ -388,7 +388,7 @@ DEFUN (no_ospf6_log_adjacency_changes_detail,
"Log changes in adjacency state\n" "Log changes in adjacency state\n"
"Log all state changes\n") "Log all state changes\n")
{ {
struct ospf6 *ospf6 = vty->index; VTY_DECLVAR_CONTEXT(ospf6, ospf6);
UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL); UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_DETAIL);
UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES); UNSET_FLAG(ospf6->config_flags, OSPF6_LOG_ADJACENCY_CHANGES);
@ -403,12 +403,9 @@ DEFUN (ospf6_timers_lsa,
"Minimum delay in receiving new version of a LSA\n" "Minimum delay in receiving new version of a LSA\n"
"Delay in milliseconds\n") "Delay in milliseconds\n")
{ {
VTY_DECLVAR_CONTEXT(ospf6, ospf);
int idx_number = 3; int idx_number = 3;
unsigned int minarrival; unsigned int minarrival;
struct ospf6 *ospf = vty->index;
if (!ospf)
return CMD_SUCCESS;
VTY_GET_INTEGER ("LSA min-arrival", minarrival, argv[idx_number]->arg); VTY_GET_INTEGER ("LSA min-arrival", minarrival, argv[idx_number]->arg);
ospf->lsa_minarrival = minarrival; ospf->lsa_minarrival = minarrival;
@ -425,12 +422,9 @@ DEFUN (no_ospf6_timers_lsa,
"Minimum delay in receiving new version of a LSA\n" "Minimum delay in receiving new version of a LSA\n"
"Delay in milliseconds\n") "Delay in milliseconds\n")
{ {
VTY_DECLVAR_CONTEXT(ospf6, ospf);
int idx_number = 4; int idx_number = 4;
unsigned int minarrival; unsigned int minarrival;
struct ospf6 *ospf = vty->index;
if (!ospf)
return CMD_SUCCESS;
if (argc == 5) if (argc == 5)
{ {
@ -453,7 +447,7 @@ DEFUN (ospf6_distance,
"Administrative distance\n" "Administrative distance\n"
"OSPF6 Administrative distance\n") "OSPF6 Administrative distance\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
o->distance_all = atoi (argv[1]->arg); o->distance_all = atoi (argv[1]->arg);
@ -467,7 +461,7 @@ DEFUN (no_ospf6_distance,
"Administrative distance\n" "Administrative distance\n"
"OSPF6 Administrative distance\n") "OSPF6 Administrative distance\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
o->distance_all = 0; o->distance_all = 0;
@ -498,7 +492,7 @@ DEFUN (ospf6_distance_ospf6,
"External routes\n" "External routes\n"
"Distance for external routes\n") "Distance for external routes\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
char *intra, *inter, *external; char *intra, *inter, *external;
intra = inter = external = NULL; intra = inter = external = NULL;
@ -568,7 +562,7 @@ DEFUN (no_ospf6_distance_ospf6,
"External routes\n" "External routes\n"
"Distance for external routes\n") "Distance for external routes\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
char *intra, *inter, *external; char *intra, *inter, *external;
intra = inter = external = NULL; intra = inter = external = NULL;
@ -632,7 +626,7 @@ DEFUN (ospf6_distance_source,
"IP source prefix\n" "IP source prefix\n"
"Access list name\n") "Access list name\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
char *alname = (argc == 4) ? argv[3]->arg : NULL; char *alname = (argc == 4) ? argv[3]->arg : NULL;
ospf6_distance_set (vty, o, argv[1]->arg, argv[2]->arg, alname); ospf6_distance_set (vty, o, argv[1]->arg, argv[2]->arg, alname);
@ -648,7 +642,7 @@ DEFUN (no_ospf6_distance_source,
"IP source prefix\n" "IP source prefix\n"
"Access list name\n") "Access list name\n")
{ {
struct ospf6 *o = vty->index; VTY_DECLVAR_CONTEXT(ospf6, o);
char *alname = (argc == 5) ? argv[4]->arg : NULL; char *alname = (argc == 5) ? argv[4]->arg : NULL;
ospf6_distance_unset (vty, o, argv[2]->arg, argv[3]->arg, alname); ospf6_distance_unset (vty, o, argv[2]->arg, argv[3]->arg, alname);
@ -665,16 +659,14 @@ DEFUN (ospf6_interface_area,
"OSPF6 area ID in IPv4 address notation\n" "OSPF6 area ID in IPv4 address notation\n"
) )
{ {
VTY_DECLVAR_CONTEXT(ospf6, o);
int idx_ifname = 1; int idx_ifname = 1;
int idx_ipv4 = 3; int idx_ipv4 = 3;
struct ospf6 *o;
struct ospf6_area *oa; struct ospf6_area *oa;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp; struct interface *ifp;
u_int32_t area_id; u_int32_t area_id;
o = (struct ospf6 *) vty->index;
/* find/create ospf6 interface */ /* find/create ospf6 interface */
ifp = if_get_by_name (argv[idx_ifname]->arg); ifp = if_get_by_name (argv[idx_ifname]->arg);
oi = (struct ospf6_interface *) ifp->info; oi = (struct ospf6_interface *) ifp->info;

View File

@ -22,6 +22,7 @@
#ifndef OSPF6_TOP_H #ifndef OSPF6_TOP_H
#define OSPF6_TOP_H #define OSPF6_TOP_H
#include "qobj.h"
#include "routemap.h" #include "routemap.h"
/* OSPFv3 top level data structure */ /* OSPFv3 top level data structure */
@ -93,7 +94,10 @@ struct ospf6
u_char distance_external; u_char distance_external;
struct route_table *distance_table; struct route_table *distance_table;
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(ospf6)
#define OSPF6_DISABLED 0x01 #define OSPF6_DISABLED 0x01
#define OSPF6_STUB_ROUTER 0x02 #define OSPF6_STUB_ROUTER 0x02

View File

@ -368,7 +368,7 @@ DEFUN (ip_ospf_bfd,
"OSPF interface commands\n" "OSPF interface commands\n"
"Enables BFD support\n") "Enables BFD support\n")
{ {
struct interface *ifp = (struct interface *) vty->index; VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf_if_params *params; struct ospf_if_params *params;
struct bfd_info *bfd_info; struct bfd_info *bfd_info;
@ -393,10 +393,10 @@ DEFUN (ip_ospf_bfd_param,
"Required min receive interval\n" "Required min receive interval\n"
"Desired min transmit interval\n") "Desired min transmit interval\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
int idx_number_2 = 4; int idx_number_2 = 4;
int idx_number_3 = 5; int idx_number_3 = 5;
struct interface *ifp = (struct interface *) vty->index;
u_int32_t rx_val; u_int32_t rx_val;
u_int32_t tx_val; u_int32_t tx_val;
u_int8_t dm_val; u_int8_t dm_val;
@ -424,7 +424,7 @@ DEFUN (no_ip_ospf_bfd,
"Required min receive interval\n" "Required min receive interval\n"
"Desired min transmit interval\n") "Desired min transmit interval\n")
{ {
struct interface *ifp = (struct interface *)vty->index; VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf_if_params *params; struct ospf_if_params *params;
assert (ifp); assert (ifp);

View File

@ -51,6 +51,7 @@
#include "ospfd/ospf_snmp.h" #include "ospfd/ospf_snmp.h"
#endif /* HAVE_SNMP */ #endif /* HAVE_SNMP */
DEFINE_QOBJ_TYPE(ospf_interface)
int int
ospf_if_get_output_cost (struct ospf_interface *oi) ospf_if_get_output_cost (struct ospf_interface *oi)
@ -246,7 +247,8 @@ ospf_if_new (struct ospf *ospf, struct interface *ifp, struct prefix *p)
ospf_opaque_type9_lsa_init (oi); ospf_opaque_type9_lsa_init (oi);
oi->ospf = ospf; oi->ospf = ospf;
QOBJ_REG (oi, ospf_interface);
return oi; return oi;
} }
@ -307,6 +309,8 @@ ospf_if_free (struct ospf_interface *oi)
ospf_opaque_type9_lsa_term (oi); ospf_opaque_type9_lsa_term (oi);
QOBJ_UNREG (oi);
/* Free Pseudo Neighbour */ /* Free Pseudo Neighbour */
ospf_nbr_delete (oi->nbr_self); ospf_nbr_delete (oi->nbr_self);

View File

@ -23,6 +23,7 @@
#ifndef _ZEBRA_OSPF_INTERFACE_H #ifndef _ZEBRA_OSPF_INTERFACE_H
#define _ZEBRA_OSPF_INTERFACE_H #define _ZEBRA_OSPF_INTERFACE_H
#include "qobj.h"
#include "ospfd/ospf_packet.h" #include "ospfd/ospf_packet.h"
#include "ospfd/ospf_spf.h" #include "ospfd/ospf_spf.h"
@ -228,7 +229,10 @@ struct ospf_interface
u_int32_t state_change; /* Number of status change. */ u_int32_t state_change; /* Number of status change. */
u_int32_t full_nbrs; u_int32_t full_nbrs;
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(ospf_interface)
/* Prototypes. */ /* Prototypes. */
extern char *ospf_if_name (struct ospf_interface *); extern char *ospf_if_name (struct ospf_interface *);

View File

@ -769,10 +769,7 @@ DEFUN (capability_opaque,
"Enable specific OSPF feature\n" "Enable specific OSPF feature\n"
"Opaque LSA\n") "Opaque LSA\n")
{ {
struct ospf *ospf = (struct ospf *) vty->index; VTY_DECLVAR_CONTEXT(ospf, ospf);
if (!ospf)
return CMD_SUCCESS;
/* Turn on the "master switch" of opaque-lsa capability. */ /* Turn on the "master switch" of opaque-lsa capability. */
if (!CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE)) if (!CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE))
@ -802,10 +799,7 @@ DEFUN (no_capability_opaque,
"Enable specific OSPF feature\n" "Enable specific OSPF feature\n"
"Opaque LSA\n") "Opaque LSA\n")
{ {
struct ospf *ospf = (struct ospf *) vty->index; VTY_DECLVAR_CONTEXT(ospf, ospf);
if (!ospf)
return CMD_SUCCESS;
/* Turn off the "master switch" of opaque-lsa capability. */ /* Turn off the "master switch" of opaque-lsa capability. */
if (CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE)) if (CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE))

View File

@ -119,9 +119,10 @@ ospf_route_map_event (route_map_event_t event, const char *name)
/* Delete rip route map rule. */ /* Delete rip route map rule. */
static int static int
ospf_route_match_delete (struct vty *vty, struct route_map_index *index, ospf_route_match_delete (struct vty *vty,
const char *command, const char *arg) const char *command, const char *arg)
{ {
VTY_DECLVAR_CONTEXT(route_map_index, index);
int ret; int ret;
ret = route_map_delete_match (index, command, arg); ret = route_map_delete_match (index, command, arg);
@ -142,9 +143,10 @@ ospf_route_match_delete (struct vty *vty, struct route_map_index *index,
} }
static int static int
ospf_route_match_add (struct vty *vty, struct route_map_index *index, ospf_route_match_add (struct vty *vty,
const char *command, const char *arg) const char *command, const char *arg)
{ {
VTY_DECLVAR_CONTEXT(route_map_index, index);
int ret; int ret;
ret = route_map_add_match (index, command, arg); ret = route_map_add_match (index, command, arg);
@ -590,7 +592,7 @@ DEFUN (match_ip_nexthop,
"IP access-list name\n") "IP access-list name\n")
{ {
int idx_acl = 3; int idx_acl = 3;
return ospf_route_match_add (vty, vty->index, "ip next-hop", argv[idx_acl]->arg); return ospf_route_match_add (vty, "ip next-hop", argv[idx_acl]->arg);
} }
DEFUN (no_match_ip_nexthop, DEFUN (no_match_ip_nexthop,
@ -605,7 +607,7 @@ DEFUN (no_match_ip_nexthop,
"IP access-list name\n") "IP access-list name\n")
{ {
char *al = (argc == 5) ? argv[4]->arg : NULL; char *al = (argc == 5) ? argv[4]->arg : NULL;
return ospf_route_match_delete (vty, vty->index, "ip next-hop", al); return ospf_route_match_delete (vty, "ip next-hop", al);
} }
DEFUN (set_metric_type, DEFUN (set_metric_type,
@ -617,7 +619,8 @@ DEFUN (set_metric_type,
"OSPF[6] external type 2 metric\n") "OSPF[6] external type 2 metric\n")
{ {
char *ext = argv[2]->text; char *ext = argv[2]->text;
return generic_set_add (vty, vty->index, "metric-type", ext); return generic_set_add (vty, VTY_GET_CONTEXT(route_map_index),
"metric-type", ext);
} }
DEFUN (no_set_metric_type, DEFUN (no_set_metric_type,
@ -630,7 +633,8 @@ DEFUN (no_set_metric_type,
"OSPF[6] external type 2 metric\n") "OSPF[6] external type 2 metric\n")
{ {
char *ext = (argc == 4) ? argv[3]->text : NULL; char *ext = (argc == 4) ? argv[3]->text : NULL;
return generic_set_delete (vty, vty->index, "metric-type", ext); return generic_set_delete (vty, VTY_GET_CONTEXT(route_map_index),
"metric-type", ext);
} }
/* Route-map init */ /* Route-map init */

View File

@ -2264,12 +2264,9 @@ DEFUN (ospf_mpls_te_on,
MPLS_TE_STR MPLS_TE_STR
"Enable the MPLS-TE functionality\n") "Enable the MPLS-TE functionality\n")
{ {
VTY_DECLVAR_CONTEXT(ospf, ospf);
struct listnode *node; struct listnode *node;
struct mpls_te_link *lp; struct mpls_te_link *lp;
struct ospf *ospf = vty->index;
if (!ospf)
return CMD_SUCCESS;
if (OspfMplsTE.status == enabled) if (OspfMplsTE.status == enabled)
return CMD_SUCCESS; return CMD_SUCCESS;
@ -2304,12 +2301,9 @@ DEFUN (no_ospf_mpls_te,
MPLS_TE_STR MPLS_TE_STR
"Disable the MPLS-TE functionality\n") "Disable the MPLS-TE functionality\n")
{ {
VTY_DECLVAR_CONTEXT(ospf, ospf);
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct mpls_te_link *lp; struct mpls_te_link *lp;
struct ospf *ospf = vty->index;
if (!ospf)
return CMD_SUCCESS;
if (OspfMplsTE.status == disabled) if (OspfMplsTE.status == disabled)
return CMD_SUCCESS; return CMD_SUCCESS;
@ -2334,13 +2328,10 @@ DEFUN (ospf_mpls_te_router_addr,
"Stable IP address of the advertising router\n" "Stable IP address of the advertising router\n"
"MPLS-TE router address in IPv4 address format\n") "MPLS-TE router address in IPv4 address format\n")
{ {
VTY_DECLVAR_CONTEXT(ospf, ospf);
int idx_ipv4 = 2; int idx_ipv4 = 2;
struct te_tlv_router_addr *ra = &OspfMplsTE.router_addr; struct te_tlv_router_addr *ra = &OspfMplsTE.router_addr;
struct in_addr value; struct in_addr value;
struct ospf *ospf = vty->index;
if (!ospf)
return CMD_SUCCESS;
if (! inet_aton (argv[idx_ipv4]->arg, &value)) if (! inet_aton (argv[idx_ipv4]->arg, &value))
{ {

File diff suppressed because it is too large Load Diff

View File

@ -55,6 +55,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "ospfd/ospf_ase.h" #include "ospfd/ospf_ase.h"
DEFINE_QOBJ_TYPE(ospf)
/* OSPF process wide configuration. */ /* OSPF process wide configuration. */
static struct ospf_master ospf_master; static struct ospf_master ospf_master;
@ -292,6 +293,8 @@ ospf_new (u_short instance)
/* Enable "log-adjacency-changes" */ /* Enable "log-adjacency-changes" */
SET_FLAG(new->config, OSPF_LOG_ADJACENCY_CHANGES); SET_FLAG(new->config, OSPF_LOG_ADJACENCY_CHANGES);
QOBJ_REG (new, ospf);
return new; return new;
} }
@ -505,6 +508,8 @@ ospf_finish_final (struct ospf *ospf)
int i; int i;
u_short instance = 0; u_short instance = 0;
QOBJ_UNREG (ospf);
ospf_opaque_type11_lsa_term (ospf); ospf_opaque_type11_lsa_term (ospf);
/* be nice if this worked, but it doesn't */ /* be nice if this worked, but it doesn't */

View File

@ -24,6 +24,7 @@
#define _ZEBRA_OSPFD_H #define _ZEBRA_OSPFD_H
#include <zebra.h> #include <zebra.h>
#include "qobj.h"
#include "libospf.h" #include "libospf.h"
#include "filter.h" #include "filter.h"
@ -302,7 +303,10 @@ struct ospf
u_int32_t if_ospf_cli_count; u_int32_t if_ospf_cli_count;
struct route_table *distance_table; struct route_table *distance_table;
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(ospf)
/* OSPF area structure. */ /* OSPF area structure. */
struct ospf_area struct ospf_area

View File

@ -2551,10 +2551,9 @@ DEFUN (interface_ip_igmp,
IP_STR IP_STR
IFACE_IGMP_STR) IFACE_IGMP_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -2582,10 +2581,9 @@ DEFUN (interface_no_ip_igmp,
IP_STR IP_STR
IFACE_IGMP_STR) IFACE_IGMP_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) if (!pim_ifp)
return CMD_SUCCESS; return CMD_SUCCESS;
@ -2612,17 +2610,15 @@ DEFUN (interface_ip_igmp_join,
"Multicast group address\n" "Multicast group address\n"
"Source address\n") "Source address\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_ipv4 = 3; int idx_ipv4 = 3;
int idx_ipv4_2 = 4; int idx_ipv4_2 = 4;
struct interface *ifp;
const char *group_str; const char *group_str;
const char *source_str; const char *source_str;
struct in_addr group_addr; struct in_addr group_addr;
struct in_addr source_addr; struct in_addr source_addr;
int result; int result;
ifp = vty->index;
/* Group address */ /* Group address */
group_str = argv[idx_ipv4]->arg; group_str = argv[idx_ipv4]->arg;
result = inet_pton(AF_INET, group_str, &group_addr); result = inet_pton(AF_INET, group_str, &group_addr);
@ -2661,17 +2657,15 @@ DEFUN (interface_no_ip_igmp_join,
"Multicast group address\n" "Multicast group address\n"
"Source address\n") "Source address\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_ipv4 = 4; int idx_ipv4 = 4;
int idx_ipv4_2 = 5; int idx_ipv4_2 = 5;
struct interface *ifp;
const char *group_str; const char *group_str;
const char *source_str; const char *source_str;
struct in_addr group_addr; struct in_addr group_addr;
struct in_addr source_addr; struct in_addr source_addr;
int result; int result;
ifp = vty->index;
/* Group address */ /* Group address */
group_str = argv[idx_ipv4]->arg; group_str = argv[idx_ipv4]->arg;
result = inet_pton(AF_INET, group_str, &group_addr); result = inet_pton(AF_INET, group_str, &group_addr);
@ -2839,12 +2833,11 @@ DEFUN (interface_ip_igmp_query_interval,
IFACE_IGMP_QUERY_INTERVAL_STR IFACE_IGMP_QUERY_INTERVAL_STR
"Query interval in seconds\n") "Query interval in seconds\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
int query_interval; int query_interval;
int query_interval_dsec; int query_interval_dsec;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -2898,11 +2891,10 @@ DEFUN (interface_no_ip_igmp_query_interval,
IFACE_IGMP_STR IFACE_IGMP_STR
IFACE_IGMP_QUERY_INTERVAL_STR) IFACE_IGMP_QUERY_INTERVAL_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
int default_query_interval_dsec; int default_query_interval_dsec;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) if (!pim_ifp)
@ -2934,11 +2926,10 @@ DEFUN (interface_ip_igmp_query_max_response_time,
IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_STR IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_STR
"Query response value in seconds\n") "Query response value in seconds\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
int query_max_response_time; int query_max_response_time;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -2991,11 +2982,10 @@ DEFUN (interface_no_ip_igmp_query_max_response_time,
IFACE_IGMP_STR IFACE_IGMP_STR
IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_STR) IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
int default_query_interval_dsec; int default_query_interval_dsec;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) if (!pim_ifp)
@ -3027,12 +3017,11 @@ DEFUN (interface_ip_igmp_query_max_response_time_dsec,
IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC_STR IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC_STR
"Query response value in deciseconds\n") "Query response value in deciseconds\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
int query_max_response_time_dsec; int query_max_response_time_dsec;
int default_query_interval_dsec; int default_query_interval_dsec;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -3087,11 +3076,10 @@ DEFUN (interface_no_ip_igmp_query_max_response_time_dsec,
IFACE_IGMP_STR IFACE_IGMP_STR
IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC_STR) IFACE_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
int default_query_interval_dsec; int default_query_interval_dsec;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) if (!pim_ifp)
@ -3120,12 +3108,11 @@ DEFUN (interface_ip_pim_drprio,
"Set the Designated Router Election Priority\n" "Set the Designated Router Election Priority\n"
"Value of the new DR Priority\n") "Value of the new DR Priority\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_number = 3; int idx_number = 3;
struct interface *ifp;
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
uint32_t old_dr_prio; uint32_t old_dr_prio;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -3154,10 +3141,9 @@ DEFUN (interface_no_ip_pim_drprio,
"Revert the Designated Router Priority to default\n" "Revert the Designated Router Priority to default\n"
"Old Value of the Priority\n") "Old Value of the Priority\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -3206,9 +3192,7 @@ DEFUN (interface_ip_pim_ssm,
PIM_STR PIM_STR
IFACE_PIM_STR) IFACE_PIM_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
ifp = vty->index;
if (!pim_cmd_interface_add(ifp, PIM_INTERFACE_SSM)) { if (!pim_cmd_interface_add(ifp, PIM_INTERFACE_SSM)) {
vty_out(vty, "Could not enable PIM SSM on interface%s", VTY_NEWLINE); vty_out(vty, "Could not enable PIM SSM on interface%s", VTY_NEWLINE);
@ -3225,9 +3209,7 @@ DEFUN (interface_ip_pim_sm,
PIM_STR PIM_STR
IFACE_PIM_SM_STR) IFACE_PIM_SM_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
ifp = vty->index;
if (!pim_cmd_interface_add(ifp, PIM_INTERFACE_SM)) { if (!pim_cmd_interface_add(ifp, PIM_INTERFACE_SM)) {
vty_out(vty, "Could not enable PIM SM on interface%s", VTY_NEWLINE); vty_out(vty, "Could not enable PIM SM on interface%s", VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
@ -3277,9 +3259,7 @@ DEFUN (interface_no_ip_pim_ssm,
PIM_STR PIM_STR
IFACE_PIM_STR) IFACE_PIM_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
ifp = vty->index;
if (!pim_cmd_interface_delete(ifp)) { if (!pim_cmd_interface_delete(ifp)) {
vty_out(vty, "Unable to delete interface information%s", VTY_NEWLINE); vty_out(vty, "Unable to delete interface information%s", VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
@ -3296,9 +3276,7 @@ DEFUN (interface_no_ip_pim_sm,
PIM_STR PIM_STR
IFACE_PIM_SM_STR) IFACE_PIM_SM_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
ifp = vty->index;
if (!pim_cmd_interface_delete(ifp)) { if (!pim_cmd_interface_delete(ifp)) {
vty_out(vty, "Unable to delete interface information%s", VTY_NEWLINE); vty_out(vty, "Unable to delete interface information%s", VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
@ -3315,9 +3293,9 @@ DEFUN (interface_ip_mroute,
"Outgoing interface name\n" "Outgoing interface name\n"
"Group address\n") "Group address\n")
{ {
VTY_DECLVAR_CONTEXT(interface, iif);
int idx_interface = 2; int idx_interface = 2;
int idx_ipv4 = 3; int idx_ipv4 = 3;
struct interface *iif;
struct interface *oif; struct interface *oif;
const char *oifname; const char *oifname;
const char *grp_str; const char *grp_str;
@ -3325,8 +3303,6 @@ DEFUN (interface_ip_mroute,
struct in_addr src_addr; struct in_addr src_addr;
int result; int result;
iif = vty->index;
oifname = argv[idx_interface]->arg; oifname = argv[idx_interface]->arg;
oif = if_lookup_by_name(oifname); oif = if_lookup_by_name(oifname);
if (!oif) { if (!oif) {
@ -3362,10 +3338,10 @@ DEFUN (interface_ip_mroute_source,
"Group address\n" "Group address\n"
"Source address\n") "Source address\n")
{ {
VTY_DECLVAR_CONTEXT(interface, iif);
int idx_interface = 2; int idx_interface = 2;
int idx_ipv4 = 3; int idx_ipv4 = 3;
int idx_ipv4_2 = 4; int idx_ipv4_2 = 4;
struct interface *iif;
struct interface *oif; struct interface *oif;
const char *oifname; const char *oifname;
const char *grp_str; const char *grp_str;
@ -3374,8 +3350,6 @@ DEFUN (interface_ip_mroute_source,
struct in_addr src_addr; struct in_addr src_addr;
int result; int result;
iif = vty->index;
oifname = argv[idx_interface]->arg; oifname = argv[idx_interface]->arg;
oif = if_lookup_by_name(oifname); oif = if_lookup_by_name(oifname);
if (!oif) { if (!oif) {
@ -3417,9 +3391,9 @@ DEFUN (interface_no_ip_mroute,
"Outgoing interface name\n" "Outgoing interface name\n"
"Group Address\n") "Group Address\n")
{ {
VTY_DECLVAR_CONTEXT(interface, iif);
int idx_interface = 3; int idx_interface = 3;
int idx_ipv4 = 4; int idx_ipv4 = 4;
struct interface *iif;
struct interface *oif; struct interface *oif;
const char *oifname; const char *oifname;
const char *grp_str; const char *grp_str;
@ -3427,8 +3401,6 @@ DEFUN (interface_no_ip_mroute,
struct in_addr src_addr; struct in_addr src_addr;
int result; int result;
iif = vty->index;
oifname = argv[idx_interface]->arg; oifname = argv[idx_interface]->arg;
oif = if_lookup_by_name(oifname); oif = if_lookup_by_name(oifname);
if (!oif) { if (!oif) {
@ -3465,10 +3437,10 @@ DEFUN (interface_no_ip_mroute_source,
"Group Address\n" "Group Address\n"
"Source Address\n") "Source Address\n")
{ {
VTY_DECLVAR_CONTEXT(interface, iif);
int idx_interface = 3; int idx_interface = 3;
int idx_ipv4 = 4; int idx_ipv4 = 4;
int idx_ipv4_2 = 5; int idx_ipv4_2 = 5;
struct interface *iif;
struct interface *oif; struct interface *oif;
const char *oifname; const char *oifname;
const char *grp_str; const char *grp_str;
@ -3477,8 +3449,6 @@ DEFUN (interface_no_ip_mroute_source,
struct in_addr src_addr; struct in_addr src_addr;
int result; int result;
iif = vty->index;
oifname = argv[idx_interface]->arg; oifname = argv[idx_interface]->arg;
oif = if_lookup_by_name(oifname); oif = if_lookup_by_name(oifname);
if (!oif) { if (!oif) {
@ -3520,12 +3490,11 @@ DEFUN (interface_ip_pim_hello,
IFACE_PIM_HELLO_TIME_STR IFACE_PIM_HELLO_TIME_STR
IFACE_PIM_HELLO_HOLD_STR) IFACE_PIM_HELLO_HOLD_STR)
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_time = 3; int idx_time = 3;
int idx_hold = 4; int idx_hold = 4;
struct interface *ifp;
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {
@ -3553,10 +3522,9 @@ DEFUN (interface_no_ip_pim_hello,
IFACE_PIM_HELLO_TIME_STR IFACE_PIM_HELLO_TIME_STR
IFACE_PIM_HELLO_HOLD_STR) IFACE_PIM_HELLO_HOLD_STR)
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct pim_interface *pim_ifp; struct pim_interface *pim_ifp;
ifp = vty->index;
pim_ifp = ifp->info; pim_ifp = ifp->info;
if (!pim_ifp) { if (!pim_ifp) {

View File

@ -1332,11 +1332,10 @@ DEFUN (ip_rip_receive_version,
"RIP version 2\n" "RIP version 2\n"
"None\n") "None\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_type = 4; int idx_type = 4;
struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
switch (argv[idx_type]->arg[0]) switch (argv[idx_type]->arg[0])
@ -1367,10 +1366,9 @@ DEFUN (ip_rip_receive_version_1,
"RIP version 1\n" "RIP version 1\n"
"RIP version 2\n") "RIP version 2\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
/* Version 1 and 2. */ /* Version 1 and 2. */
@ -1388,10 +1386,9 @@ DEFUN (ip_rip_receive_version_2,
"RIP version 2\n" "RIP version 2\n"
"RIP version 1\n") "RIP version 1\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
/* Version 1 and 2. */ /* Version 1 and 2. */
@ -1410,10 +1407,9 @@ DEFUN (no_ip_rip_receive_version,
"Version 1\n" "Version 1\n"
"Version 2\n") "Version 2\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
ri->ri_receive = RI_RIP_UNSPEC; ri->ri_receive = RI_RIP_UNSPEC;
@ -1431,11 +1427,10 @@ DEFUN (ip_rip_send_version,
"RIP version 1\n" "RIP version 1\n"
"RIP version 2\n") "RIP version 2\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_type = 4; int idx_type = 4;
struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
/* Version 1. */ /* Version 1. */
@ -1462,10 +1457,9 @@ DEFUN (ip_rip_send_version_1,
"RIP version 1\n" "RIP version 1\n"
"RIP version 2\n") "RIP version 2\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
/* Version 1 and 2. */ /* Version 1 and 2. */
@ -1483,10 +1477,9 @@ DEFUN (ip_rip_send_version_2,
"RIP version 2\n" "RIP version 2\n"
"RIP version 1\n") "RIP version 1\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
/* Version 1 and 2. */ /* Version 1 and 2. */
@ -1505,10 +1498,9 @@ DEFUN (no_ip_rip_send_version,
"Version 1\n" "Version 1\n"
"Version 2\n") "Version 2\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
ri->ri_send = RI_RIP_UNSPEC; ri->ri_send = RI_RIP_UNSPEC;
@ -1523,10 +1515,9 @@ DEFUN (ip_rip_v2_broadcast,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Send ip broadcast v2 update\n") "Send ip broadcast v2 update\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
ri->v2_broadcast = 1; ri->v2_broadcast = 1;
@ -1541,10 +1532,9 @@ DEFUN (no_ip_rip_v2_broadcast,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Send ip broadcast v2 update\n") "Send ip broadcast v2 update\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
ri->v2_broadcast = 0; ri->v2_broadcast = 0;
@ -1564,13 +1554,12 @@ DEFUN (ip_rip_authentication_mode,
"RFC compatible\n" "RFC compatible\n"
"Old ripd compatible\n") "Old ripd compatible\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
char *cryptmode = argv[4]->text; char *cryptmode = argv[4]->text;
char *authlen = (argc > 5) ? argv[6]->text : NULL; char *authlen = (argc > 5) ? argv[6]->text : NULL;
struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
int auth_type; int auth_type;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
if (strmatch ("md5", cryptmode)) if (strmatch ("md5", cryptmode))
@ -1615,10 +1604,9 @@ DEFUN (no_ip_rip_authentication_mode,
"RFC compatible\n" "RFC compatible\n"
"Old ripd compatible\n") "Old ripd compatible\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
ri->auth_type = RIP_NO_AUTH; ri->auth_type = RIP_NO_AUTH;
@ -1636,11 +1624,10 @@ DEFUN (ip_rip_authentication_string,
"Authentication string\n" "Authentication string\n"
"Authentication string\n") "Authentication string\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_line = 4; int idx_line = 4;
struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
if (strlen (argv[idx_line]->arg) > 16) if (strlen (argv[idx_line]->arg) > 16)
@ -1674,10 +1661,9 @@ DEFUN (no_ip_rip_authentication_string,
"Authentication string\n" "Authentication string\n"
"Authentication string\n") "Authentication string\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
if (ri->auth_str) if (ri->auth_str)
@ -1698,11 +1684,10 @@ DEFUN (ip_rip_authentication_key_chain,
"Authentication key-chain\n" "Authentication key-chain\n"
"name of key-chain\n") "name of key-chain\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_line = 4; int idx_line = 4;
struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *) vty->index;
ri = ifp->info; ri = ifp->info;
if (ri->auth_str) if (ri->auth_str)
@ -1730,10 +1715,9 @@ DEFUN (no_ip_rip_authentication_key_chain,
"Authentication key-chain\n" "Authentication key-chain\n"
"name of key-chain\n") "name of key-chain\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = (struct interface *) vty->index;
ri = ifp->info; ri = ifp->info;
if (ri->key_chain) if (ri->key_chain)
@ -1756,10 +1740,9 @@ DEFUN (ip_rip_split_horizon,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Perform split horizon\n") "Perform split horizon\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
ri->split_horizon = RIP_SPLIT_HORIZON; ri->split_horizon = RIP_SPLIT_HORIZON;
@ -1774,10 +1757,9 @@ DEFUN (ip_rip_split_horizon_poisoned_reverse,
"Perform split horizon\n" "Perform split horizon\n"
"With poisoned-reverse\n") "With poisoned-reverse\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
ri->split_horizon = RIP_SPLIT_HORIZON_POISONED_REVERSE; ri->split_horizon = RIP_SPLIT_HORIZON_POISONED_REVERSE;
@ -1796,10 +1778,9 @@ DEFUN (no_ip_rip_split_horizon,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Perform split horizon\n") "Perform split horizon\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
ri->split_horizon = RIP_NO_SPLIT_HORIZON; ri->split_horizon = RIP_NO_SPLIT_HORIZON;
@ -1815,10 +1796,9 @@ DEFUN (no_ip_rip_split_horizon_poisoned_reverse,
"Perform split horizon\n" "Perform split horizon\n"
"With poisoned-reverse\n") "With poisoned-reverse\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
switch( ri->split_horizon ) switch( ri->split_horizon )

View File

@ -45,6 +45,8 @@
#include "ripd/ripd.h" #include "ripd/ripd.h"
#include "ripd/rip_debug.h" #include "ripd/rip_debug.h"
DEFINE_QOBJ_TYPE(rip)
/* UDP receive buffer size */ /* UDP receive buffer size */
#define RIP_UDP_RCV_BUF 41600 #define RIP_UDP_RCV_BUF 41600
@ -2698,6 +2700,8 @@ rip_create (void)
rip_event (RIP_READ, rip->sock); rip_event (RIP_READ, rip->sock);
rip_event (RIP_UPDATE_EVENT, 1); rip_event (RIP_UPDATE_EVENT, 1);
QOBJ_REG (rip, rip);
return 0; return 0;
} }
@ -2816,8 +2820,7 @@ DEFUN (router_rip,
return CMD_WARNING; return CMD_WARNING;
} }
} }
vty->node = RIP_NODE; VTY_PUSH_CONTEXT(RIP_NODE, rip);
vty->index = rip;
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -3851,6 +3854,8 @@ rip_clean (void)
if (rip) if (rip)
{ {
QOBJ_UNREG (rip);
/* Clear RIP routes */ /* Clear RIP routes */
for (rp = route_top (rip->table); rp; rp = route_next (rp)) for (rp = route_top (rip->table); rp; rp = route_next (rp))
if ((list = rp->info) != NULL) if ((list = rp->info) != NULL)

View File

@ -22,6 +22,7 @@
#ifndef _ZEBRA_RIP_H #ifndef _ZEBRA_RIP_H
#define _ZEBRA_RIP_H #define _ZEBRA_RIP_H
#include "qobj.h"
#include "rip_memory.h" #include "rip_memory.h"
/* RIP version number. */ /* RIP version number. */
@ -156,7 +157,10 @@ struct rip
int metric_config; int metric_config;
u_int32_t metric; u_int32_t metric;
} route_map[ZEBRA_ROUTE_MAX]; } route_map[ZEBRA_ROUTE_MAX];
QOBJ_FIELDS
}; };
DECLARE_QOBJ_TYPE(rip)
/* RIP routing table entry which belong to rip_packet. */ /* RIP routing table entry which belong to rip_packet. */
struct rte struct rte

View File

@ -1012,10 +1012,9 @@ DEFUN (ipv6_ripng_split_horizon,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Perform split horizon\n") "Perform split horizon\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct ripng_interface *ri; struct ripng_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
ri->split_horizon = RIPNG_SPLIT_HORIZON; ri->split_horizon = RIPNG_SPLIT_HORIZON;
@ -1030,10 +1029,9 @@ DEFUN (ipv6_ripng_split_horizon_poisoned_reverse,
"Perform split horizon\n" "Perform split horizon\n"
"With poisoned-reverse\n") "With poisoned-reverse\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct ripng_interface *ri; struct ripng_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
ri->split_horizon = RIPNG_SPLIT_HORIZON_POISONED_REVERSE; ri->split_horizon = RIPNG_SPLIT_HORIZON_POISONED_REVERSE;
@ -1049,10 +1047,9 @@ DEFUN (no_ipv6_ripng_split_horizon,
"Perform split horizon\n" "Perform split horizon\n"
"With poisoned-reverse\n") "With poisoned-reverse\n")
{ {
struct interface *ifp; VTY_DECLVAR_CONTEXT(interface, ifp);
struct ripng_interface *ri; struct ripng_interface *ri;
ifp = vty->index;
ri = ifp->info; ri = ifp->info;
ri->split_horizon = RIPNG_NO_SPLIT_HORIZON; ri->split_horizon = RIPNG_NO_SPLIT_HORIZON;

34
tools/cocci.h Normal file
View File

@ -0,0 +1,34 @@
/* some of this stuff doesn't seem to parse properly in coccinelle */
#define DEFUN(funcname, cmdname, str, help) \
static int funcname \
(const struct cmd_element *self, \
struct vty *vty, \
int argc, \
struct cmd_token *argv[])
#define DEFUN_HIDDEN(funcname, cmdname, str, help) \
static int funcname \
(const struct cmd_element *self, \
struct vty *vty, \
int argc, \
struct cmd_token *argv[])
#define ENABLE_BGP_VNC 1
#define ALL_LIST_ELEMENTS_RO(list,node,data) \
(node) = listhead(list), ((data) = NULL);\
(node) != NULL && ((data) = listgetdata(node)); \
(node) = listnextnode(node), ((data) = NULL)
#define ALL_LIST_ELEMENTS(list,node,nextnode,data) \
(node) = listhead(list), ((data) = NULL); \
(node) != NULL && \
((data) = listgetdata(node),(nextnode) = node->next); \
(node) = (nextnode), ((data) = NULL)
#define LIST_HEAD(name, type) \
struct name { \
struct type *lh_first; /* first element */ \
}
#define LIST_ENTRY(type) \
struct { \
struct type *le_next; /* next element */ \
struct type **le_prev; /* address of previous next element */ \
}

22
tools/vty_check.cocci Normal file
View File

@ -0,0 +1,22 @@
/*
* VTY_DECLVAR_CONTEXT contains a built-in "if (!var) return;"
*/
@@
identifier var, typ;
statement S;
@@
{
...
\(
VTY_DECLVAR_CONTEXT(typ, var);
\|
VTY_DECLVAR_CONTEXT_SUB(typ, var);
\)
...
- if (
- \( !var \| var == NULL \)
- )
- S
...
}

244
tools/vty_index.cocci Normal file
View File

@ -0,0 +1,244 @@
/*
* prep: strip off casts, they cause things to fail matching later.
*/
@@
identifier casttarget;
symbol vty;
@@
- (struct casttarget *)vty->index
+ vty->index
/*
* variant 1: local variable assigned from vty->index
*/
@@
identifier sn, nn;
identifier fn;
@@
int fn(...)
{
+ VTY_DECLVAR_CONTEXT (sn, nn);
...
\(
- struct sn *nn;
...
- nn = vty->index;
\|
- struct sn *nn = vty->index;
\|
- struct sn *nn = vty->index;
...
- nn = vty->index;
\)
...
}
@@
identifier sn, nn;
identifier fn;
type Tr;
@@
Tr *fn(...)
{
+ struct sn *nn = VTY_GET_CONTEXT(sn);
...
\(
- struct sn *nn;
...
- nn = vty->index;
+ if (!nn) {
+ return NULL;
+ }
\|
- struct sn *nn = vty->index;
+ if (!nn) {
+ return NULL;
+ }
\|
- struct sn *nn = vty->index;
...
- nn = vty->index;
+ if (!nn) {
+ return NULL;
+ }
\)
...
}
/*
* variant 2: vty wrapper func with (vty, vty->index, ...) signature
*/
/* find calls of this pattern first; arg will be dropped in rule3 */
@rule1@
identifier fn !~ "generic_(set|match)_";
expression arg;
@@
fn(arg, arg->index, ...)
@ script:python @
fn << rule1.fn;
arg << rule1.arg;
@@
print "R01 removing vty-index argument on %s(%s, ...)" % (fn, arg)
#/* strip arg on the vty wrapper func, add local handling */
@ rule2 @
identifier rule1.fn;
identifier arg;
identifier T;
@@
static int fn (struct vty *vty,
- struct T * arg,
...)
{
+ VTY_DECLVAR_CONTEXT (T, arg);
...
}
/* drop argument on call sites identified earlier */
@ rule3 @
identifier rule1.fn;
expression arg;
@@
fn(arg,
- arg->index,
...)
/*
* variant 3: function calls with "vty->index" argument (but no vty)
*
* a bit more complicated since we need to find the type from the header.
*/
/* find call sites first
* remember function name for later declvar insertion
*/
@ rule11 exists@
identifier fn;
identifier fparent;
type Tr;
@@
Tr fparent (...)
{
...
fn(vty->index, ...)
...
}
@ script:python @
fn << rule11.fn;
@@
print "R11 removing vty-index argument on %s(...)" % (fn)
#/* find type of the argument - note args are mostly unnamed in Quagga :( */
@ rule12 @
identifier rule11.fn;
identifier T, argname;
type Tr;
@@
(
Tr fn(struct T *, ...);
|
Tr fn(struct T * argname, ...);
)
@ script:python @
fn << rule11.fn;
T << rule12.T;
@@
print "R12 removing vty-index type is %s for %s(...)" % (T, fn)
#/* add declvar
# * this is split from rule14 so we support multiple calls in one func */
@ rule13a @
identifier rule11.fparent;
identifier rule12.T;
@@
int fparent (...)
{
+ VTY_DECLVAR_CONTEXT(T, T);
...
}
@ rule13b @
identifier rule11.fparent;
identifier rule12.T;
type Tr;
@@
Tr *fparent (...)
{
+ struct T *T = VTY_GET_CONTEXT(T);
+ if (!T) {
+ return NULL;
+ }
...
}
/* now replace the argument in the call */
@ rule14 exists @
identifier rule11.fn;
identifier rule12.T;
@@
{
...
\(
fn(
- vty->index,
+ T,
...)
\|
fn(
- vty->index
+ T
)
\)
...
}
/* special case ... */
@rule30@
identifier fn =~ "generic_(set|match)_";
expression arg;
@@
fn(arg,
- arg->index,
+ VTY_GET_CONTEXT(route_map_index),
...)
/* and finally - PUSH_CONTEXT */
@ rule99a exists @
identifier tnode;
identifier vexpr =~ "NULL";
@@
- vty->node = tnode;
...
- vty->index = vexpr;
+ VTY_PUSH_CONTEXT_NULL(tnode);
@ rule99b exists @
identifier tnode;
expression vexpr;
@@
- vty->node = tnode;
...
- vty->index = vexpr;
+ VTY_PUSH_CONTEXT(tnode, vexpr);

21
tools/vty_index.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
sed -e '1istatic void bgp_debug_clear_updgrp_update_dbg(struct bgp *bgp);' -i \
bgpd/bgp_debug.c
sed -e 's%^#if 0%#if 1 /* 0 */%' -i \
ospfd/ospf_vty.c \
ospf6d/ospf6_top.c \
#
spatch \
--sp-file tools/vty_index.cocci \
--macro-file tools/cocci.h \
--all-includes -I . -I lib \
--use-gitgrep --dir . --in-place
sed -e 's%^#if 1 /\* 0 \*/%#if 0%' -i \
ospfd/ospf_vty.c \
ospf6d/ospf6_top.c \
#
sed -e '1d' -i \
bgpd/bgp_debug.c

View File

@ -2,8 +2,7 @@ include ../common.am
## Process this file with automake to produce Makefile.in. ## Process this file with automake to produce Makefile.in.
AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib \ AM_CPPFLAGS = -I.. -I$(top_srcdir) -I$(top_srcdir)/lib -I$(top_builddir)/lib
-DVTY_DEPRECATE_INDEX
DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\" DEFS = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)/\"
INSTALL_SDATA=@INSTALL@ -m 600 INSTALL_SDATA=@INSTALL@ -m 600