Date: Mon, 29 Jun 2009 19:46:29 +0000 (UTC) From: Brooks Davis <brooks@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r195175 - in head: . sys/net sys/sys Message-ID: <200906291946.n5TJkTRq057579@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: brooks Date: Mon Jun 29 19:46:29 2009 New Revision: 195175 URL: http://svn.freebsd.org/changeset/base/195175 Log: Remove support for the /dev/net/* per-interface devices. They serve little purpose and are unused in the base system. The IOCTL functionality is entirely duplicated and routing sockets provide a richer interface than the kqueue functionality. Further, it is not practical for these devices to be made sensible in the face of VIMAGE. Bump __FreeBSD_version on the off chance that there is any code out there that actually uses this stuff. Reviewed by: rwatson Discussed with: bz, zec Approved by: re@ (kensmith) Modified: head/UPDATING head/sys/net/if.c head/sys/net/if_var.h head/sys/net/vnet.h head/sys/sys/param.h Modified: head/UPDATING ============================================================================== --- head/UPDATING Mon Jun 29 19:20:21 2009 (r195174) +++ head/UPDATING Mon Jun 29 19:46:29 2009 (r195175) @@ -22,6 +22,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 8. to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20090629: + The network interface device nodes at /dev/net/<interface> have + been removed. All ioctl operations can be performed the normal + way using routing sockets. The kqueue functionality can + generally be replaced with routing sockets. + 20090628: The documentation from the FreeBSD Documentation Project (Handbook, FAQ, etc.) is now installed via packages by Modified: head/sys/net/if.c ============================================================================== --- head/sys/net/if.c Mon Jun 29 19:20:21 2009 (r195174) +++ head/sys/net/if.c Mon Jun 29 19:46:29 2009 (r195175) @@ -100,6 +100,10 @@ struct vnet_net vnet_net_0; #endif #endif +struct ifindex_entry { + struct ifnet *ife_ifnet; +}; + static int slowtimo_started; SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW, 0, "Link layers"); @@ -163,9 +167,8 @@ struct ifnethead ifnet; /* depend on sta struct ifgrouphead ifg_head; int if_index; static int if_indexlim; -/* Table of ifnet/cdev by index. Locked with ifnet_lock. */ +/* Table of ifnet by index. Locked with ifnet_lock. */ static struct ifindex_entry *ifindex_table; -static struct knlist ifklist; #endif int ifqmaxlen = IFQ_MAXLEN; @@ -173,12 +176,6 @@ struct rwlock ifnet_lock; static if_com_alloc_t *if_com_alloc[256]; static if_com_free_t *if_com_free[256]; -static void filt_netdetach(struct knote *kn); -static int filt_netdev(struct knote *kn, long hint); - -static struct filterops netdev_filtops = - { 1, NULL, filt_netdetach, filt_netdev }; - #ifndef VIMAGE_GLOBALS static struct vnet_symmap vnet_net_symmap[] = { VNET_SYMMAP(net, ifnet), @@ -267,150 +264,6 @@ ifaddr_byindex(u_short idx) return (ifa); } -struct cdev * -ifdev_byindex(u_short idx) -{ - INIT_VNET_NET(curvnet); - struct cdev *cdev; - - IFNET_RLOCK(); - cdev = V_ifindex_table[idx].ife_dev; - IFNET_RUNLOCK(); - return (cdev); -} - -static void -ifdev_setbyindex(u_short idx, struct cdev *cdev) -{ - INIT_VNET_NET(curvnet); - - IFNET_WLOCK(); - V_ifindex_table[idx].ife_dev = cdev; - IFNET_WUNLOCK(); -} - -static d_open_t netopen; -static d_close_t netclose; -static d_ioctl_t netioctl; -static d_kqfilter_t netkqfilter; - -static struct cdevsw net_cdevsw = { - .d_version = D_VERSION, - .d_flags = D_NEEDGIANT, - .d_open = netopen, - .d_close = netclose, - .d_ioctl = netioctl, - .d_name = "net", - .d_kqfilter = netkqfilter, -}; - -static int -netopen(struct cdev *dev, int flag, int mode, struct thread *td) -{ - return (0); -} - -static int -netclose(struct cdev *dev, int flags, int fmt, struct thread *td) -{ - return (0); -} - -static int -netioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td) -{ - struct ifnet *ifp; - int error, idx; - - /* only support interface specific ioctls */ - if (IOCGROUP(cmd) != 'i') - return (EOPNOTSUPP); - idx = dev2unit(dev); - if (idx == 0) { - /* - * special network device, not interface. - */ - if (cmd == SIOCGIFCONF) - return (ifconf(cmd, data)); /* XXX remove cmd */ -#ifdef __amd64__ - if (cmd == SIOCGIFCONF32) - return (ifconf(cmd, data)); /* XXX remove cmd */ -#endif - return (EOPNOTSUPP); - } - - ifp = ifnet_byindex(idx); - if (ifp == NULL) - return (ENXIO); - - error = ifhwioctl(cmd, ifp, data, td); - if (error == ENOIOCTL) - error = EOPNOTSUPP; - return (error); -} - -static int -netkqfilter(struct cdev *dev, struct knote *kn) -{ - INIT_VNET_NET(curvnet); - struct knlist *klist; - struct ifnet *ifp; - int idx; - - switch (kn->kn_filter) { - case EVFILT_NETDEV: - kn->kn_fop = &netdev_filtops; - break; - default: - return (EINVAL); - } - - idx = dev2unit(dev); - if (idx == 0) { - klist = &V_ifklist; - } else { - ifp = ifnet_byindex(idx); - if (ifp == NULL) - return (1); - klist = &ifp->if_klist; - } - - kn->kn_hook = (caddr_t)klist; - - knlist_add(klist, kn, 0); - - return (0); -} - -static void -filt_netdetach(struct knote *kn) -{ - struct knlist *klist = (struct knlist *)kn->kn_hook; - - knlist_remove(klist, kn, 0); -} - -static int -filt_netdev(struct knote *kn, long hint) -{ - struct knlist *klist = (struct knlist *)kn->kn_hook; - - /* - * Currently NOTE_EXIT is abused to indicate device detach. - */ - if (hint == NOTE_EXIT) { - kn->kn_data = NOTE_LINKINV; - kn->kn_flags |= (EV_EOF | EV_ONESHOT); - knlist_remove_inevent(klist, kn); - return (1); - } - if (hint != 0) - kn->kn_data = hint; /* current status */ - if (kn->kn_sfflags & hint) - kn->kn_fflags |= hint; - return (kn->kn_fflags != 0); -} - /* * Network interface utility routines. * @@ -430,8 +283,6 @@ if_init(void *dummy __unused) #endif IFNET_LOCK_INIT(); - ifdev_setbyindex(0, make_dev(&net_cdevsw, 0, UID_ROOT, GID_WHEEL, - 0600, "network")); if_clone_init(); } @@ -446,7 +297,6 @@ vnet_net_iattach(const void *unused __un TAILQ_INIT(&V_ifnet); TAILQ_INIT(&V_ifg_head); - knlist_init_mtx(&V_ifklist, NULL); if_grow(); /* create initial table */ return (0); @@ -460,7 +310,6 @@ vnet_net_idetach(const void *unused __un VNET_ASSERT(TAILQ_EMPTY(&V_ifnet)); VNET_ASSERT(TAILQ_EMPTY(&V_ifg_head)); - VNET_ASSERT(SLIST_EMPTY(&V_ifklist.kl_list)); free((caddr_t)V_ifindex_table, M_IFNET); @@ -549,7 +398,6 @@ if_alloc(u_char type) TAILQ_INIT(&ifp->if_prefixhead); TAILQ_INIT(&ifp->if_multiaddrs); TAILQ_INIT(&ifp->if_groups); - knlist_init_mtx(&ifp->if_klist, NULL); #ifdef MAC mac_ifnet_init(ifp); #endif @@ -591,9 +439,6 @@ if_free_internal(struct ifnet *ifp) #ifdef MAC mac_ifnet_destroy(ifp); #endif /* MAC */ - KNOTE_UNLOCKED(&ifp->if_klist, NOTE_EXIT); - knlist_clear(&ifp->if_klist, 0); - knlist_destroy(&ifp->if_klist); IF_AFDATA_DESTROY(ifp); IF_ADDR_LOCK_DESTROY(ifp); ifq_delete(&ifp->if_snd); @@ -734,14 +579,6 @@ if_attach_internal(struct ifnet *ifp, in mac_ifnet_create(ifp); #endif - if (IS_DEFAULT_VNET(curvnet)) { - ifdev_setbyindex(ifp->if_index, make_dev(&net_cdevsw, - ifp->if_index, UID_ROOT, GID_WHEEL, 0600, "%s/%s", - net_cdevsw.d_name, ifp->if_xname)); - make_dev_alias(ifdev_byindex(ifp->if_index), "%s%d", - net_cdevsw.d_name, ifp->if_index); - } - /* * Create a Link Level name for this device. */ @@ -1003,9 +840,6 @@ if_detach_internal(struct ifnet *ifp, in * Clean up all addresses. */ ifp->if_addr = NULL; - if (IS_DEFAULT_VNET(curvnet)) - destroy_dev(ifdev_byindex(ifp->if_index)); - ifdev_setbyindex(ifp->if_index, NULL); /* We can now free link ifaddr. */ if (!TAILQ_EMPTY(&ifp->if_addrhead)) { @@ -1905,7 +1739,6 @@ do_link_state_change(void *arg, int pend link = NOTE_LINKDOWN; else link = NOTE_LINKINV; - KNOTE_UNLOCKED(&ifp->if_klist, link); if (ifp->if_vlantrunk != NULL) (*vlan_link_state_p)(ifp, link); Modified: head/sys/net/if_var.h ============================================================================== --- head/sys/net/if_var.h Mon Jun 29 19:20:21 2009 (r195174) +++ head/sys/net/if_var.h Mon Jun 29 19:46:29 2009 (r195175) @@ -135,7 +135,6 @@ struct ifnet { * However, access to the AF_LINK address through this * field is deprecated. Use if_addr or ifaddr_byindex() instead. */ - struct knlist if_klist; /* events attached to this if */ int if_pcount; /* number of promiscuous listeners */ struct carp_if *if_carp; /* carp interface structure */ struct bpf_if *if_bpf; /* packet filter structure */ @@ -764,11 +763,6 @@ extern struct rwlock ifnet_lock; #define IFNET_RLOCK() rw_rlock(&ifnet_lock) #define IFNET_RUNLOCK() rw_runlock(&ifnet_lock) -struct ifindex_entry { - struct ifnet *ife_ifnet; - struct cdev *ife_dev; -}; - /* * Look up an ifnet given its index; the _ref variant also acquires a * reference that must be freed using if_rele(). It is almost always a bug @@ -784,7 +778,6 @@ struct ifnet *ifnet_byindex_ref(u_short * it to traverse the list of addresses associated to the interface. */ struct ifaddr *ifaddr_byindex(u_short idx); -struct cdev *ifdev_byindex(u_short idx); #ifdef VIMAGE_GLOBALS extern struct ifnethead ifnet; Modified: head/sys/net/vnet.h ============================================================================== --- head/sys/net/vnet.h Mon Jun 29 19:20:21 2009 (r195174) +++ head/sys/net/vnet.h Mon Jun 29 19:46:29 2009 (r195175) @@ -35,6 +35,8 @@ #include <net/if_var.h> +struct ifindex_entry; + struct vnet_net { int _if_index; struct ifindex_entry * _ifindex_table; @@ -42,7 +44,6 @@ struct vnet_net { struct ifgrouphead _ifg_head; int _if_indexlim; - struct knlist _ifklist; struct ifnet * _loif; struct if_clone * _lo_cloner; Modified: head/sys/sys/param.h ============================================================================== --- head/sys/sys/param.h Mon Jun 29 19:20:21 2009 (r195174) +++ head/sys/sys/param.h Mon Jun 29 19:46:29 2009 (r195175) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 800100 /* Master, propagated to newvers */ +#define __FreeBSD_version 800101 /* Master, propagated to newvers */ #ifndef LOCORE #include <sys/types.h>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906291946.n5TJkTRq057579>