summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Vreeken <pe1rxq@amsat.org>2003-08-14 07:11:38 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2003-08-14 07:11:38 -0700
commit2a2ff7fc62e028db4312f50e4f32fac20911e980 (patch)
tree133ef36b3bd3f71553e410c374a74720fbdaed93
parent94ca866cc3f31be99fe6317e855a2f3054a04172 (diff)
[NETROM]: Better control over the AX25 devices.
-rw-r--r--net/netrom/af_netrom.c13
-rw-r--r--net/netrom/nr_dev.c9
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;