Date: Mon, 30 Jul 2007 10:24:00 -0700 From: Julian Elischer <julian@elischer.org> To: Marko Zec <zec@FreeBSD.org> Cc: Perforce Change Reviews <perforce@FreeBSD.org> Subject: Re: PERFORCE change 124354 for review Message-ID: <46AE1EB0.1020909@elischer.org> In-Reply-To: <200707301337.l6UDbq0H044330@repoman.freebsd.org> References: <200707301337.l6UDbq0H044330@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Marko Zec wrote: > http://perforce.freebsd.org/chv.cgi?CH=124354 > > Change 124354 by zec@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) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46AE1EB0.1020909>