eventhandler: Implement ifnet_link_event
authorAaron LI <aly@aaronly.me>
Mon, 25 Jun 2018 09:04:41 +0000 (17:04 +0800)
committerAaron LI <aly@aaronly.me>
Wed, 8 Aug 2018 08:43:32 +0000 (16:43 +0800)
The "ifnet_link_event" is triggered by the change of the link state of
an interface.

Taken-from: FreeBSD

share/man/man9/EVENTHANDLER.9
sys/net/if.c
sys/net/if_var.h

index 1da5c05..3053901 100644 (file)
@@ -206,6 +206,8 @@ Callbacks invoked when a new network interface appears.
 Callbacks invoked when a network interface is removed.
 .It Vt ifnet_event
 Callbacks invoked when a network interface is brought up or down.
+.It Vt ifnet_link_event
+Callbacks invoked when the link state of an interface has changed.
 .It Vt power_profile_change
 Callbacks invoked when the power profile of the system changes.
 .It Vt shutdown_pre_sync
index f2157f8..4a6af4e 100644 (file)
@@ -1793,6 +1793,8 @@ if_link_state_change(struct ifnet *ifp)
        rt_ifmsg(ifp);
        devctl_notify("IFNET", ifp->if_xname,
            (link_state == LINK_STATE_UP) ? "LINK_UP" : "LINK_DOWN", NULL);
+
+       EVENTHANDLER_INVOKE(ifnet_link_event, ifp, link_state);
 }
 
 /*
index 9ee015d..4e2c7ca 100644 (file)
@@ -717,6 +717,9 @@ EVENTHANDLER_DECLARE(ifnet_attach_event, ifnet_attach_event_handler_t);
 /* interface detach event */
 typedef void (*ifnet_detach_event_handler_t)(void *, struct ifnet *);
 EVENTHANDLER_DECLARE(ifnet_detach_event, ifnet_detach_event_handler_t);
+/* Interface link state change event */
+typedef void (*ifnet_link_event_handler_t)(void *, struct ifnet *, int);
+EVENTHANDLER_DECLARE(ifnet_link_event, ifnet_link_event_handler_t);
 /* Interface up/down event */
 #define IFNET_EVENT_UP         0
 #define IFNET_EVENT_DOWN       1