patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / net / netrom / af_netrom.c
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * Copyright Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
8  * Copyright Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
9  * Copyright Darryl Miles G7LED (dlm@g7led.demon.co.uk)
10  */
11 #include <linux/config.h>
12 #include <linux/module.h>
13 #include <linux/errno.h>
14 #include <linux/types.h>
15 #include <linux/socket.h>
16 #include <linux/in.h>
17 #include <linux/kernel.h>
18 #include <linux/sched.h>
19 #include <linux/timer.h>
20 #include <linux/string.h>
21 #include <linux/sockios.h>
22 #include <linux/net.h>
23 #include <linux/stat.h>
24 #include <net/ax25.h>
25 #include <linux/inet.h>
26 #include <linux/netdevice.h>
27 #include <linux/if_arp.h>
28 #include <linux/skbuff.h>
29 #include <net/sock.h>
30 #include <asm/uaccess.h>
31 #include <asm/system.h>
32 #include <linux/fcntl.h>
33 #include <linux/termios.h>      /* For TIOCINQ/OUTQ */
34 #include <linux/mm.h>
35 #include <linux/interrupt.h>
36 #include <linux/notifier.h>
37 #include <net/netrom.h>
38 #include <linux/proc_fs.h>
39 #include <linux/seq_file.h>
40 #include <net/ip.h>
41 #include <net/tcp.h>
42 #include <net/arp.h>
43 #include <linux/init.h>
44
45 int nr_ndevs = 4;
46
47 int sysctl_netrom_default_path_quality            = NR_DEFAULT_QUAL;
48 int sysctl_netrom_obsolescence_count_initialiser  = NR_DEFAULT_OBS;
49 int sysctl_netrom_network_ttl_initialiser         = NR_DEFAULT_TTL;
50 int sysctl_netrom_transport_timeout               = NR_DEFAULT_T1;
51 int sysctl_netrom_transport_maximum_tries         = NR_DEFAULT_N2;
52 int sysctl_netrom_transport_acknowledge_delay     = NR_DEFAULT_T2;
53 int sysctl_netrom_transport_busy_delay            = NR_DEFAULT_T4;
54 int sysctl_netrom_transport_requested_window_size = NR_DEFAULT_WINDOW;
55 int sysctl_netrom_transport_no_activity_timeout   = NR_DEFAULT_IDLE;
56 int sysctl_netrom_routing_control                 = NR_DEFAULT_ROUTING;
57 int sysctl_netrom_link_fails_count                = NR_DEFAULT_FAILS;
58
59 static unsigned short circuit = 0x101;
60
61 static HLIST_HEAD(nr_list);
62 static spinlock_t nr_list_lock = SPIN_LOCK_UNLOCKED;
63
64 static struct proto_ops nr_proto_ops;
65 void nr_init_timers(struct sock *sk);
66
67 static struct sock *nr_alloc_sock(void)
68 {
69         nr_cb *nr;
70         struct sock *sk = sk_alloc(PF_NETROM, GFP_ATOMIC, 1, NULL);
71
72         if (!sk)
73                 goto out;
74
75         nr = sk->sk_protinfo = kmalloc(sizeof(*nr), GFP_ATOMIC);
76         if (!nr)
77                 goto frees;
78
79         memset(nr, 0x00, sizeof(*nr));
80         nr->sk = sk;
81 out:
82         return sk;
83 frees:
84         sk_free(sk);
85         sk = NULL;
86         goto out;
87 }
88
89 /*
90  *      Socket removal during an interrupt is now safe.
91  */
92 static void nr_remove_socket(struct sock *sk)
93 {
94         spin_lock_bh(&nr_list_lock);
95         sk_del_node_init(sk);
96         spin_unlock_bh(&nr_list_lock);
97 }
98
99 /*
100  *      Kill all bound sockets on a dropped device.
101  */
102 static void nr_kill_by_device(struct net_device *dev)
103 {
104         struct sock *s;
105         struct hlist_node *node;
106
107         spin_lock_bh(&nr_list_lock);
108         sk_for_each(s, node, &nr_list)
109                 if (nr_sk(s)->device == dev)
110                         nr_disconnect(s, ENETUNREACH);
111         spin_unlock_bh(&nr_list_lock);
112 }
113
114 /*
115  *      Handle device status changes.
116  */
117 static int nr_device_event(struct notifier_block *this, unsigned long event, void *ptr)
118 {
119         struct net_device *dev = (struct net_device *)ptr;
120
121         if (event != NETDEV_DOWN)
122                 return NOTIFY_DONE;
123
124         nr_kill_by_device(dev);
125         nr_rt_device_down(dev);
126         
127         return NOTIFY_DONE;
128 }
129
130 /*
131  *      Add a socket to the bound sockets list.
132  */
133 static void nr_insert_socket(struct sock *sk)
134 {
135         spin_lock_bh(&nr_list_lock);
136         sk_add_node(sk, &nr_list);
137         spin_unlock_bh(&nr_list_lock);
138 }
139
140 /*
141  *      Find a socket that wants to accept the Connect Request we just
142  *      received.
143  */
144 static struct sock *nr_find_listener(ax25_address *addr)
145 {
146         struct sock *s;
147         struct hlist_node *node;
148
149         spin_lock_bh(&nr_list_lock);
150         sk_for_each(s, node, &nr_list)
151                 if (!ax25cmp(&nr_sk(s)->source_addr, addr) &&
152                     s->sk_state == TCP_LISTEN) {
153                         bh_lock_sock(s);
154                         goto found;
155                 }
156         s = NULL;
157 found:
158         spin_unlock_bh(&nr_list_lock);
159         return s;
160 }
161
162 /*
163  *      Find a connected NET/ROM socket given my circuit IDs.
164  */
165 static struct sock *nr_find_socket(unsigned char index, unsigned char id)
166 {
167         struct sock *s;
168         struct hlist_node *node;
169
170         spin_lock_bh(&nr_list_lock);
171         sk_for_each(s, node, &nr_list) {
172                 nr_cb *nr = nr_sk(s);
173                 
174                 if (nr->my_index == index && nr->my_id == id) {
175                         bh_lock_sock(s);
176                         goto found;
177                 }
178         }
179         s = NULL;
180 found:
181         spin_unlock_bh(&nr_list_lock);
182         return s;
183 }
184
185 /*
186  *      Find a connected NET/ROM socket given their circuit IDs.
187  */
188 static struct sock *nr_find_peer(unsigned char index, unsigned char id,
189         ax25_address *dest)
190 {
191         struct sock *s;
192         struct hlist_node *node;
193
194         spin_lock_bh(&nr_list_lock);
195         sk_for_each(s, node, &nr_list) {
196                 nr_cb *nr = nr_sk(s);
197                 
198                 if (nr->your_index == index && nr->your_id == id &&
199                     !ax25cmp(&nr->dest_addr, dest)) {
200                         bh_lock_sock(s);
201                         goto found;
202                 }
203         }
204         s = NULL;
205 found:
206         spin_unlock_bh(&nr_list_lock);
207         return s;
208 }
209
210 /*
211  *      Find next free circuit ID.
212  */
213 static unsigned short nr_find_next_circuit(void)
214 {
215         unsigned short id = circuit;
216         unsigned char i, j;
217         struct sock *sk;
218
219         for (;;) {
220                 i = id / 256;
221                 j = id % 256;
222
223                 if (i != 0 && j != 0) {
224                         if ((sk=nr_find_socket(i, j)) == NULL)
225                                 break;
226                         bh_unlock_sock(sk);
227                 }
228
229                 id++;
230         }
231
232         return id;
233 }
234
235 /*
236  *      Deferred destroy.
237  */
238 void nr_destroy_socket(struct sock *);
239
240 /*
241  *      Handler for deferred kills.
242  */
243 static void nr_destroy_timer(unsigned long data)
244 {
245         struct sock *sk=(struct sock *)data;
246         bh_lock_sock(sk);
247         sock_hold(sk);
248         nr_destroy_socket(sk);
249         bh_unlock_sock(sk);
250         sock_put(sk);
251 }
252
253 /*
254  *      This is called from user mode and the timers. Thus it protects itself
255  *      against interrupt users but doesn't worry about being called during
256  *      work. Once it is removed from the queue no interrupt or bottom half
257  *      will touch it and we are (fairly 8-) ) safe.
258  */
259 void nr_destroy_socket(struct sock *sk)
260 {
261         struct sk_buff *skb;
262
263         nr_remove_socket(sk);
264
265         nr_stop_heartbeat(sk);
266         nr_stop_t1timer(sk);
267         nr_stop_t2timer(sk);
268         nr_stop_t4timer(sk);
269         nr_stop_idletimer(sk);
270
271         nr_clear_queues(sk);            /* Flush the queues */
272
273         while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
274                 if (skb->sk != sk) { /* A pending connection */
275                         /* Queue the unaccepted socket for death */
276                         sock_set_flag(skb->sk, SOCK_DEAD);
277                         nr_start_heartbeat(skb->sk);
278                         nr_sk(skb->sk)->state = NR_STATE_0;
279                 }
280
281                 kfree_skb(skb);
282         }
283
284         if (atomic_read(&sk->sk_wmem_alloc) ||
285             atomic_read(&sk->sk_rmem_alloc)) {
286                 /* Defer: outstanding buffers */
287                 sk->sk_timer.function = nr_destroy_timer;
288                 sk->sk_timer.expires  = jiffies + 2 * HZ;
289                 add_timer(&sk->sk_timer);
290         } else
291                 sock_put(sk);
292 }
293
294 /*
295  *      Handling for system calls applied via the various interfaces to a
296  *      NET/ROM socket object.
297  */
298
299 static int nr_setsockopt(struct socket *sock, int level, int optname,
300         char __user *optval, int optlen)
301 {
302         struct sock *sk = sock->sk;
303         nr_cb *nr = nr_sk(sk);
304         int opt;
305
306         if (level != SOL_NETROM)
307                 return -ENOPROTOOPT;
308
309         if (optlen < sizeof(int))
310                 return -EINVAL;
311
312         if (get_user(opt, (int __user *)optval))
313                 return -EFAULT;
314
315         switch (optname) {
316         case NETROM_T1:
317                 if (opt < 1)
318                         return -EINVAL;
319                 nr->t1 = opt * HZ;
320                 return 0;
321
322         case NETROM_T2:
323                 if (opt < 1)
324                         return -EINVAL;
325                 nr->t2 = opt * HZ;
326                 return 0;
327
328         case NETROM_N2:
329                 if (opt < 1 || opt > 31)
330                         return -EINVAL;
331                 nr->n2 = opt;
332                 return 0;
333
334         case NETROM_T4:
335                 if (opt < 1)
336                         return -EINVAL;
337                 nr->t4 = opt * HZ;
338                 return 0;
339
340         case NETROM_IDLE:
341                 if (opt < 0)
342                         return -EINVAL;
343                 nr->idle = opt * 60 * HZ;
344                 return 0;
345
346         default:
347                 return -ENOPROTOOPT;
348         }
349 }
350
351 static int nr_getsockopt(struct socket *sock, int level, int optname,
352         char __user *optval, int __user *optlen)
353 {
354         struct sock *sk = sock->sk;
355         nr_cb *nr = nr_sk(sk);
356         int val = 0;
357         int len; 
358
359         if (level != SOL_NETROM)
360                 return -ENOPROTOOPT;
361         
362         if (get_user(len, optlen))
363                 return -EFAULT;
364
365         if (len < 0)
366                 return -EINVAL;
367                 
368         switch (optname) {
369         case NETROM_T1:
370                 val = nr->t1 / HZ;
371                 break;
372
373         case NETROM_T2:
374                 val = nr->t2 / HZ;
375                 break;
376
377         case NETROM_N2:
378                 val = nr->n2;
379                 break;
380
381         case NETROM_T4:
382                 val = nr->t4 / HZ;
383                 break;
384
385         case NETROM_IDLE:
386                 val = nr->idle / (60 * HZ);
387                 break;
388
389         default:
390                 return -ENOPROTOOPT;
391         }
392
393         len = min_t(unsigned int, len, sizeof(int));
394
395         if (put_user(len, optlen))
396                 return -EFAULT;
397
398         return copy_to_user(optval, &val, len) ? -EFAULT : 0;
399 }
400
401 static int nr_listen(struct socket *sock, int backlog)
402 {
403         struct sock *sk = sock->sk;
404
405         lock_sock(sk);
406         if (sk->sk_state != TCP_LISTEN) {
407                 memset(&nr_sk(sk)->user_addr, 0, AX25_ADDR_LEN);
408                 sk->sk_max_ack_backlog = backlog;
409                 sk->sk_state           = TCP_LISTEN;
410                 release_sock(sk);
411                 return 0;
412         }
413         release_sock(sk);
414
415         return -EOPNOTSUPP;
416 }
417
418 static int nr_create(struct socket *sock, int protocol)
419 {
420         struct sock *sk;
421         nr_cb *nr;
422
423         if (sock->type != SOCK_SEQPACKET || protocol != 0)
424                 return -ESOCKTNOSUPPORT;
425
426         if ((sk = nr_alloc_sock()) == NULL)
427                 return -ENOMEM;
428
429         nr = nr_sk(sk);
430
431         sock_init_data(sock, sk);
432         sk_set_owner(sk, THIS_MODULE);
433
434         sock->ops    = &nr_proto_ops;
435         sk->sk_protocol = protocol;
436
437         skb_queue_head_init(&nr->ack_queue);
438         skb_queue_head_init(&nr->reseq_queue);
439         skb_queue_head_init(&nr->frag_queue);
440
441         nr_init_timers(sk);
442
443         nr->t1     = sysctl_netrom_transport_timeout;
444         nr->t2     = sysctl_netrom_transport_acknowledge_delay;
445         nr->n2     = sysctl_netrom_transport_maximum_tries;
446         nr->t4     = sysctl_netrom_transport_busy_delay;
447         nr->idle   = sysctl_netrom_transport_no_activity_timeout;
448         nr->window = sysctl_netrom_transport_requested_window_size;
449
450         nr->bpqext = 1;
451         nr->state  = NR_STATE_0;
452
453         return 0;
454 }
455
456 static struct sock *nr_make_new(struct sock *osk)
457 {
458         struct sock *sk;
459         nr_cb *nr, *onr;
460
461         if (osk->sk_type != SOCK_SEQPACKET)
462                 return NULL;
463
464         if ((sk = nr_alloc_sock()) == NULL)
465                 return NULL;
466
467         nr = nr_sk(sk);
468
469         sock_init_data(NULL, sk);
470         sk_set_owner(sk, THIS_MODULE);
471
472         sk->sk_type     = osk->sk_type;
473         sk->sk_socket   = osk->sk_socket;
474         sk->sk_priority = osk->sk_priority;
475         sk->sk_protocol = osk->sk_protocol;
476         sk->sk_rcvbuf   = osk->sk_rcvbuf;
477         sk->sk_sndbuf   = osk->sk_sndbuf;
478         sk->sk_debug    = osk->sk_debug;
479         sk->sk_state    = TCP_ESTABLISHED;
480         sk->sk_sleep    = osk->sk_sleep;
481         sk->sk_zapped   = osk->sk_zapped;
482
483         skb_queue_head_init(&nr->ack_queue);
484         skb_queue_head_init(&nr->reseq_queue);
485         skb_queue_head_init(&nr->frag_queue);
486
487         nr_init_timers(sk);
488
489         onr = nr_sk(osk);
490
491         nr->t1      = onr->t1;
492         nr->t2      = onr->t2;
493         nr->n2      = onr->n2;
494         nr->t4      = onr->t4;
495         nr->idle    = onr->idle;
496         nr->window  = onr->window;
497
498         nr->device  = onr->device;
499         nr->bpqext  = onr->bpqext;
500
501         return sk;
502 }
503
504 static int nr_release(struct socket *sock)
505 {
506         struct sock *sk = sock->sk;
507         nr_cb *nr;
508
509         if (sk == NULL) return 0;
510
511         sock_hold(sk);
512         lock_sock(sk);
513         nr = nr_sk(sk);
514
515         switch (nr->state) {
516         case NR_STATE_0:
517         case NR_STATE_1:
518         case NR_STATE_2:
519                 nr_disconnect(sk, 0);
520                 nr_destroy_socket(sk);
521                 break;
522
523         case NR_STATE_3:
524                 nr_clear_queues(sk);
525                 nr->n2count = 0;
526                 nr_write_internal(sk, NR_DISCREQ);
527                 nr_start_t1timer(sk);
528                 nr_stop_t2timer(sk);
529                 nr_stop_t4timer(sk);
530                 nr_stop_idletimer(sk);
531                 nr->state    = NR_STATE_2;
532                 sk->sk_state    = TCP_CLOSE;
533                 sk->sk_shutdown |= SEND_SHUTDOWN;
534                 sk->sk_state_change(sk);
535                 sock_orphan(sk);
536                 sock_set_flag(sk, SOCK_DESTROY);
537                 sk->sk_socket   = NULL;
538                 break;
539
540         default:
541                 sk->sk_socket = NULL;
542                 break;
543         }
544
545         sock->sk   = NULL;      
546         release_sock(sk);
547         sock_put(sk);
548
549         return 0;
550 }
551
552 static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
553 {
554         struct sock *sk = sock->sk;
555         nr_cb *nr = nr_sk(sk);
556         struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
557         struct net_device *dev;
558         ax25_address *user, *source;
559
560         lock_sock(sk);
561         if (!sk->sk_zapped) {
562                 release_sock(sk);
563                 return -EINVAL;
564         }
565         if (addr_len < sizeof(struct sockaddr_ax25) || addr_len > sizeof(struct full_sockaddr_ax25)) {
566                 release_sock(sk);
567                 return -EINVAL;
568         }
569         if (addr_len < (addr->fsa_ax25.sax25_ndigis * sizeof(ax25_address) + sizeof(struct sockaddr_ax25))) {
570                 release_sock(sk);
571                 return -EINVAL;
572         }
573         if (addr->fsa_ax25.sax25_family != AF_NETROM) {
574                 release_sock(sk);
575                 return -EINVAL;
576         }
577         if ((dev = nr_dev_get(&addr->fsa_ax25.sax25_call)) == NULL) {
578                 SOCK_DEBUG(sk, "NET/ROM: bind failed: invalid node callsign\n");
579                 release_sock(sk);
580                 return -EADDRNOTAVAIL;
581         }
582
583         /*
584          * Only the super user can set an arbitrary user callsign.
585          */
586         if (addr->fsa_ax25.sax25_ndigis == 1) {
587                 if (!capable(CAP_NET_BIND_SERVICE)) {
588                         dev_put(dev);
589                         release_sock(sk);
590                         return -EACCES;
591                 }
592                 nr->user_addr   = addr->fsa_digipeater[0];
593                 nr->source_addr = addr->fsa_ax25.sax25_call;
594         } else {
595                 source = &addr->fsa_ax25.sax25_call;
596
597                 if ((user = ax25_findbyuid(current->euid)) == NULL) {
598                         if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE)) {
599                                 release_sock(sk);
600                                 dev_put(dev);
601                                 return -EPERM;
602                         }
603                         user = source;
604                 }
605
606                 nr->user_addr   = *user;
607                 nr->source_addr = *source;
608         }
609
610         nr->device = dev;
611         nr_insert_socket(sk);
612
613         sk->sk_zapped = 0;
614         dev_put(dev);
615         release_sock(sk);
616         SOCK_DEBUG(sk, "NET/ROM: socket is bound\n");
617         return 0;
618 }
619
620 static int nr_connect(struct socket *sock, struct sockaddr *uaddr,
621         int addr_len, int flags)
622 {
623         struct sock *sk = sock->sk;
624         nr_cb *nr = nr_sk(sk);
625         struct sockaddr_ax25 *addr = (struct sockaddr_ax25 *)uaddr;
626         ax25_address *user, *source = NULL;
627         struct net_device *dev;
628
629         lock_sock(sk);
630         if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) {
631                 sock->state = SS_CONNECTED;
632                 release_sock(sk);
633                 return 0;       /* Connect completed during a ERESTARTSYS event */
634         }
635
636         if (sk->sk_state == TCP_CLOSE && sock->state == SS_CONNECTING) {
637                 sock->state = SS_UNCONNECTED;
638                 release_sock(sk);
639                 return -ECONNREFUSED;
640         }
641
642         if (sk->sk_state == TCP_ESTABLISHED) {
643                 release_sock(sk);
644                 return -EISCONN;        /* No reconnect on a seqpacket socket */
645         }
646
647         sk->sk_state   = TCP_CLOSE;     
648         sock->state = SS_UNCONNECTED;
649
650         if (addr_len != sizeof(struct sockaddr_ax25) && addr_len != sizeof(struct full_sockaddr_ax25)) {
651                 release_sock(sk);
652                 return -EINVAL;
653         }
654         if (addr->sax25_family != AF_NETROM) {
655                 release_sock(sk);
656                 return -EINVAL;
657         }
658         if (sk->sk_zapped) {    /* Must bind first - autobinding in this may or may not work */
659                 sk->sk_zapped = 0;
660
661                 if ((dev = nr_dev_first()) == NULL) {
662                         release_sock(sk);
663                         return -ENETUNREACH;
664                 }
665                 source = (ax25_address *)dev->dev_addr;
666
667                 if ((user = ax25_findbyuid(current->euid)) == NULL) {
668                         if (ax25_uid_policy && !capable(CAP_NET_ADMIN)) {
669                                 dev_put(dev);
670                                 release_sock(sk);
671                                 return -EPERM;
672                         }
673                         user = source;
674                 }
675
676                 nr->user_addr   = *user;
677                 nr->source_addr = *source;
678                 nr->device      = dev;
679
680                 dev_put(dev);
681                 nr_insert_socket(sk);           /* Finish the bind */
682         }
683
684         nr->dest_addr = addr->sax25_call;
685
686         release_sock(sk);
687         circuit = nr_find_next_circuit();
688         lock_sock(sk);
689
690         nr->my_index = circuit / 256;
691         nr->my_id    = circuit % 256;
692
693         circuit++;
694
695         /* Move to connecting socket, start sending Connect Requests */
696         sock->state  = SS_CONNECTING;
697         sk->sk_state = TCP_SYN_SENT;
698
699         nr_establish_data_link(sk);
700
701         nr->state = NR_STATE_1;
702
703         nr_start_heartbeat(sk);
704
705         /* Now the loop */
706         if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
707                 release_sock(sk);
708                 return -EINPROGRESS;
709         }
710                 
711         /*
712          * A Connect Ack with Choke or timeout or failed routing will go to
713          * closed.
714          */
715         if (sk->sk_state == TCP_SYN_SENT) {
716                 struct task_struct *tsk = current;
717                 DECLARE_WAITQUEUE(wait, tsk);
718
719                 add_wait_queue(sk->sk_sleep, &wait);
720                 for (;;) {
721                         set_current_state(TASK_INTERRUPTIBLE);
722                         if (sk->sk_state != TCP_SYN_SENT)
723                                 break;
724                         release_sock(sk);
725                         if (!signal_pending(tsk)) {
726                                 schedule();
727                                 lock_sock(sk);
728                                 continue;
729                         }
730                         current->state = TASK_RUNNING;
731                         remove_wait_queue(sk->sk_sleep, &wait);
732                         return -ERESTARTSYS;
733                 }
734                 current->state = TASK_RUNNING;
735                 remove_wait_queue(sk->sk_sleep, &wait);
736         }
737
738         if (sk->sk_state != TCP_ESTABLISHED) {
739                 sock->state = SS_UNCONNECTED;
740                 release_sock(sk);
741                 return sock_error(sk);  /* Always set at this point */
742         }
743
744         sock->state = SS_CONNECTED;
745         release_sock(sk);
746
747         return 0;
748 }
749
750 static int nr_accept(struct socket *sock, struct socket *newsock, int flags)
751 {
752         struct task_struct *tsk = current;
753         DECLARE_WAITQUEUE(wait, tsk);
754         struct sk_buff *skb;
755         struct sock *newsk;
756         struct sock *sk;
757         int err = 0;
758
759         if ((sk = sock->sk) == NULL)
760                 return -EINVAL;
761
762         lock_sock(sk);
763         if (sk->sk_type != SOCK_SEQPACKET) {
764                 err = -EOPNOTSUPP;
765                 goto out;
766         }
767
768         if (sk->sk_state != TCP_LISTEN) {
769                 err = -EINVAL;
770                 goto out;
771         }
772
773         /*
774          *      The write queue this time is holding sockets ready to use
775          *      hooked into the SABM we saved
776          */
777         add_wait_queue(sk->sk_sleep, &wait);
778         for (;;) {
779                 skb = skb_dequeue(&sk->sk_receive_queue);
780                 if (skb)
781                         break;
782
783                 current->state = TASK_INTERRUPTIBLE;
784                 release_sock(sk);
785                 if (flags & O_NONBLOCK) {
786                         current->state = TASK_RUNNING;
787                         remove_wait_queue(sk->sk_sleep, &wait);
788                         return -EWOULDBLOCK;
789                 }
790                 if (!signal_pending(tsk)) {
791                         schedule();
792                         lock_sock(sk);
793                         continue;
794                 }
795                 current->state = TASK_RUNNING;
796                 remove_wait_queue(sk->sk_sleep, &wait);
797                 return -ERESTARTSYS;
798         }
799         current->state = TASK_RUNNING;
800         remove_wait_queue(sk->sk_sleep, &wait);
801
802         newsk = skb->sk;
803         newsk->sk_pair = NULL;
804         newsk->sk_socket = newsock;
805         newsk->sk_sleep = &newsock->wait;
806
807         /* Now attach up the new socket */
808         kfree_skb(skb);
809         sk->sk_ack_backlog--;
810         newsock->sk = newsk;
811
812 out:
813         release_sock(sk);
814         return err;
815 }
816
817 static int nr_getname(struct socket *sock, struct sockaddr *uaddr,
818         int *uaddr_len, int peer)
819 {
820         struct full_sockaddr_ax25 *sax = (struct full_sockaddr_ax25 *)uaddr;
821         struct sock *sk = sock->sk;
822         nr_cb *nr = nr_sk(sk);
823
824         lock_sock(sk);
825         if (peer != 0) {
826                 if (sk->sk_state != TCP_ESTABLISHED) {
827                         release_sock(sk);
828                         return -ENOTCONN;
829                 }
830                 sax->fsa_ax25.sax25_family = AF_NETROM;
831                 sax->fsa_ax25.sax25_ndigis = 1;
832                 sax->fsa_ax25.sax25_call   = nr->user_addr;
833                 sax->fsa_digipeater[0]     = nr->dest_addr;
834                 *uaddr_len = sizeof(struct full_sockaddr_ax25);
835         } else {
836                 sax->fsa_ax25.sax25_family = AF_NETROM;
837                 sax->fsa_ax25.sax25_ndigis = 0;
838                 sax->fsa_ax25.sax25_call   = nr->source_addr;
839                 *uaddr_len = sizeof(struct sockaddr_ax25);
840         }
841         release_sock(sk);
842
843         return 0;
844 }
845
846 int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
847 {
848         struct sock *sk;
849         struct sock *make;      
850         nr_cb *nr_make;
851         ax25_address *src, *dest, *user;
852         unsigned short circuit_index, circuit_id;
853         unsigned short peer_circuit_index, peer_circuit_id;
854         unsigned short frametype, flags, window, timeout;
855         int ret;
856
857         skb->sk = NULL;         /* Initially we don't know who it's for */
858
859         /*
860          *      skb->data points to the netrom frame start
861          */
862
863         src  = (ax25_address *)(skb->data + 0);
864         dest = (ax25_address *)(skb->data + 7);
865
866         circuit_index      = skb->data[15];
867         circuit_id         = skb->data[16];
868         peer_circuit_index = skb->data[17];
869         peer_circuit_id    = skb->data[18];
870         frametype          = skb->data[19] & 0x0F;
871         flags              = skb->data[19] & 0xF0;
872
873 #ifdef CONFIG_INET
874         /*
875          * Check for an incoming IP over NET/ROM frame.
876          */
877         if (frametype == NR_PROTOEXT && circuit_index == NR_PROTO_IP && circuit_id == NR_PROTO_IP) {
878                 skb_pull(skb, NR_NETWORK_LEN + NR_TRANSPORT_LEN);
879                 skb->h.raw = skb->data;
880
881                 return nr_rx_ip(skb, dev);
882         }
883 #endif
884
885         /*
886          * Find an existing socket connection, based on circuit ID, if it's
887          * a Connect Request base it on their circuit ID.
888          *
889          * Circuit ID 0/0 is not valid but it could still be a "reset" for a
890          * circuit that no longer exists at the other end ...
891          */
892
893         sk = NULL;
894
895         if (circuit_index == 0 && circuit_id == 0) {
896                 if (frametype == NR_CONNACK && flags == NR_CHOKE_FLAG)
897                         sk = nr_find_peer(peer_circuit_index, peer_circuit_id, src);
898         } else {
899                 if (frametype == NR_CONNREQ)
900                         sk = nr_find_peer(circuit_index, circuit_id, src);
901                 else
902                         sk = nr_find_socket(circuit_index, circuit_id);
903         }
904
905         if (sk != NULL) {
906                 skb->h.raw = skb->data;
907
908                 if (frametype == NR_CONNACK && skb->len == 22)
909                         nr_sk(sk)->bpqext = 1;
910                 else
911                         nr_sk(sk)->bpqext = 0;
912
913                 ret = nr_process_rx_frame(sk, skb);
914                 bh_unlock_sock(sk);
915                 return ret;
916         }
917
918         /*
919          * Now it should be a CONNREQ.
920          */
921         if (frametype != NR_CONNREQ) {
922                 /*
923                  * Here it would be nice to be able to send a reset but
924                  * NET/ROM doesn't have one. The following hack would
925                  * have been a way to extend the protocol but apparently
926                  * it kills BPQ boxes... :-(
927                  */
928 #if 0
929                 /*
930                  * Never reply to a CONNACK/CHOKE.
931                  */
932                 if (frametype != NR_CONNACK || flags != NR_CHOKE_FLAG)
933                         nr_transmit_refusal(skb, 1);
934 #endif
935                 return 0;
936         }
937
938         sk = nr_find_listener(dest);
939
940         user = (ax25_address *)(skb->data + 21);
941
942         if (!sk || sk->sk_ack_backlog == sk->sk_max_ack_backlog ||
943             (make = nr_make_new(sk)) == NULL) {
944                 nr_transmit_refusal(skb, 0);
945                 if (sk)
946                         bh_unlock_sock(sk);
947                 return 0;
948         }
949
950         window = skb->data[20];
951
952         skb->sk             = make;
953         make->sk_state      = TCP_ESTABLISHED;
954
955         /* Fill in his circuit details */
956         nr_make = nr_sk(make);
957         nr_make->source_addr = *dest;
958         nr_make->dest_addr   = *src;
959         nr_make->user_addr   = *user;
960
961         nr_make->your_index  = circuit_index;
962         nr_make->your_id     = circuit_id;
963
964         bh_unlock_sock(sk);
965         circuit = nr_find_next_circuit();
966         bh_lock_sock(sk);
967
968         nr_make->my_index    = circuit / 256;
969         nr_make->my_id       = circuit % 256;
970
971         circuit++;
972
973         /* Window negotiation */
974         if (window < nr_make->window)
975                 nr_make->window = window;
976
977         /* L4 timeout negotiation */
978         if (skb->len == 37) {
979                 timeout = skb->data[36] * 256 + skb->data[35];
980                 if (timeout * HZ < nr_make->t1)
981                         nr_make->t1 = timeout * HZ;
982                 nr_make->bpqext = 1;
983         } else {
984                 nr_make->bpqext = 0;
985         }
986
987         nr_write_internal(make, NR_CONNACK);
988
989         nr_make->condition = 0x00;
990         nr_make->vs        = 0;
991         nr_make->va        = 0;
992         nr_make->vr        = 0;
993         nr_make->vl        = 0;
994         nr_make->state     = NR_STATE_3;
995         sk->sk_ack_backlog++;
996         make->sk_pair = sk;
997
998         nr_insert_socket(make);
999
1000         skb_queue_head(&sk->sk_receive_queue, skb);
1001
1002         nr_start_heartbeat(make);
1003         nr_start_idletimer(make);
1004
1005         if (!sock_flag(sk, SOCK_DEAD))
1006                 sk->sk_data_ready(sk, skb->len);
1007
1008         bh_unlock_sock(sk);
1009         return 1;
1010 }
1011
1012 static int nr_sendmsg(struct kiocb *iocb, struct socket *sock,
1013                       struct msghdr *msg, size_t len)
1014 {
1015         struct sock *sk = sock->sk;
1016         nr_cb *nr = nr_sk(sk);
1017         struct sockaddr_ax25 *usax = (struct sockaddr_ax25 *)msg->msg_name;
1018         int err;
1019         struct sockaddr_ax25 sax;
1020         struct sk_buff *skb;
1021         unsigned char *asmptr;
1022         int size;
1023
1024         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1025                 return -EINVAL;
1026
1027         lock_sock(sk);
1028         if (sk->sk_zapped) {
1029                 err = -EADDRNOTAVAIL;
1030                 goto out;
1031         }
1032
1033         if (sk->sk_shutdown & SEND_SHUTDOWN) {
1034                 send_sig(SIGPIPE, current, 0);
1035                 err = -EPIPE;
1036                 goto out;
1037         }
1038
1039         if (nr->device == NULL) {
1040                 err = -ENETUNREACH;
1041                 goto out;
1042         }
1043
1044         if (usax) {
1045                 if (msg->msg_namelen < sizeof(sax)) {
1046                         err = -EINVAL;
1047                         goto out;
1048                 }
1049                 sax = *usax;
1050                 if (ax25cmp(&nr->dest_addr, &sax.sax25_call) != 0) {
1051                         err = -EISCONN;
1052                         goto out;
1053                 }
1054                 if (sax.sax25_family != AF_NETROM) {
1055                         err = -EINVAL;
1056                         goto out;
1057                 }
1058         } else {
1059                 if (sk->sk_state != TCP_ESTABLISHED) {
1060                         err = -ENOTCONN;
1061                         goto out;
1062                 }
1063                 sax.sax25_family = AF_NETROM;
1064                 sax.sax25_call   = nr->dest_addr;
1065         }
1066
1067         SOCK_DEBUG(sk, "NET/ROM: sendto: Addresses built.\n");
1068
1069         /* Build a packet */
1070         SOCK_DEBUG(sk, "NET/ROM: sendto: building packet.\n");
1071         size = len + NR_NETWORK_LEN + NR_TRANSPORT_LEN;
1072
1073         if ((skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT, &err)) == NULL)
1074                 goto out;
1075
1076         skb_reserve(skb, size - len);
1077
1078         /*
1079          *      Push down the NET/ROM header
1080          */
1081
1082         asmptr = skb_push(skb, NR_TRANSPORT_LEN);
1083         SOCK_DEBUG(sk, "Building NET/ROM Header.\n");
1084
1085         /* Build a NET/ROM Transport header */
1086
1087         *asmptr++ = nr->your_index;
1088         *asmptr++ = nr->your_id;
1089         *asmptr++ = 0;          /* To be filled in later */
1090         *asmptr++ = 0;          /*      Ditto            */
1091         *asmptr++ = NR_INFO;
1092         SOCK_DEBUG(sk, "Built header.\n");
1093
1094         /*
1095          *      Put the data on the end
1096          */
1097
1098         skb->h.raw = skb_put(skb, len);
1099
1100         asmptr = skb->h.raw;
1101         SOCK_DEBUG(sk, "NET/ROM: Appending user data\n");
1102
1103         /* User data follows immediately after the NET/ROM transport header */
1104         if (memcpy_fromiovec(asmptr, msg->msg_iov, len)) {
1105                 kfree_skb(skb);
1106                 err = -EFAULT;
1107                 goto out;
1108         }
1109
1110         SOCK_DEBUG(sk, "NET/ROM: Transmitting buffer\n");
1111
1112         if (sk->sk_state != TCP_ESTABLISHED) {
1113                 kfree_skb(skb);
1114                 err = -ENOTCONN;
1115                 goto out;
1116         }
1117
1118         nr_output(sk, skb);     /* Shove it onto the queue */
1119
1120         err = len;
1121 out:
1122         release_sock(sk);
1123         return err;
1124 }
1125
1126 static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
1127                       struct msghdr *msg, size_t size, int flags)
1128 {
1129         struct sock *sk = sock->sk;
1130         struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
1131         size_t copied;
1132         struct sk_buff *skb;
1133         int er;
1134
1135         /*
1136          * This works for seqpacket too. The receiver has ordered the queue for
1137          * us! We do one quick check first though
1138          */
1139
1140         lock_sock(sk);
1141         if (sk->sk_state != TCP_ESTABLISHED) {
1142                 release_sock(sk);
1143                 return -ENOTCONN;
1144         }
1145
1146         /* Now we can treat all alike */
1147         if ((skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &er)) == NULL) {
1148                 release_sock(sk);
1149                 return er;
1150         }
1151
1152         skb->h.raw = skb->data;
1153         copied     = skb->len;
1154
1155         if (copied > size) {
1156                 copied = size;
1157                 msg->msg_flags |= MSG_TRUNC;
1158         }
1159
1160         skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1161
1162         if (sax != NULL) {
1163                 sax->sax25_family = AF_NETROM;
1164                 memcpy(sax->sax25_call.ax25_call, skb->data + 7, AX25_ADDR_LEN);
1165         }
1166
1167         msg->msg_namelen = sizeof(*sax);
1168
1169         skb_free_datagram(sk, skb);
1170
1171         release_sock(sk);
1172         return copied;
1173 }
1174
1175
1176 static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1177 {
1178         struct sock *sk = sock->sk;
1179         void __user *argp = (void __user *)arg;
1180         int ret;
1181
1182         lock_sock(sk);
1183         switch (cmd) {
1184         case TIOCOUTQ: {
1185                 long amount;
1186                 amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
1187                 if (amount < 0)
1188                         amount = 0;
1189                 release_sock(sk);
1190                 return put_user(amount, (int __user *)argp);
1191         }
1192
1193         case TIOCINQ: {
1194                 struct sk_buff *skb;
1195                 long amount = 0L;
1196                 /* These two are safe on a single CPU system as only user tasks fiddle here */
1197                 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1198                         amount = skb->len;
1199                 release_sock(sk);
1200                 return put_user(amount, (int __user *)argp);
1201         }
1202
1203         case SIOCGSTAMP:
1204                 ret = -EINVAL;
1205                 if (sk != NULL)
1206                         ret = sock_get_timestamp(sk, argp);
1207                 release_sock(sk);
1208                 return ret;
1209
1210         case SIOCGIFADDR:
1211         case SIOCSIFADDR:
1212         case SIOCGIFDSTADDR:
1213         case SIOCSIFDSTADDR:
1214         case SIOCGIFBRDADDR:
1215         case SIOCSIFBRDADDR:
1216         case SIOCGIFNETMASK:
1217         case SIOCSIFNETMASK:
1218         case SIOCGIFMETRIC:
1219         case SIOCSIFMETRIC:
1220                 release_sock(sk);
1221                 return -EINVAL;
1222
1223         case SIOCADDRT:
1224         case SIOCDELRT:
1225         case SIOCNRDECOBS:
1226                 release_sock(sk);
1227                 if (!capable(CAP_NET_ADMIN)) return -EPERM;
1228                 return nr_rt_ioctl(cmd, argp);
1229
1230         default:
1231                 release_sock(sk);
1232                 return dev_ioctl(cmd, argp);
1233         }
1234         release_sock(sk);
1235
1236         return 0;
1237 }
1238
1239 #ifdef CONFIG_PROC_FS
1240
1241 static void *nr_info_start(struct seq_file *seq, loff_t *pos)
1242 {
1243         struct sock *s;
1244         struct hlist_node *node;
1245         int i = 1;
1246
1247         spin_lock_bh(&nr_list_lock);
1248         if (*pos == 0)
1249                 return SEQ_START_TOKEN;
1250
1251         sk_for_each(s, node, &nr_list) {
1252                 if (i == *pos)
1253                         return s;
1254                 ++i;
1255         }
1256         return NULL;
1257 }
1258
1259 static void *nr_info_next(struct seq_file *seq, void *v, loff_t *pos)
1260 {
1261         ++*pos;
1262
1263         return (v == SEQ_START_TOKEN) ? sk_head(&nr_list) 
1264                 : sk_next((struct sock *)v);
1265 }
1266         
1267 static void nr_info_stop(struct seq_file *seq, void *v)
1268 {
1269         spin_unlock_bh(&nr_list_lock);
1270 }
1271
1272 static int nr_info_show(struct seq_file *seq, void *v)
1273 {
1274         struct sock *s = v;
1275         struct net_device *dev;
1276         nr_cb *nr;
1277         const char *devname;
1278
1279         if (v == SEQ_START_TOKEN)
1280                 seq_puts(seq,
1281 "user_addr dest_node src_node  dev    my  your  st  vs  vr  va    t1     t2     t4      idle   n2  wnd Snd-Q Rcv-Q inode\n");
1282
1283         else {
1284
1285                 bh_lock_sock(s);
1286                 nr = nr_sk(s);
1287
1288                 if ((dev = nr->device) == NULL)
1289                         devname = "???";
1290                 else
1291                         devname = dev->name;
1292
1293                 seq_printf(seq, "%-9s ", ax2asc(&nr->user_addr));
1294                 seq_printf(seq, "%-9s ", ax2asc(&nr->dest_addr));
1295                 seq_printf(seq, 
1296 "%-9s %-3s  %02X/%02X %02X/%02X %2d %3d %3d %3d %3lu/%03lu %2lu/%02lu %3lu/%03lu %3lu/%03lu %2d/%02d %3d %5d %5d %ld\n",
1297                         ax2asc(&nr->source_addr),
1298                         devname,
1299                         nr->my_index,
1300                         nr->my_id,
1301                         nr->your_index,
1302                         nr->your_id,
1303                         nr->state,
1304                         nr->vs,
1305                         nr->vr,
1306                         nr->va,
1307                         ax25_display_timer(&nr->t1timer) / HZ,
1308                         nr->t1 / HZ,
1309                         ax25_display_timer(&nr->t2timer) / HZ,
1310                         nr->t2 / HZ,
1311                         ax25_display_timer(&nr->t4timer) / HZ,
1312                         nr->t4 / HZ,
1313                         ax25_display_timer(&nr->idletimer) / (60 * HZ),
1314                         nr->idle / (60 * HZ),
1315                         nr->n2count,
1316                         nr->n2,
1317                         nr->window,
1318                         atomic_read(&s->sk_wmem_alloc),
1319                         atomic_read(&s->sk_rmem_alloc),
1320                         s->sk_socket ? SOCK_INODE(s->sk_socket)->i_ino : 0L);
1321
1322                 bh_unlock_sock(s);
1323         }
1324         return 0;
1325 }
1326
1327 static struct seq_operations nr_info_seqops = {
1328         .start = nr_info_start,
1329         .next = nr_info_next,
1330         .stop = nr_info_stop,
1331         .show = nr_info_show,
1332 };
1333  
1334 static int nr_info_open(struct inode *inode, struct file *file)
1335 {
1336         return seq_open(file, &nr_info_seqops);
1337 }
1338  
1339 static struct file_operations nr_info_fops = {
1340         .owner = THIS_MODULE,
1341         .open = nr_info_open,
1342         .read = seq_read,
1343         .llseek = seq_lseek,
1344         .release = seq_release,
1345 };
1346 #endif  /* CONFIG_PROC_FS */
1347
1348 static struct net_proto_family nr_family_ops = {
1349         .family         =       PF_NETROM,
1350         .create         =       nr_create,
1351         .owner          =       THIS_MODULE,
1352 };
1353
1354 static struct proto_ops nr_proto_ops = {
1355         .family         =       PF_NETROM,
1356         .owner          =       THIS_MODULE,
1357         .release        =       nr_release,
1358         .bind           =       nr_bind,
1359         .connect        =       nr_connect,
1360         .socketpair     =       sock_no_socketpair,
1361         .accept         =       nr_accept,
1362         .getname        =       nr_getname,
1363         .poll           =       datagram_poll,
1364         .ioctl          =       nr_ioctl,
1365         .listen         =       nr_listen,
1366         .shutdown       =       sock_no_shutdown,
1367         .setsockopt     =       nr_setsockopt,
1368         .getsockopt     =       nr_getsockopt,
1369         .sendmsg        =       nr_sendmsg,
1370         .recvmsg        =       nr_recvmsg,
1371         .mmap           =       sock_no_mmap,
1372         .sendpage       =       sock_no_sendpage,
1373 };
1374
1375 static struct notifier_block nr_dev_notifier = {
1376         .notifier_call  =       nr_device_event,
1377 };
1378
1379 static struct net_device **dev_nr;
1380
1381 static char banner[] __initdata = KERN_INFO "G4KLX NET/ROM for Linux. Version 0.7 for AX25.037 Linux 2.4\n";
1382
1383 static int __init nr_proto_init(void)
1384 {
1385         int i;
1386
1387         if (nr_ndevs > 0x7fffffff/sizeof(struct net_device *)) {
1388                 printk(KERN_ERR "NET/ROM: nr_proto_init - nr_ndevs parameter to large\n");
1389                 return -1;
1390         }
1391
1392         dev_nr = kmalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
1393         if (dev_nr == NULL) {
1394                 printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device array\n");
1395                 return -1;
1396         }
1397
1398         memset(dev_nr, 0x00, nr_ndevs * sizeof(struct net_device *));
1399
1400         for (i = 0; i < nr_ndevs; i++) {
1401                 char name[IFNAMSIZ];
1402                 struct net_device *dev;
1403
1404                 sprintf(name, "nr%d", i);
1405                 dev = alloc_netdev(sizeof(struct net_device_stats), name,
1406                                           nr_setup);
1407                 if (!dev) {
1408                         printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device structure\n");
1409                         goto fail;
1410                 }
1411                 
1412                 dev->base_addr = i;
1413                 if (register_netdev(dev)) {
1414                         printk(KERN_ERR "NET/ROM: nr_proto_init - unable to register network device\n");
1415                         free_netdev(dev);
1416                         goto fail;
1417                 }
1418                 dev_nr[i] = dev;
1419         }
1420
1421         if (sock_register(&nr_family_ops)) {
1422                 printk(KERN_ERR "NET/ROM: nr_proto_init - unable to register socket family\n");
1423                 goto fail;
1424         }
1425                 
1426         register_netdevice_notifier(&nr_dev_notifier);
1427         printk(banner);
1428
1429         ax25_protocol_register(AX25_P_NETROM, nr_route_frame);
1430         ax25_linkfail_register(nr_link_failed);
1431
1432 #ifdef CONFIG_SYSCTL
1433         nr_register_sysctl();
1434 #endif
1435
1436         nr_loopback_init();
1437
1438         proc_net_fops_create("nr", S_IRUGO, &nr_info_fops);
1439         proc_net_fops_create("nr_neigh", S_IRUGO, &nr_neigh_fops);
1440         proc_net_fops_create("nr_nodes", S_IRUGO, &nr_nodes_fops);
1441         return 0;
1442
1443  fail:
1444         while (--i >= 0) {
1445                 unregister_netdev(dev_nr[i]);
1446                 free_netdev(dev_nr[i]);
1447         }
1448         kfree(dev_nr);
1449         return -1;
1450 }
1451
1452 module_init(nr_proto_init);
1453
1454
1455 MODULE_PARM(nr_ndevs, "i");
1456 MODULE_PARM_DESC(nr_ndevs, "number of NET/ROM devices");
1457
1458 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
1459 MODULE_DESCRIPTION("The amateur radio NET/ROM network and transport layer protocol");
1460 MODULE_LICENSE("GPL");
1461 MODULE_ALIAS_NETPROTO(PF_NETROM);
1462
1463 static void __exit nr_exit(void)
1464 {
1465         int i;
1466
1467         proc_net_remove("nr");
1468         proc_net_remove("nr_neigh");
1469         proc_net_remove("nr_nodes");
1470         nr_loopback_clear();
1471
1472         nr_rt_free();
1473
1474 #ifdef CONFIG_SYSCTL
1475         nr_unregister_sysctl();
1476 #endif
1477
1478         ax25_linkfail_release(nr_link_failed);
1479         ax25_protocol_release(AX25_P_NETROM);
1480
1481         unregister_netdevice_notifier(&nr_dev_notifier);
1482
1483         sock_unregister(PF_NETROM);
1484
1485         for (i = 0; i < nr_ndevs; i++) {
1486                 struct net_device *dev = dev_nr[i];
1487                 if (dev) {
1488                         unregister_netdev(dev);
1489                         free_netdev(dev);
1490                 }
1491         }
1492
1493         kfree(dev_nr);
1494 }
1495 module_exit(nr_exit);