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