[clue] [tech] How to get explicit notification from a network device driver?

Jim Ockers ockers at ockers.net
Mon Apr 23 14:19:09 MDT 2012


Hi everyone,

The state of the art in determining ethernet link state, and taking any 
action based on changes, seems to be to run a daemon that repeatedly 
polls the network interface and using an ioctl (SIOCGMIIPHY, 
SIOCETHTOOL) finds out if there is an ethernet link or not.

It seems like it would be more deterministic, and less resource 
intensive, to just have the network card device driver DO something (or 
cause something to be done) when the link state changes.  For an 
embedded device with limited CPU I think while(1) polling is 
sub-optimal.  It also seems like it should not be too hard to get the 
device driver to do something useful in addition to its printk() message 
about the changed link state.

How could I do this? I think system() is a bad idea because I'm not sure 
a device driver should be starting other processes that may block or 
something.  Also system() requires unistd.h and the kernel compile/build 
system doesn't seem to give drivers access to that sort of normal libc 
functions.  Anyway I welcome any ideas.

For example the driver doesn't compile with the 2 lines I added (marked 
with +), and also unistd.h is not found even though I #included it:

     if (!port->link) {
         netif_carrier_off(dev);
         printk(KERN_INFO "%s: link down\n", dev->name);
+        printk(KERN_INFO "%s: link down, running 
/usr/bin/wanlinkdown\n", dev->name);
+        system("/usr/bin/wanlinkdown");
         return;
     }

I'm not heart-broken that this doesn't work because I didn't like this 
approach to begin with, but I'm still not sure exactly what would be the 
best way to get a notification without polling.  So far the only 
"notification" is the KERN_INFO message that gets printed to the dmesg 
log and also whatever is specified in syslog.conf (kern.info goes to *, 
which includes the console). In addition to the notification I want it 
to run a program or something so I get explicit real-time notification 
of link state changes without constantly polling.

Thanks,
Jim

-- 
Jim Ockers, P.E., P.Eng. (ockers at ockers.net)
Contact info: http://www.ockers.net/


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cluedenver.org/pipermail/clue/attachments/20120423/953974da/attachment.html 


More information about the clue mailing list