diff options
| author | Jeroen Vreeken <pe1rxq@amsat.org> | 2003-08-14 07:11:38 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2003-08-14 07:11:38 -0700 |
| commit | 2a2ff7fc62e028db4312f50e4f32fac20911e980 (patch) | |
| tree | 133ef36b3bd3f71553e410c374a74720fbdaed93 | |
| parent | 94ca866cc3f31be99fe6317e855a2f3054a04172 (diff) | |
[NETROM]: Better control over the AX25 devices.
| -rw-r--r-- | net/netrom/af_netrom.c | 13 | ||||
| -rw-r--r-- | 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; |
