diff options
Diffstat (limited to 'src/net/netdevice.c')
| -rw-r--r-- | src/net/netdevice.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c index f2778e880..323e91056 100644 --- a/src/net/netdevice.c +++ b/src/net/netdevice.c @@ -266,6 +266,9 @@ struct net_device * alloc_netdev ( size_t priv_size ) { netdev->refcnt.free = free_netdev; INIT_LIST_HEAD ( &netdev->tx_queue ); INIT_LIST_HEAD ( &netdev->rx_queue ); + settings_init ( &netdev->settings, + &netdev_settings_operations, &netdev->refcnt, + netdev->name ); netdev->priv = ( ( ( void * ) netdev ) + sizeof ( *netdev ) ); } return netdev; @@ -282,11 +285,19 @@ struct net_device * alloc_netdev ( size_t priv_size ) { */ int register_netdev ( struct net_device *netdev ) { static unsigned int ifindex = 0; + int rc; /* Create device name */ snprintf ( netdev->name, sizeof ( netdev->name ), "net%d", ifindex++ ); + /* Register per-netdev configuration settings */ + if ( ( rc = register_settings ( &netdev->settings, NULL ) ) != 0 ) { + DBGC ( netdev, "NETDEV %p could not register settings: %s\n", + netdev, strerror ( rc ) ); + return rc; + } + /* Add to device list */ netdev_get ( netdev ); list_add_tail ( &netdev->list, &net_devices ); @@ -357,6 +368,9 @@ void unregister_netdev ( struct net_device *netdev ) { /* Ensure device is closed */ netdev_close ( netdev ); + /* Unregister per-netdev configuration settings */ + unregister_settings ( &netdev->settings ); + /* Remove from device list */ list_del ( &netdev->list ); netdev_put ( netdev ); |
