[netdevice] Add print_status callback for link-layer-specific state
authorJoshua Oreman <oremanj@xenon.get-linux.org>
Tue, 16 Jun 2009 06:39:17 +0000 (23:39 -0700)
committerJoshua Oreman <oremanj@xenon.get-linux.org>
Tue, 16 Jun 2009 06:43:33 +0000 (23:43 -0700)
struct net_device now includes a callback, defaulting to NULL, that may
be set by the link-layer setup code if there is important state
associated with the link layer that needs to be visible to an "ifstat".
This is the case, for instance, with 802.11, where it can be quite
important to know what channel, SSID, and transmission power are
being used.

Modified ifstat() to call netdev->print_status() in addition to its normal
output if the callback is non-NULL.

src/include/gpxe/netdevice.h
src/usr/ifmgmt.c

index f9d56bc..a846dae 100644 (file)
@@ -284,6 +284,17 @@ struct net_device {
        /** Configuration settings applicable to this device */
        struct generic_settings settings;
 
+       /** ifstat callback
+        *
+        * @v netdev    Network device
+        *
+        * If non-NULL, this should be a function that prints one line
+        * containing information about the link-layer-specific state
+        * of the network device, terminated by a newline. It will be
+        * called when @c ifstat is invoked on the network device.
+        */
+       void ( * print_status ) ( struct net_device *netdev );
+
        /** Driver private data */
        void *priv;
 };
index 9c82503..2fd8155 100644 (file)
@@ -94,6 +94,8 @@ void ifstat ( struct net_device *netdev ) {
                 ( netdev_link_ok ( netdev ) ? "up" : "down" ),
                 netdev->tx_stats.good, netdev->tx_stats.bad,
                 netdev->rx_stats.good, netdev->rx_stats.bad );
+       if ( netdev->print_status )
+               netdev->print_status ( netdev );
        ifstat_errors ( &netdev->tx_stats, "TXE" );
        ifstat_errors ( &netdev->rx_stats, "RXE" );
 }