* Copyright Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
* Copyright Darryl Miles G7LED (dlm@g7led.demon.co.uk)
*/
+#include <linux/config.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/capability.h>
static const struct proto_ops nr_proto_ops;
-/*
- * NETROM network devices are virtual network devices encapsulating NETROM
- * frames into AX.25 which will be sent through an AX.25 device, so form a
- * special "super class" of normal net devices; split their locks off into a
- * separate class since they always nest.
- */
-static struct lock_class_key nr_netdev_xmit_lock_key;
-
/*
* Socket removal during an interrupt is now safe.
*/
nr_init_timers(sk);
- nr->t1 =
- msecs_to_jiffies(sysctl_netrom_transport_timeout);
- nr->t2 =
- msecs_to_jiffies(sysctl_netrom_transport_acknowledge_delay);
- nr->n2 =
- msecs_to_jiffies(sysctl_netrom_transport_maximum_tries);
- nr->t4 =
- msecs_to_jiffies(sysctl_netrom_transport_busy_delay);
- nr->idle =
- msecs_to_jiffies(sysctl_netrom_transport_no_activity_timeout);
+ nr->t1 = sysctl_netrom_transport_timeout;
+ nr->t2 = sysctl_netrom_transport_acknowledge_delay;
+ nr->n2 = sysctl_netrom_transport_maximum_tries;
+ nr->t4 = sysctl_netrom_transport_busy_delay;
+ nr->idle = sysctl_netrom_transport_no_activity_timeout;
nr->window = sysctl_netrom_transport_requested_window_size;
nr->bpqext = 1;
/* Now attach up the new socket */
kfree_skb(skb);
- sk_acceptq_removed(sk);
+ sk->sk_ack_backlog--;
newsock->sk = newsk;
out:
nr_make->vr = 0;
nr_make->vl = 0;
nr_make->state = NR_STATE_3;
- sk_acceptq_added(sk);
- skb_queue_head(&sk->sk_receive_queue, skb);
-
- if (!sock_flag(sk, SOCK_DEAD))
- sk->sk_data_ready(sk, skb->len);
-
- bh_unlock_sock(sk);
+ sk->sk_ack_backlog++;
nr_insert_socket(make);
+ skb_queue_head(&sk->sk_receive_queue, skb);
+
nr_start_heartbeat(make);
nr_start_idletimer(make);
+ if (!sock_flag(sk, SOCK_DEAD))
+ sk->sk_data_ready(sk, skb->len);
+
+ bh_unlock_sock(sk);
return 1;
}
static struct net_device **dev_nr;
+static char banner[] __initdata = KERN_INFO "G4KLX NET/ROM for Linux. Version 0.7 for AX25.037 Linux 2.4\n";
+
static int __init nr_proto_init(void)
{
int i;
return -1;
}
- dev_nr = kzalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
+ dev_nr = kmalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
if (dev_nr == NULL) {
printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device array\n");
return -1;
}
+ memset(dev_nr, 0x00, nr_ndevs * sizeof(struct net_device *));
+
for (i = 0; i < nr_ndevs; i++) {
char name[IFNAMSIZ];
struct net_device *dev;
free_netdev(dev);
goto fail;
}
- lockdep_set_class(&dev->_xmit_lock, &nr_netdev_xmit_lock_key);
dev_nr[i] = dev;
}
}
register_netdevice_notifier(&nr_dev_notifier);
+ printk(banner);
ax25_protocol_register(AX25_P_NETROM, nr_route_frame);
ax25_linkfail_register(nr_link_failed);