diff options
author | thompsa <thompsa@FreeBSD.org> | 2006-06-01 00:41:07 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2006-06-01 00:41:07 +0000 |
commit | f6293051c9bcfc333ae61c575230e2f23c6390d3 (patch) | |
tree | eacc21ad5d48ab5f45bf67df8e6eb129d05ff383 | |
parent | 7bd2588031d7ff3f099e21244f9f1750a0f2d495 (diff) | |
download | FreeBSD-src-f6293051c9bcfc333ae61c575230e2f23c6390d3.zip FreeBSD-src-f6293051c9bcfc333ae61c575230e2f23c6390d3.tar.gz |
Announce all interfaces to devd on attach/detach. This adds a new devctl
notification so all interfaces including pseudo are reported. When netif
creates the clones at startup devctl_disable has not been turned off yet so the
interfaces will not be initialised twice, enforce this by adding an explicit
order between rc.d/netif and rc.d/devd.
This change allows actions to taken in userland when an interface is cloned
and the pseudo interface will be automatically configured if a ifconfig_<int>=""
line exists in rc.conf.
Reviewed by: brooks
No objections on: net
-rw-r--r-- | etc/devd.conf | 18 | ||||
-rw-r--r-- | etc/rc.d/devd | 4 | ||||
-rw-r--r-- | sys/net/if.c | 2 |
3 files changed, 14 insertions, 10 deletions
diff --git a/etc/devd.conf b/etc/devd.conf index a8d7716..15adefa 100644 --- a/etc/devd.conf +++ b/etc/devd.conf @@ -28,17 +28,19 @@ options { # override these general rules. # -# For ethernet like devices start configuring the interface. Due to -# a historical accident, this script is called pccard_ether. +# Configure the interface on attach. Due to a historical accident, this +# script is called pccard_ether. # -attach 0 { - media-type "ethernet"; - action "/etc/pccard_ether $device-name start"; +notify 0 { + match "system" "IFNET"; + match "type" "ATTACH"; + action "/etc/pccard_ether $subsystem start"; }; -detach 0 { - media-type "ethernet"; - action "/etc/pccard_ether $device-name stop"; +notify 0 { + match "system" "IFNET"; + match "type" "DETACH"; + action "/etc/pccard_ether $subsystem stop"; }; # diff --git a/etc/rc.d/devd b/etc/rc.d/devd index 50c8a17..f025f9a 100644 --- a/etc/rc.d/devd +++ b/etc/rc.d/devd @@ -4,8 +4,8 @@ # # PROVIDE: devd -# REQUIRE: NETWORKING -# BEFORE: mountcritremote +# REQUIRE: netif +# BEFORE: NETWORKING mountcritremote # KEYWORD: nojail . /etc/rc.subr diff --git a/sys/net/if.c b/sys/net/if.c index 03b21ca..a3c02bb 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -505,6 +505,7 @@ if_attach(struct ifnet *ifp) if_attachdomain1(ifp); EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp); + devctl_notify("IFNET", ifp->if_xname, "ATTACH", NULL); /* Announce the interface. */ rt_ifannouncemsg(ifp, IFAN_ARRIVAL); @@ -682,6 +683,7 @@ if_detach(struct ifnet *ifp) /* Announce that the interface is gone. */ rt_ifannouncemsg(ifp, IFAN_DEPARTURE); EVENTHANDLER_INVOKE(ifnet_departure_event, ifp); + devctl_notify("IFNET", ifp->if_xname, "DETACH", NULL); IF_AFDATA_LOCK(ifp); for (dp = domains; dp; dp = dp->dom_next) { |