Linux Audio

Check our new training course

Loading...
v3.1
 
   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) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
   8 * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
   9 * Copyright (C) Darryl Miles G7LED (dlm@g7led.demon.co.uk)
  10 * Copyright (C) Steven Whitehouse GW7RRM (stevew@acm.org)
  11 * Copyright (C) Joerg Reuter DL1BKE (jreuter@yaina.de)
  12 * Copyright (C) Hans-Joachim Hetscher DD8NE (dd8ne@bnv-bamberg.de)
  13 * Copyright (C) Hans Alblas PE1AYX (hans@esrac.ele.tue.nl)
  14 * Copyright (C) Frederic Rible F1OAT (frible@teaser.fr)
  15 */
  16#include <linux/capability.h>
  17#include <linux/module.h>
  18#include <linux/errno.h>
  19#include <linux/types.h>
  20#include <linux/socket.h>
  21#include <linux/in.h>
  22#include <linux/kernel.h>
  23#include <linux/sched.h>
  24#include <linux/timer.h>
  25#include <linux/string.h>
  26#include <linux/sockios.h>
  27#include <linux/net.h>
  28#include <linux/slab.h>
  29#include <net/ax25.h>
  30#include <linux/inet.h>
  31#include <linux/netdevice.h>
  32#include <linux/if_arp.h>
  33#include <linux/skbuff.h>
  34#include <net/sock.h>
  35#include <asm/uaccess.h>
  36#include <asm/system.h>
  37#include <linux/fcntl.h>
  38#include <linux/termios.h>	/* For TIOCINQ/OUTQ */
  39#include <linux/mm.h>
  40#include <linux/interrupt.h>
  41#include <linux/notifier.h>
  42#include <linux/proc_fs.h>
  43#include <linux/stat.h>
  44#include <linux/netfilter.h>
  45#include <linux/sysctl.h>
  46#include <linux/init.h>
  47#include <linux/spinlock.h>
  48#include <net/net_namespace.h>
  49#include <net/tcp_states.h>
  50#include <net/ip.h>
  51#include <net/arp.h>
  52
  53
  54
  55HLIST_HEAD(ax25_list);
  56DEFINE_SPINLOCK(ax25_list_lock);
  57
  58static const struct proto_ops ax25_proto_ops;
  59
  60static void ax25_free_sock(struct sock *sk)
  61{
  62	ax25_cb_put(ax25_sk(sk));
  63}
  64
  65/*
  66 *	Socket removal during an interrupt is now safe.
  67 */
  68static void ax25_cb_del(ax25_cb *ax25)
  69{
 
  70	if (!hlist_unhashed(&ax25->ax25_node)) {
  71		spin_lock_bh(&ax25_list_lock);
  72		hlist_del_init(&ax25->ax25_node);
  73		spin_unlock_bh(&ax25_list_lock);
  74		ax25_cb_put(ax25);
  75	}
 
  76}
  77
  78/*
  79 *	Kill all bound sockets on a dropped device.
  80 */
  81static void ax25_kill_by_device(struct net_device *dev)
  82{
  83	ax25_dev *ax25_dev;
  84	ax25_cb *s;
  85	struct hlist_node *node;
  86
  87	if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
  88		return;
 
  89
  90	spin_lock_bh(&ax25_list_lock);
  91again:
  92	ax25_for_each(s, node, &ax25_list) {
  93		if (s->ax25_dev == ax25_dev) {
  94			s->ax25_dev = NULL;
 
 
 
 
 
 
 
 
 
  95			spin_unlock_bh(&ax25_list_lock);
 
  96			ax25_disconnect(s, ENETUNREACH);
 
 
 
 
 
 
 
 
  97			spin_lock_bh(&ax25_list_lock);
  98
  99			/* The entry could have been deleted from the
 100			 * list meanwhile and thus the next pointer is
 101			 * no longer valid.  Play it safe and restart
 102			 * the scan.  Forward progress is ensured
 103			 * because we set s->ax25_dev to NULL and we
 104			 * are never passed a NULL 'dev' argument.
 105			 */
 106			goto again;
 107		}
 108	}
 109	spin_unlock_bh(&ax25_list_lock);
 110}
 111
 112/*
 113 *	Handle device status changes.
 114 */
 115static int ax25_device_event(struct notifier_block *this, unsigned long event,
 116	void *ptr)
 117{
 118	struct net_device *dev = (struct net_device *)ptr;
 119
 120	if (!net_eq(dev_net(dev), &init_net))
 121		return NOTIFY_DONE;
 122
 123	/* Reject non AX.25 devices */
 124	if (dev->type != ARPHRD_AX25)
 125		return NOTIFY_DONE;
 126
 127	switch (event) {
 128	case NETDEV_UP:
 129		ax25_dev_device_up(dev);
 130		break;
 131	case NETDEV_DOWN:
 132		ax25_kill_by_device(dev);
 133		ax25_rt_device_down(dev);
 134		ax25_dev_device_down(dev);
 135		break;
 136	default:
 137		break;
 138	}
 139
 140	return NOTIFY_DONE;
 141}
 142
 143/*
 144 *	Add a socket to the bound sockets list.
 145 */
 146void ax25_cb_add(ax25_cb *ax25)
 147{
 148	spin_lock_bh(&ax25_list_lock);
 149	ax25_cb_hold(ax25);
 150	hlist_add_head(&ax25->ax25_node, &ax25_list);
 151	spin_unlock_bh(&ax25_list_lock);
 152}
 153
 154/*
 155 *	Find a socket that wants to accept the SABM we have just
 156 *	received.
 157 */
 158struct sock *ax25_find_listener(ax25_address *addr, int digi,
 159	struct net_device *dev, int type)
 160{
 161	ax25_cb *s;
 162	struct hlist_node *node;
 163
 164	spin_lock(&ax25_list_lock);
 165	ax25_for_each(s, node, &ax25_list) {
 166		if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
 167			continue;
 168		if (s->sk && !ax25cmp(&s->source_addr, addr) &&
 169		    s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
 170			/* If device is null we match any device */
 171			if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
 172				sock_hold(s->sk);
 173				spin_unlock(&ax25_list_lock);
 174				return s->sk;
 175			}
 176		}
 177	}
 178	spin_unlock(&ax25_list_lock);
 179
 180	return NULL;
 181}
 182
 183/*
 184 *	Find an AX.25 socket given both ends.
 185 */
 186struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
 187	int type)
 188{
 189	struct sock *sk = NULL;
 190	ax25_cb *s;
 191	struct hlist_node *node;
 192
 193	spin_lock(&ax25_list_lock);
 194	ax25_for_each(s, node, &ax25_list) {
 195		if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
 196		    !ax25cmp(&s->dest_addr, dest_addr) &&
 197		    s->sk->sk_type == type) {
 198			sk = s->sk;
 199			sock_hold(sk);
 200			break;
 201		}
 202	}
 203
 204	spin_unlock(&ax25_list_lock);
 205
 206	return sk;
 207}
 208
 209/*
 210 *	Find an AX.25 control block given both ends. It will only pick up
 211 *	floating AX.25 control blocks or non Raw socket bound control blocks.
 212 */
 213ax25_cb *ax25_find_cb(ax25_address *src_addr, ax25_address *dest_addr,
 214	ax25_digi *digi, struct net_device *dev)
 215{
 216	ax25_cb *s;
 217	struct hlist_node *node;
 218
 219	spin_lock_bh(&ax25_list_lock);
 220	ax25_for_each(s, node, &ax25_list) {
 221		if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
 222			continue;
 223		if (s->ax25_dev == NULL)
 224			continue;
 225		if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
 226			if (digi != NULL && digi->ndigi != 0) {
 227				if (s->digipeat == NULL)
 228					continue;
 229				if (ax25digicmp(s->digipeat, digi) != 0)
 230					continue;
 231			} else {
 232				if (s->digipeat != NULL && s->digipeat->ndigi != 0)
 233					continue;
 234			}
 235			ax25_cb_hold(s);
 236			spin_unlock_bh(&ax25_list_lock);
 237
 238			return s;
 239		}
 240	}
 241	spin_unlock_bh(&ax25_list_lock);
 242
 243	return NULL;
 244}
 245
 246EXPORT_SYMBOL(ax25_find_cb);
 247
 248void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
 249{
 250	ax25_cb *s;
 251	struct sk_buff *copy;
 252	struct hlist_node *node;
 253
 254	spin_lock(&ax25_list_lock);
 255	ax25_for_each(s, node, &ax25_list) {
 256		if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
 257		    s->sk->sk_type == SOCK_RAW &&
 258		    s->sk->sk_protocol == proto &&
 259		    s->ax25_dev->dev == skb->dev &&
 260		    atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
 261			if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
 262				continue;
 263			if (sock_queue_rcv_skb(s->sk, copy) != 0)
 264				kfree_skb(copy);
 265		}
 266	}
 267	spin_unlock(&ax25_list_lock);
 268}
 269
 270/*
 271 *	Deferred destroy.
 272 */
 273void ax25_destroy_socket(ax25_cb *);
 274
 275/*
 276 *	Handler for deferred kills.
 277 */
 278static void ax25_destroy_timer(unsigned long data)
 279{
 280	ax25_cb *ax25=(ax25_cb *)data;
 281	struct sock *sk;
 282
 283	sk=ax25->sk;
 284
 285	bh_lock_sock(sk);
 286	sock_hold(sk);
 287	ax25_destroy_socket(ax25);
 288	bh_unlock_sock(sk);
 289	sock_put(sk);
 290}
 291
 292/*
 293 *	This is called from user mode and the timers. Thus it protects itself
 294 *	against interrupt users but doesn't worry about being called during
 295 *	work. Once it is removed from the queue no interrupt or bottom half
 296 *	will touch it and we are (fairly 8-) ) safe.
 297 */
 298void ax25_destroy_socket(ax25_cb *ax25)
 299{
 300	struct sk_buff *skb;
 301
 302	ax25_cb_del(ax25);
 303
 304	ax25_stop_heartbeat(ax25);
 305	ax25_stop_t1timer(ax25);
 306	ax25_stop_t2timer(ax25);
 307	ax25_stop_t3timer(ax25);
 308	ax25_stop_idletimer(ax25);
 309
 310	ax25_clear_queues(ax25);	/* Flush the queues */
 311
 312	if (ax25->sk != NULL) {
 313		while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
 314			if (skb->sk != ax25->sk) {
 315				/* A pending connection */
 316				ax25_cb *sax25 = ax25_sk(skb->sk);
 317
 318				/* Queue the unaccepted socket for death */
 319				sock_orphan(skb->sk);
 320
 321				/* 9A4GL: hack to release unaccepted sockets */
 322				skb->sk->sk_state = TCP_LISTEN;
 323
 324				ax25_start_heartbeat(sax25);
 325				sax25->state = AX25_STATE_0;
 326			}
 327
 328			kfree_skb(skb);
 329		}
 330		skb_queue_purge(&ax25->sk->sk_write_queue);
 331	}
 332
 333	if (ax25->sk != NULL) {
 334		if (sk_has_allocations(ax25->sk)) {
 335			/* Defer: outstanding buffers */
 336			setup_timer(&ax25->dtimer, ax25_destroy_timer,
 337					(unsigned long)ax25);
 338			ax25->dtimer.expires  = jiffies + 2 * HZ;
 339			add_timer(&ax25->dtimer);
 340		} else {
 341			struct sock *sk=ax25->sk;
 342			ax25->sk=NULL;
 343			sock_put(sk);
 344		}
 345	} else {
 346		ax25_cb_put(ax25);
 347	}
 348}
 349
 350/*
 351 * dl1bke 960311: set parameters for existing AX.25 connections,
 352 *		  includes a KILL command to abort any connection.
 353 *		  VERY useful for debugging ;-)
 354 */
 355static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
 356{
 357	struct ax25_ctl_struct ax25_ctl;
 358	ax25_digi digi;
 359	ax25_dev *ax25_dev;
 360	ax25_cb *ax25;
 361	unsigned int k;
 362	int ret = 0;
 363
 364	if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
 365		return -EFAULT;
 366
 367	if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
 368		return -ENODEV;
 369
 370	if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
 371		return -EINVAL;
 372
 373	if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
 374		return -EINVAL;
 375
 
 
 
 
 376	digi.ndigi = ax25_ctl.digi_count;
 377	for (k = 0; k < digi.ndigi; k++)
 378		digi.calls[k] = ax25_ctl.digi_addr[k];
 379
 380	if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
 
 
 381		return -ENOTCONN;
 
 382
 383	switch (ax25_ctl.cmd) {
 384	case AX25_KILL:
 385		ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
 386#ifdef CONFIG_AX25_DAMA_SLAVE
 387		if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
 388			ax25_dama_off(ax25);
 389#endif
 390		ax25_disconnect(ax25, ENETRESET);
 391		break;
 392
 393	case AX25_WINDOW:
 394		if (ax25->modulus == AX25_MODULUS) {
 395			if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
 396				goto einval_put;
 397		} else {
 398			if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
 399				goto einval_put;
 400		}
 401		ax25->window = ax25_ctl.arg;
 402		break;
 403
 404	case AX25_T1:
 405		if (ax25_ctl.arg < 1)
 406			goto einval_put;
 407		ax25->rtt = (ax25_ctl.arg * HZ) / 2;
 408		ax25->t1  = ax25_ctl.arg * HZ;
 409		break;
 410
 411	case AX25_T2:
 412		if (ax25_ctl.arg < 1)
 413			goto einval_put;
 414		ax25->t2 = ax25_ctl.arg * HZ;
 415		break;
 416
 417	case AX25_N2:
 418		if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
 419			goto einval_put;
 420		ax25->n2count = 0;
 421		ax25->n2 = ax25_ctl.arg;
 422		break;
 423
 424	case AX25_T3:
 
 
 425		ax25->t3 = ax25_ctl.arg * HZ;
 426		break;
 427
 428	case AX25_IDLE:
 
 
 
 429		ax25->idle = ax25_ctl.arg * 60 * HZ;
 430		break;
 431
 432	case AX25_PACLEN:
 433		if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
 434			goto einval_put;
 435		ax25->paclen = ax25_ctl.arg;
 436		break;
 437
 438	default:
 439		goto einval_put;
 440	  }
 441
 442out_put:
 
 443	ax25_cb_put(ax25);
 444	return ret;
 445
 446einval_put:
 447	ret = -EINVAL;
 448	goto out_put;
 449}
 450
 451static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
 452{
 453	ax25->rtt     = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
 454	ax25->t1      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
 455	ax25->t2      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
 456	ax25->t3      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
 457	ax25->n2      = ax25_dev->values[AX25_VALUES_N2];
 458	ax25->paclen  = ax25_dev->values[AX25_VALUES_PACLEN];
 459	ax25->idle    = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
 460	ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
 461
 462	if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
 463		ax25->modulus = AX25_EMODULUS;
 464		ax25->window  = ax25_dev->values[AX25_VALUES_EWINDOW];
 465	} else {
 466		ax25->modulus = AX25_MODULUS;
 467		ax25->window  = ax25_dev->values[AX25_VALUES_WINDOW];
 468	}
 469}
 470
 471/*
 472 *	Fill in a created AX.25 created control block with the default
 473 *	values for a particular device.
 474 */
 475void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
 476{
 477	ax25->ax25_dev = ax25_dev;
 478
 479	if (ax25->ax25_dev != NULL) {
 480		ax25_fillin_cb_from_dev(ax25, ax25_dev);
 481		return;
 482	}
 483
 484	/*
 485	 * No device, use kernel / AX.25 spec default values
 486	 */
 487	ax25->rtt     = msecs_to_jiffies(AX25_DEF_T1) / 2;
 488	ax25->t1      = msecs_to_jiffies(AX25_DEF_T1);
 489	ax25->t2      = msecs_to_jiffies(AX25_DEF_T2);
 490	ax25->t3      = msecs_to_jiffies(AX25_DEF_T3);
 491	ax25->n2      = AX25_DEF_N2;
 492	ax25->paclen  = AX25_DEF_PACLEN;
 493	ax25->idle    = msecs_to_jiffies(AX25_DEF_IDLE);
 494	ax25->backoff = AX25_DEF_BACKOFF;
 495
 496	if (AX25_DEF_AXDEFMODE) {
 497		ax25->modulus = AX25_EMODULUS;
 498		ax25->window  = AX25_DEF_EWINDOW;
 499	} else {
 500		ax25->modulus = AX25_MODULUS;
 501		ax25->window  = AX25_DEF_WINDOW;
 502	}
 503}
 504
 505/*
 506 * Create an empty AX.25 control block.
 507 */
 508ax25_cb *ax25_create_cb(void)
 509{
 510	ax25_cb *ax25;
 511
 512	if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
 513		return NULL;
 514
 515	atomic_set(&ax25->refcount, 1);
 516
 517	skb_queue_head_init(&ax25->write_queue);
 518	skb_queue_head_init(&ax25->frag_queue);
 519	skb_queue_head_init(&ax25->ack_queue);
 520	skb_queue_head_init(&ax25->reseq_queue);
 521
 522	ax25_setup_timers(ax25);
 523
 524	ax25_fillin_cb(ax25, NULL);
 525
 526	ax25->state = AX25_STATE_0;
 527
 528	return ax25;
 529}
 530
 531/*
 532 *	Handling for system calls applied via the various interfaces to an
 533 *	AX25 socket object
 534 */
 535
 536static int ax25_setsockopt(struct socket *sock, int level, int optname,
 537	char __user *optval, unsigned int optlen)
 538{
 539	struct sock *sk = sock->sk;
 540	ax25_cb *ax25;
 541	struct net_device *dev;
 542	char devname[IFNAMSIZ];
 543	int opt, res = 0;
 
 544
 545	if (level != SOL_AX25)
 546		return -ENOPROTOOPT;
 547
 548	if (optlen < sizeof(int))
 549		return -EINVAL;
 550
 551	if (get_user(opt, (int __user *)optval))
 552		return -EFAULT;
 553
 554	lock_sock(sk);
 555	ax25 = ax25_sk(sk);
 556
 557	switch (optname) {
 558	case AX25_WINDOW:
 559		if (ax25->modulus == AX25_MODULUS) {
 560			if (opt < 1 || opt > 7) {
 561				res = -EINVAL;
 562				break;
 563			}
 564		} else {
 565			if (opt < 1 || opt > 63) {
 566				res = -EINVAL;
 567				break;
 568			}
 569		}
 570		ax25->window = opt;
 571		break;
 572
 573	case AX25_T1:
 574		if (opt < 1) {
 575			res = -EINVAL;
 576			break;
 577		}
 578		ax25->rtt = (opt * HZ) >> 1;
 579		ax25->t1  = opt * HZ;
 580		break;
 581
 582	case AX25_T2:
 583		if (opt < 1) {
 584			res = -EINVAL;
 585			break;
 586		}
 587		ax25->t2 = opt * HZ;
 588		break;
 589
 590	case AX25_N2:
 591		if (opt < 1 || opt > 31) {
 592			res = -EINVAL;
 593			break;
 594		}
 595		ax25->n2 = opt;
 596		break;
 597
 598	case AX25_T3:
 599		if (opt < 1) {
 600			res = -EINVAL;
 601			break;
 602		}
 603		ax25->t3 = opt * HZ;
 604		break;
 605
 606	case AX25_IDLE:
 607		if (opt < 0) {
 608			res = -EINVAL;
 609			break;
 610		}
 611		ax25->idle = opt * 60 * HZ;
 612		break;
 613
 614	case AX25_BACKOFF:
 615		if (opt < 0 || opt > 2) {
 616			res = -EINVAL;
 617			break;
 618		}
 619		ax25->backoff = opt;
 620		break;
 621
 622	case AX25_EXTSEQ:
 623		ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
 624		break;
 625
 626	case AX25_PIDINCL:
 627		ax25->pidincl = opt ? 1 : 0;
 628		break;
 629
 630	case AX25_IAMDIGI:
 631		ax25->iamdigi = opt ? 1 : 0;
 632		break;
 633
 634	case AX25_PACLEN:
 635		if (opt < 16 || opt > 65535) {
 636			res = -EINVAL;
 637			break;
 638		}
 639		ax25->paclen = opt;
 640		break;
 641
 642	case SO_BINDTODEVICE:
 643		if (optlen > IFNAMSIZ)
 644			optlen = IFNAMSIZ;
 645
 646		if (copy_from_user(devname, optval, optlen)) {
 
 
 647			res = -EFAULT;
 648			break;
 649		}
 650
 651		if (sk->sk_type == SOCK_SEQPACKET &&
 652		   (sock->state != SS_UNCONNECTED ||
 653		    sk->sk_state == TCP_LISTEN)) {
 654			res = -EADDRNOTAVAIL;
 655			break;
 656		}
 657
 658		dev = dev_get_by_name(&init_net, devname);
 
 659		if (!dev) {
 
 660			res = -ENODEV;
 661			break;
 662		}
 663
 
 
 
 
 
 
 
 
 
 664		ax25->ax25_dev = ax25_dev_ax25dev(dev);
 
 
 
 
 
 665		ax25_fillin_cb(ax25, ax25->ax25_dev);
 666		dev_put(dev);
 
 
 667		break;
 668
 669	default:
 670		res = -ENOPROTOOPT;
 671	}
 672	release_sock(sk);
 673
 674	return res;
 675}
 676
 677static int ax25_getsockopt(struct socket *sock, int level, int optname,
 678	char __user *optval, int __user *optlen)
 679{
 680	struct sock *sk = sock->sk;
 681	ax25_cb *ax25;
 682	struct ax25_dev *ax25_dev;
 683	char devname[IFNAMSIZ];
 684	void *valptr;
 685	int val = 0;
 686	int maxlen, length;
 687
 688	if (level != SOL_AX25)
 689		return -ENOPROTOOPT;
 690
 691	if (get_user(maxlen, optlen))
 692		return -EFAULT;
 693
 694	if (maxlen < 1)
 695		return -EFAULT;
 696
 697	valptr = (void *) &val;
 698	length = min_t(unsigned int, maxlen, sizeof(int));
 699
 700	lock_sock(sk);
 701	ax25 = ax25_sk(sk);
 702
 703	switch (optname) {
 704	case AX25_WINDOW:
 705		val = ax25->window;
 706		break;
 707
 708	case AX25_T1:
 709		val = ax25->t1 / HZ;
 710		break;
 711
 712	case AX25_T2:
 713		val = ax25->t2 / HZ;
 714		break;
 715
 716	case AX25_N2:
 717		val = ax25->n2;
 718		break;
 719
 720	case AX25_T3:
 721		val = ax25->t3 / HZ;
 722		break;
 723
 724	case AX25_IDLE:
 725		val = ax25->idle / (60 * HZ);
 726		break;
 727
 728	case AX25_BACKOFF:
 729		val = ax25->backoff;
 730		break;
 731
 732	case AX25_EXTSEQ:
 733		val = (ax25->modulus == AX25_EMODULUS);
 734		break;
 735
 736	case AX25_PIDINCL:
 737		val = ax25->pidincl;
 738		break;
 739
 740	case AX25_IAMDIGI:
 741		val = ax25->iamdigi;
 742		break;
 743
 744	case AX25_PACLEN:
 745		val = ax25->paclen;
 746		break;
 747
 748	case SO_BINDTODEVICE:
 749		ax25_dev = ax25->ax25_dev;
 750
 751		if (ax25_dev != NULL && ax25_dev->dev != NULL) {
 752			strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
 753			length = strlen(devname) + 1;
 754		} else {
 755			*devname = '\0';
 756			length = 1;
 757		}
 758
 759		valptr = (void *) devname;
 760		break;
 761
 762	default:
 763		release_sock(sk);
 764		return -ENOPROTOOPT;
 765	}
 766	release_sock(sk);
 767
 768	if (put_user(length, optlen))
 769		return -EFAULT;
 770
 771	return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
 772}
 773
 774static int ax25_listen(struct socket *sock, int backlog)
 775{
 776	struct sock *sk = sock->sk;
 777	int res = 0;
 778
 779	lock_sock(sk);
 780	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
 781		sk->sk_max_ack_backlog = backlog;
 782		sk->sk_state           = TCP_LISTEN;
 783		goto out;
 784	}
 785	res = -EOPNOTSUPP;
 786
 787out:
 788	release_sock(sk);
 789
 790	return res;
 791}
 792
 793/*
 794 * XXX: when creating ax25_sock we should update the .obj_size setting
 795 * below.
 796 */
 797static struct proto ax25_proto = {
 798	.name	  = "AX25",
 799	.owner	  = THIS_MODULE,
 800	.obj_size = sizeof(struct sock),
 801};
 802
 803static int ax25_create(struct net *net, struct socket *sock, int protocol,
 804		       int kern)
 805{
 806	struct sock *sk;
 807	ax25_cb *ax25;
 808
 
 
 
 809	if (!net_eq(net, &init_net))
 810		return -EAFNOSUPPORT;
 811
 812	switch (sock->type) {
 813	case SOCK_DGRAM:
 814		if (protocol == 0 || protocol == PF_AX25)
 815			protocol = AX25_P_TEXT;
 816		break;
 817
 818	case SOCK_SEQPACKET:
 819		switch (protocol) {
 820		case 0:
 821		case PF_AX25:	/* For CLX */
 822			protocol = AX25_P_TEXT;
 823			break;
 824		case AX25_P_SEGMENT:
 825#ifdef CONFIG_INET
 826		case AX25_P_ARP:
 827		case AX25_P_IP:
 828#endif
 829#ifdef CONFIG_NETROM
 830		case AX25_P_NETROM:
 831#endif
 832#ifdef CONFIG_ROSE
 833		case AX25_P_ROSE:
 834#endif
 835			return -ESOCKTNOSUPPORT;
 836#ifdef CONFIG_NETROM_MODULE
 837		case AX25_P_NETROM:
 838			if (ax25_protocol_is_registered(AX25_P_NETROM))
 839				return -ESOCKTNOSUPPORT;
 
 840#endif
 841#ifdef CONFIG_ROSE_MODULE
 842		case AX25_P_ROSE:
 843			if (ax25_protocol_is_registered(AX25_P_ROSE))
 844				return -ESOCKTNOSUPPORT;
 
 845#endif
 846		default:
 847			break;
 848		}
 849		break;
 850
 851	case SOCK_RAW:
 
 
 852		break;
 853	default:
 854		return -ESOCKTNOSUPPORT;
 855	}
 856
 857	sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto);
 858	if (sk == NULL)
 859		return -ENOMEM;
 860
 861	ax25 = sk->sk_protinfo = ax25_create_cb();
 862	if (!ax25) {
 863		sk_free(sk);
 864		return -ENOMEM;
 865	}
 866
 867	sock_init_data(sock, sk);
 868
 869	sk->sk_destruct = ax25_free_sock;
 870	sock->ops    = &ax25_proto_ops;
 871	sk->sk_protocol = protocol;
 872
 873	ax25->sk    = sk;
 874
 875	return 0;
 876}
 877
 878struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
 879{
 880	struct sock *sk;
 881	ax25_cb *ax25, *oax25;
 882
 883	sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC,	osk->sk_prot);
 884	if (sk == NULL)
 885		return NULL;
 886
 887	if ((ax25 = ax25_create_cb()) == NULL) {
 888		sk_free(sk);
 889		return NULL;
 890	}
 891
 892	switch (osk->sk_type) {
 893	case SOCK_DGRAM:
 894		break;
 895	case SOCK_SEQPACKET:
 896		break;
 897	default:
 898		sk_free(sk);
 899		ax25_cb_put(ax25);
 900		return NULL;
 901	}
 902
 903	sock_init_data(NULL, sk);
 904
 905	sk->sk_type     = osk->sk_type;
 906	sk->sk_priority = osk->sk_priority;
 907	sk->sk_protocol = osk->sk_protocol;
 908	sk->sk_rcvbuf   = osk->sk_rcvbuf;
 909	sk->sk_sndbuf   = osk->sk_sndbuf;
 910	sk->sk_state    = TCP_ESTABLISHED;
 911	sock_copy_flags(sk, osk);
 912
 913	oax25 = ax25_sk(osk);
 914
 915	ax25->modulus = oax25->modulus;
 916	ax25->backoff = oax25->backoff;
 917	ax25->pidincl = oax25->pidincl;
 918	ax25->iamdigi = oax25->iamdigi;
 919	ax25->rtt     = oax25->rtt;
 920	ax25->t1      = oax25->t1;
 921	ax25->t2      = oax25->t2;
 922	ax25->t3      = oax25->t3;
 923	ax25->n2      = oax25->n2;
 924	ax25->idle    = oax25->idle;
 925	ax25->paclen  = oax25->paclen;
 926	ax25->window  = oax25->window;
 927
 928	ax25->ax25_dev    = ax25_dev;
 929	ax25->source_addr = oax25->source_addr;
 930
 931	if (oax25->digipeat != NULL) {
 932		ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
 933					 GFP_ATOMIC);
 934		if (ax25->digipeat == NULL) {
 935			sk_free(sk);
 936			ax25_cb_put(ax25);
 937			return NULL;
 938		}
 939	}
 940
 941	sk->sk_protinfo = ax25;
 942	sk->sk_destruct = ax25_free_sock;
 943	ax25->sk    = sk;
 944
 945	return sk;
 946}
 947
 948static int ax25_release(struct socket *sock)
 949{
 950	struct sock *sk = sock->sk;
 951	ax25_cb *ax25;
 
 952
 953	if (sk == NULL)
 954		return 0;
 955
 956	sock_hold(sk);
 957	sock_orphan(sk);
 958	lock_sock(sk);
 959	ax25 = ax25_sk(sk);
 
 
 960
 961	if (sk->sk_type == SOCK_SEQPACKET) {
 962		switch (ax25->state) {
 963		case AX25_STATE_0:
 964			release_sock(sk);
 965			ax25_disconnect(ax25, 0);
 966			lock_sock(sk);
 
 
 967			ax25_destroy_socket(ax25);
 968			break;
 969
 970		case AX25_STATE_1:
 971		case AX25_STATE_2:
 972			ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
 973			release_sock(sk);
 974			ax25_disconnect(ax25, 0);
 975			lock_sock(sk);
 976			ax25_destroy_socket(ax25);
 
 977			break;
 978
 979		case AX25_STATE_3:
 980		case AX25_STATE_4:
 981			ax25_clear_queues(ax25);
 982			ax25->n2count = 0;
 983
 984			switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
 985			case AX25_PROTO_STD_SIMPLEX:
 986			case AX25_PROTO_STD_DUPLEX:
 987				ax25_send_control(ax25,
 988						  AX25_DISC,
 989						  AX25_POLLON,
 990						  AX25_COMMAND);
 991				ax25_stop_t2timer(ax25);
 992				ax25_stop_t3timer(ax25);
 993				ax25_stop_idletimer(ax25);
 994				break;
 995#ifdef CONFIG_AX25_DAMA_SLAVE
 996			case AX25_PROTO_DAMA_SLAVE:
 997				ax25_stop_t3timer(ax25);
 998				ax25_stop_idletimer(ax25);
 999				break;
1000#endif
1001			}
1002			ax25_calculate_t1(ax25);
1003			ax25_start_t1timer(ax25);
1004			ax25->state = AX25_STATE_2;
1005			sk->sk_state                = TCP_CLOSE;
1006			sk->sk_shutdown            |= SEND_SHUTDOWN;
1007			sk->sk_state_change(sk);
1008			sock_set_flag(sk, SOCK_DESTROY);
1009			break;
1010
1011		default:
1012			break;
1013		}
1014	} else {
1015		sk->sk_state     = TCP_CLOSE;
1016		sk->sk_shutdown |= SEND_SHUTDOWN;
1017		sk->sk_state_change(sk);
1018		ax25_destroy_socket(ax25);
1019	}
 
 
 
 
 
 
 
 
 
 
 
1020
1021	sock->sk   = NULL;
1022	release_sock(sk);
1023	sock_put(sk);
1024
1025	return 0;
1026}
1027
1028/*
1029 *	We support a funny extension here so you can (as root) give any callsign
1030 *	digipeated via a local address as source. This hack is obsolete now
1031 *	that we've implemented support for SO_BINDTODEVICE. It is however small
1032 *	and trivially backward compatible.
1033 */
1034static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1035{
1036	struct sock *sk = sock->sk;
1037	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1038	ax25_dev *ax25_dev = NULL;
1039	ax25_uid_assoc *user;
1040	ax25_address call;
1041	ax25_cb *ax25;
1042	int err = 0;
1043
1044	if (addr_len != sizeof(struct sockaddr_ax25) &&
1045	    addr_len != sizeof(struct full_sockaddr_ax25))
1046		/* support for old structure may go away some time
1047		 * ax25_bind(): uses old (6 digipeater) socket structure.
1048		 */
1049		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1050		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1051			return -EINVAL;
1052
1053	if (addr->fsa_ax25.sax25_family != AF_AX25)
1054		return -EINVAL;
1055
1056	user = ax25_findbyuid(current_euid());
1057	if (user) {
1058		call = user->call;
1059		ax25_uid_put(user);
1060	} else {
1061		if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1062			return -EACCES;
1063
1064		call = addr->fsa_ax25.sax25_call;
1065	}
1066
1067	lock_sock(sk);
1068
1069	ax25 = ax25_sk(sk);
1070	if (!sock_flag(sk, SOCK_ZAPPED)) {
1071		err = -EINVAL;
1072		goto out;
1073	}
1074
1075	ax25->source_addr = call;
1076
1077	/*
1078	 * User already set interface with SO_BINDTODEVICE
1079	 */
1080	if (ax25->ax25_dev != NULL)
1081		goto done;
1082
1083	if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1084		if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1085		    (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1086			err = -EADDRNOTAVAIL;
1087			goto out;
1088		}
1089	} else {
1090		if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1091			err = -EADDRNOTAVAIL;
1092			goto out;
1093		}
1094	}
1095
1096	if (ax25_dev != NULL)
1097		ax25_fillin_cb(ax25, ax25_dev);
 
 
1098
1099done:
1100	ax25_cb_add(ax25);
1101	sock_reset_flag(sk, SOCK_ZAPPED);
1102
1103out:
1104	release_sock(sk);
1105
1106	return err;
1107}
1108
1109/*
1110 *	FIXME: nonblock behaviour looks like it may have a bug.
1111 */
1112static int __must_check ax25_connect(struct socket *sock,
1113	struct sockaddr *uaddr, int addr_len, int flags)
1114{
1115	struct sock *sk = sock->sk;
1116	ax25_cb *ax25 = ax25_sk(sk), *ax25t;
1117	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1118	ax25_digi *digi = NULL;
1119	int ct = 0, err = 0;
1120
1121	/*
1122	 * some sanity checks. code further down depends on this
1123	 */
1124
1125	if (addr_len == sizeof(struct sockaddr_ax25))
1126		/* support for this will go away in early 2.5.x
1127		 * ax25_connect(): uses obsolete socket structure
1128		 */
1129		;
1130	else if (addr_len != sizeof(struct full_sockaddr_ax25))
1131		/* support for old structure may go away some time
1132		 * ax25_connect(): uses old (6 digipeater) socket structure.
1133		 */
1134		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1135		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1136			return -EINVAL;
1137
1138
1139	if (fsa->fsa_ax25.sax25_family != AF_AX25)
1140		return -EINVAL;
1141
1142	lock_sock(sk);
1143
1144	/* deal with restarts */
1145	if (sock->state == SS_CONNECTING) {
1146		switch (sk->sk_state) {
1147		case TCP_SYN_SENT: /* still trying */
1148			err = -EINPROGRESS;
1149			goto out_release;
1150
1151		case TCP_ESTABLISHED: /* connection established */
1152			sock->state = SS_CONNECTED;
1153			goto out_release;
1154
1155		case TCP_CLOSE: /* connection refused */
1156			sock->state = SS_UNCONNECTED;
1157			err = -ECONNREFUSED;
1158			goto out_release;
1159		}
1160	}
1161
1162	if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1163		err = -EISCONN;	/* No reconnect on a seqpacket socket */
1164		goto out_release;
1165	}
1166
1167	sk->sk_state   = TCP_CLOSE;
1168	sock->state = SS_UNCONNECTED;
1169
1170	kfree(ax25->digipeat);
1171	ax25->digipeat = NULL;
1172
1173	/*
1174	 *	Handle digi-peaters to be used.
1175	 */
1176	if (addr_len > sizeof(struct sockaddr_ax25) &&
1177	    fsa->fsa_ax25.sax25_ndigis != 0) {
1178		/* Valid number of digipeaters ? */
1179		if (fsa->fsa_ax25.sax25_ndigis < 1 || fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS) {
 
 
 
1180			err = -EINVAL;
1181			goto out_release;
1182		}
1183
1184		if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1185			err = -ENOBUFS;
1186			goto out_release;
1187		}
1188
1189		digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1190		digi->lastrepeat = -1;
1191
1192		while (ct < fsa->fsa_ax25.sax25_ndigis) {
1193			if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1194			     AX25_HBIT) && ax25->iamdigi) {
1195				digi->repeated[ct] = 1;
1196				digi->lastrepeat   = ct;
1197			} else {
1198				digi->repeated[ct] = 0;
1199			}
1200			digi->calls[ct] = fsa->fsa_digipeater[ct];
1201			ct++;
1202		}
1203	}
1204
1205	/*
1206	 *	Must bind first - autobinding in this may or may not work. If
1207	 *	the socket is already bound, check to see if the device has
1208	 *	been filled in, error if it hasn't.
1209	 */
1210	if (sock_flag(sk, SOCK_ZAPPED)) {
1211		/* check if we can remove this feature. It is broken. */
1212		printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1213			current->comm);
1214		if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1215			kfree(digi);
1216			goto out_release;
1217		}
1218
1219		ax25_fillin_cb(ax25, ax25->ax25_dev);
1220		ax25_cb_add(ax25);
1221	} else {
1222		if (ax25->ax25_dev == NULL) {
1223			kfree(digi);
1224			err = -EHOSTUNREACH;
1225			goto out_release;
1226		}
1227	}
1228
1229	if (sk->sk_type == SOCK_SEQPACKET &&
1230	    (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1231			 ax25->ax25_dev->dev))) {
1232		kfree(digi);
1233		err = -EADDRINUSE;		/* Already such a connection */
1234		ax25_cb_put(ax25t);
1235		goto out_release;
1236	}
1237
1238	ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1239	ax25->digipeat  = digi;
1240
1241	/* First the easy one */
1242	if (sk->sk_type != SOCK_SEQPACKET) {
1243		sock->state = SS_CONNECTED;
1244		sk->sk_state   = TCP_ESTABLISHED;
1245		goto out_release;
1246	}
1247
1248	/* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1249	sock->state        = SS_CONNECTING;
1250	sk->sk_state          = TCP_SYN_SENT;
1251
1252	switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1253	case AX25_PROTO_STD_SIMPLEX:
1254	case AX25_PROTO_STD_DUPLEX:
1255		ax25_std_establish_data_link(ax25);
1256		break;
1257
1258#ifdef CONFIG_AX25_DAMA_SLAVE
1259	case AX25_PROTO_DAMA_SLAVE:
1260		ax25->modulus = AX25_MODULUS;
1261		ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1262		if (ax25->ax25_dev->dama.slave)
1263			ax25_ds_establish_data_link(ax25);
1264		else
1265			ax25_std_establish_data_link(ax25);
1266		break;
1267#endif
1268	}
1269
1270	ax25->state = AX25_STATE_1;
1271
1272	ax25_start_heartbeat(ax25);
1273
1274	/* Now the loop */
1275	if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1276		err = -EINPROGRESS;
1277		goto out_release;
1278	}
1279
1280	if (sk->sk_state == TCP_SYN_SENT) {
1281		DEFINE_WAIT(wait);
1282
1283		for (;;) {
1284			prepare_to_wait(sk_sleep(sk), &wait,
1285					TASK_INTERRUPTIBLE);
1286			if (sk->sk_state != TCP_SYN_SENT)
1287				break;
1288			if (!signal_pending(current)) {
1289				release_sock(sk);
1290				schedule();
1291				lock_sock(sk);
1292				continue;
1293			}
1294			err = -ERESTARTSYS;
1295			break;
1296		}
1297		finish_wait(sk_sleep(sk), &wait);
1298
1299		if (err)
1300			goto out_release;
1301	}
1302
1303	if (sk->sk_state != TCP_ESTABLISHED) {
1304		/* Not in ABM, not in WAIT_UA -> failed */
1305		sock->state = SS_UNCONNECTED;
1306		err = sock_error(sk);	/* Always set at this point */
1307		goto out_release;
1308	}
1309
1310	sock->state = SS_CONNECTED;
1311
1312	err = 0;
1313out_release:
1314	release_sock(sk);
1315
1316	return err;
1317}
1318
1319static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
 
