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