cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

af_rose.c (37789B)


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