mirror of https://github.com/ipxe/ipxe.git
[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 <mcb30@ipxe.org>pull/17/head
parent
5e1fa5cd40
commit
5c11ff6304
|
@ -159,30 +159,8 @@ static int cachedhcp_probe ( struct net_device *netdev ) {
|
||||||
return 0;
|
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 */
|
/** Cached DHCP packet network device driver */
|
||||||
struct net_driver cachedhcp_driver __net_driver = {
|
struct net_driver cachedhcp_driver __net_driver = {
|
||||||
.name = "cachedhcp",
|
.name = "cachedhcp",
|
||||||
.probe = cachedhcp_probe,
|
.probe = cachedhcp_probe,
|
||||||
.notify = cachedhcp_notify,
|
|
||||||
.remove = cachedhcp_remove,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -243,15 +243,6 @@ static int guestinfo_net_probe ( struct net_device *netdev ) {
|
||||||
return rc;
|
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
|
* 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 = {
|
struct net_driver guestinfo_net_driver __net_driver = {
|
||||||
.name = "GuestInfo",
|
.name = "GuestInfo",
|
||||||
.probe = guestinfo_net_probe,
|
.probe = guestinfo_net_probe,
|
||||||
.notify = guestinfo_net_notify,
|
|
||||||
.remove = guestinfo_net_remove,
|
.remove = guestinfo_net_remove,
|
||||||
};
|
};
|
||||||
|
|
|
@ -943,16 +943,6 @@ static int ipv6_probe ( struct net_device *netdev ) {
|
||||||
return 0;
|
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
|
* Destroy IPv6 network device
|
||||||
*
|
*
|
||||||
|
@ -973,7 +963,6 @@ static void ipv6_remove ( struct net_device *netdev ) {
|
||||||
struct net_driver ipv6_driver __net_driver = {
|
struct net_driver ipv6_driver __net_driver = {
|
||||||
.name = "IPv6",
|
.name = "IPv6",
|
||||||
.probe = ipv6_probe,
|
.probe = ipv6_probe,
|
||||||
.notify = ipv6_notify,
|
|
||||||
.remove = ipv6_remove,
|
.remove = ipv6_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -375,16 +375,6 @@ int neighbour_define ( struct net_device *netdev,
|
||||||
return 0;
|
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
|
* 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) */
|
/** Neighbour driver (for net device notifications) */
|
||||||
struct net_driver neighbour_net_driver __net_driver = {
|
struct net_driver neighbour_net_driver __net_driver = {
|
||||||
.name = "Neighbour",
|
.name = "Neighbour",
|
||||||
.probe = neighbour_probe,
|
|
||||||
.notify = neighbour_flush,
|
.notify = neighbour_flush,
|
||||||
.remove = neighbour_flush,
|
.remove = neighbour_flush,
|
||||||
};
|
};
|
||||||
|
|
|
@ -90,8 +90,10 @@ static int netdev_has_ll_addr ( struct net_device *netdev ) {
|
||||||
static void netdev_notify ( struct net_device *netdev ) {
|
static void netdev_notify ( struct net_device *netdev ) {
|
||||||
struct net_driver *driver;
|
struct net_driver *driver;
|
||||||
|
|
||||||
for_each_table_entry ( driver, NET_DRIVERS )
|
for_each_table_entry ( driver, NET_DRIVERS ) {
|
||||||
|
if ( driver->notify )
|
||||||
driver->notify ( netdev );
|
driver->notify ( netdev );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -535,7 +537,7 @@ int register_netdev ( struct net_device *netdev ) {
|
||||||
|
|
||||||
/* Probe device */
|
/* Probe device */
|
||||||
for_each_table_entry ( driver, NET_DRIVERS ) {
|
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: "
|
DBGC ( netdev, "NETDEV %s could not add %s device: "
|
||||||
"%s\n", netdev->name, driver->name,
|
"%s\n", netdev->name, driver->name,
|
||||||
strerror ( rc ) );
|
strerror ( rc ) );
|
||||||
|
@ -546,8 +548,10 @@ int register_netdev ( struct net_device *netdev ) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_probe:
|
err_probe:
|
||||||
for_each_table_entry_continue_reverse ( driver, NET_DRIVERS )
|
for_each_table_entry_continue_reverse ( driver, NET_DRIVERS ) {
|
||||||
|
if ( driver->remove )
|
||||||
driver->remove ( netdev );
|
driver->remove ( netdev );
|
||||||
|
}
|
||||||
clear_settings ( netdev_settings ( netdev ) );
|
clear_settings ( netdev_settings ( netdev ) );
|
||||||
unregister_settings ( netdev_settings ( netdev ) );
|
unregister_settings ( netdev_settings ( netdev ) );
|
||||||
err_register_settings:
|
err_register_settings:
|
||||||
|
@ -629,8 +633,10 @@ void unregister_netdev ( struct net_device *netdev ) {
|
||||||
netdev_close ( netdev );
|
netdev_close ( netdev );
|
||||||
|
|
||||||
/* Remove device */
|
/* Remove device */
|
||||||
for_each_table_entry_reverse ( driver, NET_DRIVERS )
|
for_each_table_entry_reverse ( driver, NET_DRIVERS ) {
|
||||||
|
if ( driver->remove )
|
||||||
driver->remove ( netdev );
|
driver->remove ( netdev );
|
||||||
|
}
|
||||||
|
|
||||||
/* Unregister per-netdev configuration settings */
|
/* Unregister per-netdev configuration settings */
|
||||||
clear_settings ( netdev_settings ( netdev ) );
|
clear_settings ( netdev_settings ( netdev ) );
|
||||||
|
|
|
@ -439,16 +439,6 @@ int vlan_destroy ( struct net_device *netdev ) {
|
||||||
return 0;
|
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
|
* Handle trunk network device link state change
|
||||||
*
|
*
|
||||||
|
@ -505,7 +495,6 @@ static void vlan_remove ( struct net_device *trunk ) {
|
||||||
/** VLAN driver */
|
/** VLAN driver */
|
||||||
struct net_driver vlan_driver __net_driver = {
|
struct net_driver vlan_driver __net_driver = {
|
||||||
.name = "VLAN",
|
.name = "VLAN",
|
||||||
.probe = vlan_probe,
|
|
||||||
.notify = vlan_notify,
|
.notify = vlan_notify,
|
||||||
.remove = vlan_remove,
|
.remove = vlan_remove,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue