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