]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[netdevice] Make all net_driver methods optional
authorMichael Brown <mcb30@ipxe.org>
Thu, 31 Oct 2013 14:09:43 +0000 (14:09 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 1 Nov 2013 02:26:44 +0000 (02:26 +0000)
Most network upper-layer drivers do not implement all three methods
(probe, notify, and remove).  Save code by making all methods
optional.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/core/cachedhcp.c
src/arch/i386/interface/vmware/guestinfo.c
src/net/ipv6.c
src/net/neighbour.c
src/net/netdevice.c
src/net/vlan.c

index 9ebde3e8cc68b891c1cad444a8b94ef856200d33..b967e9b981decd34749c65a9abd83fc32d1e53d3 100644 (file)
@@ -159,30 +159,8 @@ static int cachedhcp_probe ( struct net_device *netdev ) {
        return 0;
 }
 
-/**
- * Handle network device link state change
- *
- * @v netdev           Network device
- */
-static void cachedhcp_notify ( struct net_device *netdev __unused ) {
-
-       /* Nothing to do */
-}
-
-/**
- * Handle network device removal
- *
- * @v netdev           Network device
- */
-static void cachedhcp_remove ( struct net_device *netdev __unused ) {
-
-       /* Nothing to do */
-}
-
 /** Cached DHCP packet network device driver */
 struct net_driver cachedhcp_driver __net_driver = {
        .name = "cachedhcp",
        .probe = cachedhcp_probe,
-       .notify = cachedhcp_notify,
-       .remove = cachedhcp_remove,
 };
index 7fa41b86ba073dbc3ba209468507196c3698805b..aa10fc0151463a9c033fc308242877a8e565a00e 100644 (file)
@@ -243,15 +243,6 @@ static int guestinfo_net_probe ( struct net_device *netdev ) {
        return rc;
 }
 
-/**
- * Handle network device or link state change
- *
- * @v netdev           Network device
- */
-static void guestinfo_net_notify ( struct net_device *netdev __unused ) {
-       /* Nothing to do */
-}
-
 /**
  * Remove per-netdevice GuestInfo settings
  *
@@ -276,6 +267,5 @@ static void guestinfo_net_remove ( struct net_device *netdev ) {
 struct net_driver guestinfo_net_driver __net_driver = {
        .name = "GuestInfo",
        .probe = guestinfo_net_probe,
-       .notify = guestinfo_net_notify,
        .remove = guestinfo_net_remove,
 };
index cbd4e3e59fefdc0c1cf1b828df4583eaa433d5b7..8279f058790b7c72b2e96b5354d4cb27e7568029 100644 (file)
@@ -943,16 +943,6 @@ static int ipv6_probe ( struct net_device *netdev ) {
        return 0;
 }
 
-/**
- * Handle IPv6 network device or link state change
- *
- * @v netdev           Network device
- */
-static void ipv6_notify ( struct net_device *netdev __unused ) {
-
-       /* Nothing to do */
-}
-
 /**
  * Destroy IPv6 network device
  *
@@ -973,7 +963,6 @@ static void ipv6_remove ( struct net_device *netdev ) {
 struct net_driver ipv6_driver __net_driver = {
        .name = "IPv6",
        .probe = ipv6_probe,
-       .notify = ipv6_notify,
        .remove = ipv6_remove,
 };
 
index c175665a05a19beabfc72a746956eb475a899282..e3026ce461770fb6b5c55c52e43544a1ef7fda11 100644 (file)
@@ -375,16 +375,6 @@ int neighbour_define ( struct net_device *netdev,
        return 0;
 }
 
-/**
- * Update neighbour cache on network device creation
- *
- * @v netdev           Network device
- */
-static int neighbour_probe ( struct net_device *netdev __unused ) {
-       /* Nothing to do */
-       return 0;
-}
-
 /**
  * Update neighbour cache on network device state change or removal
  *
@@ -404,7 +394,6 @@ static void neighbour_flush ( struct net_device *netdev ) {
 /** Neighbour driver (for net device notifications) */
 struct net_driver neighbour_net_driver __net_driver = {
        .name = "Neighbour",
-       .probe = neighbour_probe,
        .notify = neighbour_flush,
        .remove = neighbour_flush,
 };
index c7c86c1a27a607ba5ae72525ebfeb39e85039a4a..fcd1f7cf209fcdc9fb450b184b5803d5a868d233 100644 (file)
@@ -90,8 +90,10 @@ static int netdev_has_ll_addr ( struct net_device *netdev ) {
 static void netdev_notify ( struct net_device *netdev ) {
        struct net_driver *driver;
 
-       for_each_table_entry ( driver, NET_DRIVERS )
-               driver->notify ( netdev );
+       for_each_table_entry ( driver, NET_DRIVERS ) {
+               if ( driver->notify )
+                       driver->notify ( netdev );
+       }
 }
 
 /**
@@ -535,7 +537,7 @@ int register_netdev ( struct net_device *netdev ) {
 
        /* Probe device */
        for_each_table_entry ( driver, NET_DRIVERS ) {
-               if ( ( rc = driver->probe ( netdev ) ) != 0 ) {
+               if ( driver->probe && ( rc = driver->probe ( netdev ) ) != 0 ) {
                        DBGC ( netdev, "NETDEV %s could not add %s device: "
                               "%s\n", netdev->name, driver->name,
                               strerror ( rc ) );
@@ -546,8 +548,10 @@ int register_netdev ( struct net_device *netdev ) {
        return 0;
 
  err_probe:
-       for_each_table_entry_continue_reverse ( driver, NET_DRIVERS )
-               driver->remove ( netdev );
+       for_each_table_entry_continue_reverse ( driver, NET_DRIVERS ) {
+               if ( driver->remove )
+                       driver->remove ( netdev );
+       }
        clear_settings ( netdev_settings ( netdev ) );
        unregister_settings ( netdev_settings ( netdev ) );
  err_register_settings:
@@ -629,8 +633,10 @@ void unregister_netdev ( struct net_device *netdev ) {
        netdev_close ( netdev );
 
        /* Remove device */
-       for_each_table_entry_reverse ( driver, NET_DRIVERS )
-               driver->remove ( netdev );
+       for_each_table_entry_reverse ( driver, NET_DRIVERS ) {
+               if ( driver->remove )
+                       driver->remove ( netdev );
+       }
 
        /* Unregister per-netdev configuration settings */
        clear_settings ( netdev_settings ( netdev ) );
index 1a2a08622121fd18ac81c43623d170373d935f3f..b4ddde42d419e8aef5c09bb249314080fdd64db6 100644 (file)
@@ -439,16 +439,6 @@ int vlan_destroy ( struct net_device *netdev ) {
        return 0;
 }
 
-/**
- * Do nothing
- *
- * @v trunk            Trunk network device
- * @ret rc             Return status code
- */
-static int vlan_probe ( struct net_device *trunk __unused ) {
-       return 0;
-}
-
 /**
  * Handle trunk network device link state change
  *
@@ -505,7 +495,6 @@ static void vlan_remove ( struct net_device *trunk ) {
 /** VLAN driver */
 struct net_driver vlan_driver __net_driver = {
        .name = "VLAN",
-       .probe = vlan_probe,
        .notify = vlan_notify,
        .remove = vlan_remove,
 };