1320{
1321	struct sk_buff *skb;
1322	struct sock *newsk;
 
1323	DEFINE_WAIT(wait);
1324	struct sock *sk;
 
1325	int err = 0;
1326
1327	if (sock->state != SS_UNCONNECTED)
1328		return -EINVAL;
1329
1330	if ((sk = sock->sk) == NULL)
1331		return -EINVAL;
1332
1333	lock_sock(sk);
1334	if (sk->sk_type != SOCK_SEQPACKET) {
1335		err = -EOPNOTSUPP;
1336		goto out;
1337	}
1338
1339	if (sk->sk_state != TCP_LISTEN) {
1340		err = -EINVAL;
1341		goto out;
1342	}
1343
1344	/*
1345	 *	The read queue this time is holding sockets ready to use
1346	 *	hooked into the SABM we saved
1347	 */
1348	for (;;) {
1349		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1350		skb = skb_dequeue(&sk->sk_receive_queue);
1351		if (skb)
1352			break;
1353
1354		if (flags & O_NONBLOCK) {
1355			err = -EWOULDBLOCK;
1356			break;
1357		}
1358		if (!signal_pending(current)) {
1359			release_sock(sk);
1360			schedule();
1361			lock_sock(sk);
1362			continue;
1363		}
1364		err = -ERESTARTSYS;
1365		break;
1366	}
1367	finish_wait(sk_sleep(sk), &wait);
1368
1369	if (err)
1370		goto out;
1371
1372	newsk		 = skb->sk;
1373	sock_graft(newsk, newsock);
1374
1375	/* Now attach up the new socket */
1376	kfree_skb(skb);
1377	sk->sk_ack_backlog--;
1378	newsock->state = SS_CONNECTED;
 
 
 
 
1379
1380out:
1381	release_sock(sk);
1382
1383	return err;
1384}
1385
1386static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1387	int *uaddr_len, int peer)
1388{
1389	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1390	struct sock *sk = sock->sk;
1391	unsigned char ndigi, i;
1392	ax25_cb *ax25;
1393	int err = 0;
1394
1395	memset(fsa, 0, sizeof(*fsa));
1396	lock_sock(sk);
1397	ax25 = ax25_sk(sk);
1398
1399	if (peer != 0) {
1400		if (sk->sk_state != TCP_ESTABLISHED) {
1401			err = -ENOTCONN;
1402			goto out;
1403		}
1404
1405		fsa->fsa_ax25.sax25_family = AF_AX25;
1406		fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1407
1408		if (ax25->digipeat != NULL) {
1409			ndigi = ax25->digipeat->ndigi;
1410			fsa->fsa_ax25.sax25_ndigis = ndigi;
1411			for (i = 0; i < ndigi; i++)
1412				fsa->fsa_digipeater[i] =
1413						ax25->digipeat->calls[i];
1414		}
1415	} else {
1416		fsa->fsa_ax25.sax25_family = AF_AX25;
1417		fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1418		fsa->fsa_ax25.sax25_ndigis = 1;
1419		if (ax25->ax25_dev != NULL) {
1420			memcpy(&fsa->fsa_digipeater[0],
1421			       ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1422		} else {
1423			fsa->fsa_digipeater[0] = null_ax25_address;
1424		}
1425	}
1426	*uaddr_len = sizeof (struct full_sockaddr_ax25);
1427
1428out:
1429	release_sock(sk);
1430
1431	return err;
1432}
1433
1434static int ax25_sendmsg(struct kiocb *iocb, struct socket *sock,
1435			struct msghdr *msg, size_t len)
1436{
1437	struct sockaddr_ax25 *usax = (struct sockaddr_ax25 *)msg->msg_name;
1438	struct sock *sk = sock->sk;
1439	struct sockaddr_ax25 sax;
1440	struct sk_buff *skb;
1441	ax25_digi dtmp, *dp;
1442	ax25_cb *ax25;
1443	size_t size;
1444	int lv, err, addr_len = msg->msg_namelen;
1445
1446	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1447		return -EINVAL;
1448
1449	lock_sock(sk);
1450	ax25 = ax25_sk(sk);
1451
1452	if (sock_flag(sk, SOCK_ZAPPED)) {
1453		err = -EADDRNOTAVAIL;
1454		goto out;
1455	}
1456
1457	if (sk->sk_shutdown & SEND_SHUTDOWN) {
1458		send_sig(SIGPIPE, current, 0);
1459		err = -EPIPE;
1460		goto out;
1461	}
1462
1463	if (ax25->ax25_dev == NULL) {
1464		err = -ENETUNREACH;
1465		goto out;
1466	}
1467
1468	if (len > ax25->ax25_dev->dev->mtu) {
1469		err = -EMSGSIZE;
1470		goto out;
1471	}
1472
1473	if (usax != NULL) {
1474		if (usax->sax25_family != AF_AX25) {
1475			err = -EINVAL;
1476			goto out;
1477		}
1478
1479		if (addr_len == sizeof(struct sockaddr_ax25))
1480			/* ax25_sendmsg(): uses obsolete socket structure */
1481			;
1482		else if (addr_len != sizeof(struct full_sockaddr_ax25))
1483			/* support for old structure may go away some time
1484			 * ax25_sendmsg(): uses old (6 digipeater)
1485			 * socket structure.
1486			 */
1487			if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1488			    (addr_len > sizeof(struct full_sockaddr_ax25))) {
1489				err = -EINVAL;
1490				goto out;
1491			}
1492
1493
1494		if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1495			int ct           = 0;
1496			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1497
1498			/* Valid number of digipeaters ? */
1499			if (usax->sax25_ndigis < 1 || usax->sax25_ndigis > AX25_MAX_DIGIS) {
 
 
 
1500				err = -EINVAL;
1501				goto out;
1502			}
1503
1504			dtmp.ndigi      = usax->sax25_ndigis;
1505
1506			while (ct < usax->sax25_ndigis) {
1507				dtmp.repeated[ct] = 0;
1508				dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1509				ct++;
1510			}
1511
1512			dtmp.lastrepeat = 0;
1513		}
1514
1515		sax = *usax;
1516		if (sk->sk_type == SOCK_SEQPACKET &&
1517		    ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1518			err = -EISCONN;
1519			goto out;
1520		}
1521		if (usax->sax25_ndigis == 0)
1522			dp = NULL;
1523		else
1524			dp = &dtmp;
1525	} else {
1526		/*
1527		 *	FIXME: 1003.1g - if the socket is like this because
1528		 *	it has become closed (not started closed) and is VC
1529		 *	we ought to SIGPIPE, EPIPE
1530		 */
1531		if (sk->sk_state != TCP_ESTABLISHED) {
1532			err = -ENOTCONN;
1533			goto out;
1534		}
1535		sax.sax25_family = AF_AX25;
1536		sax.sax25_call   = ax25->dest_addr;
1537		dp = ax25->digipeat;
1538	}
1539
1540	/* Build a packet */
1541	/* Assume the worst case */
1542	size = len + ax25->ax25_dev->dev->hard_header_len;
1543
1544	skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1545	if (skb == NULL)
1546		goto out;
1547
1548	skb_reserve(skb, size - len);
1549
1550	/* User data follows immediately after the AX.25 data */
1551	if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
1552		err = -EFAULT;
1553		kfree_skb(skb);
1554		goto out;
1555	}
1556
1557	skb_reset_network_header(skb);
1558
1559	/* Add the PID if one is not supplied by the user in the skb */
1560	if (!ax25->pidincl)
1561		*skb_push(skb, 1) = sk->sk_protocol;
1562
1563	if (sk->sk_type == SOCK_SEQPACKET) {
1564		/* Connected mode sockets go via the LAPB machine */
1565		if (sk->sk_state != TCP_ESTABLISHED) {
1566			kfree_skb(skb);
1567			err = -ENOTCONN;
1568			goto out;
1569		}
1570
1571		/* Shove it onto the queue and kick */
1572		ax25_output(ax25, ax25->paclen, skb);
1573
1574		err = len;
1575		goto out;
1576	}
1577
1578	skb_push(skb, 1 + ax25_addr_size(dp));
1579
1580	/* Building AX.25 Header */
1581
1582	/* Build an AX.25 header */
1583	lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1584			     dp, AX25_COMMAND, AX25_MODULUS);
1585
1586	skb_set_transport_header(skb, lv);
1587
1588	*skb_transport_header(skb) = AX25_UI;
1589
1590	/* Datagram frames go straight out of the door as UI */
1591	ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1592
1593	err = len;
1594
1595out:
1596	release_sock(sk);
1597
1598	return err;
1599}
1600
1601static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
1602	struct msghdr *msg, size_t size, int flags)
1603{
1604	struct sock *sk = sock->sk;
1605	struct sk_buff *skb;
 
1606	int copied;
1607	int err = 0;
 
 
1608
1609	lock_sock(sk);
1610	/*
1611	 * 	This works for seqpacket too. The receiver has ordered the
1612	 *	queue for us! We do one quick check first though
1613	 */
1614	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1615		err =  -ENOTCONN;
1616		goto out;
1617	}
1618
1619	/* Now we can treat all alike */
1620	skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1621				flags & MSG_DONTWAIT, &err);
1622	if (skb == NULL)
1623		goto out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1624
1625	if (!ax25_sk(sk)->pidincl)
1626		skb_pull(skb, 1);		/* Remove PID */
1627
1628	skb_reset_transport_header(skb);
1629	copied = skb->len;
1630
1631	if (copied > size) {
1632		copied = size;
1633		msg->msg_flags |= MSG_TRUNC;
1634	}
1635
1636	skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1637
1638	if (msg->msg_namelen != 0) {
1639		struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
1640		ax25_digi digi;
1641		ax25_address src;
1642		const unsigned char *mac = skb_mac_header(skb);
 
1643
 
1644		ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1645				&digi, NULL, NULL);
1646		sax->sax25_family = AF_AX25;
1647		/* We set this correctly, even though we may not let the
1648		   application know the digi calls further down (because it
1649		   did NOT ask to know them).  This could get political... **/
1650		sax->sax25_ndigis = digi.ndigi;
1651		sax->sax25_call   = src;
1652
1653		if (sax->sax25_ndigis != 0) {
1654			int ct;
1655			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1656
1657			for (ct = 0; ct < digi.ndigi; ct++)
1658				fsa->fsa_digipeater[ct] = digi.calls[ct];
1659		}
1660		msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1661	}
1662
1663	skb_free_datagram(sk, skb);
1664	err = copied;
1665
1666out:
1667	release_sock(sk);
1668
 
