/* * linux/kernel/vserver/network.c * * Virtual Server: Network Support * * Copyright (C) 2003-2004 Herbert Pötzl * * V0.01 broken out from vcontext V0.05 * V0.05 rlimit basic implementation * */ #include //#include //#include #include #include //#include #include //#include //#include #include //#include LIST_HEAD(ip_infos); spinlock_t iplist_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED; /* * struct ip_info allocation and deallocation */ static struct ip_info *alloc_ip_info(void) { struct ip_info *new = NULL; vxdprintk("alloc_ip_info()\n"); /* would this benefit from a slab cache? */ new = kmalloc(sizeof(struct ip_info), GFP_KERNEL); if (!new) return 0; memset (new, 0, sizeof(struct ip_info)); /* rest of init goes here */ vxdprintk("alloc_ip_info() = %p\n", new); return new; } // extern int ip_proc_destroy(struct ip_info *); void free_ip_info(struct ip_info *ipi) { vxdprintk("free_ip_info(%p)\n", ipi); // ip_proc_destroy(ipi); kfree(ipi); } struct ip_info *create_ip_info(void) { struct ip_info *new; vxdprintk("create_ip_info()\n"); if (!(new = alloc_ip_info())) return 0; spin_lock(&iplist_lock); /* new ip info */ atomic_set(&new->ip_refcount, 1); list_add(&new->ip_list, &ip_infos); // ip_proc_create(new); spin_unlock(&iplist_lock); return new; }