From 5c11ff630440b5ef6d1bfadab06e265f61312369 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 31 Oct 2013 14:09:43 +0000 Subject: [PATCH] [netdevice] Make all net_driver methods optional 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 --- src/arch/i386/core/cachedhcp.c | 22 ---------------------- src/arch/i386/interface/vmware/guestinfo.c | 10 ---------- src/net/ipv6.c | 11 ----------- src/net/neighbour.c | 11 ----------- src/net/netdevice.c | 20 +++++++++++++------- src/net/vlan.c | 11 ----------- 6 files changed, 13 insertions(+), 72 deletions(-) diff --git a/src/arch/i386/core/cachedhcp.c b/src/arch/i386/core/cachedhcp.c index 9ebde3e8..b967e9b9 100644 --- a/src/arch/i386/core/cachedhcp.c +++ b/src/arch/i386/core/cachedhcp.c @@ -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, }; diff --git a/src/arch/i386/interface/vmware/guestinfo.c b/src/arch/i386/interface/vmware/guestinfo.c index 7fa41b86..aa10fc01 100644 --- a/src/arch/i386/interface/vmware/guestinfo.c +++ b/src/arch/i386/interface/vmware/guestinfo.c @@ -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, }; diff --git a/src/net/ipv6.c b/src/net/ipv6.c index cbd4e3e5..8279f058 100644 --- a/src/net/ipv6.c +++ b/src/net/ipv6.c @@ -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, }; diff --git a/src/net/neighbour.c b/src/net/neighbour.c index c175665a..e3026ce4 100644 --- a/src/net/neighbour.c +++ b/src/net/neighbour.c @@ -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, }; diff --git a/src/net/netdevice.c b/src/net/netdevice.c index c7c86c1a..fcd1f7cf 100644 --- a/src/net/netdevice.c +++ b/src/net/netdevice.c @@ -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 ) ); diff --git a/src/net/vlan.c b/src/net/vlan.c index 1a2a0862..b4ddde42 100644 --- a/src/net/vlan.c +++ b/src/net/vlan.c @@ -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, };