GNU Linux-libre 4.19.314-gnu1
[releases.git] / net / rose / af_rose.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 (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
8  * Copyright (C) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
9  * Copyright (C) Terry Dawson VK2KTJ (terry@animats.net)
10  * Copyright (C) Tomi Manninen OH2BNS (oh2bns@sral.fi)
11  */
12
13 #include <linux/capability.h>
14 #include <linux/module.h>
15 #include <linux/moduleparam.h>
16 #include <linux/init.h>
17 #include <linux/errno.h>
18 #include <linux/types.h>
19 #include <linux/socket.h>
20 #include <linux/in.h>
21 #include <linux/slab.h>
22 #include <linux/kernel.h>
23 #include <linux/sched/signal.h>
24 #include <linux/spinlock.h>
25 #include <linux/timer.h>
26 #include <linux/string.h>
27 #include <linux/sockios.h>
28 #include <linux/net.h>
29 #include <linux/stat.h>
30 #include <net/net_namespace.h>
31 #include <net/ax25.h>
32 #include <linux/inet.h>
33 #include <linux/netdevice.h>
34 #include <linux/if_arp.h>
35 #include <linux/skbuff.h>
36 #include <net/sock.h>
37 #include <linux/uaccess.h>
38 #include <linux/fcntl.h>
39 #include <linux/termios.h>
40 #include <linux/mm.h>
41 #include <linux/interrupt.h>
42 #include <linux/notifier.h>
43 #include <net/rose.h>
44 #include <linux/proc_fs.h>
45 #include <linux/seq_file.h>
46 #include <net/tcp_states.h>
47 #include <net/ip.h>
48 #include <net/arp.h>
49
50 static int rose_ndevs = 10;
51
52 int sysctl_rose_restart_request_timeout = ROSE_DEFAULT_T0;
53 int sysctl_rose_call_request_timeout    = ROSE_DEFAULT_T1;
54 int sysctl_rose_reset_request_timeout   = ROSE_DEFAULT_T2;
55 int sysctl_rose_clear_request_timeout   = ROSE_DEFAULT_T3;
56 int sysctl_rose_no_activity_timeout     = ROSE_DEFAULT_IDLE;
57 int sysctl_rose_ack_hold_back_timeout   = ROSE_DEFAULT_HB;
58 int sysctl_rose_routing_control         = ROSE_DEFAULT_ROUTING;
59 int sysctl_rose_link_fail_timeout       = ROSE_DEFAULT_FAIL_TIMEOUT;
60 int sysctl_rose_maximum_vcs             = ROSE_DEFAULT_MAXVC;
61 int sysctl_rose_window_size             = ROSE_DEFAULT_WINDOW_SIZE;
62
63 static HLIST_HEAD(rose_list);
64 static DEFINE_SPINLOCK(rose_list_lock);
65
66 static const struct proto_ops rose_proto_ops;
67
68 ax25_address rose_callsign;
69
70 /*
71  * ROSE network devices are virtual network devices encapsulating ROSE
72  * frames into AX.25 which will be sent through an AX.25 device, so form a
73  * special "super class" of normal net devices; split their locks off into a
74  * separate class since they always nest.
75  */
76 static struct lock_class_key rose_netdev_xmit_lock_key;
77 static struct lock_class_key rose_netdev_addr_lock_key;
78
79 static void rose_set_lockdep_one(struct net_device *dev,
80                                  struct netdev_queue *txq,
81                                  void *_unused)
82 {
83         lockdep_set_class(&txq->_xmit_lock, &rose_netdev_xmit_lock_key);
84 }
85
86 static void rose_set_lockdep_key(struct net_device *dev)
87 {
88         lockdep_set_class(&dev->addr_list_lock, &rose_netdev_addr_lock_key);
89         netdev_for_each_tx_queue(dev, rose_set_lockdep_one, NULL);
90 }
91
92 /*
93  *      Convert a ROSE address into text.
94  */
95 char *rose2asc(char *buf, const rose_address *addr)
96 {
97         if (addr->rose_addr[0] == 0x00 && addr->rose_addr[1] == 0x00 &&
98             addr->rose_addr[2] == 0x00 && addr->rose_addr[3] == 0x00 &&
99             addr->rose_addr[4] == 0x00) {
100                 strcpy(buf, "*");
101         } else {
102                 sprintf(buf, "%02X%02X%02X%02X%02X", addr->rose_addr[0] & 0xFF,
103                                                 addr->rose_addr[1] & 0xFF,
104                                                 addr->rose_addr[2] & 0xFF,
105                                                 addr->rose_addr[3] & 0xFF,
106                                                 addr->rose_addr[4] & 0xFF);
107         }
108
109         return buf;
110 }
111
112 /*
113  *      Compare two ROSE addresses, 0 == equal.
114  */
115 int rosecmp(rose_address *addr1, rose_address *addr2)
116 {
117         int i;
118
119         for (i = 0; i < 5; i++)
120                 if (addr1->rose_addr[i] != addr2->rose_addr[i])
121                         return 1;
122
123         return 0;
124 }
125
126 /*
127  *      Compare two ROSE addresses for only mask digits, 0 == equal.
128  */
129 int rosecmpm(rose_address *addr1, rose_address *addr2, unsigned short mask)
130 {
131         unsigned int i, j;
132
133         if (mask > 10)
134                 return 1;
135
136         for (i = 0; i < mask; i++) {
137                 j = i / 2;
138
139                 if ((i % 2) != 0) {
140                         if ((addr1->rose_addr[j] & 0x0F) != (addr2->rose_addr[j] & 0x0F))
141                                 return 1;
142                 } else {
143                         if ((addr1->rose_addr[j] & 0xF0) != (addr2->rose_addr[j] & 0xF0))
144                                 return 1;
145                 }
146         }
147
148         return 0;
149 }
150
151 /*
152  *      Socket removal during an interrupt is now safe.
153  */
154 static void rose_remove_socket(struct sock *sk)
155 {
156         spin_lock_bh(&rose_list_lock);
157         sk_del_node_init(sk);
158         spin_unlock_bh(&rose_list_lock);
159 }
160
161 /*
162  *      Kill all bound sockets on a broken link layer connection to a
163  *      particular neighbour.
164  */
165 void rose_kill_by_neigh(struct rose_neigh *neigh)
166 {
167         struct sock *s;
168
169         spin_lock_bh(&rose_list_lock);
170         sk_for_each(s, &rose_list) {
171                 struct rose_sock *rose = rose_sk(s);
172
173                 if (rose->neighbour == neigh) {
174                         rose_disconnect(s, ENETUNREACH, ROSE_OUT_OF_ORDER, 0);
175                         rose->neighbour->use--;
176                         rose->neighbour = NULL;
177                 }
178         }
179         spin_unlock_bh(&rose_list_lock);
180 }
181
182 /*
183  *      Kill all bound sockets on a dropped device.
184  */
185 static void rose_kill_by_device(struct net_device *dev)
186 {
187         struct sock *sk, *array[16];
188         struct rose_sock *rose;
189         bool rescan;
190         int i, cnt;
191
192 start:
193         rescan = false;
194         cnt = 0;
195         spin_lock_bh(&rose_list_lock);
196         sk_for_each(sk, &rose_list) {
197                 rose = rose_sk(sk);
198                 if (rose->device == dev) {
199                         if (cnt == ARRAY_SIZE(array)) {
200                                 rescan = true;
201                                 break;
202                         }
203                         sock_hold(sk);
204                         array[cnt++] = sk;
205                 }
206         }
207         spin_unlock_bh(&rose_list_lock);
208
209         for (i = 0; i < cnt; i++) {
210                 sk = array[cnt];
211                 rose = rose_sk(sk);
212                 lock_sock(sk);
213                 spin_lock_bh(&rose_list_lock);
214                 if (rose->device == dev) {
215                         rose_disconnect(sk, ENETUNREACH, ROSE_OUT_OF_ORDER, 0);
216                         if (rose->neighbour)
217                                 rose->neighbour->use--;
218                         dev_put(rose->device);
219                         rose->device = NULL;
220                 }
221                 spin_unlock_bh(&rose_list_lock);
222                 release_sock(sk);
223                 sock_put(sk);
224                 cond_resched();
225         }
226         if (rescan)
227                 goto start;
228 }
229
230 /*
231  *      Handle device status changes.
232  */
233 static int rose_device_event(struct notifier_block *this,
234                              unsigned long event, void *ptr)
235 {
236         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
237
238         if (!net_eq(dev_net(dev), &init_net))
239                 return NOTIFY_DONE;
240
241         if (event != NETDEV_DOWN)
242                 return NOTIFY_DONE;
243
244         switch (dev->type) {
245         case ARPHRD_ROSE:
246                 rose_kill_by_device(dev);
247                 break;
248         case ARPHRD_AX25:
249                 rose_link_device_down(dev);
250                 rose_rt_device_down(dev);
251                 break;
252         }
253
254         return NOTIFY_DONE;
255 }
256
257 /*
258  *      Add a socket to the bound sockets list.
259  */
260 static void rose_insert_socket(struct sock *sk)
261 {
262
263         spin_lock_bh(&rose_list_lock);
264         sk_add_node(sk, &rose_list);
265         spin_unlock_bh(&rose_list_lock);
266 }
267
268 /*
269  *      Find a socket that wants to accept the Call Request we just
270  *      received.
271  */
272 static struct sock *rose_find_listener(rose_address *addr, ax25_address *call)
273 {
274         struct sock *s;
275
276         spin_lock_bh(&rose_list_lock);
277         sk_for_each(s, &rose_list) {
278                 struct rose_sock *rose = rose_sk(s);
279
280                 if (!rosecmp(&rose->source_addr, addr) &&
281                     !ax25cmp(&rose->source_call, call) &&
282                     !rose->source_ndigis && s->sk_state == TCP_LISTEN)
283                         goto found;
284         }
285
286         sk_for_each(s, &rose_list) {
287                 struct rose_sock *rose = rose_sk(s);
288
289                 if (!rosecmp(&rose->source_addr, addr) &&
290                     !ax25cmp(&rose->source_call, &null_ax25_address) &&
291                     s->sk_state == TCP_LISTEN)
292                         goto found;
293         }
294         s = NULL;
295 found:
296         spin_unlock_bh(&rose_list_lock);
297         return s;
298 }
299
300 /*
301  *      Find a connected ROSE socket given my LCI and device.
302  */
303 struct sock *rose_find_socket(unsigned int lci, struct rose_neigh *neigh)
304 {
305         struct sock *s;
306
307         spin_lock_bh(&rose_list_lock);
308         sk_for_each(s, &rose_list) {
309                 struct rose_sock *rose = rose_sk(s);
310
311                 if (rose->lci == lci && rose->neighbour == neigh)
312                         goto found;
313         }
314         s = NULL;
315 found:
316         spin_unlock_bh(&rose_list_lock);
317         return s;
318 }
319
320 /*
321  *      Find a unique LCI for a given device.
322  */
323 unsigned int rose_new_lci(struct rose_neigh *neigh)
324 {
325         int lci;
326
327         if (neigh->dce_mode) {
328                 for (lci = 1; lci <= sysctl_rose_maximum_vcs; lci++)
329                         if (rose_find_socket(lci, neigh) == NULL && rose_route_free_lci(lci, neigh) == NULL)
330                                 return lci;
331         } else {
332                 for (lci = sysctl_rose_maximum_vcs; lci > 0; lci--)
333                         if (rose_find_socket(lci, neigh) == NULL && rose_route_free_lci(lci, neigh) == NULL)
334                                 return lci;
335         }
336
337         return 0;
338 }
339
340 /*
341  *      Deferred destroy.
342  */
343 void rose_destroy_socket(struct sock *);
344
345 /*
346  *      Handler for deferred kills.
347  */
348 static void rose_destroy_timer(struct timer_list *t)
349 {
350         struct sock *sk = from_timer(sk, t, sk_timer);
351
352         rose_destroy_socket(sk);
353 }
354
355 /*
356  *      This is called from user mode and the timers. Thus it protects itself
357  *      against interrupt users but doesn't worry about being called during
358  *      work.  Once it is removed from the queue no interrupt or bottom half
359  *      will touch it and we are (fairly 8-) ) safe.
360  */
361 void rose_destroy_socket(struct sock *sk)
362 {
363         struct sk_buff *skb;
364
365         rose_remove_socket(sk);
366         rose_stop_heartbeat(sk);
367         rose_stop_idletimer(sk);
368         rose_stop_timer(sk);
369
370         rose_clear_queues(sk);          /* Flush the queues */
371
372         while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
373                 if (skb->sk != sk) {    /* A pending connection */
374                         /* Queue the unaccepted socket for death */
375                         sock_set_flag(skb->sk, SOCK_DEAD);
376                         rose_start_heartbeat(skb->sk);
377                         rose_sk(skb->sk)->state = ROSE_STATE_0;
378                 }
379
380                 kfree_skb(skb);
381         }
382
383         if (sk_has_allocations(sk)) {
384                 /* Defer: outstanding buffers */
385                 timer_setup(&sk->sk_timer, rose_destroy_timer, 0);
386                 sk->sk_timer.expires  = jiffies + 10 * HZ;
387                 add_timer(&sk->sk_timer);
388         } else
389                 sock_put(sk);
390 }
391
392 /*
393  *      Handling for system calls applied via the various interfaces to a
394  *      ROSE socket object.
395  */
396
397 static int rose_setsockopt(struct socket *sock, int level, int optname,
398         char __user *optval, unsigned int optlen)
399 {
400         struct sock *sk = sock->sk;
401         struct rose_sock *rose = rose_sk(sk);
402         int opt;
403
404         if (level != SOL_ROSE)
405                 return -ENOPROTOOPT;
406
407         if (optlen < sizeof(int))
408                 return -EINVAL;
409
410         if (get_user(opt, (int __user *)optval))
411                 return -EFAULT;
412
413         switch (optname) {
414         case ROSE_DEFER:
415                 rose->defer = opt ? 1 : 0;
416                 return 0;
417
418         case ROSE_T1:
419                 if (opt < 1)
420                         return -EINVAL;
421                 rose->t1 = opt * HZ;
422                 return 0;
423
424         case ROSE_T2:
425                 if (opt < 1)
426                         return -EINVAL;
427                 rose->t2 = opt * HZ;
428                 return 0;
429
430         case ROSE_T3:
431                 if (opt < 1)
432                         return -EINVAL;
433                 rose->t3 = opt * HZ;
434                 return 0;
435
436         case ROSE_HOLDBACK:
437                 if (opt < 1)
438                         return -EINVAL;
439                 rose->hb = opt * HZ;
440                 return 0;
441
442         case ROSE_IDLE:
443                 if (opt < 0)
444                         return -EINVAL;
445                 rose->idle = opt * 60 * HZ;
446                 return 0;
447
448         case ROSE_QBITINCL:
449                 rose->qbitincl = opt ? 1 : 0;
450                 return 0;
451
452         default:
453                 return -ENOPROTOOPT;
454         }
455 }
456
457 static int rose_getsockopt(struct socket *sock, int level, int optname,
458         char __user *optval, int __user *optlen)
459 {
460         struct sock *sk = sock->sk;
461         struct rose_sock *rose = rose_sk(sk);
462         int val = 0;
463         int len;
464
465         if (level != SOL_ROSE)
466                 return -ENOPROTOOPT;
467
468         if (get_user(len, optlen))
469                 return -EFAULT;
470
471         if (len < 0)
472                 return -EINVAL;
473
474         switch (optname) {
475         case ROSE_DEFER:
476                 val = rose->defer;
477                 break;
478
479         case ROSE_T1:
480                 val = rose->t1 / HZ;
481                 break;
482
483         case ROSE_T2:
484                 val = rose->t2 / HZ;
485                 break;
486
487         case ROSE_T3:
488                 val = rose->t3 / HZ;
489                 break;
490
491         case ROSE_HOLDBACK:
492                 val = rose->hb / HZ;
493                 break;
494
495         case ROSE_IDLE:
496                 val = rose->idle / (60 * HZ);
497                 break;
498
499         case ROSE_QBITINCL:
500                 val = rose->qbitincl;
501                 break;
502
503         default:
504                 return -ENOPROTOOPT;
505         }
506
507         len = min_t(unsigned int, len, sizeof(int));
508
509         if (put_user(len, optlen))
510                 return -EFAULT;
511
512         return copy_to_user(optval, &val, len) ? -EFAULT : 0;
513 }
514
515 static int rose_listen(struct socket *sock, int backlog)
516 {
517         struct sock *sk = sock->sk;
518
519         lock_sock(sk);
520         if (sock->state != SS_UNCONNECTED) {
521                 release_sock(sk);
522                 return -EINVAL;
523         }
524
525         if (sk->sk_state != TCP_LISTEN) {
526                 struct rose_sock *rose = rose_sk(sk);
527
528                 rose->dest_ndigis = 0;
529                 memset(&rose->dest_addr, 0, ROSE_ADDR_LEN);
530                 memset(&rose->dest_call, 0, AX25_ADDR_LEN);
531                 memset(rose->dest_digis, 0, AX25_ADDR_LEN * ROSE_MAX_DIGIS);
532                 sk->sk_max_ack_backlog = backlog;
533                 sk->sk_state           = TCP_LISTEN;
534                 release_sock(sk);
535                 return 0;
536         }
537         release_sock(sk);
538
539         return -EOPNOTSUPP;
540 }
541
542 static struct proto rose_proto = {
543         .name     = "ROSE",
544         .owner    = THIS_MODULE,
545         .obj_size = sizeof(struct rose_sock),
546 };
547
548 static int rose_create(struct net *net, struct socket *sock, int protocol,
549                        int kern)
550 {
551         struct sock *sk;
552         struct rose_sock *rose;
553
554         if (!net_eq(net, &init_net))
555                 return -EAFNOSUPPORT;
556
557         if (sock->type != SOCK_SEQPACKET || protocol != 0)
558                 return -ESOCKTNOSUPPORT;
559
560         sk = sk_alloc(net, PF_ROSE, GFP_ATOMIC, &rose_proto, kern);
561         if (sk == NULL)
562                 return -ENOMEM;
563
564         rose = rose_sk(sk);
565
566         sock_init_data(sock, sk);
567
568         skb_queue_head_init(&rose->ack_queue);
569 #ifdef M_BIT
570         skb_queue_head_init(&rose->frag_queue);
571         rose->fraglen    = 0;
572 #endif
573
574         sock->ops    = &rose_proto_ops;
575         sk->sk_protocol = protocol;
576
577         timer_setup(&rose->timer, NULL, 0);
578         timer_setup(&rose->idletimer, NULL, 0);
579
580         rose->t1   = msecs_to_jiffies(sysctl_rose_call_request_timeout);
581         rose->t2   = msecs_to_jiffies(sysctl_rose_reset_request_timeout);
582         rose->t3   = msecs_to_jiffies(sysctl_rose_clear_request_timeout);
583         rose->hb   = msecs_to_jiffies(sysctl_rose_ack_hold_back_timeout);
584         rose->idle = msecs_to_jiffies(sysctl_rose_no_activity_timeout);
585
586         rose->state = ROSE_STATE_0;
587
588         return 0;
589 }
590
591 static struct sock *rose_make_new(struct sock *osk)
592 {
593         struct sock *sk;
594         struct rose_sock *rose, *orose;
595
596         if (osk->sk_type != SOCK_SEQPACKET)
597                 return NULL;
598
599         sk = sk_alloc(sock_net(osk), PF_ROSE, GFP_ATOMIC, &rose_proto, 0);
600         if (sk == NULL)
601                 return NULL;
602
603         rose = rose_sk(sk);
604
605         sock_init_data(NULL, sk);
606
607         skb_queue_head_init(&rose->ack_queue);
608 #ifdef M_BIT
609         skb_queue_head_init(&rose->frag_queue);
610         rose->fraglen  = 0;
611 #endif
612
613         sk->sk_type     = osk->sk_type;
614         sk->sk_priority = osk->sk_priority;
615         sk->sk_protocol = osk->sk_protocol;
616         sk->sk_rcvbuf   = osk->sk_rcvbuf;
617         sk->sk_sndbuf   = osk->sk_sndbuf;
618         sk->sk_state    = TCP_ESTABLISHED;
619         sock_copy_flags(sk, osk);
620
621         timer_setup(&rose->timer, NULL, 0);
622         timer_setup(&rose->idletimer, NULL, 0);
623
624         orose           = rose_sk(osk);
625         rose->t1        = orose->t1;
626         rose->t2        = orose->t2;
627         rose->t3        = orose->t3;
628         rose->hb        = orose->hb;
629         rose->idle      = orose->idle;
630         rose->defer     = orose->defer;
631         rose->device    = orose->device;
632         if (rose->device)
633                 dev_hold(rose->device);
634         rose->qbitincl  = orose->qbitincl;
635
636         return sk;
637 }
638
639 static int rose_release(struct socket *sock)
640 {
641         struct sock *sk = sock->sk;
642         struct rose_sock *rose;
643
644         if (sk == NULL) return 0;
645
646         sock_hold(sk);
647         sock_orphan(sk);
648         lock_sock(sk);
649         rose = rose_sk(sk);
650
651         switch (rose->state) {
652         case ROSE_STATE_0:
653                 release_sock(sk);
654                 rose_disconnect(sk, 0, -1, -1);
655                 lock_sock(sk);
656                 rose_destroy_socket(sk);
657                 break;
658
659         case ROSE_STATE_2:
660                 rose->neighbour->use--;
661                 release_sock(sk);
662                 rose_disconnect(sk, 0, -1, -1);
663                 lock_sock(sk);
664                 rose_destroy_socket(sk);
665                 break;
666
667         case ROSE_STATE_1:
668         case ROSE_STATE_3:
669         case ROSE_STATE_4:
670         case ROSE_STATE_5:
671                 rose_clear_queues(sk);
672                 rose_stop_idletimer(sk);
673                 rose_write_internal(sk, ROSE_CLEAR_REQUEST);
674                 rose_start_t3timer(sk);
675                 rose->state  = ROSE_STATE_2;
676                 sk->sk_state    = TCP_CLOSE;
677                 sk->sk_shutdown |= SEND_SHUTDOWN;
678                 sk->sk_state_change(sk);
679                 sock_set_flag(sk, SOCK_DEAD);
680                 sock_set_flag(sk, SOCK_DESTROY);
681                 break;
682
683         default:
684                 break;
685         }
686
687         spin_lock_bh(&rose_list_lock);
688         dev_put(rose->device);
689         rose->device = NULL;
690         spin_unlock_bh(&rose_list_lock);
691         sock->sk = NULL;
692         release_sock(sk);
693         sock_put(sk);
694
695         return 0;
696 }
697
698 static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
699 {
700         struct sock *sk = sock->sk;
701         struct rose_sock *rose = rose_sk(sk);
702         struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr;
703         struct net_device *dev;
704         ax25_address *source;
705         ax25_uid_assoc *user;
706         int n;
707
708         if (!sock_flag(sk, SOCK_ZAPPED))
709                 return -EINVAL;
710
711         if (addr_len != sizeof(struct sockaddr_rose) && addr_len != sizeof(struct full_sockaddr_rose))
712                 return -EINVAL;
713
714         if (addr->srose_family != AF_ROSE)
715                 return -EINVAL;
716
717         if (addr_len == sizeof(struct sockaddr_rose) && addr->srose_ndigis > 1)
718                 return -EINVAL;
719
720         if ((unsigned int) addr->srose_ndigis > ROSE_MAX_DIGIS)
721                 return -EINVAL;
722
723         if ((dev = rose_dev_get(&addr->srose_addr)) == NULL)
724                 return -EADDRNOTAVAIL;
725
726         source = &addr->srose_call;
727
728         user = ax25_findbyuid(current_euid());
729         if (user) {
730                 rose->source_call = user->call;
731                 ax25_uid_put(user);
732         } else {
733                 if (ax25_uid_policy && !capable(CAP_NET_BIND_SERVICE))
734                         return -EACCES;
735                 rose->source_call   = *source;
736         }
737
738         rose->source_addr   = addr->srose_addr;
739         rose->device        = dev;
740         rose->source_ndigis = addr->srose_ndigis;
741
742         if (addr_len == sizeof(struct full_sockaddr_rose)) {
743                 struct full_sockaddr_rose *full_addr = (struct full_sockaddr_rose *)uaddr;
744                 for (n = 0 ; n < addr->srose_ndigis ; n++)
745                         rose->source_digis[n] = full_addr->srose_digis[n];
746         } else {
747                 if (rose->source_ndigis == 1) {
748                         rose->source_digis[0] = addr->srose_digi;
749                 }
750         }
751
752         rose_insert_socket(sk);
753
754         sock_reset_flag(sk, SOCK_ZAPPED);
755
756         return 0;
757 }
758
759 static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags)
760 {
761         struct sock *sk = sock->sk;
762         struct rose_sock *rose = rose_sk(sk);
763         struct sockaddr_rose *addr = (struct sockaddr_rose *)uaddr;
764         unsigned char cause, diagnostic;
765         ax25_uid_assoc *user;
766         int n, err = 0;
767
768         if (addr_len != sizeof(struct sockaddr_rose) && addr_len != sizeof(struct full_sockaddr_rose))
769                 return -EINVAL;
770
771         if (addr->srose_family != AF_ROSE)
772                 return -EINVAL;
773
774         if (addr_len == sizeof(struct sockaddr_rose) && addr->srose_ndigis > 1)
775                 return -EINVAL;
776
777         if ((unsigned int) addr->srose_ndigis > ROSE_MAX_DIGIS)
778                 return -EINVAL;
779
780         /* Source + Destination digis should not exceed ROSE_MAX_DIGIS */
781         if ((rose->source_ndigis + addr->srose_ndigis) > ROSE_MAX_DIGIS)
782                 return -EINVAL;
783
784         lock_sock(sk);
785
786         if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) {
787                 /* Connect completed during a ERESTARTSYS event */
788                 sock->state = SS_CONNECTED;
789                 goto out_release;
790         }
791
792         if (sk->sk_state == TCP_CLOSE && sock->state == SS_CONNECTING) {
793                 sock->state = SS_UNCONNECTED;
794                 err = -ECONNREFUSED;
795                 goto out_release;
796         }
797
798         if (sk->sk_state == TCP_ESTABLISHED) {
799                 /* No reconnect on a seqpacket socket */
800                 err = -EISCONN;
801                 goto out_release;
802         }
803
804         sk->sk_state   = TCP_CLOSE;
805         sock->state = SS_UNCONNECTED;
806
807         rose->neighbour = rose_get_neigh(&addr->srose_addr, &cause,
808                                          &diagnostic, 0);
809         if (!rose->neighbour) {
810                 err = -ENETUNREACH;
811                 goto out_release;
812         }
813
814         rose->lci = rose_new_lci(rose->neighbour);
815         if (!rose->lci) {
816                 err = -ENETUNREACH;
817                 goto out_release;
818         }
819
820         if (sock_flag(sk, SOCK_ZAPPED)) {       /* Must bind first - autobinding in this may or may not work */
821                 struct net_device *dev;
822
823                 sock_reset_flag(sk, SOCK_ZAPPED);
824
825                 dev = rose_dev_first();
826                 if (!dev) {
827                         err = -ENETUNREACH;
828                         goto out_release;
829                 }
830
831                 user = ax25_findbyuid(current_euid());
832                 if (!user) {
833                         err = -EINVAL;
834                         dev_put(dev);
835                         goto out_release;
836                 }
837
838                 memcpy(&rose->source_addr, dev->dev_addr, ROSE_ADDR_LEN);
839                 rose->source_call = user->call;
840                 rose->device      = dev;
841                 ax25_uid_put(user);
842
843                 rose_insert_socket(sk);         /* Finish the bind */
844         }
845         rose->dest_addr   = addr->srose_addr;
846         rose->dest_call   = addr->srose_call;
847         rose->rand        = ((long)rose & 0xFFFF) + rose->lci;
848         rose->dest_ndigis = addr->srose_ndigis;
849
850         if (addr_len == sizeof(struct full_sockaddr_rose)) {
851                 struct full_sockaddr_rose *full_addr = (struct full_sockaddr_rose *)uaddr;
852                 for (n = 0 ; n < addr->srose_ndigis ; n++)
853                         rose->dest_digis[n] = full_addr->srose_digis[n];
854         } else {
855                 if (rose->dest_ndigis == 1) {
856                         rose->dest_digis[0] = addr->srose_digi;
857                 }
858         }
859
860         /* Move to connecting socket, start sending Connect Requests */
861         sock->state   = SS_CONNECTING;
862         sk->sk_state     = TCP_SYN_SENT;
863
864         rose->state = ROSE_STATE_1;
865
866         rose->neighbour->use++;
867
868         rose_write_internal(sk, ROSE_CALL_REQUEST);
869         rose_start_heartbeat(sk);
870         rose_start_t1timer(sk);
871
872         /* Now the loop */
873         if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
874                 err = -EINPROGRESS;
875                 goto out_release;
876         }
877
878         /*
879          * A Connect Ack with Choke or timeout or failed routing will go to
880          * closed.
881          */
882         if (sk->sk_state == TCP_SYN_SENT) {
883                 DEFINE_WAIT(wait);
884
885                 for (;;) {
886                         prepare_to_wait(sk_sleep(sk), &wait,
887                                         TASK_INTERRUPTIBLE);
888                         if (sk->sk_state != TCP_SYN_SENT)
889                                 break;
890                         if (!signal_pending(current)) {
891                                 release_sock(sk);
892                                 schedule();
893                                 lock_sock(sk);
894                                 continue;
895                         }
896                         err = -ERESTARTSYS;
897                         break;
898                 }
899                 finish_wait(sk_sleep(sk), &wait);
900
901                 if (err)
902                         goto out_release;
903         }
904
905         if (sk->sk_state != TCP_ESTABLISHED) {
906                 sock->state = SS_UNCONNECTED;
907                 err = sock_error(sk);   /* Always set at this point */
908                 goto out_release;
909         }
910
911         sock->state = SS_CONNECTED;
912
913 out_release:
914         release_sock(sk);
915
916         return err;
917 }
918
919 static int rose_accept(struct socket *sock, struct socket *newsock, int flags,
920                        bool kern)
921 {
922         struct sk_buff *skb;
923         struct sock *newsk;
924         DEFINE_WAIT(wait);
925         struct sock *sk;
926         int err = 0;
927
928         if ((sk = sock->sk) == NULL)
929                 return -EINVAL;
930
931         lock_sock(sk);
932         if (sk->sk_type != SOCK_SEQPACKET) {
933                 err = -EOPNOTSUPP;
934                 goto out_release;
935         }
936
937         if (sk->sk_state != TCP_LISTEN) {
938                 err = -EINVAL;
939                 goto out_release;
940         }
941
942         /*
943          *      The write queue this time is holding sockets ready to use
944          *      hooked into the SABM we saved
945          */
946         for (;;) {
947                 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
948
949                 skb = skb_dequeue(&sk->sk_receive_queue);
950                 if (skb)
951                         break;
952
953                 if (flags & O_NONBLOCK) {
954                         err = -EWOULDBLOCK;
955                         break;
956                 }
957                 if (!signal_pending(current)) {
958                         release_sock(sk);
959                         schedule();
960                         lock_sock(sk);
961                         continue;
962                 }
963                 err = -ERESTARTSYS;
964                 break;
965         }
966         finish_wait(sk_sleep(sk), &wait);
967         if (err)
968                 goto out_release;
969
970         newsk = skb->sk;
971         sock_graft(newsk, newsock);
972
973         /* Now attach up the new socket */
974         skb->sk = NULL;
975         kfree_skb(skb);
976         sk->sk_ack_backlog--;
977
978 out_release:
979         release_sock(sk);
980
981         return err;
982 }
983
984 static int rose_getname(struct socket *sock, struct sockaddr *uaddr,
985         int peer)
986 {
987         struct full_sockaddr_rose *srose = (struct full_sockaddr_rose *)uaddr;
988         struct sock *sk = sock->sk;
989         struct rose_sock *rose = rose_sk(sk);
990         int n;
991
992         memset(srose, 0, sizeof(*srose));
993         if (peer != 0) {
994                 if (sk->sk_state != TCP_ESTABLISHED)
995                         return -ENOTCONN;
996                 srose->srose_family = AF_ROSE;
997                 srose->srose_addr   = rose->dest_addr;
998                 srose->srose_call   = rose->dest_call;
999                 srose->srose_ndigis = rose->dest_ndigis;
1000                 for (n = 0; n < rose->dest_ndigis; n++)
1001                         srose->srose_digis[n] = rose->dest_digis[n];
1002         } else {
1003                 srose->srose_family = AF_ROSE;
1004                 srose->srose_addr   = rose->source_addr;
1005                 srose->srose_call   = rose->source_call;
1006                 srose->srose_ndigis = rose->source_ndigis;
1007                 for (n = 0; n < rose->source_ndigis; n++)
1008                         srose->srose_digis[n] = rose->source_digis[n];
1009         }
1010
1011         return sizeof(struct full_sockaddr_rose);
1012 }
1013
1014 int rose_rx_call_request(struct sk_buff *skb, struct net_device *dev, struct rose_neigh *neigh, unsigned int lci)
1015 {
1016         struct sock *sk;
1017         struct sock *make;
1018         struct rose_sock *make_rose;
1019         struct rose_facilities_struct facilities;
1020         int n;
1021
1022         skb->sk = NULL;         /* Initially we don't know who it's for */
1023
1024         /*
1025          *      skb->data points to the rose frame start
1026          */
1027         memset(&facilities, 0x00, sizeof(struct rose_facilities_struct));
1028
1029         if (!rose_parse_facilities(skb->data + ROSE_CALL_REQ_FACILITIES_OFF,
1030                                    skb->len - ROSE_CALL_REQ_FACILITIES_OFF,
1031                                    &facilities)) {
1032                 rose_transmit_clear_request(neigh, lci, ROSE_INVALID_FACILITY, 76);
1033                 return 0;
1034         }
1035
1036         sk = rose_find_listener(&facilities.source_addr, &facilities.source_call);
1037
1038         /*
1039          * We can't accept the Call Request.
1040          */
1041         if (sk == NULL || sk_acceptq_is_full(sk) ||
1042             (make = rose_make_new(sk)) == NULL) {
1043                 rose_transmit_clear_request(neigh, lci, ROSE_NETWORK_CONGESTION, 120);
1044                 return 0;
1045         }
1046
1047         skb->sk     = make;
1048         make->sk_state = TCP_ESTABLISHED;
1049         make_rose = rose_sk(make);
1050
1051         make_rose->lci           = lci;
1052         make_rose->dest_addr     = facilities.dest_addr;
1053         make_rose->dest_call     = facilities.dest_call;
1054         make_rose->dest_ndigis   = facilities.dest_ndigis;
1055         for (n = 0 ; n < facilities.dest_ndigis ; n++)
1056                 make_rose->dest_digis[n] = facilities.dest_digis[n];
1057         make_rose->source_addr   = facilities.source_addr;
1058         make_rose->source_call   = facilities.source_call;
1059         make_rose->source_ndigis = facilities.source_ndigis;
1060         for (n = 0 ; n < facilities.source_ndigis ; n++)
1061                 make_rose->source_digis[n] = facilities.source_digis[n];
1062         make_rose->neighbour     = neigh;
1063         make_rose->device        = dev;
1064         make_rose->facilities    = facilities;
1065
1066         make_rose->neighbour->use++;
1067
1068         if (rose_sk(sk)->defer) {
1069                 make_rose->state = ROSE_STATE_5;
1070         } else {
1071                 rose_write_internal(make, ROSE_CALL_ACCEPTED);
1072                 make_rose->state = ROSE_STATE_3;
1073                 rose_start_idletimer(make);
1074         }
1075
1076         make_rose->condition = 0x00;
1077         make_rose->vs        = 0;
1078         make_rose->va        = 0;
1079         make_rose->vr        = 0;
1080         make_rose->vl        = 0;
1081         sk->sk_ack_backlog++;
1082
1083         rose_insert_socket(make);
1084
1085         skb_queue_head(&sk->sk_receive_queue, skb);
1086
1087         rose_start_heartbeat(make);
1088
1089         if (!sock_flag(sk, SOCK_DEAD))
1090                 sk->sk_data_ready(sk);
1091
1092         return 1;
1093 }
1094
1095 static int rose_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1096 {
1097         struct sock *sk = sock->sk;
1098         struct rose_sock *rose = rose_sk(sk);
1099         DECLARE_SOCKADDR(struct sockaddr_rose *, usrose, msg->msg_name);
1100         int err;
1101         struct full_sockaddr_rose srose;
1102         struct sk_buff *skb;
1103         unsigned char *asmptr;
1104         int n, size, qbit = 0;
1105
1106         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1107                 return -EINVAL;
1108
1109         if (sock_flag(sk, SOCK_ZAPPED))
1110                 return -EADDRNOTAVAIL;
1111
1112         if (sk->sk_shutdown & SEND_SHUTDOWN) {
1113                 send_sig(SIGPIPE, current, 0);
1114                 return -EPIPE;
1115         }
1116
1117         if (rose->neighbour == NULL || rose->device == NULL)
1118                 return -ENETUNREACH;
1119
1120         if (usrose != NULL) {
1121                 if (msg->msg_namelen != sizeof(struct sockaddr_rose) && msg->msg_namelen != sizeof(struct full_sockaddr_rose))
1122                         return -EINVAL;
1123                 memset(&srose, 0, sizeof(struct full_sockaddr_rose));
1124                 memcpy(&srose, usrose, msg->msg_namelen);
1125                 if (rosecmp(&rose->dest_addr, &srose.srose_addr) != 0 ||
1126                     ax25cmp(&rose->dest_call, &srose.srose_call) != 0)
1127                         return -EISCONN;
1128                 if (srose.srose_ndigis != rose->dest_ndigis)
1129                         return -EISCONN;
1130                 if (srose.srose_ndigis == rose->dest_ndigis) {
1131                         for (n = 0 ; n < srose.srose_ndigis ; n++)
1132                                 if (ax25cmp(&rose->dest_digis[n],
1133                                             &srose.srose_digis[n]))
1134                                         return -EISCONN;
1135                 }
1136                 if (srose.srose_family != AF_ROSE)
1137                         return -EINVAL;
1138         } else {
1139                 if (sk->sk_state != TCP_ESTABLISHED)
1140                         return -ENOTCONN;
1141
1142                 srose.srose_family = AF_ROSE;
1143                 srose.srose_addr   = rose->dest_addr;
1144                 srose.srose_call   = rose->dest_call;
1145                 srose.srose_ndigis = rose->dest_ndigis;
1146                 for (n = 0 ; n < rose->dest_ndigis ; n++)
1147                         srose.srose_digis[n] = rose->dest_digis[n];
1148         }
1149
1150         /* Build a packet */
1151         /* Sanity check the packet size */
1152         if (len > 65535)
1153                 return -EMSGSIZE;
1154
1155         size = len + AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN;
1156
1157         if ((skb = sock_alloc_send_skb(sk, size, msg->msg_flags & MSG_DONTWAIT, &err)) == NULL)
1158                 return err;
1159
1160         skb_reserve(skb, AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN);
1161
1162         /*
1163          *      Put the data on the end
1164          */
1165
1166         skb_reset_transport_header(skb);
1167         skb_put(skb, len);
1168
1169         err = memcpy_from_msg(skb_transport_header(skb), msg, len);
1170         if (err) {
1171                 kfree_skb(skb);
1172                 return err;
1173         }
1174
1175         /*
1176          *      If the Q BIT Include socket option is in force, the first
1177          *      byte of the user data is the logical value of the Q Bit.
1178          */
1179         if (rose->qbitincl) {
1180                 qbit = skb->data[0];
1181                 skb_pull(skb, 1);
1182         }
1183
1184         /*
1185          *      Push down the ROSE header
1186          */
1187         asmptr = skb_push(skb, ROSE_MIN_LEN);
1188
1189         /* Build a ROSE Network header */
1190         asmptr[0] = ((rose->lci >> 8) & 0x0F) | ROSE_GFI;
1191         asmptr[1] = (rose->lci >> 0) & 0xFF;
1192         asmptr[2] = ROSE_DATA;
1193
1194         if (qbit)
1195                 asmptr[0] |= ROSE_Q_BIT;
1196
1197         if (sk->sk_state != TCP_ESTABLISHED) {
1198                 kfree_skb(skb);
1199                 return -ENOTCONN;
1200         }
1201
1202 #ifdef M_BIT
1203 #define ROSE_PACLEN (256-ROSE_MIN_LEN)
1204         if (skb->len - ROSE_MIN_LEN > ROSE_PACLEN) {
1205                 unsigned char header[ROSE_MIN_LEN];
1206                 struct sk_buff *skbn;
1207                 int frontlen;
1208                 int lg;
1209
1210                 /* Save a copy of the Header */
1211                 skb_copy_from_linear_data(skb, header, ROSE_MIN_LEN);
1212                 skb_pull(skb, ROSE_MIN_LEN);
1213
1214                 frontlen = skb_headroom(skb);
1215
1216                 while (skb->len > 0) {
1217                         if ((skbn = sock_alloc_send_skb(sk, frontlen + ROSE_PACLEN, 0, &err)) == NULL) {
1218                                 kfree_skb(skb);
1219                                 return err;
1220                         }
1221
1222                         skbn->sk   = sk;
1223                         skbn->free = 1;
1224                         skbn->arp  = 1;
1225
1226                         skb_reserve(skbn, frontlen);
1227
1228                         lg = (ROSE_PACLEN > skb->len) ? skb->len : ROSE_PACLEN;
1229
1230                         /* Copy the user data */
1231                         skb_copy_from_linear_data(skb, skb_put(skbn, lg), lg);
1232                         skb_pull(skb, lg);
1233
1234                         /* Duplicate the Header */
1235                         skb_push(skbn, ROSE_MIN_LEN);
1236                         skb_copy_to_linear_data(skbn, header, ROSE_MIN_LEN);
1237
1238                         if (skb->len > 0)
1239                                 skbn->data[2] |= M_BIT;
1240
1241                         skb_queue_tail(&sk->sk_write_queue, skbn); /* Throw it on the queue */
1242                 }
1243
1244                 skb->free = 1;
1245                 kfree_skb(skb);
1246         } else {
1247                 skb_queue_tail(&sk->sk_write_queue, skb);               /* Throw it on the queue */
1248         }
1249 #else
1250         skb_queue_tail(&sk->sk_write_queue, skb);       /* Shove it onto the queue */
1251 #endif
1252
1253         rose_kick(sk);
1254
1255         return len;
1256 }
1257
1258
1259 static int rose_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1260                         int flags)
1261 {
1262         struct sock *sk = sock->sk;
1263         struct rose_sock *rose = rose_sk(sk);
1264         size_t copied;
1265         unsigned char *asmptr;
1266         struct sk_buff *skb;
1267         int n, er, qbit;
1268
1269         /*
1270          * This works for seqpacket too. The receiver has ordered the queue for
1271          * us! We do one quick check first though
1272          */
1273         if (sk->sk_state != TCP_ESTABLISHED)
1274                 return -ENOTCONN;
1275
1276         /* Now we can treat all alike */
1277         if ((skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &er)) == NULL)
1278                 return er;
1279
1280         qbit = (skb->data[0] & ROSE_Q_BIT) == ROSE_Q_BIT;
1281
1282         skb_pull(skb, ROSE_MIN_LEN);
1283
1284         if (rose->qbitincl) {
1285                 asmptr  = skb_push(skb, 1);
1286                 *asmptr = qbit;
1287         }
1288
1289         skb_reset_transport_header(skb);
1290         copied     = skb->len;
1291
1292         if (copied > size) {
1293                 copied = size;
1294                 msg->msg_flags |= MSG_TRUNC;
1295         }
1296
1297         skb_copy_datagram_msg(skb, 0, msg, copied);
1298
1299         if (msg->msg_name) {
1300                 struct sockaddr_rose *srose;
1301                 DECLARE_SOCKADDR(struct full_sockaddr_rose *, full_srose,
1302                                  msg->msg_name);
1303
1304                 memset(msg->msg_name, 0, sizeof(struct full_sockaddr_rose));
1305                 srose = msg->msg_name;
1306                 srose->srose_family = AF_ROSE;
1307                 srose->srose_addr   = rose->dest_addr;
1308                 srose->srose_call   = rose->dest_call;
1309                 srose->srose_ndigis = rose->dest_ndigis;
1310                 for (n = 0 ; n < rose->dest_ndigis ; n++)
1311                         full_srose->srose_digis[n] = rose->dest_digis[n];
1312                 msg->msg_namelen = sizeof(struct full_sockaddr_rose);
1313         }
1314
1315         skb_free_datagram(sk, skb);
1316
1317         return copied;
1318 }
1319
1320
1321 static int rose_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1322 {
1323         struct sock *sk = sock->sk;
1324         struct rose_sock *rose = rose_sk(sk);
1325         void __user *argp = (void __user *)arg;
1326
1327         switch (cmd) {
1328         case TIOCOUTQ: {
1329                 long amount;
1330
1331                 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1332                 if (amount < 0)
1333                         amount = 0;
1334                 return put_user(amount, (unsigned int __user *) argp);
1335         }
1336
1337         case TIOCINQ: {
1338                 struct sk_buff *skb;
1339                 long amount = 0L;
1340
1341                 spin_lock_irq(&sk->sk_receive_queue.lock);
1342                 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1343                         amount = skb->len;
1344                 spin_unlock_irq(&sk->sk_receive_queue.lock);
1345                 return put_user(amount, (unsigned int __user *) argp);
1346         }
1347
1348         case SIOCGSTAMP:
1349                 return sock_get_timestamp(sk, (struct timeval __user *) argp);
1350
1351         case SIOCGSTAMPNS:
1352                 return sock_get_timestampns(sk, (struct timespec __user *) argp);
1353
1354         case SIOCGIFADDR:
1355         case SIOCSIFADDR:
1356         case SIOCGIFDSTADDR:
1357         case SIOCSIFDSTADDR:
1358         case SIOCGIFBRDADDR:
1359         case SIOCSIFBRDADDR:
1360         case SIOCGIFNETMASK:
1361         case SIOCSIFNETMASK:
1362         case SIOCGIFMETRIC:
1363         case SIOCSIFMETRIC:
1364                 return -EINVAL;
1365
1366         case SIOCADDRT:
1367         case SIOCDELRT:
1368         case SIOCRSCLRRT:
1369                 if (!capable(CAP_NET_ADMIN))
1370                         return -EPERM;
1371                 return rose_rt_ioctl(cmd, argp);
1372
1373         case SIOCRSGCAUSE: {
1374                 struct rose_cause_struct rose_cause;
1375                 rose_cause.cause      = rose->cause;
1376                 rose_cause.diagnostic = rose->diagnostic;
1377                 return copy_to_user(argp, &rose_cause, sizeof(struct rose_cause_struct)) ? -EFAULT : 0;
1378         }
1379
1380         case SIOCRSSCAUSE: {
1381                 struct rose_cause_struct rose_cause;
1382                 if (copy_from_user(&rose_cause, argp, sizeof(struct rose_cause_struct)))
1383                         return -EFAULT;
1384                 rose->cause      = rose_cause.cause;
1385                 rose->diagnostic = rose_cause.diagnostic;
1386                 return 0;
1387         }
1388
1389         case SIOCRSSL2CALL:
1390                 if (!capable(CAP_NET_ADMIN)) return -EPERM;
1391                 if (ax25cmp(&rose_callsign, &null_ax25_address) != 0)
1392                         ax25_listen_release(&rose_callsign, NULL);
1393                 if (copy_from_user(&rose_callsign, argp, sizeof(ax25_address)))
1394                         return -EFAULT;
1395                 if (ax25cmp(&rose_callsign, &null_ax25_address) != 0)
1396                         return ax25_listen_register(&rose_callsign, NULL);
1397
1398                 return 0;
1399
1400         case SIOCRSGL2CALL:
1401                 return copy_to_user(argp, &rose_callsign, sizeof(ax25_address)) ? -EFAULT : 0;
1402
1403         case SIOCRSACCEPT:
1404                 if (rose->state == ROSE_STATE_5) {
1405                         rose_write_internal(sk, ROSE_CALL_ACCEPTED);
1406                         rose_start_idletimer(sk);
1407                         rose->condition = 0x00;
1408                         rose->vs        = 0;
1409                         rose->va        = 0;
1410                         rose->vr        = 0;
1411                         rose->vl        = 0;
1412                         rose->state     = ROSE_STATE_3;
1413                 }
1414                 return 0;
1415
1416         default:
1417                 return -ENOIOCTLCMD;
1418         }
1419
1420         return 0;
1421 }
1422
1423 #ifdef CONFIG_PROC_FS
1424 static void *rose_info_start(struct seq_file *seq, loff_t *pos)
1425         __acquires(rose_list_lock)
1426 {
1427         spin_lock_bh(&rose_list_lock);
1428         return seq_hlist_start_head(&rose_list, *pos);
1429 }
1430
1431 static void *rose_info_next(struct seq_file *seq, void *v, loff_t *pos)
1432 {
1433         return seq_hlist_next(v, &rose_list, pos);
1434 }
1435
1436 static void rose_info_stop(struct seq_file *seq, void *v)
1437         __releases(rose_list_lock)
1438 {
1439         spin_unlock_bh(&rose_list_lock);
1440 }
1441
1442 static int rose_info_show(struct seq_file *seq, void *v)
1443 {
1444         char buf[11], rsbuf[11];
1445
1446         if (v == SEQ_START_TOKEN)
1447                 seq_puts(seq,
1448                          "dest_addr  dest_call src_addr   src_call  dev   lci neigh st vs vr va   t  t1  t2  t3  hb    idle Snd-Q Rcv-Q inode\n");
1449
1450         else {
1451                 struct sock *s = sk_entry(v);
1452                 struct rose_sock *rose = rose_sk(s);
1453                 const char *devname, *callsign;
1454                 const struct net_device *dev = rose->device;
1455
1456                 if (!dev)
1457                         devname = "???";
1458                 else
1459                         devname = dev->name;
1460
1461                 seq_printf(seq, "%-10s %-9s ",
1462                            rose2asc(rsbuf, &rose->dest_addr),
1463                            ax2asc(buf, &rose->dest_call));
1464
1465                 if (ax25cmp(&rose->source_call, &null_ax25_address) == 0)
1466                         callsign = "??????-?";
1467                 else
1468                         callsign = ax2asc(buf, &rose->source_call);
1469
1470                 seq_printf(seq,
1471                            "%-10s %-9s %-5s %3.3X %05d  %d  %d  %d  %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld\n",
1472                         rose2asc(rsbuf, &rose->source_addr),
1473                         callsign,
1474                         devname,
1475                         rose->lci & 0x0FFF,
1476                         (rose->neighbour) ? rose->neighbour->number : 0,
1477                         rose->state,
1478                         rose->vs,
1479                         rose->vr,
1480                         rose->va,
1481                         ax25_display_timer(&rose->timer) / HZ,
1482                         rose->t1 / HZ,
1483                         rose->t2 / HZ,
1484                         rose->t3 / HZ,
1485                         rose->hb / HZ,
1486                         ax25_display_timer(&rose->idletimer) / (60 * HZ),
1487                         rose->idle / (60 * HZ),
1488                         sk_wmem_alloc_get(s),
1489                         sk_rmem_alloc_get(s),
1490                         s->sk_socket ? SOCK_INODE(s->sk_socket)->i_ino : 0L);
1491         }
1492
1493         return 0;
1494 }
1495
1496 static const struct seq_operations rose_info_seqops = {
1497         .start = rose_info_start,
1498         .next = rose_info_next,
1499         .stop = rose_info_stop,
1500         .show = rose_info_show,
1501 };
1502 #endif  /* CONFIG_PROC_FS */
1503
1504 static const struct net_proto_family rose_family_ops = {
1505         .family         =       PF_ROSE,
1506         .create         =       rose_create,
1507         .owner          =       THIS_MODULE,
1508 };
1509
1510 static const struct proto_ops rose_proto_ops = {
1511         .family         =       PF_ROSE,
1512         .owner          =       THIS_MODULE,
1513         .release        =       rose_release,
1514         .bind           =       rose_bind,
1515         .connect        =       rose_connect,
1516         .socketpair     =       sock_no_socketpair,
1517         .accept         =       rose_accept,
1518         .getname        =       rose_getname,
1519         .poll           =       datagram_poll,
1520         .ioctl          =       rose_ioctl,
1521         .listen         =       rose_listen,
1522         .shutdown       =       sock_no_shutdown,
1523         .setsockopt     =       rose_setsockopt,
1524         .getsockopt     =       rose_getsockopt,
1525         .sendmsg        =       rose_sendmsg,
1526         .recvmsg        =       rose_recvmsg,
1527         .mmap           =       sock_no_mmap,
1528         .sendpage       =       sock_no_sendpage,
1529 };
1530
1531 static struct notifier_block rose_dev_notifier = {
1532         .notifier_call  =       rose_device_event,
1533 };
1534
1535 static struct net_device **dev_rose;
1536
1537 static struct ax25_protocol rose_pid = {
1538         .pid    = AX25_P_ROSE,
1539         .func   = rose_route_frame
1540 };
1541
1542 static struct ax25_linkfail rose_linkfail_notifier = {
1543         .func   = rose_link_failed
1544 };
1545
1546 static int __init rose_proto_init(void)
1547 {
1548         int i;
1549         int rc;
1550
1551         if (rose_ndevs > 0x7FFFFFFF/sizeof(struct net_device *)) {
1552                 printk(KERN_ERR "ROSE: rose_proto_init - rose_ndevs parameter to large\n");
1553                 rc = -EINVAL;
1554                 goto out;
1555         }
1556
1557         rc = proto_register(&rose_proto, 0);
1558         if (rc != 0)
1559                 goto out;
1560
1561         rose_callsign = null_ax25_address;
1562
1563         dev_rose = kcalloc(rose_ndevs, sizeof(struct net_device *),
1564                            GFP_KERNEL);
1565         if (dev_rose == NULL) {
1566                 printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n");
1567                 rc = -ENOMEM;
1568                 goto out_proto_unregister;
1569         }
1570
1571         for (i = 0; i < rose_ndevs; i++) {
1572                 struct net_device *dev;
1573                 char name[IFNAMSIZ];
1574
1575                 sprintf(name, "rose%d", i);
1576                 dev = alloc_netdev(0, name, NET_NAME_UNKNOWN, rose_setup);
1577                 if (!dev) {
1578                         printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate memory\n");
1579                         rc = -ENOMEM;
1580                         goto fail;
1581                 }
1582                 rc = register_netdev(dev);
1583                 if (rc) {
1584                         printk(KERN_ERR "ROSE: netdevice registration failed\n");
1585                         free_netdev(dev);
1586                         goto fail;
1587                 }
1588                 rose_set_lockdep_key(dev);
1589                 dev_rose[i] = dev;
1590         }
1591
1592         sock_register(&rose_family_ops);
1593         register_netdevice_notifier(&rose_dev_notifier);
1594
1595         ax25_register_pid(&rose_pid);
1596         ax25_linkfail_register(&rose_linkfail_notifier);
1597
1598 #ifdef CONFIG_SYSCTL
1599         rose_register_sysctl();
1600 #endif
1601         rose_loopback_init();
1602
1603         rose_add_loopback_neigh();
1604
1605         proc_create_seq("rose", 0444, init_net.proc_net, &rose_info_seqops);
1606         proc_create_seq("rose_neigh", 0444, init_net.proc_net,
1607                     &rose_neigh_seqops);
1608         proc_create_seq("rose_nodes", 0444, init_net.proc_net,
1609                     &rose_node_seqops);
1610         proc_create_seq("rose_routes", 0444, init_net.proc_net,
1611                     &rose_route_seqops);
1612 out:
1613         return rc;
1614 fail:
1615         while (--i >= 0) {
1616                 unregister_netdev(dev_rose[i]);
1617                 free_netdev(dev_rose[i]);
1618         }
1619         kfree(dev_rose);
1620 out_proto_unregister:
1621         proto_unregister(&rose_proto);
1622         goto out;
1623 }
1624 module_init(rose_proto_init);
1625
1626 module_param(rose_ndevs, int, 0);
1627 MODULE_PARM_DESC(rose_ndevs, "number of ROSE devices");
1628
1629 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
1630 MODULE_DESCRIPTION("The amateur radio ROSE network layer protocol");
1631 MODULE_LICENSE("GPL");
1632 MODULE_ALIAS_NETPROTO(PF_ROSE);
1633
1634 static void __exit rose_exit(void)
1635 {
1636         int i;
1637
1638         remove_proc_entry("rose", init_net.proc_net);
1639         remove_proc_entry("rose_neigh", init_net.proc_net);
1640         remove_proc_entry("rose_nodes", init_net.proc_net);
1641         remove_proc_entry("rose_routes", init_net.proc_net);
1642         rose_loopback_clear();
1643
1644         rose_rt_free();
1645
1646         ax25_protocol_release(AX25_P_ROSE);
1647         ax25_linkfail_release(&rose_linkfail_notifier);
1648
1649         if (ax25cmp(&rose_callsign, &null_ax25_address) != 0)
1650                 ax25_listen_release(&rose_callsign, NULL);
1651
1652 #ifdef CONFIG_SYSCTL
1653         rose_unregister_sysctl();
1654 #endif
1655         unregister_netdevice_notifier(&rose_dev_notifier);
1656
1657         sock_unregister(PF_ROSE);
1658
1659         for (i = 0; i < rose_ndevs; i++) {
1660                 struct net_device *dev = dev_rose[i];
1661
1662                 if (dev) {
1663                         unregister_netdev(dev);
1664                         free_netdev(dev);
1665                 }
1666         }
1667
1668         kfree(dev_rose);
1669         proto_unregister(&rose_proto);
1670 }
1671
1672 module_exit(rose_exit);