diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2017-02-11 21:29:57 +0100 | 
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2017-03-07 16:21:01 +0100 | 
| commit | 819dc8bbbc778fc0df326c687dcdda4c2fd2b683 (patch) | |
| tree | 4d543b9623d1ce81cc45ced96906dd0acd7f013a | |
| parent | 2fb975da777d27077b3580cb18390b5015b50fb8 (diff) | |
nhrpd: adapt to API changes
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| -rw-r--r-- | nhrpd/Makefile.am | 2 | ||||
| -rw-r--r-- | nhrpd/nhrp_cache.c | 8 | ||||
| -rw-r--r-- | nhrpd/nhrp_interface.c | 4 | ||||
| -rw-r--r-- | nhrpd/nhrp_main.c | 11 | ||||
| -rw-r--r-- | nhrpd/nhrp_nhs.c | 5 | ||||
| -rw-r--r-- | nhrpd/nhrp_peer.c | 2 | ||||
| -rw-r--r-- | nhrpd/nhrp_route.c | 42 | ||||
| -rw-r--r-- | nhrpd/nhrp_shortcut.c | 2 | ||||
| -rw-r--r-- | nhrpd/nhrp_vc.c | 2 | ||||
| -rw-r--r-- | nhrpd/nhrp_vty.c | 160 | ||||
| -rw-r--r-- | nhrpd/nhrpd.h | 3 | ||||
| -rw-r--r-- | nhrpd/zbuf.c | 7 | 
12 files changed, 133 insertions, 115 deletions
diff --git a/nhrpd/Makefile.am b/nhrpd/Makefile.am index 00ecc7f3fe..c8c40bc17b 100644 --- a/nhrpd/Makefile.am +++ b/nhrpd/Makefile.am @@ -30,6 +30,6 @@ nhrpd_SOURCES = \  	nhrp_vty.c \  	nhrp_main.c -nhrpd_LDADD = ../lib/libzebra.la @LIBCAP@ @CARES_LIBS@ +nhrpd_LDADD = ../lib/libfrr.la @LIBCAP@ @CARES_LIBS@  #dist_examples_DATA = nhrpd.conf.sample diff --git a/nhrpd/nhrp_cache.c b/nhrpd/nhrp_cache.c index 447a814c0a..d9094ec335 100644 --- a/nhrpd/nhrp_cache.c +++ b/nhrpd/nhrp_cache.c @@ -15,6 +15,8 @@  #include "netlink.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_CACHE, "NHRP cache entry") +  unsigned long nhrp_cache_counts[NHRP_CACHE_NUM_TYPES];  const char * const nhrp_cache_type_str[] = { @@ -183,7 +185,7 @@ static void nhrp_cache_update_timers(struct nhrp_cache *c)  		break;  	default:  		if (c->cur.expires) -			THREAD_TIMER_ON(master, c->t_timeout, nhrp_cache_do_timeout, c, c->cur.expires - recent_relative_time().tv_sec); +			THREAD_TIMER_ON(master, c->t_timeout, nhrp_cache_do_timeout, c, c->cur.expires - monotime(NULL));  		break;  	}  } @@ -270,7 +272,7 @@ int nhrp_cache_update_binding(struct nhrp_cache *c, enum nhrp_cache_type type, i  	nhrp_cache_reset_new(c);  	if (c->cur.type == type && c->cur.peer == p && c->cur.mtu == mtu) { -		if (holding_time > 0) c->cur.expires = recent_relative_time().tv_sec + holding_time; +		if (holding_time > 0) c->cur.expires = monotime(NULL) + holding_time;  		if (nbma_oa) c->cur.remote_nbma_natoa = *nbma_oa;  		else memset(&c->cur.remote_nbma_natoa, 0, sizeof c->cur.remote_nbma_natoa);  		nhrp_peer_unref(p); @@ -281,7 +283,7 @@ int nhrp_cache_update_binding(struct nhrp_cache *c, enum nhrp_cache_type type, i  		if (nbma_oa) c->new.remote_nbma_natoa = *nbma_oa;  		if (holding_time > 0) -			c->new.expires = recent_relative_time().tv_sec + holding_time; +			c->new.expires = monotime(NULL) + holding_time;  		else if (holding_time < 0)  			c->new.type = NHRP_CACHE_INVALID; diff --git a/nhrpd/nhrp_interface.c b/nhrpd/nhrp_interface.c index 8118927ab4..4ac612d3ad 100644 --- a/nhrpd/nhrp_interface.c +++ b/nhrpd/nhrp_interface.c @@ -17,6 +17,8 @@  #include "os.h"  #include "netlink.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_IF, "NHRP interface") +  static int nhrp_if_new_hook(struct interface *ifp)  {  	struct nhrp_interface *nifp; @@ -75,7 +77,7 @@ static void nhrp_interface_update_source(struct interface *ifp)  	struct nhrp_interface *nifp = ifp->info;  	if (!nifp->source || !nifp->nbmaifp || -	    nifp->linkidx == nifp->nbmaifp->ifindex) +	    (ifindex_t)nifp->linkidx == nifp->nbmaifp->ifindex)  		return;  	nifp->linkidx = nifp->nbmaifp->ifindex; diff --git a/nhrpd/nhrp_main.c b/nhrpd/nhrp_main.c index 29349a038d..dfb76a4081 100644 --- a/nhrpd/nhrp_main.c +++ b/nhrpd/nhrp_main.c @@ -17,11 +17,14 @@  #include "version.h"  #include "log.h"  #include "memory.h" +#include "memory_vty.h"  #include "command.h"  #include "nhrpd.h"  #include "netlink.h" +DEFINE_MGROUP(NHRPD, "NHRP") +  unsigned int debug_flags = 0;  struct thread_master *master; @@ -88,7 +91,7 @@ Daemon which manages NHRP protocol.\n\n\  -v, --version      Print program version\n\  -h, --help         Display this help and exit\n\  \n\ -Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS); +Report bugs to %s\n", progname, FRR_BUG_ADDRESS);  	exit(status);  } @@ -184,12 +187,12 @@ static struct quagga_signal_t sighandlers[] = {  int main(int argc, char **argv)  {  	struct thread thread; -	const char *progname; +	const char *progname, *p;  	/* Set umask before anything for security */  	umask(0027); -	progname = basename(argv[0]); -	zlog_default = openzlog(progname, ZLOG_NHRP, LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON); +	progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); +	zlog_default = openzlog(progname, ZLOG_NHRP, 0, LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);  	zlog_set_level(NULL, ZLOG_DEST_STDOUT, LOG_WARNING);  	parse_arguments(progname, argc, argv); diff --git a/nhrpd/nhrp_nhs.c b/nhrpd/nhrp_nhs.c index d463e06258..10245d308a 100644 --- a/nhrpd/nhrp_nhs.c +++ b/nhrpd/nhrp_nhs.c @@ -14,6 +14,9 @@  #include "nhrpd.h"  #include "nhrp_protocol.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_NHS, "NHRP next hop server") +DEFINE_MTYPE_STATIC(NHRPD, NHRP_REGISTRATION, "NHRP registration entries") +  static int nhrp_nhs_resolve(struct thread *t);  struct nhrp_registration { @@ -359,7 +362,7 @@ void nhrp_nhs_terminate(void)  	struct listnode *node;  	afi_t afi; -	for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) { +	for (ALL_LIST_ELEMENTS_RO(vrf_iflist (VRF_DEFAULT), node, ifp)) {  		nifp = ifp->info;  		for (afi = 0; afi < AFI_MAX; afi++) {  			list_for_each_entry_safe(nhs, tmp, &nifp->afi[afi].nhslist_head, nhslist_entry) diff --git a/nhrpd/nhrp_peer.c b/nhrpd/nhrp_peer.c index 45bfd7deb6..73b6aaccf6 100644 --- a/nhrpd/nhrp_peer.c +++ b/nhrpd/nhrp_peer.c @@ -18,6 +18,8 @@  #include "nhrp_protocol.h"  #include "os.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_PEER, "NHRP peer entry") +  struct ipv6hdr {  	uint8_t priority_version;  	uint8_t flow_lbl[3]; diff --git a/nhrpd/nhrp_route.c b/nhrpd/nhrp_route.c index cc6b5fa241..8d066eeaef 100644 --- a/nhrpd/nhrp_route.c +++ b/nhrpd/nhrp_route.c @@ -14,6 +14,8 @@  #include "log.h"  #include "zclient.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_ROUTE, "NHRP routing entry") +  static struct zclient *zclient;  static struct route_table *zebra_rib[AFI_MAX]; @@ -23,12 +25,6 @@ struct route_info {  	struct interface *nhrp_ifp;  }; -static void nhrp_zebra_connected(struct zclient *zclient) -{ -	/* No real VRF support yet -- bind only to the default vrf */ -	zclient_send_requests (zclient, VRF_DEFAULT); -} -  static struct route_node *nhrp_route_update_get(const struct prefix *p, int create)  {  	struct route_node *rn; @@ -314,26 +310,32 @@ void nhrp_zebra_init(void)  	zebra_rib[AFI_IP6] = route_table_init();  	zclient = zclient_new(master); -	zclient->zebra_connected = nhrp_zebra_connected;  	zclient->interface_add = nhrp_interface_add;  	zclient->interface_delete = nhrp_interface_delete;  	zclient->interface_up = nhrp_interface_up;  	zclient->interface_down = nhrp_interface_down;  	zclient->interface_address_add = nhrp_interface_address_add;  	zclient->interface_address_delete = nhrp_interface_address_delete; -	zclient->ipv4_route_add = nhrp_route_read; -	zclient->ipv4_route_delete = nhrp_route_read; -	zclient->ipv6_route_add = nhrp_route_read; -	zclient->ipv6_route_delete = nhrp_route_read; - -	zclient_init(zclient, ZEBRA_ROUTE_NHRP); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_KERNEL, VRF_DEFAULT); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_CONNECT, VRF_DEFAULT); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_STATIC, VRF_DEFAULT); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_RIP, VRF_DEFAULT); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_OSPF, VRF_DEFAULT); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_ISIS, VRF_DEFAULT); -	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, ZEBRA_ROUTE_BGP, VRF_DEFAULT); +	zclient->redistribute_route_ipv4_add = nhrp_route_read; +	zclient->redistribute_route_ipv4_del = nhrp_route_read; +	zclient->redistribute_route_ipv6_add = nhrp_route_read; +	zclient->redistribute_route_ipv6_del = nhrp_route_read; + +	zclient_init(zclient, ZEBRA_ROUTE_NHRP, 0); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_KERNEL, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_CONNECT, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_STATIC, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_RIP, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_OSPF, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_ISIS, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, ZEBRA_ROUTE_BGP, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_KERNEL, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_CONNECT, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_STATIC, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_RIP, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_OSPF, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_ISIS, 0, VRF_DEFAULT); +	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, ZEBRA_ROUTE_BGP, 0, VRF_DEFAULT);  }  void nhrp_zebra_terminate(void) diff --git a/nhrpd/nhrp_shortcut.c b/nhrpd/nhrp_shortcut.c index 421f2886f3..cd33ff0280 100644 --- a/nhrpd/nhrp_shortcut.c +++ b/nhrpd/nhrp_shortcut.c @@ -14,6 +14,8 @@  #include "log.h"  #include "nhrp_protocol.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_SHORTCUT, "NHRP shortcut") +  static struct route_table *shortcut_rib[AFI_MAX];  static int nhrp_shortcut_do_purge(struct thread *t); diff --git a/nhrpd/nhrp_vc.c b/nhrpd/nhrp_vc.c index f9e1ee0689..57fb462ab6 100644 --- a/nhrpd/nhrp_vc.c +++ b/nhrpd/nhrp_vc.c @@ -17,6 +17,8 @@  #include "nhrpd.h"  #include "os.h" +DEFINE_MTYPE_STATIC(NHRPD, NHRP_VC, "NHRP virtual connection") +  struct child_sa {  	uint32_t id;  	struct nhrp_vc *vc; diff --git a/nhrpd/nhrp_vty.c b/nhrpd/nhrp_vty.c index 9b1c69de5b..2e3164410c 100644 --- a/nhrpd/nhrp_vty.c +++ b/nhrpd/nhrp_vty.c @@ -27,7 +27,7 @@ static struct cmd_node nhrp_interface_node = {  	.vtysh  = 1,  }; -#define NHRP_DEBUG_FLAGS_CMD "(all|common|event|interface|kernel|route|vici)" +#define NHRP_DEBUG_FLAGS_CMD "<all|common|event|interface|kernel|route|vici>"  #define NHRP_DEBUG_FLAGS_STR		\  	"All messages\n"		\ @@ -138,7 +138,7 @@ DEFUN(debug_nhrp, debug_nhrp_cmd,  	"NHRP information\n"  	NHRP_DEBUG_FLAGS_STR)  { -	return toggle_flag(vty, debug_flags_desc, argv[0], 1, &debug_flags); +	return toggle_flag(vty, debug_flags_desc, argv[2]->text, 1, &debug_flags);  }  DEFUN(no_debug_nhrp, no_debug_nhrp_cmd, @@ -148,7 +148,7 @@ DEFUN(no_debug_nhrp, no_debug_nhrp_cmd,  	"NHRP information\n"  	NHRP_DEBUG_FLAGS_STR)  { -	return toggle_flag(vty, debug_flags_desc, argv[0], 0, &debug_flags); +	return toggle_flag(vty, debug_flags_desc, argv[3]->text, 0, &debug_flags);  }  #endif /* NO_DEBUG */ @@ -186,13 +186,13 @@ static int nhrp_config_write(struct vty *vty)  #define IP_STR		"IP information\n"  #define IPV6_STR	"IPv6 information\n" -#define AFI_CMD		"(ip|ipv6)" +#define AFI_CMD		"<ip|ipv6>"  #define AFI_STR		IP_STR IPV6_STR  #define NHRP_STR	"Next Hop Resolution Protocol functions\n" -static afi_t cmd_to_afi(const char *cmd) +static afi_t cmd_to_afi(const struct cmd_token *tok)  { -	return strncmp(cmd, "ipv6", 4) == 0 ? AFI_IP6 : AFI_IP; +	return strcmp(tok->text, "ipv6") == 0 ? AFI_IP6 : AFI_IP;  }  static const char *afi_to_cmd(afi_t afi) @@ -208,7 +208,7 @@ DEFUN(nhrp_event_socket, nhrp_event_socket_cmd,  	"Event Manager unix socket path\n"  	"Unix path for the socket")  { -	evmgr_set_socket(argv[0]); +	evmgr_set_socket(argv[3]->arg);  	return CMD_SUCCESS;  } @@ -225,21 +225,21 @@ DEFUN(no_nhrp_event_socket, no_nhrp_event_socket_cmd,  }  DEFUN(nhrp_nflog_group, nhrp_nflog_group_cmd, -	"nhrp nflog-group <1-65535>", +	"nhrp nflog-group (1-65535)",  	NHRP_STR  	"Specify NFLOG group number\n"  	"NFLOG group number\n")  {  	uint32_t nfgroup; -	VTY_GET_INTEGER_RANGE("nflog-group", nfgroup, argv[0], 1, 65535); +	VTY_GET_INTEGER_RANGE("nflog-group", nfgroup, argv[2]->arg, 1, 65535);  	netlink_set_nflog_group(nfgroup);  	return CMD_SUCCESS;  }  DEFUN(no_nhrp_nflog_group, no_nhrp_nflog_group_cmd, -	"no nhrp nflog-group [<1-65535>]", +	"no nhrp nflog-group [(1-65535)]",  	NO_STR  	NHRP_STR  	"Specify NFLOG group number\n" @@ -250,7 +250,7 @@ DEFUN(no_nhrp_nflog_group, no_nhrp_nflog_group_cmd,  }  DEFUN(tunnel_protection, tunnel_protection_cmd, -	"tunnel protection vici profile PROFILE {fallback-profile FALLBACK}", +	"tunnel protection vici profile PROFILE [fallback-profile FALLBACK]",  	"NHRP/GRE integration\n"  	"IPsec protection\n"  	"VICI (StrongSwan)\n" @@ -259,9 +259,10 @@ DEFUN(tunnel_protection, tunnel_protection_cmd,  	"Fallback IPsec profile\n"  	"Fallback IPsec profile name\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp); -	nhrp_interface_set_protection(ifp, argv[0], argv[1]); +	nhrp_interface_set_protection(ifp, argv[4]->arg, +			argc > 6 ? argv[6]->arg : NULL);  	return CMD_SUCCESS;  } @@ -271,7 +272,7 @@ DEFUN(no_tunnel_protection, no_tunnel_protection_cmd,  	"NHRP/GRE integration\n"  	"IPsec protection\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	nhrp_interface_set_protection(ifp, NULL, NULL);  	return CMD_SUCCESS; @@ -283,8 +284,8 @@ DEFUN(tunnel_source, tunnel_source_cmd,  	"Tunnel device binding tracking\n"  	"Interface name\n")  { -	struct interface *ifp = vty->index; -	nhrp_interface_set_source(ifp, argv[0]); +	VTY_DECLVAR_CONTEXT(interface, ifp); +	nhrp_interface_set_source(ifp, argv[2]->arg);  	return CMD_SUCCESS;  } @@ -294,39 +295,39 @@ DEFUN(no_tunnel_source, no_tunnel_source_cmd,  	"Tunnel device binding tracking\n"  	"Interface name\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	nhrp_interface_set_source(ifp, NULL);  	return CMD_SUCCESS;  }  DEFUN(if_nhrp_network_id, if_nhrp_network_id_cmd, -	AFI_CMD " nhrp network-id <1-4294967295>", +	AFI_CMD " nhrp network-id (1-4294967295)",  	AFI_STR  	NHRP_STR  	"Enable NHRP and specify network-id\n"  	"System local ID to specify interface group\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info;  	afi_t afi = cmd_to_afi(argv[0]); -	VTY_GET_INTEGER_RANGE("network-id", nifp->afi[afi].network_id, argv[1], 1, 4294967295); +	VTY_GET_INTEGER_RANGE("network-id", nifp->afi[afi].network_id, argv[3]->arg, 1, 4294967295);  	nhrp_interface_update(ifp);  	return CMD_SUCCESS;  }  DEFUN(if_no_nhrp_network_id, if_no_nhrp_network_id_cmd, -	"no " AFI_CMD " nhrp network-id [<1-4294967295>]", +	"no " AFI_CMD " nhrp network-id [(1-4294967295)]",  	NO_STR  	AFI_STR  	NHRP_STR  	"Enable NHRP and specify network-id\n"  	"System local ID to specify interface group\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info; -	afi_t afi = cmd_to_afi(argv[0]); +	afi_t afi = cmd_to_afi(argv[1]);  	nifp->afi[afi].network_id = 0;  	nhrp_interface_update(ifp); @@ -335,93 +336,93 @@ DEFUN(if_no_nhrp_network_id, if_no_nhrp_network_id_cmd,  }  DEFUN(if_nhrp_flags, if_nhrp_flags_cmd, -	AFI_CMD " nhrp (shortcut|redirect)", +	AFI_CMD " nhrp <shortcut|redirect>",  	AFI_STR  	NHRP_STR  	"Allow shortcut establishment\n"  	"Send redirect notifications\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info;  	afi_t afi = cmd_to_afi(argv[0]); -	return toggle_flag(vty, interface_flags_desc, argv[1], 1, &nifp->afi[afi].flags); +	return toggle_flag(vty, interface_flags_desc, argv[2]->text, 1, &nifp->afi[afi].flags);  }  DEFUN(if_no_nhrp_flags, if_no_nhrp_flags_cmd, -	"no " AFI_CMD " nhrp (shortcut|redirect)", +	"no " AFI_CMD " nhrp <shortcut|redirect>",  	NO_STR  	AFI_STR  	NHRP_STR  	"Allow shortcut establishment\n"  	"Send redirect notifications\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info; -	afi_t afi = cmd_to_afi(argv[0]); +	afi_t afi = cmd_to_afi(argv[1]); -	return toggle_flag(vty, interface_flags_desc, argv[1], 0, &nifp->afi[afi].flags); +	return toggle_flag(vty, interface_flags_desc, argv[3]->text, 0, &nifp->afi[afi].flags);  }  DEFUN(if_nhrp_reg_flags, if_nhrp_reg_flags_cmd, -	AFI_CMD " nhrp registration (no-unique)", +	AFI_CMD " nhrp registration no-unique",  	AFI_STR  	NHRP_STR  	"Registration configuration\n"  	"Don't set unique flag\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info;  	afi_t afi = cmd_to_afi(argv[0]);  	char name[256]; -	snprintf(name, sizeof(name), "registration %s", argv[1]); +	snprintf(name, sizeof(name), "registration %s", argv[3]->text);  	return toggle_flag(vty, interface_flags_desc, name, 1, &nifp->afi[afi].flags);  }  DEFUN(if_no_nhrp_reg_flags, if_no_nhrp_reg_flags_cmd, -	"no " AFI_CMD " nhrp registration (no-unique)", +	"no " AFI_CMD " nhrp registration no-unique",  	NO_STR  	AFI_STR  	NHRP_STR  	"Registration configuration\n"  	"Don't set unique flag\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info; -	afi_t afi = cmd_to_afi(argv[0]); +	afi_t afi = cmd_to_afi(argv[1]);  	char name[256]; -	snprintf(name, sizeof(name), "registration %s", argv[1]); +	snprintf(name, sizeof(name), "registration %s", argv[4]->text);  	return toggle_flag(vty, interface_flags_desc, name, 0, &nifp->afi[afi].flags);  }  DEFUN(if_nhrp_holdtime, if_nhrp_holdtime_cmd, -	AFI_CMD " nhrp holdtime <1-65000>", +	AFI_CMD " nhrp holdtime (1-65000)",  	AFI_STR  	NHRP_STR  	"Specify NBMA address validity time\n"  	"Time in seconds that NBMA addresses are advertised valid\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info;  	afi_t afi = cmd_to_afi(argv[0]); -	VTY_GET_INTEGER_RANGE("holdtime", nifp->afi[afi].holdtime, argv[1], 1, 65000); +	VTY_GET_INTEGER_RANGE("holdtime", nifp->afi[afi].holdtime, argv[3]->arg, 1, 65000);  	nhrp_interface_update(ifp);  	return CMD_SUCCESS;  }  DEFUN(if_no_nhrp_holdtime, if_no_nhrp_holdtime_cmd, -	"no " AFI_CMD " nhrp holdtime [1-65000]", +	"no " AFI_CMD " nhrp holdtime [(1-65000)]",  	NO_STR  	AFI_STR  	NHRP_STR  	"Specify NBMA address validity time\n"  	"Time in seconds that NBMA addresses are advertised valid\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info; -	afi_t afi = cmd_to_afi(argv[0]); +	afi_t afi = cmd_to_afi(argv[1]);  	nifp->afi[afi].holdtime = NHRPD_DEFAULT_HOLDTIME;  	nhrp_interface_update(ifp); @@ -430,20 +431,20 @@ DEFUN(if_no_nhrp_holdtime, if_no_nhrp_holdtime_cmd,  }  DEFUN(if_nhrp_mtu, if_nhrp_mtu_cmd, -	"ip nhrp mtu (<576-1500>|opennhrp)", +	"ip nhrp mtu <(576-1500)|opennhrp>",  	IP_STR  	NHRP_STR  	"Configure NHRP advertised MTU\n"  	"MTU value\n"  	"Advertise bound interface MTU similar to OpenNHRP")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info; -	if (argv[0][0] == 'o') { +	if (argv[3]->arg[0] == 'o') {  		nifp->afi[AFI_IP].configured_mtu = -1;  	} else { -		VTY_GET_INTEGER_RANGE("mtu", nifp->afi[AFI_IP].configured_mtu, argv[0], 576, 1500); +		VTY_GET_INTEGER_RANGE("mtu", nifp->afi[AFI_IP].configured_mtu, argv[3]->arg, 576, 1500);  	}  	nhrp_interface_update_mtu(ifp, AFI_IP); @@ -451,7 +452,7 @@ DEFUN(if_nhrp_mtu, if_nhrp_mtu_cmd,  }  DEFUN(if_no_nhrp_mtu, if_no_nhrp_mtu_cmd, -	"no ip nhrp mtu [(<576-1500>|opennhrp)]", +	"no ip nhrp mtu [(576-1500)|opennhrp]",  	NO_STR  	IP_STR  	NHRP_STR @@ -459,7 +460,7 @@ DEFUN(if_no_nhrp_mtu, if_no_nhrp_mtu_cmd,  	"MTU value\n"  	"Advertise bound interface MTU similar to OpenNHRP")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	struct nhrp_interface *nifp = ifp->info;  	nifp->afi[AFI_IP].configured_mtu = 0; @@ -468,7 +469,7 @@ DEFUN(if_no_nhrp_mtu, if_no_nhrp_mtu_cmd,  }  DEFUN(if_nhrp_map, if_nhrp_map_cmd, -	AFI_CMD " nhrp map (A.B.C.D|X:X::X:X) (A.B.C.D|local)", +	AFI_CMD " nhrp map <A.B.C.D|X:X::X:X> <A.B.C.D|local>",  	AFI_STR  	NHRP_STR  	"Nexthop Server configuration\n" @@ -477,12 +478,12 @@ DEFUN(if_nhrp_map, if_nhrp_map_cmd,  	"IPv4 NBMA address\n"  	"Handle protocol address locally\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	afi_t afi = cmd_to_afi(argv[0]);  	union sockunion proto_addr, nbma_addr;  	struct nhrp_cache *c; -	if (str2sockunion(argv[1], &proto_addr) < 0 || +	if (str2sockunion(argv[3]->arg, &proto_addr) < 0 ||  	    afi2family(afi) != sockunion_family(&proto_addr))  		return nhrp_vty_return(vty, NHRP_ERR_PROTOCOL_ADDRESS_MISMATCH); @@ -491,10 +492,10 @@ DEFUN(if_nhrp_map, if_nhrp_map_cmd,  		return nhrp_vty_return(vty, NHRP_ERR_FAIL);  	c->map = 1; -	if (strcmp(argv[2], "local") == 0) { +	if (strcmp(argv[4]->text, "local") == 0) {  		nhrp_cache_update_binding(c, NHRP_CACHE_LOCAL, 0, NULL, 0, NULL);  	} else{ -		if (str2sockunion(argv[2], &nbma_addr) < 0) +		if (str2sockunion(argv[4]->arg, &nbma_addr) < 0)  			return nhrp_vty_return(vty, NHRP_ERR_FAIL);  		nhrp_cache_update_binding(c, NHRP_CACHE_STATIC, 0,  			nhrp_peer_get(ifp, &nbma_addr), 0, NULL); @@ -504,30 +505,31 @@ DEFUN(if_nhrp_map, if_nhrp_map_cmd,  }  DEFUN(if_nhrp_nhs, if_nhrp_nhs_cmd, -	AFI_CMD " nhrp nhs (A.B.C.D|X:X::X:X|dynamic) nbma (A.B.C.D|FQDN)", +	AFI_CMD " nhrp nhs <A.B.C.D|X:X::X:X|dynamic> nbma <A.B.C.D|FQDN>",  	AFI_STR  	NHRP_STR  	"Nexthop Server configuration\n"  	"IPv4 protocol address\n"  	"IPv6 protocol address\n"  	"Automatic detection of protocol address\n" +	"NBMA address\n"  	"IPv4 NBMA address\n"  	"Fully qualified domain name for NBMA address(es)\n")  { -	struct interface *ifp = vty->index; +	VTY_DECLVAR_CONTEXT(interface, ifp);  	afi_t afi = cmd_to_afi(argv[0]);  	union sockunion proto_addr;  	int ret; -	if (str2sockunion(argv[1], &proto_addr) < 0) +	if (str2sockunion(argv[3]->arg, &proto_addr) < 0)  		sockunion_family(&proto_addr) = AF_UNSPEC; -	ret = nhrp_nhs_add(ifp, afi, &proto_addr, argv[2]); +	ret = nhrp_nhs_add(ifp, afi, &proto_addr, argv[5]->arg);  	return nhrp_vty_return(vty, ret);  }  DEFUN(if_no_nhrp_nhs, if_no_nhrp_nhs_cmd, -	"no " AFI_CMD " nhrp nhs (A.B.C.D|X:X::X:X|dynamic) nbma (A.B.C.D|FQDN)", +	"no " AFI_CMD " nhrp nhs <A.B.C.D|X:X::X:X|dynamic> nbma <A.B.C.D|FQDN>",  	NO_STR  	AFI_STR  	NHRP_STR @@ -535,18 +537,19 @@ DEFUN(if_no_nhrp_nhs, if_no_nhrp_nhs_cmd,  	"IPv4 protocol address\n"  	"IPv6 protocol address\n"  	"Automatic detection of protocol address\n" +	"NBMA address\n"  	"IPv4 NBMA address\n"  	"Fully qualified domain name for NBMA address(es)\n")  { -	struct interface *ifp = vty->index; -	afi_t afi = cmd_to_afi(argv[0]); +	VTY_DECLVAR_CONTEXT(interface, ifp); +	afi_t afi = cmd_to_afi(argv[1]);  	union sockunion proto_addr;  	int ret; -	if (str2sockunion(argv[1], &proto_addr) < 0) +	if (str2sockunion(argv[4]->arg, &proto_addr) < 0)  		sockunion_family(&proto_addr) = AF_UNSPEC; -	ret = nhrp_nhs_del(ifp, afi, &proto_addr, argv[2]); +	ret = nhrp_nhs_del(ifp, afi, &proto_addr, argv[6]->arg);  	return nhrp_vty_return(vty, ret);  } @@ -655,7 +658,7 @@ static void show_ip_nhrp_shortcut(struct nhrp_shortcut *s, void *pctx)  }  DEFUN(show_ip_nhrp, show_ip_nhrp_cmd, -	"show " AFI_CMD " nhrp (cache|shortcut|opennhrp|)", +	"show " AFI_CMD " nhrp [cache|shortcut|opennhrp]",  	SHOW_STR  	AFI_STR  	"NHRP information\n" @@ -667,16 +670,16 @@ DEFUN(show_ip_nhrp, show_ip_nhrp_cmd,  	struct interface *ifp;  	struct info_ctx ctx = {  		.vty = vty, -		.afi = cmd_to_afi(argv[0]), +		.afi = cmd_to_afi(argv[1]),  	}; -	if (!argv[1] || argv[1][0] == 'c') { -		for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) +	if (argc <= 3 || argv[3]->text[0] == 'c') { +		for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))  			nhrp_cache_foreach(ifp, show_ip_nhrp_cache, &ctx); -	} else if (argv[1][0] == 'o') { +	} else if (argv[3]->text[0] == 'o') {  		vty_out(vty, "Status: ok%s%s", VTY_NEWLINE, VTY_NEWLINE);  		ctx.count++; -		for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) +		for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))  			nhrp_cache_foreach(ifp, show_ip_opennhrp_cache, &ctx);  	} else {  		nhrp_shortcut_foreach(ctx.afi, show_ip_nhrp_shortcut, &ctx); @@ -739,7 +742,7 @@ static void clear_nhrp_shortcut(struct nhrp_shortcut *s, void *data)  }  DEFUN(clear_nhrp, clear_nhrp_cmd, -	"clear " AFI_CMD " nhrp (cache|shortcut)", +	"clear " AFI_CMD " nhrp <cache|shortcut>",  	CLEAR_STR  	AFI_STR  	NHRP_STR @@ -750,12 +753,12 @@ DEFUN(clear_nhrp, clear_nhrp_cmd,  	struct interface *ifp;  	struct info_ctx ctx = {  		.vty = vty, -		.afi = cmd_to_afi(argv[0]), +		.afi = cmd_to_afi(argv[1]),  		.count = 0,  	}; -	if (!argv[1] || argv[1][0] == 'c') { -		for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) +	if (argc <= 3 || argv[3]->text[0] == 'c') { +		for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))  			nhrp_cache_foreach(ifp, clear_nhrp_cache, &ctx);  	} else {  		nhrp_shortcut_foreach(ctx.afi, clear_nhrp_shortcut, &ctx); @@ -805,7 +808,7 @@ static int interface_config_write(struct vty *vty)  	char buf[SU_ADDRSTRLEN];  	int i; -	for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) { +	for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp)) {  		vty_out(vty, "interface %s%s", ifp->name, VTY_NEWLINE);  		if (ifp->desc)  			vty_out(vty, " description %s%s", ifp->desc, VTY_NEWLINE); @@ -884,9 +887,6 @@ void nhrp_config_init(void)  	install_element(VIEW_NODE, &show_debugging_nhrp_cmd);  	install_element(VIEW_NODE, &show_ip_nhrp_cmd);  	install_element(VIEW_NODE, &show_dmvpn_cmd); -	install_element(ENABLE_NODE, &show_debugging_nhrp_cmd); -	install_element(ENABLE_NODE, &show_ip_nhrp_cmd); -	install_element(ENABLE_NODE, &show_dmvpn_cmd);  	install_element(ENABLE_NODE, &clear_nhrp_cmd);  	install_element(ENABLE_NODE, &debug_nhrp_cmd); @@ -902,12 +902,8 @@ void nhrp_config_init(void)  	/* interface specific commands */  	install_node(&nhrp_interface_node, interface_config_write); -	install_default(INTERFACE_NODE); -	install_element(CONFIG_NODE, &interface_cmd); -	install_element(CONFIG_NODE, &no_interface_cmd); -	install_element(INTERFACE_NODE, &interface_cmd); -	install_element(INTERFACE_NODE, &no_interface_cmd); +	if_cmd_init();  	install_element(INTERFACE_NODE, &tunnel_protection_cmd);  	install_element(INTERFACE_NODE, &no_tunnel_protection_cmd);  	install_element(INTERFACE_NODE, &tunnel_source_cmd); diff --git a/nhrpd/nhrpd.h b/nhrpd/nhrpd.h index 307546e082..5d403e854d 100644 --- a/nhrpd/nhrpd.h +++ b/nhrpd/nhrpd.h @@ -15,6 +15,9 @@  #include "zbuf.h"  #include "zclient.h"  #include "debug.h" +#include "memory.h" + +DECLARE_MGROUP(NHRPD)  #define NHRPD_DEFAULT_HOLDTIME	7200 diff --git a/nhrpd/zbuf.c b/nhrpd/zbuf.c index ead7cfd292..97962b9ab8 100644 --- a/nhrpd/zbuf.c +++ b/nhrpd/zbuf.c @@ -14,16 +14,17 @@  #include "zassert.h"  #include "zbuf.h"  #include "memory.h" -#include "memtypes.h"  #include "nhrpd.h"  #define ERRNO_IO_RETRY(EN) (((EN) == EAGAIN) || ((EN) == EWOULDBLOCK) || ((EN) == EINTR)) +DEFINE_MTYPE_STATIC(NHRPD, ZBUF_DATA, "NHRPD zbuf data") +  struct zbuf *zbuf_alloc(size_t size)  {  	struct zbuf *zb; -	zb = XMALLOC(MTYPE_STREAM_DATA, sizeof(*zb) + size); +	zb = XMALLOC(MTYPE_ZBUF_DATA, sizeof(*zb) + size);  	if (!zb)  		return NULL; @@ -46,7 +47,7 @@ void zbuf_init(struct zbuf *zb, void *buf, size_t len, size_t datalen)  void zbuf_free(struct zbuf *zb)  {  	if (zb->allocated) -		XFREE(MTYPE_STREAM_DATA, zb); +		XFREE(MTYPE_ZBUF_DATA, zb);  }  void zbuf_reset(struct zbuf *zb)  | 
