PERFORCE change 124354 for review

Julian Elischer julian at elischer.org
Mon Jul 30 18:23:42 UTC 2007


Marko Zec wrote:
> http://perforce.freebsd.org/chv.cgi?CH=124354
> 
> Change 124354 by zec at zec_tpx32 on 2007/07/30 13:37:17
> 

> 	
> 	While here, deprecate backpointers from vnet modules to
> 	the corresponding parent vnets, given that so far they have
> 	never been used.
> 

hmmmm
I was thinking about that.. The idea seems to make sense initially..
I am surprised that they are not used but wonder if that means
they would never have been used?
would they not be used in the case of hierarchical schedulers?


> Affected files ...
> 
> .. //depot/projects/vimage/src/sys/kern/kern_vimage.c#27 edit
> .. //depot/projects/vimage/src/sys/kern/uipc_domain.c#8 edit
> .. //depot/projects/vimage/src/sys/net/if.c#17 edit
> .. //depot/projects/vimage/src/sys/net/if_gif.c#7 edit
> .. //depot/projects/vimage/src/sys/net/if_gif.h#4 edit
> .. //depot/projects/vimage/src/sys/net/if_loop.c#15 edit
> .. //depot/projects/vimage/src/sys/net/route.c#9 edit
> .. //depot/projects/vimage/src/sys/net/vnet.h#7 edit
> .. //depot/projects/vimage/src/sys/netgraph/ng_base.c#11 edit
> .. //depot/projects/vimage/src/sys/netinet/if_ether.c#12 edit
> .. //depot/projects/vimage/src/sys/netinet/in_proto.c#7 edit
> .. //depot/projects/vimage/src/sys/netinet/ip_fw.h#7 edit
> .. //depot/projects/vimage/src/sys/netinet/ip_fw2.c#19 edit
> .. //depot/projects/vimage/src/sys/netinet/ip_input.c#19 edit
> .. //depot/projects/vimage/src/sys/netinet/ip_var.h#7 edit
> .. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#24 edit
> .. //depot/projects/vimage/src/sys/netinet/tcp_syncache.h#6 edit
> .. //depot/projects/vimage/src/sys/netinet/vinet.h#18 edit
> .. //depot/projects/vimage/src/sys/netinet6/ip6_input.c#16 edit
> .. //depot/projects/vimage/src/sys/netinet6/udp6_usrreq.c#16 edit
> .. //depot/projects/vimage/src/sys/netinet6/vinet6.h#8 edit
> .. //depot/projects/vimage/src/sys/netipsec/ipsec.c#12 edit
> .. //depot/projects/vimage/src/sys/netipsec/vipsec.h#9 edit
> .. //depot/projects/vimage/src/sys/netipsec/xform_ah.c#8 edit
> .. //depot/projects/vimage/src/sys/netipsec/xform_esp.c#7 edit
> .. //depot/projects/vimage/src/sys/netipsec/xform_ipcomp.c#6 edit
> .. //depot/projects/vimage/src/sys/netipsec/xform_ipip.c#9 edit
> .. //depot/projects/vimage/src/sys/sys/vimage.h#28 edit
> 
> Differences ...
> 
> ==== //depot/projects/vimage/src/sys/kern/kern_vimage.c#27 (text+ko) ====
> 
> @@ -69,6 +69,8 @@
>  MALLOC_DEFINE(M_VCPU, "vcpu", "cpu resource control block");
>  
>  static void vi_destroy(struct vimage *);
> +static int vnet_mod_constructor(struct vnet_modlink *);
> +static int vnet_mod_destructor(struct vnet_modlink *);
>  
>  struct vimage vimage_0;
>  struct vprocg vprocg_0;
> @@ -84,25 +86,25 @@
>  
>  static TAILQ_HEAD(vnet_modlink_head, vnet_modlink) vnet_modlink_head;
>  
> -void vnet_mod_register(modinfo)
> -	struct vnet_modinfo *modinfo;
> +void vnet_mod_register(vmi)
> +	const struct vnet_modinfo *vmi;
>  {
> -	vnet_mod_register_multi(modinfo, NULL, NULL);
> +	vnet_mod_register_multi(vmi, NULL, NULL);
>  }
>  
> -void vnet_mod_register_multi(modinfo, iarg, iname)
> -	struct vnet_modinfo *modinfo;
> -	void *iarg;
> -	char *iname;
> +void vnet_mod_register_multi(vmi, iarg, iname)
> +	const struct vnet_modinfo *vmi;
> +	const void *iarg;
> +	const char *iname;
>  {
>  	struct vnet_modlink *vml;
>  	
>  	/* Do not register the same module instance more than once */
> -	TAILQ_FOREACH(vml, &vnet_modlink_head, mod_le)
> -		if (vml->modinfo == modinfo && vml->iarg == iarg)
> +	TAILQ_FOREACH(vml, &vnet_modlink_head, vml_mod_le)
> +		if (vml->vml_modinfo == vmi && vml->vml_iarg == iarg)
>  			break;
>  	if (vml != NULL)
> -		panic("attempt to register already registered vnet module");
> +		panic("attempt to register an already registered vnet module");
>  	vml = malloc(sizeof(struct vnet_modlink), M_VIMAGE, M_NOWAIT);
>  
>  	/*
> @@ -110,47 +112,43 @@
>  	 * In principle modules should be able to get a dynamically
>  	 * assigned ID at registration time.
>  	 */
> -	VNET_ASSERT(modinfo->id > 0 || modinfo->id < VNET_MOD_MAX);
> +	VNET_ASSERT(vmi->vmi_id > 0 || vmi->vmi_id < VNET_MOD_MAX);
>  	VNET_ASSERT(!((iarg == NULL) ^ (iname == NULL)));
>  
> -	vml->modinfo = modinfo;
> -	vml->iarg = iarg;
> -	vml->iname = iname;
> -	TAILQ_INSERT_TAIL(&vnet_modlink_head, vml, mod_le);
> +	vml->vml_modinfo = vmi;
> +	vml->vml_iarg = iarg;
> +	vml->vml_iname = iname;
> +	TAILQ_INSERT_TAIL(&vnet_modlink_head, vml, vml_mod_le);
>  
> -	if (modinfo->i_attach) {
> -		VNET_ITERLOOP_BEGIN_QUIET();
> -			modinfo->i_attach(iarg);
> -		VNET_ITERLOOP_END();
> -	}
> +	VNET_ITERLOOP_BEGIN_QUIET();
> +		vnet_mod_constructor(vml);
> +	VNET_ITERLOOP_END();
>  }
>  
> -void vnet_mod_deregister(modinfo)
> -	struct vnet_modinfo *modinfo;
> +void vnet_mod_deregister(vmi)
> +	const struct vnet_modinfo *vmi;
>  {
> -	vnet_mod_deregister_multi(modinfo, NULL, NULL);
> +	vnet_mod_deregister_multi(vmi, NULL, NULL);
>  }
>  
> -void vnet_mod_deregister_multi(modinfo, iarg, iname)
> -	struct vnet_modinfo *modinfo;
> -	void *iarg;
> -	char *iname;
> +void vnet_mod_deregister_multi(vmi, iarg, iname)
> +	const struct vnet_modinfo *vmi;
> +	const void *iarg;
> +	const char *iname;
>  {
>  	struct vnet_modlink *vml;
>  
> -	TAILQ_FOREACH(vml, &vnet_modlink_head, mod_le)
> -		if (vml->modinfo == modinfo && vml->iarg == iarg)
> +	TAILQ_FOREACH(vml, &vnet_modlink_head, vml_mod_le)
> +		if (vml->vml_modinfo == vmi && vml->vml_iarg == iarg)
>  			break;
>  	if (vml == NULL)
>  		panic("cannot deregister unregistered vnet module");
>  
> -	if (modinfo->i_detach) {
> -		VNET_ITERLOOP_BEGIN_QUIET();
> -			modinfo->i_detach(iarg);
> -		VNET_ITERLOOP_END();
> -	}
> +	VNET_ITERLOOP_BEGIN_QUIET();
> +		vnet_mod_destructor(vml);
> +	VNET_ITERLOOP_END();
>  
> -	TAILQ_REMOVE(&vnet_modlink_head, vml, mod_le);
> +	TAILQ_REMOVE(&vnet_modlink_head, vml, vml_mod_le);
>  	free(vml, M_VIMAGE);
>  }
>  
> @@ -415,17 +413,17 @@
>  {
>  	struct vnet_modlink *vml;
>  
> -	TAILQ_FOREACH(vml, &vnet_modlink_head, mod_le) {
> +	TAILQ_FOREACH(vml, &vnet_modlink_head, vml_mod_le) {
>  		struct vnet_symmap *mapentry;
>  
> -		if (vml->modinfo->symmap == NULL)
> +		if (vml->vml_modinfo->vmi_symmap == NULL)
>  			continue;
>  
> -		for (mapentry = vml->modinfo->symmap;
> +		for (mapentry = vml->vml_modinfo->vmi_symmap;
>  		     mapentry->name != NULL; mapentry++) {
>  			if (strcmp(symstr, mapentry->name) == 0) {
>  				lookup->symvalue =
> -				    (int) curvnet->mod_data[vml->modinfo->id];
> +				    (int) curvnet->mod_data[vml->vml_modinfo->vmi_id]; /* XXX */
>  				lookup->symvalue += mapentry->offset;
>  				lookup->symsize = mapentry->size;
>  				return 0;
> @@ -457,29 +455,25 @@
>  	if (vip == NULL)
>  		goto vi_alloc_done;
>  
> -	vip = realloc(vip, sizeof(struct vimage), M_VIMAGE, M_NOWAIT);
> +	vip = realloc(vip, sizeof(struct vimage), M_VIMAGE, M_NOWAIT | M_ZERO);
>  	if (vip == NULL)
>  		panic("vi_alloc: malloc failed for vimage \"%s\"\n", name);
> -	bzero(vip, sizeof(struct vimage));
>  	vip->vi_id = last_vi_id++;
>  
> -	vnet = malloc(sizeof(struct vnet), M_VNET, M_NOWAIT);
> +	vnet = malloc(sizeof(struct vnet), M_VNET, M_NOWAIT | M_ZERO);
>  	if (vnet == NULL)
>  		panic("vi_alloc: malloc failed for vnet \"%s\"\n", name);
> -	bzero(vnet, sizeof(struct vnet));
>  	vip->v_vnet = vnet;
>  	vnet->vnet_magic_n = VNET_MAGIC_N;
>  
> -	vprocg = malloc(sizeof(struct vprocg), M_VPROCG, M_NOWAIT);
> +	vprocg = malloc(sizeof(struct vprocg), M_VPROCG, M_NOWAIT | M_ZERO);
>  	if (vprocg == NULL)
>  		panic("vi_alloc: malloc failed for vprocg \"%s\"\n", name);
> -	bzero(vprocg, sizeof(struct vprocg));
>  	vip->v_procg = vprocg;
>  
> -	vcpu = malloc(sizeof(struct vcpu), M_VCPU, M_NOWAIT);
> +	vcpu = malloc(sizeof(struct vcpu), M_VCPU, M_NOWAIT | M_ZERO);
>  	if (vcpu == NULL)
>  		panic ("vi_alloc: malloc failed for vcpu \"%s\"\n", name);
> -	bzero (vcpu, sizeof(struct vcpu));
>  	vip->v_cpu = vcpu;
>  
>  	/* Some initialization stuff... */
> @@ -487,12 +481,9 @@
>  
>  	CURVNET_SET_QUIET(vnet);
>  
> -	/*
> -	 * Initialize / attach module instances.
> -	 */
> -	TAILQ_FOREACH(vml, &vnet_modlink_head, mod_le)
> -		if (vml->modinfo->i_attach != NULL)
> -			vml->modinfo->i_attach(vml->iarg);
> +	/* Initialize / attach module instances. */
> +	TAILQ_FOREACH(vml, &vnet_modlink_head, vml_mod_le)
> +		vnet_mod_constructor(vml);
>  
>  	CURVNET_RESTORE();
>  
> @@ -553,9 +544,8 @@
>  	 * Detach / free per-module state instances.
>  	 */
>  	TAILQ_FOREACH_REVERSE(vml, &vnet_modlink_head,
> -			      vnet_modlink_head, mod_le)
> -		if (vml->modinfo->i_detach)
> -			vml->modinfo->i_detach(vml->iarg);
> +			      vnet_modlink_head, vml_mod_le)
> +		vnet_mod_destructor(vml);
>  
>  #if 0
>  	free((caddr_t)vnet->ifnet_addrs, M_IFADDR);
> @@ -578,7 +568,42 @@
>  	free(vip, M_VIMAGE);
>  }
>  
> +static int vnet_mod_constructor(vml)
> +struct vnet_modlink *vml;
> +{
> +	const struct vnet_modinfo *vmi = vml->vml_modinfo;
>  
> +	if (vml->vml_modinfo->vmi_struct_size) {
> +		void *mem = malloc(vmi->vmi_struct_size, M_VNET, M_NOWAIT);
> +		if (mem == NULL) /* XXX should return error, not panic */
> +			panic("vi_alloc: malloc for %s\n", vmi->vmi_name);
> +		bzero(mem, vmi->vmi_struct_size);
> +		curvnet->mod_data[vmi->vmi_id] = mem;
> +	}
> +
> +	if (vml->vml_modinfo->vmi_iattach != NULL)
> +		vml->vml_modinfo->vmi_iattach(vml->vml_iarg);
> +
> +	return 0;
> +}
> +
> +static int vnet_mod_destructor(vml)
> +struct vnet_modlink *vml;
> +{
> +		if (vml->vml_modinfo->vmi_idetach)
> +			vml->vml_modinfo->vmi_idetach(vml->vml_iarg);
> +		if (vml->vml_modinfo->vmi_struct_size) {
> +			if (curvnet->mod_data[vml->vml_modinfo->vmi_id] == NULL)
> +				panic("vi_destroy: %s\n",
> +				    vml->vml_modinfo->vmi_name);
> +			free(curvnet->mod_data[vml->vml_modinfo->vmi_id],
> +			    M_VNET);
> +			curvnet->mod_data[vml->vml_modinfo->vmi_id] = NULL;
> +		}
> +
> +	return 0;
> +}
> +
>  static void
>  vi_init(void *unused)
>  {
> @@ -621,19 +646,20 @@
>  	if (arg)
>  		db_printf(" %p", arg);
>  	else
> -		db_printf("        0x0");
> +		db_printf("          0");
>  }
>  
>  DB_SHOW_COMMAND(vnets, db_show_vnets)
>  {
> -	db_printf("      vnet ifcs socks");
> -	db_printf("        net       inet      inet6   netgraph\n");
> +	db_printf("      vnet ifs socks");
> +	db_printf("        net       inet      inet6      ipsec   netgraph\n");
>  	VNET_ITERLOOP_BEGIN_QUIET();
> -		db_printf("%p %4d %5d",
> +		db_printf("%p %3d %5d",
>  		    vnet_iter, vnet_iter->ifccnt, vnet_iter->sockcnt);
>  		db_vnet_ptr(vnet_iter->mod_data[VNET_MOD_NET]);
>  		db_vnet_ptr(vnet_iter->mod_data[VNET_MOD_INET]);
>  		db_vnet_ptr(vnet_iter->mod_data[VNET_MOD_INET6]);
> +		db_vnet_ptr(vnet_iter->mod_data[VNET_MOD_IPSEC]);
>  		db_vnet_ptr(vnet_iter->mod_data[VNET_MOD_NETGRAPH]);
>  		db_printf("\n");
>  	VNET_ITERLOOP_END();
> 
> ==== //depot/projects/vimage/src/sys/kern/uipc_domain.c#8 (text+ko) ====
> 
> @@ -67,9 +67,9 @@
>  SYSINIT(domainfin, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST, domainfinalize,
>      NULL)
>  
> -static int net_init_domain(void *);
> +static vnet_attach_fn net_init_domain;
>  #ifdef VIMAGE
> -static int net_detach_domain(void *);
> +static vnet_detach_fn net_detach_domain;
>  #endif
>  
>  static struct callout pffast_callout;
> @@ -108,14 +108,7 @@
>  	.pru_sopoll =		pru_sopoll_notsupp,
>  };
>  
> -#ifdef VIMAGE
> -static struct vnet_modinfo vnet_domain_modinfo = {
> -	.id		= VNET_MOD_DOMAIN,
> -	.name		= "domain",
> -	.i_attach	= net_init_domain,
> -	.i_detach	= net_detach_domain
> -};      
> -#endif
> +VNET_MOD_DECLARE_STATELESS(DOMAIN, domain, net_init_domain, net_detach_domain)
>  
>  static void
>  protosw_init(struct protosw *pr)
> @@ -148,9 +141,9 @@
>   * Initialize a domain instance.
>   */
>  static int
> -net_init_domain(void *arg)
> +net_init_domain(const void *arg)
>  {
> -	struct domain *dp = arg;
> +	const struct domain *dp = arg;
>  	struct protosw *pr;
>  
>  	if (dp->dom_init)
> @@ -172,9 +165,9 @@
>   * Detach / free a domain instance.
>   */
>  static int
> -net_detach_domain(void *arg)
> +net_detach_domain(const void *arg)
>  {
> -	struct domain *dp = arg;
> +	const struct domain *dp = arg;
>  	struct protosw *pr;
>  
>  	if (dp->dom_destroy)
> 
> ==== //depot/projects/vimage/src/sys/net/if.c#17 (text+ko) ====
> 
> @@ -137,9 +137,9 @@
>  extern void	nd6_setmtu(struct ifnet *);
>  #endif
>  
> -static int	vnet_net_iattach(void *);
> +static int	vnet_net_iattach(const void *);
>  #ifdef VIMAGE
> -static int	vnet_net_idetach(void *);
> +static int	vnet_net_idetach(const void *);
>  #endif
>  
>  int	ifqmaxlen = IFQ_MAXLEN;
> @@ -163,8 +163,6 @@
>      { 1, NULL, filt_netdetach, filt_netdev };
>  
>  #ifdef VIMAGE
> -struct vnet_net vnet_net_0;
> -
>  static struct vnet_symmap vnet_net_symmap[] = {
>  	VNET_SYMMAP(net, ifnet),
>  	VNET_SYMMAP(net, rt_tables),
> @@ -173,15 +171,7 @@
>  	VNET_SYMMAP_END
>  };
>  
> -static struct vnet_modinfo vnet_net_modinfo = {
> -	.id		= VNET_MOD_NET,
> -	.name		= "net",
> -	.symmap		= vnet_net_symmap,
> -	.i_attach	= vnet_net_iattach,
> -	.i_detach	= vnet_net_idetach
> -};
> -
> -MALLOC_DEFINE(M_NET, "net", "NET instance");
> +VNET_MOD_DECLARE(NET, net, vnet_net_symmap, vnet_net_iattach, vnet_net_idetach)
>  #endif
>  
>  /*
> @@ -348,23 +338,10 @@
>  
>  static int
>  vnet_net_iattach(unused)
> -	void *unused;
> +	const void *unused;
>  {
> -#ifdef VIMAGE
> -	struct vnet_net *vnet_net;
> +	INIT_VNET_NET(curvnet);
>  
> -	if (IS_VNET_0(curvnet)) {
> -		vnet_net = &vnet_net_0;
> -	} else {
> -		vnet_net = malloc(sizeof(struct vnet_net),
> -				  M_NET, M_NOWAIT | M_ZERO);
> -		if (vnet_net == NULL)
> -			panic("couldn't allocate memory for vnet_net");
> -	}
> -	curvnet->mod_data[vnet_net_modinfo.id] = vnet_net;
> -	vnet_net->parent_vnet = curvnet;
> -#endif
> -
>  	TAILQ_INIT(&V_ifnet);
>  	TAILQ_INIT(&V_ifg_head);
>  	knlist_init(&V_ifklist, NULL, NULL, NULL, NULL);
> @@ -377,7 +354,7 @@
>  #ifdef VIMAGE
>  static int
>  vnet_net_idetach(unused)
> -	void *unused;
> +	const void *unused;
>  {
>  	INIT_VNET_NET(curvnet);
>  
> @@ -389,9 +366,6 @@
>  
>  	free((caddr_t)V_ifindex_table, M_IFNET);
>  
> -	curvnet->mod_data[vnet_net_modinfo.id] = NULL;
> -	free((caddr_t)vnet_net, M_NET);
> -
>  	return 0;
>  }
>  #endif
> 
> ==== //depot/projects/vimage/src/sys/net/if_gif.c#7 (text+ko) ====
> 
> @@ -107,8 +107,7 @@
>  static void	gif_start(struct ifnet *);
>  static int	gif_clone_create(struct if_clone *, int, caddr_t);
>  static void	gif_clone_destroy(struct ifnet *);
> -static int	vnet_gif_iattach(void *);
> -static int	vnet_gif_idetach(void *);
> +static int	vnet_gif_iattach(const void *);
>  
>  IFC_SIMPLE_DECLARE(gif, 0);
>  
> @@ -145,14 +144,7 @@
>  SYSCTL_V_INT(V_NET, vnet_gif, _net_link_gif, OID_AUTO, parallel_tunnels,
>  	CTLFLAG_RW, parallel_tunnels, 0, "Allow parallel tunnels?");
>  
> -#ifdef VIMAGE
> -static struct vnet_modinfo vnet_gif_modinfo = {
> -	.id		= VNET_MOD_GIF,
> -	.name		= "gif",
> -	.i_attach	= vnet_gif_iattach,
> -	.i_detach	= vnet_gif_idetach
> -};
> -#endif
> +VNET_MOD_DECLARE(GIF, gif, NULL, vnet_gif_iattach, NULL)
>  
>  static int
>  gif_clone_create(ifc, unit, params)
> @@ -238,17 +230,9 @@
>  
>  static int
>  vnet_gif_iattach(unused)
> -	void *unused;
> +	const void *unused;
>  {
> -#ifdef VIMAGE
> -	struct vnet_gif *vnet_gif;
> -
> -	vnet_gif = malloc(sizeof(*vnet_gif), M_GIF, M_NOWAIT | M_ZERO);
> -	if (vnet_gif == NULL) 
> -		panic("couldn't allocate memory for vnet_gif");
> -	curvnet->mod_data[vnet_gif_modinfo.id] = vnet_gif;
> -	vnet_gif->parent_vnet = curvnet;
> -#endif
> +	INIT_VNET_GIF(curvnet);
>  
>  	LIST_INIT(&V_gif_softc_list);
>  	V_max_gif_nesting = MAX_GIF_NEST;
> @@ -265,20 +249,6 @@
>  }
>  
>  static int
> -vnet_gif_idetach(unused)
> -	void *unused;
> -{
> -	INIT_VNET_GIF(curvnet);
> -
> -#ifdef VIMAGE
> -	curvnet->mod_data[vnet_gif_modinfo.id] = NULL;
> -	free(vnet_gif, M_GIF);
> -#endif
> -
> -	return 0;
> -}
> -
> -static int
>  gifmodevent(mod, type, data)
>  	module_t mod;
>  	int type;
> @@ -299,8 +269,6 @@
>  		if_clone_detach(&gif_cloner);
>  #ifdef VIMAGE
>  		vnet_mod_deregister(&vnet_gif_modinfo);
> -#else
> -		vnet_gif_idetach(NULL);
>  #endif
>  		mtx_destroy(&gif_mtx);
>  		break;
> 
> ==== //depot/projects/vimage/src/sys/net/if_gif.h#4 (text+ko) ====
> 
> @@ -119,8 +119,6 @@
>  #define VNET_GIF(sym)		VSYM(vnet_gif, sym)
>  
>  struct vnet_gif {
> -	struct  vnet *parent_vnet;
> -
>  	LIST_HEAD(, gif_softc) _gif_softc_list;
>  	int	_max_gif_nesting;
>  	int	_parallel_tunnels;
> 
> ==== //depot/projects/vimage/src/sys/net/if_loop.c#15 (text+ko) ====
> 
> @@ -106,9 +106,9 @@
>  		    struct sockaddr *dst, struct rtentry *rt);
>  static int	lo_clone_create(struct if_clone *, int, caddr_t);
>  static void	lo_clone_destroy(struct ifnet *);
> -static int	vnet_loif_iattach(void *);
> +static int	vnet_loif_iattach(const void *);
>  #ifdef VIMAGE
> -static int	vnet_loif_idetach(void *);
> +static int	vnet_loif_idetach(const void *);
>  #endif
>  
>  #ifndef VIMAGE
> @@ -180,17 +180,10 @@
>  	return (0);
>  }
>  
> -#ifdef VIMAGE
> -static struct vnet_modinfo vnet_loif_modinfo = {
> -	.id		= VNET_MOD_LOIF,
> -	.name		= "loif",
> -	.i_attach	= vnet_loif_iattach,
> -	.i_detach	= vnet_loif_idetach
> -};
> -#endif
> +VNET_MOD_DECLARE_STATELESS(LOIF, loif, vnet_loif_iattach, vnet_loif_idetach)
>  
>  static int vnet_loif_iattach(unused)
> -	void *unused;
> +	const void *unused;
>  {
>  	INIT_VNET_NET(curvnet);
>  
> @@ -208,7 +201,7 @@
>  
>  #ifdef VIMAGE
>  static int vnet_loif_idetach(unused)
> -	void *unused;
> +	const void *unused;
>  {
>  	INIT_VNET_NET(curvnet);
>  	struct lo_softc *sc, *nsc;
> 
> ==== //depot/projects/vimage/src/sys/net/route.c#9 (text+ko) ====
> 
> @@ -60,9 +60,9 @@
>  
>  static void rt_maskedcopy(struct sockaddr *,
>  	    struct sockaddr *, struct sockaddr *);
> -static int rtable_init(void *);
> +static int rtable_init(const void *);
>  #ifdef VIMAGE
> -static int rtable_idetach(void *);
> +static int rtable_idetach(const void *);
>  #endif
>  
>  /* compare two sockaddr structures */
> @@ -80,18 +80,11 @@
>   */
>  #define RNTORT(p)	((struct rtentry *)(p))
>  
> -#ifdef VIMAGE
> -static struct vnet_modinfo vnet_rtable_modinfo = {
> -	.id		= VNET_MOD_RTABLE,
> -	.name		= "rtable",
> -	.i_attach	= rtable_init,
> -	.i_detach	= rtable_idetach
> -};
> -#endif
> +VNET_MOD_DECLARE_STATELESS(RTABLE, rtable, rtable_init, rtable_idetach)
>  
>  static int
>  rtable_init(unused)
> -	void *unused;
> +	const void *unused;
>  {
>  	INIT_VNET_NET(curvnet);
>  
> @@ -106,7 +99,7 @@
>  #ifdef VIMAGE
>  static int
>  rtable_idetach(unused)
> -	void *unused;
> +	const void *unused;
>  {
>  	INIT_VNET_NET(curvnet);
>  
> 
> ==== //depot/projects/vimage/src/sys/net/vnet.h#7 (text+ko) ====
> 
> @@ -45,8 +45,6 @@
>  #include <net/raw_cb.h>
>  
>  struct vnet_net {
> -	struct	vnet *parent_vnet;
> -
>  	int	_if_index;
>  	struct	ifindex_entry *_ifindex_table;
>  	struct	ifnethead _ifnet;
> 
> ==== //depot/projects/vimage/src/sys/netgraph/ng_base.c#11 (text+ko) ====
> 
> @@ -248,17 +248,9 @@
>  #define	NG_WORKLIST_UNLOCK()			\
>  	mtx_unlock(&ng_worklist_mtx)
>  
> -static int	vnet_netgraph_iattach(void);
> +static vnet_attach_fn vnet_netgraph_iattach;
>  
> -#ifdef VIMAGE
> -struct vnet_netgraph vnet_netgraph_0;
> -
> -static struct vnet_modinfo vnet_netgraph_modinfo = {
> -	.id		= VNET_MOD_NETGRAPH,
> -	.name		= "netgraph",
> -	.i_attach	= vnet_netgraph_iattach,
> -};
> -#endif
> +VNET_MOD_DECLARE(NETGRAPH, netgraph, NULL, vnet_netgraph_iattach, NULL)
>  
>  #ifdef NETGRAPH_DEBUG /*----------------------------------------------*/
>  /*
> @@ -3196,7 +3188,7 @@
>  #ifdef VIMAGE
>  		vnet_mod_register(&vnet_netgraph_modinfo);
>  #else
> -		vnet_netgraph_iattach();
> +		vnet_netgraph_iattach(NULL);
>  #endif
>  		break;
>  	case MOD_UNLOAD:
> @@ -3210,22 +3202,9 @@
>  	return (error);
>  }
>  
> -static int vnet_netgraph_iattach(void)
> +static int vnet_netgraph_iattach(const void *unused)
>  {
> -#ifdef VIMAGE
> -	struct vnet_netgraph *vnet_netgraph;
> - 
> -	if (IS_VNET_0(curvnet)) {
> -		vnet_netgraph = &vnet_netgraph_0;
> -	} else {
> -		vnet_netgraph = malloc(sizeof(struct vnet_netgraph),
> -		 		       M_NETGRAPH, M_NOWAIT | M_ZERO);
> -		if (vnet_netgraph == NULL)
> -			panic("couldn't allocate memory for vnet_netgraph");
> -	}
> -	curvnet->mod_data[vnet_netgraph_modinfo.id] = vnet_netgraph;
> -	vnet_netgraph->parent_vnet = curvnet;
> -#endif
> +	INIT_VNET_NETGRAPH(curvnet);
>  
>  	LIST_INIT(&V_ng_nodelist);
>  
> 
> ==== //depot/projects/vimage/src/sys/netinet/if_ether.c#12 (text+ko) ====
> 
> @@ -119,7 +119,7 @@
>  	"Enable proxy ARP for all suitable requests");
>  
>  static void	arp_init(void);
> -static int	arp_iattach(void *);
> +static int	arp_iattach(const void *);
>  static void	arp_rtrequest(int, struct rtentry *, struct rt_addrinfo *);
>  static void	arprequest(struct ifnet *,
>  			struct in_addr *, struct in_addr *, u_char *);
> @@ -131,14 +131,7 @@
>  static void	in_arpinput(struct mbuf *);
>  #endif
>  
> -#ifdef VIMAGE
> -static struct vnet_modinfo vnet_arp_modinfo = {
> -	.id             = VNET_MOD_ARP,
> -	.name           = "arp",
> -	.i_attach       = arp_iattach,
> -	.i_detach       = NULL,
> -};
> -#endif
> +VNET_MOD_DECLARE_STATELESS(ARP, arp, arp_iattach, NULL)
>  
>  /*
>   * Timeout routine.
> @@ -982,7 +975,7 @@
>  
>  static int
>  arp_iattach(unused)
> -	void *unused;
> +	const void *unused;
>  {
>  	INIT_VNET_INET(curvnet);
>  
> 
> ==== //depot/projects/vimage/src/sys/netinet/in_proto.c#7 (text+ko) ====
> 
> @@ -106,9 +106,6 @@
>  	.pr_domain =		&inetdomain,
>  	.pr_protocol =		IPPROTO_IP,
>  	.pr_init =		ip_init,
> -#ifdef VIMAGE
> -	.pr_destroy =		ip_detach,
> -#endif
>  	.pr_slowtimo =		ip_slowtimo,
>  	.pr_drain =		ip_drain,
>  	.pr_usrreqs =		&nousrreqs
> 
> ==== //depot/projects/vimage/src/sys/netinet/ip_fw.h#7 (text+ko) ====
> 
> @@ -654,8 +654,6 @@
>   */
>  #ifdef VIMAGE
>  struct vnet_ipfw {
> -	struct	vnet *parent_vnet;
> -
>  	int	_fw_one_pass;
>  	int	_fw_enable;
>  	int	_fw6_enable;
> 
> ==== //depot/projects/vimage/src/sys/netinet/ip_fw2.c#19 (text+ko) ====
> 
> @@ -112,17 +112,10 @@
>  
>  #include <security/mac/mac_framework.h>
>  
> -static int	vnet_ipfw_iattach(void);
> -static int	vnet_ipfw_idetach(void);
> +static int	vnet_ipfw_iattach(const void *);
> +static int	vnet_ipfw_idetach(const void *);
>  
> -#ifdef VIMAGE
> -static struct vnet_modinfo vnet_ipfw_modinfo = {
> -	.id		= VNET_MOD_IPFW,
> -	.name		= "ipfw",
> -	.i_attach	= vnet_ipfw_iattach,
> -	.i_detach	= vnet_ipfw_idetach,
> -};
> -#endif
> +VNET_MOD_DECLARE(IPFW, ipfw, NULL, vnet_ipfw_iattach, vnet_ipfw_idetach)
>  
>  /*
>   * set_disable contains one bit per set value (0..31).
> @@ -4955,19 +4948,11 @@
>  		      ipfw_tick, arg);
>  }
>  
> -static int vnet_ipfw_iattach(void)
> +static int vnet_ipfw_iattach(const void *unused)
>  {
> +	INIT_VNET_IPFW(curvnet);
>  	struct ip_fw default_rule;
>  	int error;
> -#ifdef VIMAGE
> -	struct vnet_ipfw *vnet_ipfw;
> -	
> -	vnet_ipfw = malloc(sizeof(*vnet_ipfw), M_IPFW, M_NOWAIT | M_ZERO);
> -	if (vnet_ipfw == NULL)
> -		panic("couldn't allocate memory for vnet_ipfw");
> -	curvnet->mod_data[vnet_ipfw_modinfo.id] = vnet_ipfw;
> -	vnet_ipfw->parent_vnet = curvnet;
> -#endif
>  
>  	V_fw_debug = 1;
>  	V_autoinc_step = 100; /* bounded to 1..1000 in add_rule() */
> @@ -5057,7 +5042,7 @@
>  #ifdef VIMAGE
>  	vnet_mod_register(&vnet_ipfw_modinfo);
>  #else
> -	vnet_ipfw_iattach();
> +	vnet_ipfw_iattach(NULL);
>  #endif
>  
>  	printf("ipfw2 "
> @@ -5104,7 +5089,7 @@
>  	return (0);
>  }
>  
> -static int vnet_ipfw_idetach(void)
> +static int vnet_ipfw_idetach(const void *unused)
>  {
>  	INIT_VNET_IPFW(curvnet);
>  	struct ip_fw *reap;
> @@ -5131,11 +5116,6 @@
>  		reap_rules(reap);
>  	IPFW_LOCK_DESTROY(&V_layer3_chain);
>  
> -#ifdef VIMAGE
> -	curvnet->mod_data[vnet_ipfw_modinfo.id] = NULL;
> -	free(vnet_ipfw, M_IPFW);
> -#endif
> -
>  	return 0;
>  }
>  
> @@ -5148,7 +5128,7 @@
>  #ifdef VIMAGE
>  	vnet_mod_deregister(&vnet_ipfw_modinfo);
>  #else
> -	vnet_ipfw_idetach();
> +	vnet_ipfw_idetach(NULL);
>  #endif
>  
>  #ifdef IPFIREWALL_NAT
> 
> ==== //depot/projects/vimage/src/sys/netinet/ip_input.c#19 (text+ko) ====
> 
> @@ -213,22 +213,17 @@
>  static void	ip_freef(struct ipqhead *, struct ipq *);
>  
>  #ifdef VIMAGE
> -static struct vnet_inet vnet_inet_0;
> +static void vnet_inet_register(void);
>  
> -struct vnet_symmap vnet_inet_symmap[] = {
> -	VNET_SYMMAP_END
> -};
> +VNET_MOD_DECLARE(INET, inet, NULL, NULL, NULL)
>  
> -static struct vnet_modinfo vnet_inet_modinfo = {
> -	.id		= VNET_MOD_INET,
> -	.name		= "inet",
> -	.symmap		= vnet_inet_symmap,
> -	.i_attach	= NULL,
> -	.i_detach	= NULL,
> -};
> +static void vnet_inet_register()
> +{
> +	vnet_mod_register(&vnet_inet_modinfo);
> +}
>  
> -MALLOC_DEFINE(M_INET, "inet", "INET domain instance");
> -#endif /* VIMAGE */
> +SYSINIT(inet, SI_SUB_PROTO_BEGIN, SI_ORDER_FIRST, vnet_inet_register, 0);
> +#endif
>  
>  /*
>   * IP initialization: fill in IP protocol switch table.
> @@ -237,25 +232,10 @@
>  void
>  ip_init(void)
>  {
> +	INIT_VNET_INET(curvnet);
>  	struct protosw *pr;
>  	int i;
>  
> -#ifdef VIMAGE
> -	struct vnet_inet *vnet_inet;
> -
> -	if (IS_VNET_0(curvnet)) {
> -		vnet_mod_register(&vnet_inet_modinfo);
> -		vnet_inet = &vnet_inet_0;
> -	} else {
> -		vnet_inet = malloc(sizeof(struct vnet_inet),
> -				   M_INET, M_NOWAIT | M_ZERO);
> -		if (vnet_inet == NULL)
> -			panic("couldn't allocate memory for vnet_inet");
> -	}
> -	curvnet->mod_data[vnet_inet_modinfo.id] = vnet_inet;
> -	vnet_inet->parent_vnet = curvnet;
> -#endif
> -
>  	TAILQ_INIT(&V_in_ifaddrhead);
>  	V_in_ifaddrhashtbl = hashinit(INADDR_NHASH, M_IFADDR,
>  				      &V_in_ifaddrhmask);
> @@ -347,17 +327,6 @@
>  	netisr_register(NETISR_IP, ip_input, &ipintrq, NETISR_MPSAFE);
>  }
>  
> -#ifdef VIMAGE
> -void
> -ip_detach()
> -{
> -	INIT_VNET_INET(curvnet);
> -
> -	free(vnet_inet, M_INET);
> -	curvnet->mod_data[vnet_inet_modinfo.id] = NULL;
> -}
> -#endif
> -
>  void
>  ip_fini(void *xtp)
>  {
> 
> ==== //depot/projects/vimage/src/sys/netinet/ip_var.h#7 (text+ko) ====
> 
> @@ -201,9 +201,6 @@
>  	    u_long if_hwassist_flags, int sw_csum);
>  void	ip_forward(struct mbuf *m, int srcrt);
>  void	ip_init(void);
> -#ifdef VIMAGE
> -void	ip_detach(void);
> -#endif
>  extern int
>  	(*ip_mforward)(struct ip *, struct ifnet *, struct mbuf *,
>  	    struct ip_moptions *);
> 
> ==== //depot/projects/vimage/src/sys/netinet/tcp_subr.c#24 (text+ko) ====
> 
> 
> ==== //depot/projects/vimage/src/sys/netinet/tcp_syncache.h#6 (text+ko) ====
> 
> 
> ==== //depot/projects/vimage/src/sys/netinet/vinet.h#18 (text+ko) ====
> 
> @@ -55,8 +55,6 @@
>  #include <netinet/udp_var.h>
>  
>  struct vnet_inet {
> -	struct	vnet *parent_vnet;
> -
>  	struct	in_ifaddrhashhead *_in_ifaddrhashtbl;
>  	struct	in_ifaddrhead _in_ifaddrhead;
>  	u_long	_in_ifaddrhmask;
> 
> ==== //depot/projects/vimage/src/sys/netinet6/ip6_input.c#16 (text+ko) ====
> 
> @@ -146,21 +146,16 @@
>  #endif
>  
>  #ifdef VIMAGE
> -static struct vnet_inet6 vnet_inet6_0;
> +static void vnet_inet6_register(void);
> + 
> +VNET_MOD_DECLARE(INET6, inet6, NULL, NULL, NULL)
> + 
> +static void vnet_inet6_register()
> +{
> +        vnet_mod_register(&vnet_inet6_modinfo);
> +}
>   
> -struct vnet_symmap vnet_inet6_symmap[] = {
> -	VNET_SYMMAP_END
> -};
> -
> -static struct vnet_modinfo vnet_inet6_modinfo = {
> -	.id		= VNET_MOD_INET6,
> -	.name		= "inet6",
> -	.symmap		= vnet_inet6_symmap,
> -	.i_attach	= NULL,
> -	.i_detach	= NULL,
> 
>>>> TRUNCATED FOR MAIL (1000 lines) <<<



More information about the p4-projects mailing list