1669	return err;
1670}
1671
1672static int ax25_shutdown(struct socket *sk, int how)
1673{
1674	/* FIXME - generate DM and RNR states */
1675	return -EOPNOTSUPP;
1676}
1677
1678static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1679{
1680	struct sock *sk = sock->sk;
1681	void __user *argp = (void __user *)arg;
1682	int res = 0;
1683
1684	lock_sock(sk);
1685	switch (cmd) {
1686	case TIOCOUTQ: {
1687		long amount;
1688
1689		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1690		if (amount < 0)
1691			amount = 0;
1692		res = put_user(amount, (int __user *)argp);
1693		break;
1694	}
1695
1696	case TIOCINQ: {
1697		struct sk_buff *skb;
1698		long amount = 0L;
1699		/* These two are safe on a single CPU system as only user tasks fiddle here */
1700		if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1701			amount = skb->len;
1702		res = put_user(amount, (int __user *) argp);
1703		break;
1704	}
1705
1706	case SIOCGSTAMP:
1707		res = sock_get_timestamp(sk, argp);
1708		break;
1709
1710	case SIOCGSTAMPNS:
1711		res = sock_get_timestampns(sk, argp);
1712		break;
1713
1714	case SIOCAX25ADDUID:	/* Add a uid to the uid/call map table */
1715	case SIOCAX25DELUID:	/* Delete a uid from the uid/call map table */
1716	case SIOCAX25GETUID: {
1717		struct sockaddr_ax25 sax25;
1718		if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1719			res = -EFAULT;
1720			break;
1721		}
1722		res = ax25_uid_ioctl(cmd, &sax25);
1723		break;
1724	}
1725
1726	case SIOCAX25NOUID: {	/* Set the default policy (default/bar) */
1727		long amount;
1728		if (!capable(CAP_NET_ADMIN)) {
1729			res = -EPERM;
1730			break;
1731		}
1732		if (get_user(amount, (long __user *)argp)) {
1733			res = -EFAULT;
1734			break;
1735		}
1736		if (amount > AX25_NOUID_BLOCK) {
1737			res = -EINVAL;
1738			break;
1739		}
1740		ax25_uid_policy = amount;
1741		res = 0;
1742		break;
1743	}
1744
1745	case SIOCADDRT:
1746	case SIOCDELRT:
1747	case SIOCAX25OPTRT:
1748		if (!capable(CAP_NET_ADMIN)) {
1749			res = -EPERM;
1750			break;
1751		}
1752		res = ax25_rt_ioctl(cmd, argp);
1753		break;
1754
1755	case SIOCAX25CTLCON:
1756		if (!capable(CAP_NET_ADMIN)) {
1757			res = -EPERM;
1758			break;
1759		}
1760		res = ax25_ctl_ioctl(cmd, argp);
1761		break;
1762
1763	case SIOCAX25GETINFO:
1764	case SIOCAX25GETINFOOLD: {
1765		ax25_cb *ax25 = ax25_sk(sk);
1766		struct ax25_info_struct ax25_info;
1767
1768		ax25_info.t1        = ax25->t1   / HZ;
1769		ax25_info.t2        = ax25->t2   / HZ;
1770		ax25_info.t3        = ax25->t3   / HZ;
1771		ax25_info.idle      = ax25->idle / (60 * HZ);
1772		ax25_info.n2        = ax25->n2;
1773		ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1774		ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1775		ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1776		ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1777		ax25_info.n2count   = ax25->n2count;
1778		ax25_info.state     = ax25->state;
1779		ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1780		ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1781		ax25_info.vs        = ax25->vs;
1782		ax25_info.vr        = ax25->vr;
1783		ax25_info.va        = ax25->va;
1784		ax25_info.vs_max    = ax25->vs; /* reserved */
1785		ax25_info.paclen    = ax25->paclen;
1786		ax25_info.window    = ax25->window;
1787
1788		/* old structure? */
1789		if (cmd == SIOCAX25GETINFOOLD) {
1790			static int warned = 0;
1791			if (!warned) {
1792				printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1793					current->comm);
1794				warned=1;
1795			}
1796
1797			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1798				res = -EFAULT;
1799				break;
1800			}
1801		} else {
1802			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1803				res = -EINVAL;
1804				break;
1805			}
1806		}
1807		res = 0;
1808		break;
1809	}
1810
1811	case SIOCAX25ADDFWD:
1812	case SIOCAX25DELFWD: {
1813		struct ax25_fwd_struct ax25_fwd;
1814		if (!capable(CAP_NET_ADMIN)) {
1815			res = -EPERM;
1816			break;
1817		}
1818		if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1819			res = -EFAULT;
1820			break;
1821		}
1822		res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1823		break;
1824	}
1825
1826	case SIOCGIFADDR:
1827	case SIOCSIFADDR:
1828	case SIOCGIFDSTADDR:
1829	case SIOCSIFDSTADDR:
1830	case SIOCGIFBRDADDR:
1831	case SIOCSIFBRDADDR:
1832	case SIOCGIFNETMASK:
1833	case SIOCSIFNETMASK:
1834	case SIOCGIFMETRIC:
1835	case SIOCSIFMETRIC:
1836		res = -EINVAL;
1837		break;
1838
1839	default:
1840		res = -ENOIOCTLCMD;
1841		break;
1842	}
1843	release_sock(sk);
1844
1845	return res;
1846}
1847
1848#ifdef CONFIG_PROC_FS
1849
1850static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1851	__acquires(ax25_list_lock)
1852{
1853	spin_lock_bh(&ax25_list_lock);
1854	return seq_hlist_start(&ax25_list, *pos);
1855}
1856
1857static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1858{
1859	return seq_hlist_next(v, &ax25_list, pos);
1860}
1861
1862static void ax25_info_stop(struct seq_file *seq, void *v)
1863	__releases(ax25_list_lock)
1864{
1865	spin_unlock_bh(&ax25_list_lock);
1866}
1867
1868static int ax25_info_show(struct seq_file *seq, void *v)
1869{
1870	ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1871	char buf[11];
1872	int k;
1873
1874
1875	/*
1876	 * New format:
1877	 * magic dev src_addr dest_addr,digi1,digi2,.. st vs vr va t1 t1 t2 t2 t3 t3 idle idle n2 n2 rtt window paclen Snd-Q Rcv-Q inode
1878	 */
1879
1880	seq_printf(seq, "%8.8lx %s %s%s ",
1881		   (long) ax25,
1882		   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1883		   ax2asc(buf, &ax25->source_addr),
1884		   ax25->iamdigi? "*":"");
1885	seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1886
1887	for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1888		seq_printf(seq, ",%s%s",
1889			   ax2asc(buf, &ax25->digipeat->calls[k]),
1890			   ax25->digipeat->repeated[k]? "*":"");
1891	}
1892
1893	seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1894		   ax25->state,
1895		   ax25->vs, ax25->vr, ax25->va,
1896		   ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1897		   ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1898		   ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1899		   ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1900		   ax25->idle / (60 * HZ),
1901		   ax25->n2count, ax25->n2,
1902		   ax25->rtt / HZ,
1903		   ax25->window,
1904		   ax25->paclen);
1905
1906	if (ax25->sk != NULL) {
1907		seq_printf(seq, " %d %d %lu\n",
1908			   sk_wmem_alloc_get(ax25->sk),
1909			   sk_rmem_alloc_get(ax25->sk),
1910			   sock_i_ino(ax25->sk));
1911	} else {
1912		seq_puts(seq, " * * *\n");
1913	}
1914	return 0;
1915}
1916
1917static const struct seq_operations ax25_info_seqops = {
1918	.start = ax25_info_start,
1919	.next = ax25_info_next,
1920	.stop = ax25_info_stop,
1921	.show = ax25_info_show,
1922};
1923
1924static int ax25_info_open(struct inode *inode, struct file *file)
1925{
1926	return seq_open(file, &ax25_info_seqops);
1927}
1928
1929static const struct file_operations ax25_info_fops = {
1930	.owner = THIS_MODULE,
1931	.open = ax25_info_open,
1932	.read = seq_read,
1933	.llseek = seq_lseek,
1934	.release = seq_release,
1935};
1936
1937#endif
1938
1939static const struct net_proto_family ax25_family_ops = {
1940	.family =	PF_AX25,
1941	.create =	ax25_create,
1942	.owner	=	THIS_MODULE,
1943};
1944
1945static const struct proto_ops ax25_proto_ops = {
1946	.family		= PF_AX25,
1947	.owner		= THIS_MODULE,
1948	.release	= ax25_release,
1949	.bind		= ax25_bind,
1950	.connect	= ax25_connect,
1951	.socketpair	= sock_no_socketpair,
1952	.accept		= ax25_accept,
1953	.getname	= ax25_getname,
1954	.poll		= datagram_poll,
1955	.ioctl		= ax25_ioctl,
 
1956	.listen		= ax25_listen,
1957	.shutdown	= ax25_shutdown,
1958	.setsockopt	= ax25_setsockopt,
1959	.getsockopt	= ax25_getsockopt,
1960	.sendmsg	= ax25_sendmsg,
1961	.recvmsg	= ax25_recvmsg,
1962	.mmap		= sock_no_mmap,
1963	.sendpage	= sock_no_sendpage,
1964};
1965
1966/*
1967 *	Called by socket.c on kernel start up
1968 */
1969static struct packet_type ax25_packet_type __read_mostly = {
1970	.type	=	cpu_to_be16(ETH_P_AX25),
1971	.func	=	ax25_kiss_rcv,
1972};
1973
1974static struct notifier_block ax25_dev_notifier = {
1975	.notifier_call =ax25_device_event,
1976};
1977
1978static int __init ax25_init(void)
1979{
1980	int rc = proto_register(&ax25_proto, 0);
1981
1982	if (rc != 0)
1983		goto out;
1984
1985	sock_register(&ax25_family_ops);
1986	dev_add_pack(&ax25_packet_type);
1987	register_netdevice_notifier(&ax25_dev_notifier);
1988	ax25_register_sysctl();
1989
1990	proc_net_fops_create(&init_net, "ax25_route", S_IRUGO, &ax25_route_fops);
1991	proc_net_fops_create(&init_net, "ax25", S_IRUGO, &ax25_info_fops);
1992	proc_net_fops_create(&init_net, "ax25_calls", S_IRUGO, &ax25_uid_fops);
 
1993out:
1994	return rc;
1995}
1996module_init(ax25_init);
1997
1998
1999MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2000MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2001MODULE_LICENSE("GPL");
2002MODULE_ALIAS_NETPROTO(PF_AX25);
2003
2004static void __exit ax25_exit(void)
2005{
2006	proc_net_remove(&init_net, "ax25_route");
2007	proc_net_remove(&init_net, "ax25");
2008	proc_net_remove(&init_net, "ax25_calls");
2009	ax25_rt_free();
2010	ax25_uid_free();
2011	ax25_dev_free();
2012
2013	ax25_unregister_sysctl();
2014	unregister_netdevice_notifier(&ax25_dev_notifier);
2015
2016	dev_remove_pack(&ax25_packet_type);
2017
2018	sock_unregister(PF_AX25);
2019	proto_unregister(&ax25_proto);
 
 
 
 
2020}
2021module_exit(ax25_exit);
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
 
 
 
 
   3 *
   4 * Copyright (C) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
   5 * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
   6 * Copyright (C) Darryl Miles G7LED (dlm@g7led.demon.co.uk)
   7 * Copyright (C) Steven Whitehouse GW7RRM (stevew@acm.org)
   8 * Copyright (C) Joerg Reuter DL1BKE (jreuter@yaina.de)
   9 * Copyright (C) Hans-Joachim Hetscher DD8NE (dd8ne@bnv-bamberg.de)
  10 * Copyright (C) Hans Alblas PE1AYX (hans@esrac.ele.tue.nl)
  11 * Copyright (C) Frederic Rible F1OAT (frible@teaser.fr)
  12 */
  13#include <linux/capability.h>
  14#include <linux/module.h>
  15#include <linux/errno.h>
  16#include <linux/types.h>
  17#include <linux/socket.h>
  18#include <linux/in.h>
  19#include <linux/kernel.h>
  20#include <linux/sched/signal.h>
  21#include <linux/timer.h>
  22#include <linux/string.h>
  23#include <linux/sockios.h>
  24#include <linux/net.h>
  25#include <linux/slab.h>
  26#include <net/ax25.h>
  27#include <linux/inet.h>
  28#include <linux/netdevice.h>
  29#include <linux/if_arp.h>
  30#include <linux/skbuff.h>
  31#include <net/sock.h>
  32#include <linux/uaccess.h>
 
  33#include <linux/fcntl.h>
  34#include <linux/termios.h>	/* For TIOCINQ/OUTQ */
  35#include <linux/mm.h>
  36#include <linux/interrupt.h>
  37#include <linux/notifier.h>
  38#include <linux/proc_fs.h>
  39#include <linux/stat.h>
 
  40#include <linux/sysctl.h>
  41#include <linux/init.h>
  42#include <linux/spinlock.h>
  43#include <net/net_namespace.h>
  44#include <net/tcp_states.h>
  45#include <net/ip.h>
  46#include <net/arp.h>
  47
  48
  49
  50HLIST_HEAD(ax25_list);
  51DEFINE_SPINLOCK(ax25_list_lock);
  52
  53static const struct proto_ops ax25_proto_ops;
  54
  55static void ax25_free_sock(struct sock *sk)
  56{
  57	ax25_cb_put(sk_to_ax25(sk));
  58}
  59
  60/*
  61 *	Socket removal during an interrupt is now safe.
  62 */
  63static void ax25_cb_del(ax25_cb *ax25)
  64{
  65	spin_lock_bh(&ax25_list_lock);
  66	if (!hlist_unhashed(&ax25->ax25_node)) {
 
  67		hlist_del_init(&ax25->ax25_node);
 
  68		ax25_cb_put(ax25);
  69	}
  70	spin_unlock_bh(&ax25_list_lock);
  71}
  72
  73/*
  74 *	Kill all bound sockets on a dropped device.
  75 */
  76static void ax25_kill_by_device(struct net_device *dev)
  77{
  78	ax25_dev *ax25_dev;
  79	ax25_cb *s;
  80	struct sock *sk;
  81
  82	if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
  83		return;
  84	ax25_dev->device_up = false;
  85
  86	spin_lock_bh(&ax25_list_lock);
  87again:
  88	ax25_for_each(s, &ax25_list) {
  89		if (s->ax25_dev == ax25_dev) {
  90			sk = s->sk;
  91			if (!sk) {
  92				spin_unlock_bh(&ax25_list_lock);
  93				ax25_disconnect(s, ENETUNREACH);
  94				s->ax25_dev = NULL;
  95				ax25_cb_del(s);
  96				spin_lock_bh(&ax25_list_lock);
  97				goto again;
  98			}
  99			sock_hold(sk);
 100			spin_unlock_bh(&ax25_list_lock);
 101			lock_sock(sk);
 102			ax25_disconnect(s, ENETUNREACH);
 103			s->ax25_dev = NULL;
 104			if (sk->sk_socket) {
 105				netdev_put(ax25_dev->dev,
 106					   &s->dev_tracker);
 107				ax25_dev_put(ax25_dev);
 108			}
 109			ax25_cb_del(s);
 110			release_sock(sk);
 111			spin_lock_bh(&ax25_list_lock);
 112			sock_put(sk);
 113			/* The entry could have been deleted from the
 114			 * list meanwhile and thus the next pointer is
 115			 * no longer valid.  Play it safe and restart
 116			 * the scan.  Forward progress is ensured
 117			 * because we set s->ax25_dev to NULL and we
 118			 * are never passed a NULL 'dev' argument.
 119			 */
 120			goto again;
 121		}
 122	}
 123	spin_unlock_bh(&ax25_list_lock);
 124}
 125
 126/*
 127 *	Handle device status changes.
 128 */
 129static int ax25_device_event(struct notifier_block *this, unsigned long event,
 130			     void *ptr)
 131{
 132	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
 133
 134	if (!net_eq(dev_net(dev), &init_net))
 135		return NOTIFY_DONE;
 136
 137	/* Reject non AX.25 devices */
 138	if (dev->type != ARPHRD_AX25)
 139		return NOTIFY_DONE;
 140
 141	switch (event) {
 142	case NETDEV_UP:
 143		ax25_dev_device_up(dev);
 144		break;
 145	case NETDEV_DOWN:
 146		ax25_kill_by_device(dev);
 147		ax25_rt_device_down(dev);
 148		ax25_dev_device_down(dev);
 149		break;
 150	default:
 151		break;
 152	}
 153
 154	return NOTIFY_DONE;
 155}
 156
 157/*
 158 *	Add a socket to the bound sockets list.
 159 */
 160void ax25_cb_add(ax25_cb *ax25)
 161{
 162	spin_lock_bh(&ax25_list_lock);
 163	ax25_cb_hold(ax25);
 164	hlist_add_head(&ax25->ax25_node, &ax25_list);
 165	spin_unlock_bh(&ax25_list_lock);
 166}
 167
 168/*
 169 *	Find a socket that wants to accept the SABM we have just
 170 *	received.
 171 */
 172struct sock *ax25_find_listener(ax25_address *addr, int digi,
 173	struct net_device *dev, int type)
 174{
 175	ax25_cb *s;
 
 176
 177	spin_lock(&ax25_list_lock);
 178	ax25_for_each(s, &ax25_list) {
 179		if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
 180			continue;
 181		if (s->sk && !ax25cmp(&s->source_addr, addr) &&
 182		    s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
 183			/* If device is null we match any device */
 184			if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
 185				sock_hold(s->sk);
 186				spin_unlock(&ax25_list_lock);
 187				return s->sk;
 188			}
 189		}
 190	}
 191	spin_unlock(&ax25_list_lock);
 192
 193	return NULL;
 194}
 195
 196/*
 197 *	Find an AX.25 socket given both ends.
 198 */
 199struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
 200	int type)
 201{
 202	struct sock *sk = NULL;
 203	ax25_cb *s;
 
 204
 205	spin_lock(&ax25_list_lock);
 206	ax25_for_each(s, &ax25_list) {
 207		if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
 208		    !ax25cmp(&s->dest_addr, dest_addr) &&
 209		    s->sk->sk_type == type) {
 210			sk = s->sk;
 211			sock_hold(sk);
 212			break;
 213		}
 214	}
 215
 216	spin_unlock(&ax25_list_lock);
 217
 218	return sk;
 219}
 220
 221/*
 222 *	Find an AX.25 control block given both ends. It will only pick up
 223 *	floating AX.25 control blocks or non Raw socket bound control blocks.
 224 */
 225ax25_cb *ax25_find_cb(const ax25_address *src_addr, ax25_address *dest_addr,
 226	ax25_digi *digi, struct net_device *dev)
 227{
 228	ax25_cb *s;
 
 229
 230	spin_lock_bh(&ax25_list_lock);
 231	ax25_for_each(s, &ax25_list) {
 232		if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
 233			continue;
 234		if (s->ax25_dev == NULL)
 235			continue;
 236		if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
 237			if (digi != NULL && digi->ndigi != 0) {
 238				if (s->digipeat == NULL)
 239					continue;
 240				if (ax25digicmp(s->digipeat, digi) != 0)
 241					continue;
 242			} else {
 243				if (s->digipeat != NULL && s->digipeat->ndigi != 0)
 244					continue;
 245			}
 246			ax25_cb_hold(s);
 247			spin_unlock_bh(&ax25_list_lock);
 248
 249			return s;
 250		}
 251	}
 252	spin_unlock_bh(&ax25_list_lock);
 253
 254	return NULL;
 255}
 256
 257EXPORT_SYMBOL(ax25_find_cb);
 258
 259void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
 260{
 261	ax25_cb *s;
 262	struct sk_buff *copy;
 
 263
 264	spin_lock(&ax25_list_lock);
 265	ax25_for_each(s, &ax25_list) {
 266		if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
 267		    s->sk->sk_type == SOCK_RAW &&
 268		    s->sk->sk_protocol == proto &&
 269		    s->ax25_dev->dev == skb->dev &&
 270		    atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
 271			if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
 272				continue;
 273			if (sock_queue_rcv_skb(s->sk, copy) != 0)
 274				kfree_skb(copy);
 275		}
 276	}
 277	spin_unlock(&ax25_list_lock);
 278}
 279
 280/*
 281 *	Deferred destroy.
 282 */
 283void ax25_destroy_socket(ax25_cb *);
 284
 285/*
 286 *	Handler for deferred kills.
 287 */
 288static void ax25_destroy_timer(struct timer_list *t)
 289{
 290	ax25_cb *ax25 = from_timer(ax25, t, dtimer);
 291	struct sock *sk;
 292
 293	sk=ax25->sk;
 294
 295	bh_lock_sock(sk);
 296	sock_hold(sk);
 297	ax25_destroy_socket(ax25);
 298	bh_unlock_sock(sk);
 299	sock_put(sk);
 300}
 301
 302/*
 303 *	This is called from user mode and the timers. Thus it protects itself
 304 *	against interrupt users but doesn't worry about being called during
 305 *	work. Once it is removed from the queue no interrupt or bottom half
 306 *	will touch it and we are (fairly 8-) ) safe.
 307 */
 308void ax25_destroy_socket(ax25_cb *ax25)
 309{
 310	struct sk_buff *skb;
 311
 312	ax25_cb_del(ax25);
 313
 314	ax25_stop_heartbeat(ax25);
 315	ax25_stop_t1timer(ax25);
 316	ax25_stop_t2timer(ax25);
 317	ax25_stop_t3timer(ax25);
 318	ax25_stop_idletimer(ax25);
 319
 320	ax25_clear_queues(ax25);	/* Flush the queues */
 321
 322	if (ax25->sk != NULL) {
 323		while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
 324			if (skb->sk != ax25->sk) {
 325				/* A pending connection */
 326				ax25_cb *sax25 = sk_to_ax25(skb->sk);
 327
 328				/* Queue the unaccepted socket for death */
 329				sock_orphan(skb->sk);
 330
 331				/* 9A4GL: hack to release unaccepted sockets */
 332				skb->sk->sk_state = TCP_LISTEN;
 333
 334				ax25_start_heartbeat(sax25);
 335				sax25->state = AX25_STATE_0;
 336			}
 337
 338			kfree_skb(skb);
 339		}
 340		skb_queue_purge(&ax25->sk->sk_write_queue);
 341	}
 342
 343	if (ax25->sk != NULL) {
 344		if (sk_has_allocations(ax25->sk)) {
 345			/* Defer: outstanding buffers */
 346			timer_setup(&ax25->dtimer, ax25_destroy_timer, 0);
 
 347			ax25->dtimer.expires  = jiffies + 2 * HZ;
 348			add_timer(&ax25->dtimer);
 349		} else {
 350			struct sock *sk=ax25->sk;
 351			ax25->sk=NULL;
 352			sock_put(sk);
 353		}
 354	} else {
 355		ax25_cb_put(ax25);
 356	}
 357}
 358
 359/*
 360 * dl1bke 960311: set parameters for existing AX.25 connections,
 361 *		  includes a KILL command to abort any connection.
 362 *		  VERY useful for debugging ;-)
 363 */
 364static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
 365{
 366	struct ax25_ctl_struct ax25_ctl;
 367	ax25_digi digi;
 368	ax25_dev *ax25_dev;
 369	ax25_cb *ax25;
 370	unsigned int k;
 371	int ret = 0;
 372
 373	if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
 374		return -EFAULT;
 375
 
 
 
 376	if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
 377		return -EINVAL;
 378
 379	if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
 380		return -EINVAL;
 381
 382	ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr);
 383	if (!ax25_dev)
 384		return -ENODEV;
 385
 386	digi.ndigi = ax25_ctl.digi_count;
 387	for (k = 0; k < digi.ndigi; k++)
 388		digi.calls[k] = ax25_ctl.digi_addr[k];
 389
 390	ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev);
 391	if (!ax25) {
 392		ax25_dev_put(ax25_dev);
 393		return -ENOTCONN;
 394	}
 395
 396	switch (ax25_ctl.cmd) {
 397	case AX25_KILL:
 398		ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
 399#ifdef CONFIG_AX25_DAMA_SLAVE
 400		if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
 401			ax25_dama_off(ax25);
 402#endif
 403		ax25_disconnect(ax25, ENETRESET);
 404		break;
 405
 406	case AX25_WINDOW:
 407		if (ax25->modulus == AX25_MODULUS) {
 408			if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
 409				goto einval_put;
 410		} else {
 411			if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
 412				goto einval_put;
 413		}
 414		ax25->window = ax25_ctl.arg;
 415		break;
 416
 417	case AX25_T1:
 418		if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
 419			goto einval_put;
 420		ax25->rtt = (ax25_ctl.arg * HZ) / 2;
 421		ax25->t1  = ax25_ctl.arg * HZ;
 422		break;
 423
 424	case AX25_T2:
 425		if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
 426			goto einval_put;
 427		ax25->t2 = ax25_ctl.arg * HZ;
 428		break;
 429
 430	case AX25_N2:
 431		if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
 432			goto einval_put;
 433		ax25->n2count = 0;
 434		ax25->n2 = ax25_ctl.arg;
 435		break;
 436
 437	case AX25_T3:
 438		if (ax25_ctl.arg > ULONG_MAX / HZ)
 439			goto einval_put;
 440		ax25->t3 = ax25_ctl.arg * HZ;
 441		break;
 442
 443	case AX25_IDLE:
 444		if (ax25_ctl.arg > ULONG_MAX / (60 * HZ))
 445			goto einval_put;
 446
 447		ax25->idle = ax25_ctl.arg * 60 * HZ;
 448		break;
 449
 450	case AX25_PACLEN:
 451		if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
 452			goto einval_put;
 453		ax25->paclen = ax25_ctl.arg;
 454		break;
 455
 456	default:
 457		goto einval_put;
 458	  }
 459
 460out_put:
 461	ax25_dev_put(ax25_dev);
 462	ax25_cb_put(ax25);
 463	return ret;
 464
 465einval_put:
 466	ret = -EINVAL;
 467	goto out_put;
 468}
 469
 470static void ax25_fillin_cb_from_dev(ax25_cb *ax25, const ax25_dev *ax25_dev)
 471{
 472	ax25->rtt     = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
 473	ax25->t1      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
 474	ax25->t2      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
 475	ax25->t3      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
 476	ax25->n2      = ax25_dev->values[AX25_VALUES_N2];
 477	ax25->paclen  = ax25_dev->values[AX25_VALUES_PACLEN];
 478	ax25->idle    = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
 479	ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
 480
 481	if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
 482		ax25->modulus = AX25_EMODULUS;
 483		ax25->window  = ax25_dev->values[AX25_VALUES_EWINDOW];
 484	} else {
 485		ax25->modulus = AX25_MODULUS;
 486		ax25->window  = ax25_dev->values[AX25_VALUES_WINDOW];
 487	}
 488}
 489
 490/*
 491 *	Fill in a created AX.25 created control block with the default
 492 *	values for a particular device.
 493 */
 494void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
 495{
 496	ax25->ax25_dev = ax25_dev;
 497
 498	if (ax25->ax25_dev != NULL) {
 499		ax25_fillin_cb_from_dev(ax25, ax25_dev);
 500		return;
 501	}
 502
 503	/*
 504	 * No device, use kernel / AX.25 spec default values
 505	 */
 506	ax25->rtt     = msecs_to_jiffies(AX25_DEF_T1) / 2;
 507	ax25->t1      = msecs_to_jiffies(AX25_DEF_T1);
 508	ax25->t2      = msecs_to_jiffies(AX25_DEF_T2);
 509	ax25->t3      = msecs_to_jiffies(AX25_DEF_T3);
 510	ax25->n2      = AX25_DEF_N2;
 511	ax25->paclen  = AX25_DEF_PACLEN;
 512	ax25->idle    = msecs_to_jiffies(AX25_DEF_IDLE);
 513	ax25->backoff = AX25_DEF_BACKOFF;
 514
 515	if (AX25_DEF_AXDEFMODE) {
 516		ax25->modulus = AX25_EMODULUS;
 517		ax25->window  = AX25_DEF_EWINDOW;
 518	} else {
 519		ax25->modulus = AX25_MODULUS;
 520		ax25->window  = AX25_DEF_WINDOW;
 521	}
 522}
 523
 524/*
 525 * Create an empty AX.25 control block.
 526 */
 527ax25_cb *ax25_create_cb(void)
 528{
 529	ax25_cb *ax25;
 530
 531	if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
 532		return NULL;
 533
 534	refcount_set(&ax25->refcount, 1);
 535
 536	skb_queue_head_init(&ax25->write_queue);
 537	skb_queue_head_init(&ax25->frag_queue);
 538	skb_queue_head_init(&ax25->ack_queue);
 539	skb_queue_head_init(&ax25->reseq_queue);
 540
 541	ax25_setup_timers(ax25);
 542
 543	ax25_fillin_cb(ax25, NULL);
 544
 545	ax25->state = AX25_STATE_0;
 546
 547	return ax25;
 548}
 549
 550/*
 551 *	Handling for system calls applied via the various interfaces to an
 552 *	AX25 socket object
 553 */
 554
 555static int ax25_setsockopt(struct socket *sock, int level, int optname,
 556		sockptr_t optval, unsigned int optlen)
 557{
 558	struct sock *sk = sock->sk;
 559	ax25_cb *ax25;
 560	struct net_device *dev;
 561	char devname[IFNAMSIZ];
 562	unsigned int opt;
 563	int res = 0;
 564
 565	if (level != SOL_AX25)
 566		return -ENOPROTOOPT;
 567
 568	if (optlen < sizeof(unsigned int))
 569		return -EINVAL;
 570
 571	if (copy_from_sockptr(&opt, optval, sizeof(unsigned int)))
 572		return -EFAULT;
 573
 574	lock_sock(sk);
 575	ax25 = sk_to_ax25(sk);
 576
 577	switch (optname) {
 578	case AX25_WINDOW:
 579		if (ax25->modulus == AX25_MODULUS) {
 580			if (opt < 1 || opt > 7) {
 581				res = -EINVAL;
 582				break;
 583			}
 584		} else {
 585			if (opt < 1 || opt > 63) {
 586				res = -EINVAL;
 587				break;
 588			}
 589		}
 590		ax25->window = opt;
 591		break;
 592
 593	case AX25_T1:
 594		if (opt < 1 || opt > UINT_MAX / HZ) {
 595			res = -EINVAL;
 596			break;
 597		}
 598		ax25->rtt = (opt * HZ) >> 1;
 599		ax25->t1  = opt * HZ;
 600		break;
 601
 602	case AX25_T2:
 603		if (opt < 1 || opt > UINT_MAX / HZ) {
 604			res = -EINVAL;
 605			break;
 606		}
 607		ax25->t2 = opt * HZ;
 608		break;
 609
 610	case AX25_N2:
 611		if (opt < 1 || opt > 31) {
 612			res = -EINVAL;
 613			break;
 614		}
 615		ax25->n2 = opt;
 616		break;
 617
 618	case AX25_T3:
 619		if (opt < 1 || opt > UINT_MAX / HZ) {
 620			res = -EINVAL;
 621			break;
 622		}
 623		ax25->t3 = opt * HZ;
 624		break;
 625
 626	case AX25_IDLE:
 627		if (opt > UINT_MAX / (60 * HZ)) {
 628			res = -EINVAL;
 629			break;
 630		}
 631		ax25->idle = opt * 60 * HZ;
 632		break;
 633
 634	case AX25_BACKOFF:
 635		if (opt > 2) {
 636			res = -EINVAL;
 637			break;
 638		}
 639		ax25->backoff = opt;
 640		break;
 641
 642	case AX25_EXTSEQ:
 643		ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
 644		break;
 645
 646	case AX25_PIDINCL:
 647		ax25->pidincl = opt ? 1 : 0;
 648		break;
 649
 650	case AX25_IAMDIGI:
 651		ax25->iamdigi = opt ? 1 : 0;
 652		break;
 653
 654	case AX25_PACLEN:
 655		if (opt < 16 || opt > 65535) {
 656			res = -EINVAL;
 657			break;
 658		}
 659		ax25->paclen = opt;
 660		break;
 661
 662	case SO_BINDTODEVICE:
 663		if (optlen > IFNAMSIZ - 1)
 664			optlen = IFNAMSIZ - 1;
 665
 666		memset(devname, 0, sizeof(devname));
 667
 668		if (copy_from_sockptr(devname, optval, optlen)) {
 669			res = -EFAULT;
 670			break;
 671		}
 672
 673		if (sk->sk_type == SOCK_SEQPACKET &&
 674		   (sock->state != SS_UNCONNECTED ||
 675		    sk->sk_state == TCP_LISTEN)) {
 676			res = -EADDRNOTAVAIL;
 677			break;
 678		}
 679
 680		rcu_read_lock();
 681		dev = dev_get_by_name_rcu(&init_net, devname);
 682		if (!dev) {
 683			rcu_read_unlock();
 684			res = -ENODEV;
 685			break;
 686		}
 687
 688		if (ax25->ax25_dev) {
 689			if (dev == ax25->ax25_dev->dev) {
 690				rcu_read_unlock();
 691				break;
 692			}
 693			netdev_put(ax25->ax25_dev->dev, &ax25->dev_tracker);
 694			ax25_dev_put(ax25->ax25_dev);
 695		}
 696
 697		ax25->ax25_dev = ax25_dev_ax25dev(dev);
 698		if (!ax25->ax25_dev) {
 699			rcu_read_unlock();
 700			res = -ENODEV;
 701			break;
 702		}
 703		ax25_fillin_cb(ax25, ax25->ax25_dev);
 704		netdev_hold(dev, &ax25->dev_tracker, GFP_ATOMIC);
 705		ax25_dev_hold(ax25->ax25_dev);
 706		rcu_read_unlock();
 707		break;
 708
 709	default:
 710		res = -ENOPROTOOPT;
 711	}
 712	release_sock(sk);
 713
 714	return res;
 715}
 716
 717static int ax25_getsockopt(struct socket *sock, int level, int optname,
 718	char __user *optval, int __user *optlen)
 719{
 720	struct sock *sk = sock->sk;
 721	ax25_cb *ax25;
 722	struct ax25_dev *ax25_dev;
 723	char devname[IFNAMSIZ];
 724	void *valptr;
 725	int val = 0;
 726	int maxlen, length;
 727
 728	if (level != SOL_AX25)
 729		return -ENOPROTOOPT;
 730
 731	if (get_user(maxlen, optlen))
 732		return -EFAULT;
 733
 734	if (maxlen < 1)
 735		return -EFAULT;
 736
 737	valptr = &val;
 738	length = min_t(unsigned int, maxlen, sizeof(int));
 739
 740	lock_sock(sk);
 741	ax25 = sk_to_ax25(sk);
 742
 743	switch (optname) {
 744	case AX25_WINDOW:
 745		val = ax25->window;
 746		break;
 747
 748	case AX25_T1:
 749		val = ax25->t1 / HZ;
 750		break;
 751
 752	case AX25_T2:
 753		val = ax25->t2 / HZ;
 754		break;
 755
 756	case AX25_N2:
 757		val = ax25->n2;
 758		break;
 759
 760	case AX25_T3:
 761		val = ax25->t3 / HZ;
 762		break;
 763
 764	case AX25_IDLE:
 765		val = ax25->idle / (60 * HZ);
 766		break;
 767
 768	case AX25_BACKOFF:
 769		val = ax25->backoff;
 770		break;
 771
 772	case AX25_EXTSEQ:
 773		val = (ax25->modulus == AX25_EMODULUS);
 774		break;
 775
 776	case AX25_PIDINCL:
 777		val = ax25->pidincl;
 778		break;
 779
 780	case AX25_IAMDIGI:
 781		val = ax25->iamdigi;
 782		break;
 783
 784	case AX25_PACLEN:
 785		val = ax25->paclen;
 786		break;
 787
 788	case SO_BINDTODEVICE:
 789		ax25_dev = ax25->ax25_dev;
 790
 791		if (ax25_dev != NULL && ax25_dev->dev != NULL) {
 792			strscpy(devname, ax25_dev->dev->name, sizeof(devname));
 793			length = strlen(devname) + 1;
 794		} else {
 795			*devname = '\0';
 796			length = 1;
 797		}
 798
 799		valptr = devname;
 800		break;
 801
 802	default:
 803		release_sock(sk);
 804		return -ENOPROTOOPT;
 805	}
 806	release_sock(sk);
 807
 808	if (put_user(length, optlen))
 809		return -EFAULT;
 810
 811	return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
 812}
 813
 814static int ax25_listen(struct socket *sock, int backlog)
 815{
 816	struct sock *sk = sock->sk;
 817	int res = 0;
 818
 819	lock_sock(sk);
 820	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
 821		sk->sk_max_ack_backlog = backlog;
 822		sk->sk_state           = TCP_LISTEN;
 823		goto out;
 824	}
 825	res = -EOPNOTSUPP;
 826
 827out:
 828	release_sock(sk);
 829
 830	return res;
 831}
 832
 833/*
 834 * XXX: when creating ax25_sock we should update the .obj_size setting
 835 * below.
 836 */
 837static struct proto ax25_proto = {
 838	.name	  = "AX25",
 839	.owner	  = THIS_MODULE,
 840	.obj_size = sizeof(struct ax25_sock),
 841};
 842
 843static int ax25_create(struct net *net, struct socket *sock, int protocol,
 844		       int kern)
 845{
 846	struct sock *sk;
 847	ax25_cb *ax25;
 848
 849	if (protocol < 0 || protocol > U8_MAX)
 850		return -EINVAL;
 851
 852	if (!net_eq(net, &init_net))
 853		return -EAFNOSUPPORT;
 854
 855	switch (sock->type) {
 856	case SOCK_DGRAM:
 857		if (protocol == 0 || protocol == PF_AX25)
 858			protocol = AX25_P_TEXT;
 859		break;
 860
 861	case SOCK_SEQPACKET:
 862		switch (protocol) {
 863		case 0:
 864		case PF_AX25:	/* For CLX */
 865			protocol = AX25_P_TEXT;
 866			break;
 867		case AX25_P_SEGMENT:
 868#ifdef CONFIG_INET
 869		case AX25_P_ARP:
 870		case AX25_P_IP:
 871#endif
 872#ifdef CONFIG_NETROM
 873		case AX25_P_NETROM:
 874#endif
 875#ifdef CONFIG_ROSE
 876		case AX25_P_ROSE:
 877#endif
 878			return -ESOCKTNOSUPPORT;
 879#ifdef CONFIG_NETROM_MODULE
 880		case AX25_P_NETROM:
 881			if (ax25_protocol_is_registered(AX25_P_NETROM))
 882				return -ESOCKTNOSUPPORT;
 883			break;
 884#endif
 885#ifdef CONFIG_ROSE_MODULE
 886		case AX25_P_ROSE:
 887			if (ax25_protocol_is_registered(AX25_P_ROSE))
 888				return -ESOCKTNOSUPPORT;
 889			break;
 890#endif
 891		default:
 892			break;
 893		}
 894		break;
 895
 896	case SOCK_RAW:
 897		if (!capable(CAP_NET_RAW))
 898			return -EPERM;
 899		break;
 900	default:
 901		return -ESOCKTNOSUPPORT;
 902	}
 903
 904	sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
 905	if (sk == NULL)
 906		return -ENOMEM;
 907
 908	ax25 = ax25_sk(sk)->cb = ax25_create_cb();
 909	if (!ax25) {
 910		sk_free(sk);
 911		return -ENOMEM;
 912	}
 913
 914	sock_init_data(sock, sk);
 915
 916	sk->sk_destruct = ax25_free_sock;
 917	sock->ops    = &ax25_proto_ops;
 918	sk->sk_protocol = protocol;
 919
 920	ax25->sk    = sk;
 921
 922	return 0;
 923}
 924
 925struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
 926{
 927	struct sock *sk;
 928	ax25_cb *ax25, *oax25;
 929
 930	sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
 931	if (sk == NULL)
 932		return NULL;
 933
 934	if ((ax25 = ax25_create_cb()) == NULL) {
 935		sk_free(sk);
 936		return NULL;
 937	}
 938
 939	switch (osk->sk_type) {
 940	case SOCK_DGRAM:
 941		break;
 942	case SOCK_SEQPACKET:
 943		break;
 944	default:
 945		sk_free(sk);
 946		ax25_cb_put(ax25);
 947		return NULL;
 948	}
 949
 950	sock_init_data(NULL, sk);
 951
 952	sk->sk_type     = osk->sk_type;
 953	sk->sk_priority = READ_ONCE(osk->sk_priority);
 954	sk->sk_protocol = osk->sk_protocol;
 955	sk->sk_rcvbuf   = osk->sk_rcvbuf;
 956	sk->sk_sndbuf   = osk->sk_sndbuf;
 957	sk->sk_state    = TCP_ESTABLISHED;
 958	sock_copy_flags(sk, osk);
 959
 960	oax25 = sk_to_ax25(osk);
 961
 962	ax25->modulus = oax25->modulus;
 963	ax25->backoff = oax25->backoff;
 964	ax25->pidincl = oax25->pidincl;
 965	ax25->iamdigi = oax25->iamdigi;
 966	ax25->rtt     = oax25->rtt;
 967	ax25->t1      = oax25->t1;
 968	ax25->t2      = oax25->t2;
 969	ax25->t3      = oax25->t3;
 970	ax25->n2      = oax25->n2;
 971	ax25->idle    = oax25->idle;
 972	ax25->paclen  = oax25->paclen;
 973	ax25->window  = oax25->window;
 974
 975	ax25->ax25_dev    = ax25_dev;
 976	ax25->source_addr = oax25->source_addr;
 977
 978	if (oax25->digipeat != NULL) {
 979		ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
 980					 GFP_ATOMIC);
 981		if (ax25->digipeat == NULL) {
 982			sk_free(sk);
 983			ax25_cb_put(ax25);
 984			return NULL;
 985		}
 986	}
 987
 988	ax25_sk(sk)->cb = ax25;
 989	sk->sk_destruct = ax25_free_sock;
 990	ax25->sk    = sk;
 991
 992	return sk;
 993}
 994
 995static int ax25_release(struct socket *sock)
 996{
 997	struct sock *sk = sock->sk;
 998	ax25_cb *ax25;
 999	ax25_dev *ax25_dev;
1000
1001	if (sk == NULL)
1002		return 0;
1003
1004	sock_hold(sk);
 
1005	lock_sock(sk);
1006	sock_orphan(sk);
1007	ax25 = sk_to_ax25(sk);
1008	ax25_dev = ax25->ax25_dev;
1009
1010	if (sk->sk_type == SOCK_SEQPACKET) {
1011		switch (ax25->state) {
1012		case AX25_STATE_0:
1013			if (!sock_flag(ax25->sk, SOCK_DEAD)) {
1014				release_sock(sk);
1015				ax25_disconnect(ax25, 0);
1016				lock_sock(sk);
1017			}
1018			ax25_destroy_socket(ax25);
1019			break;
1020
1021		case AX25_STATE_1:
1022		case AX25_STATE_2:
1023			ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
1024			release_sock(sk);
1025			ax25_disconnect(ax25, 0);
1026			lock_sock(sk);
1027			if (!sock_flag(ax25->sk, SOCK_DESTROY))
1028				ax25_destroy_socket(ax25);
1029			break;
1030
1031		case AX25_STATE_3:
1032		case AX25_STATE_4:
1033			ax25_clear_queues(ax25);
1034			ax25->n2count = 0;
1035
1036			switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1037			case AX25_PROTO_STD_SIMPLEX:
1038			case AX25_PROTO_STD_DUPLEX:
1039				ax25_send_control(ax25,
1040						  AX25_DISC,
1041						  AX25_POLLON,
1042						  AX25_COMMAND);
1043				ax25_stop_t2timer(ax25);
1044				ax25_stop_t3timer(ax25);
1045				ax25_stop_idletimer(ax25);
1046				break;
1047#ifdef CONFIG_AX25_DAMA_SLAVE
1048			case AX25_PROTO_DAMA_SLAVE:
1049				ax25_stop_t3timer(ax25);
1050				ax25_stop_idletimer(ax25);
1051				break;
1052#endif
1053			}
1054			ax25_calculate_t1(ax25);
1055			ax25_start_t1timer(ax25);
1056			ax25->state = AX25_STATE_2;
1057			sk->sk_state                = TCP_CLOSE;
1058			sk->sk_shutdown            |= SEND_SHUTDOWN;
1059			sk->sk_state_change(sk);
1060			sock_set_flag(sk, SOCK_DESTROY);
1061			break;
1062
1063		default:
1064			break;
1065		}
1066	} else {
1067		sk->sk_state     = TCP_CLOSE;
1068		sk->sk_shutdown |= SEND_SHUTDOWN;
1069		sk->sk_state_change(sk);
1070		ax25_destroy_socket(ax25);
1071	}
1072	if (ax25_dev) {
1073		if (!ax25_dev->device_up) {
1074			del_timer_sync(&ax25->timer);
1075			del_timer_sync(&ax25->t1timer);
1076			del_timer_sync(&ax25->t2timer);
1077			del_timer_sync(&ax25->t3timer);
1078			del_timer_sync(&ax25->idletimer);
1079		}
1080		netdev_put(ax25_dev->dev, &ax25->dev_tracker);
1081		ax25_dev_put(ax25_dev);
1082	}
1083
1084	sock->sk   = NULL;
1085	release_sock(sk);
1086	sock_put(sk);
1087
1088	return 0;
1089}
1090
1091/*
1092 *	We support a funny extension here so you can (as root) give any callsign
1093 *	digipeated via a local address as source. This hack is obsolete now
1094 *	that we've implemented support for SO_BINDTODEVICE. It is however small
1095 *	and trivially backward compatible.
1096 */
1097static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1098{
1099	struct sock *sk = sock->sk;
1100	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1101	ax25_dev *ax25_dev = NULL;
1102	ax25_uid_assoc *user;
1103	ax25_address call;
1104	ax25_cb *ax25;
1105	int err = 0;
1106
1107	if (addr_len != sizeof(struct sockaddr_ax25) &&
1108	    addr_len != sizeof(struct full_sockaddr_ax25))
1109		/* support for old structure may go away some time
1110		 * ax25_bind(): uses old (6 digipeater) socket structure.
1111		 */
1112		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1113		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1114			return -EINVAL;
1115
1116	if (addr->fsa_ax25.sax25_family != AF_AX25)
1117		return -EINVAL;
1118
1119	user = ax25_findbyuid(current_euid());
1120	if (user) {
1121		call = user->call;
1122		ax25_uid_put(user);
1123	} else {
1124		if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1125			return -EACCES;
1126
1127		call = addr->fsa_ax25.sax25_call;
1128	}
1129
1130	lock_sock(sk);
1131
1132	ax25 = sk_to_ax25(sk);
1133	if (!sock_flag(sk, SOCK_ZAPPED)) {
1134		err = -EINVAL;
1135		goto out;
1136	}
1137
1138	ax25->source_addr = call;
1139
1140	/*
1141	 * User already set interface with SO_BINDTODEVICE
1142	 */
1143	if (ax25->ax25_dev != NULL)
1144		goto done;
1145
1146	if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1147		if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1148		    (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1149			err = -EADDRNOTAVAIL;
1150			goto out;
1151		}
1152	} else {
1153		if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1154			err = -EADDRNOTAVAIL;
1155			goto out;
1156		}
1157	}
1158
1159	if (ax25_dev) {
1160		ax25_fillin_cb(ax25, ax25_dev);
1161		netdev_hold(ax25_dev->dev, &ax25->dev_tracker, GFP_ATOMIC);
1162	}
1163
1164done:
1165	ax25_cb_add(ax25);
1166	sock_reset_flag(sk, SOCK_ZAPPED);
1167
1168out:
1169	release_sock(sk);
1170
1171	return err;
1172}
1173
1174/*
1175 *	FIXME: nonblock behaviour looks like it may have a bug.
1176 */
1177static int __must_check ax25_connect(struct socket *sock,
1178	struct sockaddr *uaddr, int addr_len, int flags)
1179{
1180	struct sock *sk = sock->sk;
1181	ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1182	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1183	ax25_digi *digi = NULL;
1184	int ct = 0, err = 0;
1185
1186	/*
1187	 * some sanity checks. code further down depends on this
1188	 */
1189
1190	if (addr_len == sizeof(struct sockaddr_ax25))
1191		/* support for this will go away in early 2.5.x
1192		 * ax25_connect(): uses obsolete socket structure
1193		 */
1194		;
1195	else if (addr_len != sizeof(struct full_sockaddr_ax25))
1196		/* support for old structure may go away some time
1197		 * ax25_connect(): uses old (6 digipeater) socket structure.
1198		 */
1199		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1200		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1201			return -EINVAL;
1202
1203
1204	if (fsa->fsa_ax25.sax25_family != AF_AX25)
1205		return -EINVAL;
1206
1207	lock_sock(sk);
1208
1209	/* deal with restarts */
1210	if (sock->state == SS_CONNECTING) {
1211		switch (sk->sk_state) {
1212		case TCP_SYN_SENT: /* still trying */
1213			err = -EINPROGRESS;
1214			goto out_release;
1215
1216		case TCP_ESTABLISHED: /* connection established */
1217			sock->state = SS_CONNECTED;
1218			goto out_release;
1219
1220		case TCP_CLOSE: /* connection refused */
1221			sock->state = SS_UNCONNECTED;
1222			err = -ECONNREFUSED;
1223			goto out_release;
1224		}
1225	}
1226
1227	if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1228		err = -EISCONN;	/* No reconnect on a seqpacket socket */
1229		goto out_release;
1230	}
1231
1232	sk->sk_state   = TCP_CLOSE;
1233	sock->state = SS_UNCONNECTED;
1234
1235	kfree(ax25->digipeat);
1236	ax25->digipeat = NULL;
1237
1238	/*
1239	 *	Handle digi-peaters to be used.
1240	 */
1241	if (addr_len > sizeof(struct sockaddr_ax25) &&
1242	    fsa->fsa_ax25.sax25_ndigis != 0) {
1243		/* Valid number of digipeaters ? */
1244		if (fsa->fsa_ax25.sax25_ndigis < 1 ||
1245		    fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS ||
1246		    addr_len < sizeof(struct sockaddr_ax25) +
1247		    sizeof(ax25_address) * fsa->fsa_ax25.sax25_ndigis) {
1248			err = -EINVAL;
1249			goto out_release;
1250		}
1251
1252		if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1253			err = -ENOBUFS;
1254			goto out_release;
1255		}
1256
1257		digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1258		digi->lastrepeat = -1;
1259
1260		while (ct < fsa->fsa_ax25.sax25_ndigis) {
1261			if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1262			     AX25_HBIT) && ax25->iamdigi) {
1263				digi->repeated[ct] = 1;
1264				digi->lastrepeat   = ct;
1265			} else {
1266				digi->repeated[ct] = 0;
1267			}
1268			digi->calls[ct] = fsa->fsa_digipeater[ct];
1269			ct++;
1270		}
1271	}
1272
1273	/*
1274	 *	Must bind first - autobinding in this may or may not work. If
1275	 *	the socket is already bound, check to see if the device has
1276	 *	been filled in, error if it hasn't.
1277	 */
1278	if (sock_flag(sk, SOCK_ZAPPED)) {
1279		/* check if we can remove this feature. It is broken. */
1280		printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1281			current->comm);
1282		if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1283			kfree(digi);
1284			goto out_release;
1285		}
1286
1287		ax25_fillin_cb(ax25, ax25->ax25_dev);
1288		ax25_cb_add(ax25);
1289	} else {
1290		if (ax25->ax25_dev == NULL) {
1291			kfree(digi);
1292			err = -EHOSTUNREACH;
1293			goto out_release;
1294		}
1295	}
1296
1297	if (sk->sk_type == SOCK_SEQPACKET &&
1298	    (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1299			 ax25->ax25_dev->dev))) {
1300		kfree(digi);
1301		err = -EADDRINUSE;		/* Already such a connection */
1302		ax25_cb_put(ax25t);
1303		goto out_release;
1304	}
1305
1306	ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1307	ax25->digipeat  = digi;
1308
1309	/* First the easy one */
1310	if (sk->sk_type != SOCK_SEQPACKET) {
1311		sock->state = SS_CONNECTED;
1312		sk->sk_state   = TCP_ESTABLISHED;
1313		goto out_release;
1314	}
1315
1316	/* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1317	sock->state        = SS_CONNECTING;
1318	sk->sk_state          = TCP_SYN_SENT;
1319
1320	switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1321	case AX25_PROTO_STD_SIMPLEX:
1322	case AX25_PROTO_STD_DUPLEX:
1323		ax25_std_establish_data_link(ax25);
1324		break;
1325
1326#ifdef CONFIG_AX25_DAMA_SLAVE
1327	case AX25_PROTO_DAMA_SLAVE:
1328		ax25->modulus = AX25_MODULUS;
1329		ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1330		if (ax25->ax25_dev->dama.slave)
1331			ax25_ds_establish_data_link(ax25);
1332		else
1333			ax25_std_establish_data_link(ax25);
1334		break;
1335#endif
1336	}
1337
1338	ax25->state = AX25_STATE_1;
1339
1340	ax25_start_heartbeat(ax25);
1341
1342	/* Now the loop */
1343	if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1344		err = -EINPROGRESS;
1345		goto out_release;
1346	}
1347
1348	if (sk->sk_state == TCP_SYN_SENT) {
1349		DEFINE_WAIT(wait);
1350
1351		for (;;) {
1352			prepare_to_wait(sk_sleep(sk), &wait,
1353					TASK_INTERRUPTIBLE);
1354			if (sk->sk_state != TCP_SYN_SENT)
1355				break;
1356			if (!signal_pending(current)) {
1357				release_sock(sk);
1358				schedule();
1359				lock_sock(sk);
1360				continue;
1361			}
1362			err = -ERESTARTSYS;
1363			break;
1364		}
1365		finish_wait(sk_sleep(sk), &wait);
1366
1367		if (err)
1368			goto out_release;
1369	}
1370
1371	if (sk->sk_state != TCP_ESTABLISHED) {
1372		/* Not in ABM, not in WAIT_UA -> failed */
1373		sock->state = SS_UNCONNECTED;
1374		err = sock_error(sk);	/* Always set at this point */
1375		goto out_release;
1376	}
1377
1378	sock->state = SS_CONNECTED;
1379
1380	err = 0;
1381out_release:
1382	release_sock(sk);
1383
1384	return err;
1385}
1386
1387static int ax25_accept(struct socket *sock, struct socket *newsock,
1388		       struct proto_accept_arg *arg)
1389{
1390	struct sk_buff *skb;
1391	struct sock *newsk;
1392	ax25_dev *ax25_dev;
1393	DEFINE_WAIT(wait);
1394	struct sock *sk;
1395	ax25_cb *ax25;
1396	int err = 0;
1397
1398	if (sock->state != SS_UNCONNECTED)
1399		return -EINVAL;
1400
1401	if ((sk = sock->sk) == NULL)
1402		return -EINVAL;
1403
1404	lock_sock(sk);
1405	if (sk->sk_type != SOCK_SEQPACKET) {
1406		err = -EOPNOTSUPP;
1407		goto out;
1408	}
1409
1410	if (sk->sk_state != TCP_LISTEN) {
1411		err = -EINVAL;
1412		goto out;
1413	}
1414
1415	/*
1416	 *	The read queue this time is holding sockets ready to use
1417	 *	hooked into the SABM we saved
1418	 */
1419	for (;;) {
1420		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1421		skb = skb_dequeue(&sk->sk_receive_queue);
1422		if (skb)
1423			break;
1424
1425		if (arg->flags & O_NONBLOCK) {
1426			err = -EWOULDBLOCK;
1427			break;
1428		}
1429		if (!signal_pending(current)) {
1430			release_sock(sk);
1431			schedule();
1432			lock_sock(sk);
1433			continue;
1434		}
1435		err = -ERESTARTSYS;
1436		break;
1437	}
1438	finish_wait(sk_sleep(sk), &wait);
1439
1440	if (err)
1441		goto out;
1442
1443	newsk		 = skb->sk;
1444	sock_graft(newsk, newsock);
1445
1446	/* Now attach up the new socket */
1447	kfree_skb(skb);
1448	sk_acceptq_removed(sk);
1449	newsock->state = SS_CONNECTED;
1450	ax25 = sk_to_ax25(newsk);
1451	ax25_dev = ax25->ax25_dev;
1452	netdev_hold(ax25_dev->dev, &ax25->dev_tracker, GFP_ATOMIC);
1453	ax25_dev_hold(ax25_dev);
1454
1455out:
1456	release_sock(sk);
1457
1458	return err;
1459}
1460
1461static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1462	int peer)
1463{
1464	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1465	struct sock *sk = sock->sk;
1466	unsigned char ndigi, i;
1467	ax25_cb *ax25;
1468	int err = 0;
1469
1470	memset(fsa, 0, sizeof(*fsa));
1471	lock_sock(sk);
1472	ax25 = sk_to_ax25(sk);
1473
1474	if (peer != 0) {
1475		if (sk->sk_state != TCP_ESTABLISHED) {
1476			err = -ENOTCONN;
1477			goto out;
1478		}
1479
1480		fsa->fsa_ax25.sax25_family = AF_AX25;
1481		fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1482
1483		if (ax25->digipeat != NULL) {
1484			ndigi = ax25->digipeat->ndigi;
1485			fsa->fsa_ax25.sax25_ndigis = ndigi;
1486			for (i = 0; i < ndigi; i++)
1487				fsa->fsa_digipeater[i] =
1488						ax25->digipeat->calls[i];
1489		}
1490	} else {
1491		fsa->fsa_ax25.sax25_family = AF_AX25;
1492		fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1493		fsa->fsa_ax25.sax25_ndigis = 1;
1494		if (ax25->ax25_dev != NULL) {
1495			memcpy(&fsa->fsa_digipeater[0],
1496			       ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1497		} else {
1498			fsa->fsa_digipeater[0] = null_ax25_address;
1499		}
1500	}
1501	err = sizeof (struct full_sockaddr_ax25);
1502
1503out:
1504	release_sock(sk);
1505
1506	return err;
1507}
1508
1509static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
 
1510{
1511	DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1512	struct sock *sk = sock->sk;
1513	struct sockaddr_ax25 sax;
1514	struct sk_buff *skb;
1515	ax25_digi dtmp, *dp;
1516	ax25_cb *ax25;
1517	size_t size;
1518	int lv, err, addr_len = msg->msg_namelen;
1519
1520	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1521		return -EINVAL;
1522
1523	lock_sock(sk);
1524	ax25 = sk_to_ax25(sk);
1525
1526	if (sock_flag(sk, SOCK_ZAPPED)) {
1527		err = -EADDRNOTAVAIL;
1528		goto out;
1529	}
1530
1531	if (sk->sk_shutdown & SEND_SHUTDOWN) {
1532		send_sig(SIGPIPE, current, 0);
1533		err = -EPIPE;
1534		goto out;
1535	}
1536
1537	if (ax25->ax25_dev == NULL) {
1538		err = -ENETUNREACH;
1539		goto out;
1540	}
1541
1542	if (len > ax25->ax25_dev->dev->mtu) {
1543		err = -EMSGSIZE;
1544		goto out;
1545	}
1546
1547	if (usax != NULL) {
1548		if (usax->sax25_family != AF_AX25) {
1549			err = -EINVAL;
1550			goto out;
1551		}
1552
1553		if (addr_len == sizeof(struct sockaddr_ax25))
1554			/* ax25_sendmsg(): uses obsolete socket structure */
1555			;
1556		else if (addr_len != sizeof(struct full_sockaddr_ax25))
1557			/* support for old structure may go away some time
1558			 * ax25_sendmsg(): uses old (6 digipeater)
1559			 * socket structure.
1560			 */
1561			if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1562			    (addr_len > sizeof(struct full_sockaddr_ax25))) {
1563				err = -EINVAL;
1564				goto out;
1565			}
1566
1567
1568		if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1569			int ct           = 0;
1570			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1571
1572			/* Valid number of digipeaters ? */
1573			if (usax->sax25_ndigis < 1 ||
1574			    usax->sax25_ndigis > AX25_MAX_DIGIS ||
1575			    addr_len < sizeof(struct sockaddr_ax25) +
1576			    sizeof(ax25_address) * usax->sax25_ndigis) {
1577				err = -EINVAL;
1578				goto out;
1579			}
1580
1581			dtmp.ndigi      = usax->sax25_ndigis;
1582
1583			while (ct < usax->sax25_ndigis) {
1584				dtmp.repeated[ct] = 0;
1585				dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1586				ct++;
1587			}
1588
1589			dtmp.lastrepeat = 0;
1590		}
1591
1592		sax = *usax;
1593		if (sk->sk_type == SOCK_SEQPACKET &&
1594		    ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1595			err = -EISCONN;
1596			goto out;
1597		}
1598		if (usax->sax25_ndigis == 0)
1599			dp = NULL;
1600		else
1601			dp = &dtmp;
1602	} else {
1603		/*
1604		 *	FIXME: 1003.1g - if the socket is like this because
1605		 *	it has become closed (not started closed) and is VC
1606		 *	we ought to SIGPIPE, EPIPE
1607		 */
1608		if (sk->sk_state != TCP_ESTABLISHED) {
1609			err = -ENOTCONN;
1610			goto out;
1611		}
1612		sax.sax25_family = AF_AX25;
1613		sax.sax25_call   = ax25->dest_addr;
1614		dp = ax25->digipeat;
1615	}
1616
1617	/* Build a packet */
1618	/* Assume the worst case */
1619	size = len + ax25->ax25_dev->dev->hard_header_len;
1620
1621	skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1622	if (skb == NULL)
1623		goto out;
1624
1625	skb_reserve(skb, size - len);
1626
1627	/* User data follows immediately after the AX.25 data */
1628	if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1629		err = -EFAULT;
1630		kfree_skb(skb);
1631		goto out;
1632	}
1633
1634	skb_reset_network_header(skb);
1635
1636	/* Add the PID if one is not supplied by the user in the skb */
1637	if (!ax25->pidincl)
1638		*(u8 *)skb_push(skb, 1) = sk->sk_protocol;
1639
1640	if (sk->sk_type == SOCK_SEQPACKET) {
1641		/* Connected mode sockets go via the LAPB machine */
1642		if (sk->sk_state != TCP_ESTABLISHED) {
1643			kfree_skb(skb);
1644			err = -ENOTCONN;
1645			goto out;
1646		}
1647
1648		/* Shove it onto the queue and kick */
1649		ax25_output(ax25, ax25->paclen, skb);
1650
1651		err = len;
1652		goto out;
1653	}
1654
1655	skb_push(skb, 1 + ax25_addr_size(dp));
1656
1657	/* Building AX.25 Header */
1658
1659	/* Build an AX.25 header */
1660	lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1661			     dp, AX25_COMMAND, AX25_MODULUS);
1662
1663	skb_set_transport_header(skb, lv);
1664
1665	*skb_transport_header(skb) = AX25_UI;
1666
1667	/* Datagram frames go straight out of the door as UI */
1668	ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1669
1670	err = len;
1671
1672out:
1673	release_sock(sk);
1674
1675	return err;
1676}
1677
1678static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1679			int flags)
1680{
1681	struct sock *sk = sock->sk;
1682	struct sk_buff *skb, *last;
1683	struct sk_buff_head *sk_queue;
1684	int copied;
1685	int err = 0;
1686	int off = 0;
1687	long timeo;
1688
1689	lock_sock(sk);
1690	/*
1691	 * 	This works for seqpacket too. The receiver has ordered the
1692	 *	queue for us! We do one quick check first though
1693	 */
1694	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1695		err =  -ENOTCONN;
1696		goto out;
1697	}
1698
1699	/*  We need support for non-blocking reads. */
1700	sk_queue = &sk->sk_receive_queue;
1701	skb = __skb_try_recv_datagram(sk, sk_queue, flags, &off, &err, &last);
1702	/* If no packet is available, release_sock(sk) and try again. */
1703	if (!skb) {
1704		if (err != -EAGAIN)
1705			goto out;
1706		release_sock(sk);
1707		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
1708		while (timeo && !__skb_wait_for_more_packets(sk, sk_queue, &err,
1709							     &timeo, last)) {
1710			skb = __skb_try_recv_datagram(sk, sk_queue, flags, &off,
1711						      &err, &last);
1712			if (skb)
1713				break;
1714
1715			if (err != -EAGAIN)
1716				goto done;
1717		}
1718		if (!skb)
1719			goto done;
1720		lock_sock(sk);
1721	}
1722
1723	if (!sk_to_ax25(sk)->pidincl)
1724		skb_pull(skb, 1);		/* Remove PID */
1725
1726	skb_reset_transport_header(skb);
1727	copied = skb->len;
1728
1729	if (copied > size) {
1730		copied = size;
1731		msg->msg_flags |= MSG_TRUNC;
1732	}
1733
1734	skb_copy_datagram_msg(skb, 0, msg, copied);
1735
1736	if (msg->msg_name) {
 
1737		ax25_digi digi;
1738		ax25_address src;
1739		const unsigned char *mac = skb_mac_header(skb);
1740		DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1741
1742		memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1743		ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1744				&digi, NULL, NULL);
1745		sax->sax25_family = AF_AX25;
1746		/* We set this correctly, even though we may not let the
1747		   application know the digi calls further down (because it
1748		   did NOT ask to know them).  This could get political... **/
1749		sax->sax25_ndigis = digi.ndigi;
1750		sax->sax25_call   = src;
1751
1752		if (sax->sax25_ndigis != 0) {
1753			int ct;
1754			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1755
1756			for (ct = 0; ct < digi.ndigi; ct++)
1757				fsa->fsa_digipeater[ct] = digi.calls[ct];
1758		}
1759		msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1760	}
1761
1762	skb_free_datagram(sk, skb);
1763	err = copied;
1764
1765out:
1766	release_sock(sk);
1767
1768done:
1769	return err;
1770}
1771
1772static int ax25_shutdown(struct socket *sk, int how)
1773{
1774	/* FIXME - generate DM and RNR states */
1775	return -EOPNOTSUPP;
1776}
1777
1778static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1779{
1780	struct sock *sk = sock->sk;
1781	void __user *argp = (void __user *)arg;
1782	int res = 0;
1783
1784	lock_sock(sk);
1785	switch (cmd) {
1786	case TIOCOUTQ: {
1787		long amount;
1788
1789		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1790		if (amount < 0)
1791			amount = 0;
1792		res = put_user(amount, (int __user *)argp);
1793		break;
1794	}
1795
1796	case TIOCINQ: {
1797		struct sk_buff *skb;
1798		long amount = 0L;
1799		/* These two are safe on a single CPU system as only user tasks fiddle here */
1800		if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1801			amount = skb->len;
1802		res = put_user(amount, (int __user *) argp);
1803		break;
1804	}
1805
 
 
 
 
 
 
 
 
1806	case SIOCAX25ADDUID:	/* Add a uid to the uid/call map table */
1807	case SIOCAX25DELUID:	/* Delete a uid from the uid/call map table */
1808	case SIOCAX25GETUID: {
1809		struct sockaddr_ax25 sax25;
1810		if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1811			res = -EFAULT;
1812			break;
1813		}
1814		res = ax25_uid_ioctl(cmd, &sax25);
1815		break;
1816	}
1817
1818	case SIOCAX25NOUID: {	/* Set the default policy (default/bar) */
1819		long amount;
1820		if (!capable(CAP_NET_ADMIN)) {
1821			res = -EPERM;
1822			break;
1823		}
1824		if (get_user(amount, (long __user *)argp)) {
1825			res = -EFAULT;
1826			break;
1827		}
1828		if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1829			res = -EINVAL;
1830			break;
1831		}
1832		ax25_uid_policy = amount;
1833		res = 0;
1834		break;
1835	}
1836
1837	case SIOCADDRT:
1838	case SIOCDELRT:
1839	case SIOCAX25OPTRT:
1840		if (!capable(CAP_NET_ADMIN)) {
1841			res = -EPERM;
1842			break;
1843		}
1844		res = ax25_rt_ioctl(cmd, argp);
1845		break;
1846
1847	case SIOCAX25CTLCON:
1848		if (!capable(CAP_NET_ADMIN)) {
1849			res = -EPERM;
1850			break;
1851		}
1852		res = ax25_ctl_ioctl(cmd, argp);
1853		break;
1854
1855	case SIOCAX25GETINFO:
1856	case SIOCAX25GETINFOOLD: {
1857		ax25_cb *ax25 = sk_to_ax25(sk);
1858		struct ax25_info_struct ax25_info;
1859
1860		ax25_info.t1        = ax25->t1   / HZ;
1861		ax25_info.t2        = ax25->t2   / HZ;
1862		ax25_info.t3        = ax25->t3   / HZ;
1863		ax25_info.idle      = ax25->idle / (60 * HZ);
1864		ax25_info.n2        = ax25->n2;
1865		ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1866		ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1867		ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1868		ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1869		ax25_info.n2count   = ax25->n2count;
1870		ax25_info.state     = ax25->state;
1871		ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1872		ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1873		ax25_info.vs        = ax25->vs;
1874		ax25_info.vr        = ax25->vr;
1875		ax25_info.va        = ax25->va;
1876		ax25_info.vs_max    = ax25->vs; /* reserved */
1877		ax25_info.paclen    = ax25->paclen;
1878		ax25_info.window    = ax25->window;
1879
1880		/* old structure? */
1881		if (cmd == SIOCAX25GETINFOOLD) {
1882			static int warned = 0;
1883			if (!warned) {
1884				printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1885					current->comm);
1886				warned=1;
1887			}
1888
1889			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1890				res = -EFAULT;
1891				break;
1892			}
1893		} else {
1894			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1895				res = -EINVAL;
1896				break;
1897			}
1898		}
1899		res = 0;
1900		break;
1901	}
1902
1903	case SIOCAX25ADDFWD:
1904	case SIOCAX25DELFWD: {
1905		struct ax25_fwd_struct ax25_fwd;
1906		if (!capable(CAP_NET_ADMIN)) {
1907			res = -EPERM;
1908			break;
1909		}
1910		if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1911			res = -EFAULT;
1912			break;
1913		}
1914		res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1915		break;
1916	}
1917
1918	case SIOCGIFADDR:
1919	case SIOCSIFADDR:
1920	case SIOCGIFDSTADDR:
1921	case SIOCSIFDSTADDR:
1922	case SIOCGIFBRDADDR:
1923	case SIOCSIFBRDADDR:
1924	case SIOCGIFNETMASK:
1925	case SIOCSIFNETMASK:
1926	case SIOCGIFMETRIC:
1927	case SIOCSIFMETRIC:
1928		res = -EINVAL;
1929		break;
1930
1931	default:
1932		res = -ENOIOCTLCMD;
1933		break;
1934	}
1935	release_sock(sk);
1936
1937	return res;
1938}
1939
1940#ifdef CONFIG_PROC_FS
1941
1942static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1943	__acquires(ax25_list_lock)
1944{
1945	spin_lock_bh(&ax25_list_lock);
1946	return seq_hlist_start(&ax25_list, *pos);
1947}
1948
1949static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1950{
1951	return seq_hlist_next(v, &ax25_list, pos);
1952}
1953
1954static void ax25_info_stop(struct seq_file *seq, void *v)
1955	__releases(ax25_list_lock)
1956{
1957	spin_unlock_bh(&ax25_list_lock);
1958}
1959
1960static int ax25_info_show(struct seq_file *seq, void *v)
1961{
1962	ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1963	char buf[11];
1964	int k;
1965
1966
1967	/*
1968	 * New format:
1969	 * magic dev src_addr dest_addr,digi1,digi2,.. st vs vr va t1 t1 t2 t2 t3 t3 idle idle n2 n2 rtt window paclen Snd-Q Rcv-Q inode
1970	 */
1971
1972	seq_printf(seq, "%p %s %s%s ",
1973		   ax25,
1974		   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1975		   ax2asc(buf, &ax25->source_addr),
1976		   ax25->iamdigi? "*":"");
1977	seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1978
1979	for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1980		seq_printf(seq, ",%s%s",
1981			   ax2asc(buf, &ax25->digipeat->calls[k]),
1982			   ax25->digipeat->repeated[k]? "*":"");
1983	}
1984
1985	seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1986		   ax25->state,
1987		   ax25->vs, ax25->vr, ax25->va,
1988		   ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1989		   ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1990		   ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1991		   ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1992		   ax25->idle / (60 * HZ),
1993		   ax25->n2count, ax25->n2,
1994		   ax25->rtt / HZ,
1995		   ax25->window,
1996		   ax25->paclen);
1997
1998	if (ax25->sk != NULL) {
1999		seq_printf(seq, " %d %d %lu\n",
2000			   sk_wmem_alloc_get(ax25->sk),
2001			   sk_rmem_alloc_get(ax25->sk),
2002			   sock_i_ino(ax25->sk));
2003	} else {
2004		seq_puts(seq, " * * *\n");
2005	}
2006	return 0;
2007}
2008
2009static const struct seq_operations ax25_info_seqops = {
2010	.start = ax25_info_start,
2011	.next = ax25_info_next,
2012	.stop = ax25_info_stop,
2013	.show = ax25_info_show,
2014};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2015#endif
2016
2017static const struct net_proto_family ax25_family_ops = {
2018	.family =	PF_AX25,
2019	.create =	ax25_create,
2020	.owner	=	THIS_MODULE,
2021};
2022
2023static const struct proto_ops ax25_proto_ops = {
2024	.family		= PF_AX25,
2025	.owner		= THIS_MODULE,
2026	.release	= ax25_release,
2027	.bind		= ax25_bind,
2028	.connect	= ax25_connect,
2029	.socketpair	= sock_no_socketpair,
2030	.accept		= ax25_accept,
2031	.getname	= ax25_getname,
2032	.poll		= datagram_poll,
2033	.ioctl		= ax25_ioctl,
2034	.gettstamp	= sock_gettstamp,
2035	.listen		= ax25_listen,
2036	.shutdown	= ax25_shutdown,
2037	.setsockopt	= ax25_setsockopt,
2038	.getsockopt	= ax25_getsockopt,
2039	.sendmsg	= ax25_sendmsg,
2040	.recvmsg	= ax25_recvmsg,
2041	.mmap		= sock_no_mmap,
 
2042};
2043
2044/*
2045 *	Called by socket.c on kernel start up
2046 */
2047static struct packet_type ax25_packet_type __read_mostly = {
2048	.type	=	cpu_to_be16(ETH_P_AX25),
2049	.func	=	ax25_kiss_rcv,
2050};
2051
2052static struct notifier_block ax25_dev_notifier = {
2053	.notifier_call = ax25_device_event,
2054};
2055
2056static int __init ax25_init(void)
2057{
2058	int rc = proto_register(&ax25_proto, 0);
2059
2060	if (rc != 0)
2061		goto out;
2062
2063	sock_register(&ax25_family_ops);
2064	dev_add_pack(&ax25_packet_type);
2065	register_netdevice_notifier(&ax25_dev_notifier);
 
2066
2067	proc_create_seq("ax25_route", 0444, init_net.proc_net, &ax25_rt_seqops);
2068	proc_create_seq("ax25", 0444, init_net.proc_net, &ax25_info_seqops);
2069	proc_create_seq("ax25_calls", 0444, init_net.proc_net,
2070			&ax25_uid_seqops);
2071out:
2072	return rc;
2073}
2074module_init(ax25_init);
2075
2076
2077MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2078MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2079MODULE_LICENSE("GPL");
2080MODULE_ALIAS_NETPROTO(PF_AX25);
2081
2082static void __exit ax25_exit(void)
2083{
2084	remove_proc_entry("ax25_route", init_net.proc_net);
2085	remove_proc_entry("ax25", init_net.proc_net);
2086	remove_proc_entry("ax25_calls", init_net.proc_net);
 
 
 
2087
 
2088	unregister_netdevice_notifier(&ax25_dev_notifier);
2089
2090	dev_remove_pack(&ax25_packet_type);
2091
2092	sock_unregister(PF_AX25);
2093	proto_unregister(&ax25_proto);
2094
2095	ax25_rt_free();
2096	ax25_uid_free();
2097	ax25_dev_free();
2098}
2099module_exit(ax25_exit);