From 2a2ff7fc62e028db4312f50e4f32fac20911e980 Mon Sep 17 00:00:00 2001 From: Jeroen Vreeken Date: Thu, 14 Aug 2003 07:11:38 -0700 Subject: [NETROM]: Better control over the AX25 devices. --- net/netrom/af_netrom.c | 13 +++++++------ net/netrom/nr_dev.c | 9 ++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index d08a1d14ca8b..fe050f1bd7e9 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -1363,6 +1363,7 @@ static int __init nr_proto_init(void) for (i = 0; i < nr_ndevs; i++) { sprintf(dev_nr[i].name, "nr%d", i); + dev_nr[i].base_addr = i; dev_nr[i].init = nr_init; register_netdev(&dev_nr[i]); } @@ -1407,23 +1408,23 @@ static void __exit nr_exit(void) nr_rt_free(); - ax25_protocol_release(AX25_P_NETROM); +#ifdef CONFIG_SYSCTL + nr_unregister_sysctl(); +#endif + ax25_linkfail_release(nr_link_failed); + ax25_protocol_release(AX25_P_NETROM); unregister_netdevice_notifier(&nr_dev_notifier); -#ifdef CONFIG_SYSCTL - nr_unregister_sysctl(); -#endif sock_unregister(PF_NETROM); for (i = 0; i < nr_ndevs; i++) { if (dev_nr[i].priv != NULL) { + unregister_netdev(&dev_nr[i]); kfree(dev_nr[i].priv); dev_nr[i].priv = NULL; - unregister_netdev(&dev_nr[i]); } - kfree(dev_nr[i].name); } kfree(dev_nr); diff --git a/net/netrom/nr_dev.c b/net/netrom/nr_dev.c index 997a62900e4e..f5b3cc402fae 100644 --- a/net/netrom/nr_dev.c +++ b/net/netrom/nr_dev.c @@ -159,11 +159,13 @@ static int nr_set_mac_address(struct net_device *dev, void *addr) { struct sockaddr *sa = addr; - ax25_listen_release((ax25_address *)dev->dev_addr, NULL); + if (dev->flags & IFF_UP) + ax25_listen_release((ax25_address *)dev->dev_addr, NULL); memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); - ax25_listen_register((ax25_address *)dev->dev_addr, NULL); + if (dev->flags & IFF_UP) + ax25_listen_register((ax25_address *)dev->dev_addr, NULL); return 0; } @@ -177,8 +179,8 @@ static int nr_open(struct net_device *dev) static int nr_close(struct net_device *dev) { - netif_stop_queue(dev); ax25_listen_release((ax25_address *)dev->dev_addr, NULL); + netif_stop_queue(dev); return 0; } @@ -207,6 +209,7 @@ int nr_init(struct net_device *dev) dev->hard_header_len = NR_NETWORK_LEN + NR_TRANSPORT_LEN; dev->addr_len = AX25_ADDR_LEN; dev->type = ARPHRD_NETROM; + dev->tx_queue_len = 40; dev->rebuild_header = nr_rebuild_header; dev->set_mac_address = nr_set_mac_address; -- cgit v1.2.3