Linux Audio

Check our new training course

Loading...
v6.8
   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					   &ax25_dev->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, 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		rtnl_lock();
 681		dev = __dev_get_by_name(&init_net, devname);
 682		if (!dev) {
 683			rtnl_unlock();
 684			res = -ENODEV;
 685			break;
 686		}
 687
 
 
 
 
 
 
 
 
 
 688		ax25->ax25_dev = ax25_dev_ax25dev(dev);
 689		if (!ax25->ax25_dev) {
 690			rtnl_unlock();
 691			res = -ENODEV;
 692			break;
 693		}
 694		ax25_fillin_cb(ax25, ax25->ax25_dev);
 695		rtnl_unlock();
 
 
 696		break;
 697
 698	default:
 699		res = -ENOPROTOOPT;
 700	}
 701	release_sock(sk);
 702
 703	return res;
 704}
 705
 706static int ax25_getsockopt(struct socket *sock, int level, int optname,
 707	char __user *optval, int __user *optlen)
 708{
 709	struct sock *sk = sock->sk;
 710	ax25_cb *ax25;
 711	struct ax25_dev *ax25_dev;
 712	char devname[IFNAMSIZ];
 713	void *valptr;
 714	int val = 0;
 715	int maxlen, length;
 716
 717	if (level != SOL_AX25)
 718		return -ENOPROTOOPT;
 719
 720	if (get_user(maxlen, optlen))
 721		return -EFAULT;
 722
 723	if (maxlen < 1)
 724		return -EFAULT;
 725
 726	valptr = &val;
 727	length = min_t(unsigned int, maxlen, sizeof(int));
 728
 729	lock_sock(sk);
 730	ax25 = sk_to_ax25(sk);
 731
 732	switch (optname) {
 733	case AX25_WINDOW:
 734		val = ax25->window;
 735		break;
 736
 737	case AX25_T1:
 738		val = ax25->t1 / HZ;
 739		break;
 740
 741	case AX25_T2:
 742		val = ax25->t2 / HZ;
 743		break;
 744
 745	case AX25_N2:
 746		val = ax25->n2;
 747		break;
 748
 749	case AX25_T3:
 750		val = ax25->t3 / HZ;
 751		break;
 752
 753	case AX25_IDLE:
 754		val = ax25->idle / (60 * HZ);
 755		break;
 756
 757	case AX25_BACKOFF:
 758		val = ax25->backoff;
 759		break;
 760
 761	case AX25_EXTSEQ:
 762		val = (ax25->modulus == AX25_EMODULUS);
 763		break;
 764
 765	case AX25_PIDINCL:
 766		val = ax25->pidincl;
 767		break;
 768
 769	case AX25_IAMDIGI:
 770		val = ax25->iamdigi;
 771		break;
 772
 773	case AX25_PACLEN:
 774		val = ax25->paclen;
 775		break;
 776
 777	case SO_BINDTODEVICE:
 778		ax25_dev = ax25->ax25_dev;
 779
 780		if (ax25_dev != NULL && ax25_dev->dev != NULL) {
 781			strscpy(devname, ax25_dev->dev->name, sizeof(devname));
 782			length = strlen(devname) + 1;
 783		} else {
 784			*devname = '\0';
 785			length = 1;
 786		}
 787
 788		valptr = devname;
 789		break;
 790
 791	default:
 792		release_sock(sk);
 793		return -ENOPROTOOPT;
 794	}
 795	release_sock(sk);
 796
 797	if (put_user(length, optlen))
 798		return -EFAULT;
 799
 800	return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
 801}
 802
 803static int ax25_listen(struct socket *sock, int backlog)
 804{
 805	struct sock *sk = sock->sk;
 806	int res = 0;
 807
 808	lock_sock(sk);
 809	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
 810		sk->sk_max_ack_backlog = backlog;
 811		sk->sk_state           = TCP_LISTEN;
 812		goto out;
 813	}
 814	res = -EOPNOTSUPP;
 815
 816out:
 817	release_sock(sk);
 818
 819	return res;
 820}
 821
 822/*
 823 * XXX: when creating ax25_sock we should update the .obj_size setting
 824 * below.
 825 */
 826static struct proto ax25_proto = {
 827	.name	  = "AX25",
 828	.owner	  = THIS_MODULE,
 829	.obj_size = sizeof(struct ax25_sock),
 830};
 831
 832static int ax25_create(struct net *net, struct socket *sock, int protocol,
 833		       int kern)
 834{
 835	struct sock *sk;
 836	ax25_cb *ax25;
 837
 838	if (protocol < 0 || protocol > U8_MAX)
 839		return -EINVAL;
 840
 841	if (!net_eq(net, &init_net))
 842		return -EAFNOSUPPORT;
 843
 844	switch (sock->type) {
 845	case SOCK_DGRAM:
 846		if (protocol == 0 || protocol == PF_AX25)
 847			protocol = AX25_P_TEXT;
 848		break;
 849
 850	case SOCK_SEQPACKET:
 851		switch (protocol) {
 852		case 0:
 853		case PF_AX25:	/* For CLX */
 854			protocol = AX25_P_TEXT;
 855			break;
 856		case AX25_P_SEGMENT:
 857#ifdef CONFIG_INET
 858		case AX25_P_ARP:
 859		case AX25_P_IP:
 860#endif
 861#ifdef CONFIG_NETROM
 862		case AX25_P_NETROM:
 863#endif
 864#ifdef CONFIG_ROSE
 865		case AX25_P_ROSE:
 866#endif
 867			return -ESOCKTNOSUPPORT;
 868#ifdef CONFIG_NETROM_MODULE
 869		case AX25_P_NETROM:
 870			if (ax25_protocol_is_registered(AX25_P_NETROM))
 871				return -ESOCKTNOSUPPORT;
 872			break;
 873#endif
 874#ifdef CONFIG_ROSE_MODULE
 875		case AX25_P_ROSE:
 876			if (ax25_protocol_is_registered(AX25_P_ROSE))
 877				return -ESOCKTNOSUPPORT;
 878			break;
 879#endif
 880		default:
 881			break;
 882		}
 883		break;
 884
 885	case SOCK_RAW:
 886		if (!capable(CAP_NET_RAW))
 887			return -EPERM;
 888		break;
 889	default:
 890		return -ESOCKTNOSUPPORT;
 891	}
 892
 893	sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
 894	if (sk == NULL)
 895		return -ENOMEM;
 896
 897	ax25 = ax25_sk(sk)->cb = ax25_create_cb();
 898	if (!ax25) {
 899		sk_free(sk);
 900		return -ENOMEM;
 901	}
 902
 903	sock_init_data(sock, sk);
 904
 905	sk->sk_destruct = ax25_free_sock;
 906	sock->ops    = &ax25_proto_ops;
 907	sk->sk_protocol = protocol;
 908
 909	ax25->sk    = sk;
 910
 911	return 0;
 912}
 913
 914struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
 915{
 916	struct sock *sk;
 917	ax25_cb *ax25, *oax25;
 918
 919	sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
 920	if (sk == NULL)
 921		return NULL;
 922
 923	if ((ax25 = ax25_create_cb()) == NULL) {
 924		sk_free(sk);
 925		return NULL;
 926	}
 927
 928	switch (osk->sk_type) {
 929	case SOCK_DGRAM:
 930		break;
 931	case SOCK_SEQPACKET:
 932		break;
 933	default:
 934		sk_free(sk);
 935		ax25_cb_put(ax25);
 936		return NULL;
 937	}
 938
 939	sock_init_data(NULL, sk);
 940
 941	sk->sk_type     = osk->sk_type;
 942	sk->sk_priority = READ_ONCE(osk->sk_priority);
 943	sk->sk_protocol = osk->sk_protocol;
 944	sk->sk_rcvbuf   = osk->sk_rcvbuf;
 945	sk->sk_sndbuf   = osk->sk_sndbuf;
 946	sk->sk_state    = TCP_ESTABLISHED;
 947	sock_copy_flags(sk, osk);
 948
 949	oax25 = sk_to_ax25(osk);
 950
 951	ax25->modulus = oax25->modulus;
 952	ax25->backoff = oax25->backoff;
 953	ax25->pidincl = oax25->pidincl;
 954	ax25->iamdigi = oax25->iamdigi;
 955	ax25->rtt     = oax25->rtt;
 956	ax25->t1      = oax25->t1;
 957	ax25->t2      = oax25->t2;
 958	ax25->t3      = oax25->t3;
 959	ax25->n2      = oax25->n2;
 960	ax25->idle    = oax25->idle;
 961	ax25->paclen  = oax25->paclen;
 962	ax25->window  = oax25->window;
 963
 964	ax25->ax25_dev    = ax25_dev;
 965	ax25->source_addr = oax25->source_addr;
 966
 967	if (oax25->digipeat != NULL) {
 968		ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
 969					 GFP_ATOMIC);
 970		if (ax25->digipeat == NULL) {
 971			sk_free(sk);
 972			ax25_cb_put(ax25);
 973			return NULL;
 974		}
 975	}
 976
 977	ax25_sk(sk)->cb = ax25;
 978	sk->sk_destruct = ax25_free_sock;
 979	ax25->sk    = sk;
 980
 981	return sk;
 982}
 983
 984static int ax25_release(struct socket *sock)
 985{
 986	struct sock *sk = sock->sk;
 987	ax25_cb *ax25;
 988	ax25_dev *ax25_dev;
 989
 990	if (sk == NULL)
 991		return 0;
 992
 993	sock_hold(sk);
 994	lock_sock(sk);
 995	sock_orphan(sk);
 996	ax25 = sk_to_ax25(sk);
 997	ax25_dev = ax25->ax25_dev;
 998
 999	if (sk->sk_type == SOCK_SEQPACKET) {
1000		switch (ax25->state) {
1001		case AX25_STATE_0:
1002			if (!sock_flag(ax25->sk, SOCK_DEAD)) {
1003				release_sock(sk);
1004				ax25_disconnect(ax25, 0);
1005				lock_sock(sk);
1006			}
1007			ax25_destroy_socket(ax25);
1008			break;
1009
1010		case AX25_STATE_1:
1011		case AX25_STATE_2:
1012			ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
1013			release_sock(sk);
1014			ax25_disconnect(ax25, 0);
1015			lock_sock(sk);
1016			if (!sock_flag(ax25->sk, SOCK_DESTROY))
1017				ax25_destroy_socket(ax25);
1018			break;
1019
1020		case AX25_STATE_3:
1021		case AX25_STATE_4:
1022			ax25_clear_queues(ax25);
1023			ax25->n2count = 0;
1024
1025			switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1026			case AX25_PROTO_STD_SIMPLEX:
1027			case AX25_PROTO_STD_DUPLEX:
1028				ax25_send_control(ax25,
1029						  AX25_DISC,
1030						  AX25_POLLON,
1031						  AX25_COMMAND);
1032				ax25_stop_t2timer(ax25);
1033				ax25_stop_t3timer(ax25);
1034				ax25_stop_idletimer(ax25);
1035				break;
1036#ifdef CONFIG_AX25_DAMA_SLAVE
1037			case AX25_PROTO_DAMA_SLAVE:
1038				ax25_stop_t3timer(ax25);
1039				ax25_stop_idletimer(ax25);
1040				break;
1041#endif
1042			}
1043			ax25_calculate_t1(ax25);
1044			ax25_start_t1timer(ax25);
1045			ax25->state = AX25_STATE_2;
1046			sk->sk_state                = TCP_CLOSE;
1047			sk->sk_shutdown            |= SEND_SHUTDOWN;
1048			sk->sk_state_change(sk);
1049			sock_set_flag(sk, SOCK_DESTROY);
1050			break;
1051
1052		default:
1053			break;
1054		}
1055	} else {
1056		sk->sk_state     = TCP_CLOSE;
1057		sk->sk_shutdown |= SEND_SHUTDOWN;
1058		sk->sk_state_change(sk);
1059		ax25_destroy_socket(ax25);
1060	}
1061	if (ax25_dev) {
1062		if (!ax25_dev->device_up) {
1063			del_timer_sync(&ax25->timer);
1064			del_timer_sync(&ax25->t1timer);
1065			del_timer_sync(&ax25->t2timer);
1066			del_timer_sync(&ax25->t3timer);
1067			del_timer_sync(&ax25->idletimer);
1068		}
1069		netdev_put(ax25_dev->dev, &ax25->dev_tracker);
1070		ax25_dev_put(ax25_dev);
1071	}
1072
1073	sock->sk   = NULL;
1074	release_sock(sk);
1075	sock_put(sk);
1076
1077	return 0;
1078}
1079
1080/*
1081 *	We support a funny extension here so you can (as root) give any callsign
1082 *	digipeated via a local address as source. This hack is obsolete now
1083 *	that we've implemented support for SO_BINDTODEVICE. It is however small
1084 *	and trivially backward compatible.
1085 */
1086static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1087{
1088	struct sock *sk = sock->sk;
1089	struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1090	ax25_dev *ax25_dev = NULL;
1091	ax25_uid_assoc *user;
1092	ax25_address call;
1093	ax25_cb *ax25;
1094	int err = 0;
1095
1096	if (addr_len != sizeof(struct sockaddr_ax25) &&
1097	    addr_len != sizeof(struct full_sockaddr_ax25))
1098		/* support for old structure may go away some time
1099		 * ax25_bind(): uses old (6 digipeater) socket structure.
1100		 */
1101		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1102		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1103			return -EINVAL;
1104
1105	if (addr->fsa_ax25.sax25_family != AF_AX25)
1106		return -EINVAL;
1107
1108	user = ax25_findbyuid(current_euid());
1109	if (user) {
1110		call = user->call;
1111		ax25_uid_put(user);
1112	} else {
1113		if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1114			return -EACCES;
1115
1116		call = addr->fsa_ax25.sax25_call;
1117	}
1118
1119	lock_sock(sk);
1120
1121	ax25 = sk_to_ax25(sk);
1122	if (!sock_flag(sk, SOCK_ZAPPED)) {
1123		err = -EINVAL;
1124		goto out;
1125	}
1126
1127	ax25->source_addr = call;
1128
1129	/*
1130	 * User already set interface with SO_BINDTODEVICE
1131	 */
1132	if (ax25->ax25_dev != NULL)
1133		goto done;
1134
1135	if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1136		if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1137		    (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1138			err = -EADDRNOTAVAIL;
1139			goto out;
1140		}
1141	} else {
1142		if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1143			err = -EADDRNOTAVAIL;
1144			goto out;
1145		}
1146	}
1147
1148	if (ax25_dev) {
1149		ax25_fillin_cb(ax25, ax25_dev);
1150		netdev_hold(ax25_dev->dev, &ax25->dev_tracker, GFP_ATOMIC);
1151	}
1152
1153done:
1154	ax25_cb_add(ax25);
1155	sock_reset_flag(sk, SOCK_ZAPPED);
1156
1157out:
1158	release_sock(sk);
1159
1160	return err;
1161}
1162
1163/*
1164 *	FIXME: nonblock behaviour looks like it may have a bug.
1165 */
1166static int __must_check ax25_connect(struct socket *sock,
1167	struct sockaddr *uaddr, int addr_len, int flags)
1168{
1169	struct sock *sk = sock->sk;
1170	ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1171	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1172	ax25_digi *digi = NULL;
1173	int ct = 0, err = 0;
1174
1175	/*
1176	 * some sanity checks. code further down depends on this
1177	 */
1178
1179	if (addr_len == sizeof(struct sockaddr_ax25))
1180		/* support for this will go away in early 2.5.x
1181		 * ax25_connect(): uses obsolete socket structure
1182		 */
1183		;
1184	else if (addr_len != sizeof(struct full_sockaddr_ax25))
1185		/* support for old structure may go away some time
1186		 * ax25_connect(): uses old (6 digipeater) socket structure.
1187		 */
1188		if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1189		    (addr_len > sizeof(struct full_sockaddr_ax25)))
1190			return -EINVAL;
1191
1192
1193	if (fsa->fsa_ax25.sax25_family != AF_AX25)
1194		return -EINVAL;
1195
1196	lock_sock(sk);
1197
1198	/* deal with restarts */
1199	if (sock->state == SS_CONNECTING) {
1200		switch (sk->sk_state) {
1201		case TCP_SYN_SENT: /* still trying */
1202			err = -EINPROGRESS;
1203			goto out_release;
1204
1205		case TCP_ESTABLISHED: /* connection established */
1206			sock->state = SS_CONNECTED;
1207			goto out_release;
1208
1209		case TCP_CLOSE: /* connection refused */
1210			sock->state = SS_UNCONNECTED;
1211			err = -ECONNREFUSED;
1212			goto out_release;
1213		}
1214	}
1215
1216	if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1217		err = -EISCONN;	/* No reconnect on a seqpacket socket */
1218		goto out_release;
1219	}
1220
1221	sk->sk_state   = TCP_CLOSE;
1222	sock->state = SS_UNCONNECTED;
1223
1224	kfree(ax25->digipeat);
1225	ax25->digipeat = NULL;
1226
1227	/*
1228	 *	Handle digi-peaters to be used.
1229	 */
1230	if (addr_len > sizeof(struct sockaddr_ax25) &&
1231	    fsa->fsa_ax25.sax25_ndigis != 0) {
1232		/* Valid number of digipeaters ? */
1233		if (fsa->fsa_ax25.sax25_ndigis < 1 ||
1234		    fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS ||
1235		    addr_len < sizeof(struct sockaddr_ax25) +
1236		    sizeof(ax25_address) * fsa->fsa_ax25.sax25_ndigis) {
1237			err = -EINVAL;
1238			goto out_release;
1239		}
1240
1241		if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1242			err = -ENOBUFS;
1243			goto out_release;
1244		}
1245
1246		digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1247		digi->lastrepeat = -1;
1248
1249		while (ct < fsa->fsa_ax25.sax25_ndigis) {
1250			if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1251			     AX25_HBIT) && ax25->iamdigi) {
1252				digi->repeated[ct] = 1;
1253				digi->lastrepeat   = ct;
1254			} else {
1255				digi->repeated[ct] = 0;
1256			}
1257			digi->calls[ct] = fsa->fsa_digipeater[ct];
1258			ct++;
1259		}
1260	}
1261
1262	/*
1263	 *	Must bind first - autobinding in this may or may not work. If
1264	 *	the socket is already bound, check to see if the device has
1265	 *	been filled in, error if it hasn't.
1266	 */
1267	if (sock_flag(sk, SOCK_ZAPPED)) {
1268		/* check if we can remove this feature. It is broken. */
1269		printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1270			current->comm);
1271		if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1272			kfree(digi);
1273			goto out_release;
1274		}
1275
1276		ax25_fillin_cb(ax25, ax25->ax25_dev);
1277		ax25_cb_add(ax25);
1278	} else {
1279		if (ax25->ax25_dev == NULL) {
1280			kfree(digi);
1281			err = -EHOSTUNREACH;
1282			goto out_release;
1283		}
1284	}
1285
1286	if (sk->sk_type == SOCK_SEQPACKET &&
1287	    (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1288			 ax25->ax25_dev->dev))) {
1289		kfree(digi);
1290		err = -EADDRINUSE;		/* Already such a connection */
1291		ax25_cb_put(ax25t);
1292		goto out_release;
1293	}
1294
1295	ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1296	ax25->digipeat  = digi;
1297
1298	/* First the easy one */
1299	if (sk->sk_type != SOCK_SEQPACKET) {
1300		sock->state = SS_CONNECTED;
1301		sk->sk_state   = TCP_ESTABLISHED;
1302		goto out_release;
1303	}
1304
1305	/* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1306	sock->state        = SS_CONNECTING;
1307	sk->sk_state          = TCP_SYN_SENT;
1308
1309	switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1310	case AX25_PROTO_STD_SIMPLEX:
1311	case AX25_PROTO_STD_DUPLEX:
1312		ax25_std_establish_data_link(ax25);
1313		break;
1314
1315#ifdef CONFIG_AX25_DAMA_SLAVE
1316	case AX25_PROTO_DAMA_SLAVE:
1317		ax25->modulus = AX25_MODULUS;
1318		ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1319		if (ax25->ax25_dev->dama.slave)
1320			ax25_ds_establish_data_link(ax25);
1321		else
1322			ax25_std_establish_data_link(ax25);
1323		break;
1324#endif
1325	}
1326
1327	ax25->state = AX25_STATE_1;
1328
1329	ax25_start_heartbeat(ax25);
1330
1331	/* Now the loop */
1332	if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1333		err = -EINPROGRESS;
1334		goto out_release;
1335	}
1336
1337	if (sk->sk_state == TCP_SYN_SENT) {
1338		DEFINE_WAIT(wait);
1339
1340		for (;;) {
1341			prepare_to_wait(sk_sleep(sk), &wait,
1342					TASK_INTERRUPTIBLE);
1343			if (sk->sk_state != TCP_SYN_SENT)
1344				break;
1345			if (!signal_pending(current)) {
1346				release_sock(sk);
1347				schedule();
1348				lock_sock(sk);
1349				continue;
1350			}
1351			err = -ERESTARTSYS;
1352			break;
1353		}
1354		finish_wait(sk_sleep(sk), &wait);
1355
1356		if (err)
1357			goto out_release;
1358	}
1359
1360	if (sk->sk_state != TCP_ESTABLISHED) {
1361		/* Not in ABM, not in WAIT_UA -> failed */
1362		sock->state = SS_UNCONNECTED;
1363		err = sock_error(sk);	/* Always set at this point */
1364		goto out_release;
1365	}
1366
1367	sock->state = SS_CONNECTED;
1368
1369	err = 0;
1370out_release:
1371	release_sock(sk);
1372
1373	return err;
1374}
1375
1376static int ax25_accept(struct socket *sock, struct socket *newsock, int flags,
1377		       bool kern)
1378{
1379	struct sk_buff *skb;
1380	struct sock *newsk;
 
1381	DEFINE_WAIT(wait);
1382	struct sock *sk;
 
1383	int err = 0;
1384
1385	if (sock->state != SS_UNCONNECTED)
1386		return -EINVAL;
1387
1388	if ((sk = sock->sk) == NULL)
1389		return -EINVAL;
1390
1391	lock_sock(sk);
1392	if (sk->sk_type != SOCK_SEQPACKET) {
1393		err = -EOPNOTSUPP;
1394		goto out;
1395	}
1396
1397	if (sk->sk_state != TCP_LISTEN) {
1398		err = -EINVAL;
1399		goto out;
1400	}
1401
1402	/*
1403	 *	The read queue this time is holding sockets ready to use
1404	 *	hooked into the SABM we saved
1405	 */
1406	for (;;) {
1407		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1408		skb = skb_dequeue(&sk->sk_receive_queue);
1409		if (skb)
1410			break;
1411
1412		if (flags & O_NONBLOCK) {
1413			err = -EWOULDBLOCK;
1414			break;
1415		}
1416		if (!signal_pending(current)) {
1417			release_sock(sk);
1418			schedule();
1419			lock_sock(sk);
1420			continue;
1421		}
1422		err = -ERESTARTSYS;
1423		break;
1424	}
1425	finish_wait(sk_sleep(sk), &wait);
1426
1427	if (err)
1428		goto out;
1429
1430	newsk		 = skb->sk;
1431	sock_graft(newsk, newsock);
1432
1433	/* Now attach up the new socket */
1434	kfree_skb(skb);
1435	sk_acceptq_removed(sk);
1436	newsock->state = SS_CONNECTED;
 
 
 
 
1437
1438out:
1439	release_sock(sk);
1440
1441	return err;
1442}
1443
1444static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1445	int peer)
1446{
1447	struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1448	struct sock *sk = sock->sk;
1449	unsigned char ndigi, i;
1450	ax25_cb *ax25;
1451	int err = 0;
1452
1453	memset(fsa, 0, sizeof(*fsa));
1454	lock_sock(sk);
1455	ax25 = sk_to_ax25(sk);
1456
1457	if (peer != 0) {
1458		if (sk->sk_state != TCP_ESTABLISHED) {
1459			err = -ENOTCONN;
1460			goto out;
1461		}
1462
1463		fsa->fsa_ax25.sax25_family = AF_AX25;
1464		fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1465
1466		if (ax25->digipeat != NULL) {
1467			ndigi = ax25->digipeat->ndigi;
1468			fsa->fsa_ax25.sax25_ndigis = ndigi;
1469			for (i = 0; i < ndigi; i++)
1470				fsa->fsa_digipeater[i] =
1471						ax25->digipeat->calls[i];
1472		}
1473	} else {
1474		fsa->fsa_ax25.sax25_family = AF_AX25;
1475		fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1476		fsa->fsa_ax25.sax25_ndigis = 1;
1477		if (ax25->ax25_dev != NULL) {
1478			memcpy(&fsa->fsa_digipeater[0],
1479			       ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1480		} else {
1481			fsa->fsa_digipeater[0] = null_ax25_address;
1482		}
1483	}
1484	err = sizeof (struct full_sockaddr_ax25);
1485
1486out:
1487	release_sock(sk);
1488
1489	return err;
1490}
1491
1492static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1493{
1494	DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1495	struct sock *sk = sock->sk;
1496	struct sockaddr_ax25 sax;
1497	struct sk_buff *skb;
1498	ax25_digi dtmp, *dp;
1499	ax25_cb *ax25;
1500	size_t size;
1501	int lv, err, addr_len = msg->msg_namelen;
1502
1503	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1504		return -EINVAL;
1505
1506	lock_sock(sk);
1507	ax25 = sk_to_ax25(sk);
1508
1509	if (sock_flag(sk, SOCK_ZAPPED)) {
1510		err = -EADDRNOTAVAIL;
1511		goto out;
1512	}
1513
1514	if (sk->sk_shutdown & SEND_SHUTDOWN) {
1515		send_sig(SIGPIPE, current, 0);
1516		err = -EPIPE;
1517		goto out;
1518	}
1519
1520	if (ax25->ax25_dev == NULL) {
1521		err = -ENETUNREACH;
1522		goto out;
1523	}
1524
1525	if (len > ax25->ax25_dev->dev->mtu) {
1526		err = -EMSGSIZE;
1527		goto out;
1528	}
1529
1530	if (usax != NULL) {
1531		if (usax->sax25_family != AF_AX25) {
1532			err = -EINVAL;
1533			goto out;
1534		}
1535
1536		if (addr_len == sizeof(struct sockaddr_ax25))
1537			/* ax25_sendmsg(): uses obsolete socket structure */
1538			;
1539		else if (addr_len != sizeof(struct full_sockaddr_ax25))
1540			/* support for old structure may go away some time
1541			 * ax25_sendmsg(): uses old (6 digipeater)
1542			 * socket structure.
1543			 */
1544			if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1545			    (addr_len > sizeof(struct full_sockaddr_ax25))) {
1546				err = -EINVAL;
1547				goto out;
1548			}
1549
1550
1551		if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1552			int ct           = 0;
1553			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1554
1555			/* Valid number of digipeaters ? */
1556			if (usax->sax25_ndigis < 1 ||
1557			    usax->sax25_ndigis > AX25_MAX_DIGIS ||
1558			    addr_len < sizeof(struct sockaddr_ax25) +
1559			    sizeof(ax25_address) * usax->sax25_ndigis) {
1560				err = -EINVAL;
1561				goto out;
1562			}
1563
1564			dtmp.ndigi      = usax->sax25_ndigis;
1565
1566			while (ct < usax->sax25_ndigis) {
1567				dtmp.repeated[ct] = 0;
1568				dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1569				ct++;
1570			}
1571
1572			dtmp.lastrepeat = 0;
1573		}
1574
1575		sax = *usax;
1576		if (sk->sk_type == SOCK_SEQPACKET &&
1577		    ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1578			err = -EISCONN;
1579			goto out;
1580		}
1581		if (usax->sax25_ndigis == 0)
1582			dp = NULL;
1583		else
1584			dp = &dtmp;
1585	} else {
1586		/*
1587		 *	FIXME: 1003.1g - if the socket is like this because
1588		 *	it has become closed (not started closed) and is VC
1589		 *	we ought to SIGPIPE, EPIPE
1590		 */
1591		if (sk->sk_state != TCP_ESTABLISHED) {
1592			err = -ENOTCONN;
1593			goto out;
1594		}
1595		sax.sax25_family = AF_AX25;
1596		sax.sax25_call   = ax25->dest_addr;
1597		dp = ax25->digipeat;
1598	}
1599
1600	/* Build a packet */
1601	/* Assume the worst case */
1602	size = len + ax25->ax25_dev->dev->hard_header_len;
1603
1604	skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1605	if (skb == NULL)
1606		goto out;
1607
1608	skb_reserve(skb, size - len);
1609
1610	/* User data follows immediately after the AX.25 data */
1611	if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1612		err = -EFAULT;
1613		kfree_skb(skb);
1614		goto out;
1615	}
1616
1617	skb_reset_network_header(skb);
1618
1619	/* Add the PID if one is not supplied by the user in the skb */
1620	if (!ax25->pidincl)
1621		*(u8 *)skb_push(skb, 1) = sk->sk_protocol;
1622
1623	if (sk->sk_type == SOCK_SEQPACKET) {
1624		/* Connected mode sockets go via the LAPB machine */
1625		if (sk->sk_state != TCP_ESTABLISHED) {
1626			kfree_skb(skb);
1627			err = -ENOTCONN;
1628			goto out;
1629		}
1630
1631		/* Shove it onto the queue and kick */
1632		ax25_output(ax25, ax25->paclen, skb);
1633
1634		err = len;
1635		goto out;
1636	}
1637
1638	skb_push(skb, 1 + ax25_addr_size(dp));
1639
1640	/* Building AX.25 Header */
1641
1642	/* Build an AX.25 header */
1643	lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1644			     dp, AX25_COMMAND, AX25_MODULUS);
1645
1646	skb_set_transport_header(skb, lv);
1647
1648	*skb_transport_header(skb) = AX25_UI;
1649
1650	/* Datagram frames go straight out of the door as UI */
1651	ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1652
1653	err = len;
1654
1655out:
1656	release_sock(sk);
1657
1658	return err;
1659}
1660
1661static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1662			int flags)
1663{
1664	struct sock *sk = sock->sk;
1665	struct sk_buff *skb, *last;
1666	struct sk_buff_head *sk_queue;
1667	int copied;
1668	int err = 0;
1669	int off = 0;
1670	long timeo;
1671
1672	lock_sock(sk);
1673	/*
1674	 * 	This works for seqpacket too. The receiver has ordered the
1675	 *	queue for us! We do one quick check first though
1676	 */
1677	if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1678		err =  -ENOTCONN;
1679		goto out;
1680	}
1681
1682	/*  We need support for non-blocking reads. */
1683	sk_queue = &sk->sk_receive_queue;
1684	skb = __skb_try_recv_datagram(sk, sk_queue, flags, &off, &err, &last);
1685	/* If no packet is available, release_sock(sk) and try again. */
1686	if (!skb) {
1687		if (err != -EAGAIN)
1688			goto out;
1689		release_sock(sk);
1690		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
1691		while (timeo && !__skb_wait_for_more_packets(sk, sk_queue, &err,
1692							     &timeo, last)) {
1693			skb = __skb_try_recv_datagram(sk, sk_queue, flags, &off,
1694						      &err, &last);
1695			if (skb)
1696				break;
1697
1698			if (err != -EAGAIN)
1699				goto done;
1700		}
1701		if (!skb)
1702			goto done;
1703		lock_sock(sk);
1704	}
1705
1706	if (!sk_to_ax25(sk)->pidincl)
1707		skb_pull(skb, 1);		/* Remove PID */
1708
1709	skb_reset_transport_header(skb);
1710	copied = skb->len;
1711
1712	if (copied > size) {
1713		copied = size;
1714		msg->msg_flags |= MSG_TRUNC;
1715	}
1716
1717	skb_copy_datagram_msg(skb, 0, msg, copied);
1718
1719	if (msg->msg_name) {
1720		ax25_digi digi;
1721		ax25_address src;
1722		const unsigned char *mac = skb_mac_header(skb);
1723		DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1724
1725		memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1726		ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1727				&digi, NULL, NULL);
1728		sax->sax25_family = AF_AX25;
1729		/* We set this correctly, even though we may not let the
1730		   application know the digi calls further down (because it
1731		   did NOT ask to know them).  This could get political... **/
1732		sax->sax25_ndigis = digi.ndigi;
1733		sax->sax25_call   = src;
1734
1735		if (sax->sax25_ndigis != 0) {
1736			int ct;
1737			struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1738
1739			for (ct = 0; ct < digi.ndigi; ct++)
1740				fsa->fsa_digipeater[ct] = digi.calls[ct];
1741		}
1742		msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1743	}
1744
1745	skb_free_datagram(sk, skb);
1746	err = copied;
1747
1748out:
1749	release_sock(sk);
1750
1751done:
1752	return err;
1753}
1754
1755static int ax25_shutdown(struct socket *sk, int how)
1756{
1757	/* FIXME - generate DM and RNR states */
1758	return -EOPNOTSUPP;
1759}
1760
1761static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1762{
1763	struct sock *sk = sock->sk;
1764	void __user *argp = (void __user *)arg;
1765	int res = 0;
1766
1767	lock_sock(sk);
1768	switch (cmd) {
1769	case TIOCOUTQ: {
1770		long amount;
1771
1772		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1773		if (amount < 0)
1774			amount = 0;
1775		res = put_user(amount, (int __user *)argp);
1776		break;
1777	}
1778
1779	case TIOCINQ: {
1780		struct sk_buff *skb;
1781		long amount = 0L;
1782		/* These two are safe on a single CPU system as only user tasks fiddle here */
1783		if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1784			amount = skb->len;
1785		res = put_user(amount, (int __user *) argp);
1786		break;
1787	}
1788
1789	case SIOCAX25ADDUID:	/* Add a uid to the uid/call map table */
1790	case SIOCAX25DELUID:	/* Delete a uid from the uid/call map table */
1791	case SIOCAX25GETUID: {
1792		struct sockaddr_ax25 sax25;
1793		if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1794			res = -EFAULT;
1795			break;
1796		}
1797		res = ax25_uid_ioctl(cmd, &sax25);
1798		break;
1799	}
1800
1801	case SIOCAX25NOUID: {	/* Set the default policy (default/bar) */
1802		long amount;
1803		if (!capable(CAP_NET_ADMIN)) {
1804			res = -EPERM;
1805			break;
1806		}
1807		if (get_user(amount, (long __user *)argp)) {
1808			res = -EFAULT;
1809			break;
1810		}
1811		if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1812			res = -EINVAL;
1813			break;
1814		}
1815		ax25_uid_policy = amount;
1816		res = 0;
1817		break;
1818	}
1819
1820	case SIOCADDRT:
1821	case SIOCDELRT:
1822	case SIOCAX25OPTRT:
1823		if (!capable(CAP_NET_ADMIN)) {
1824			res = -EPERM;
1825			break;
1826		}
1827		res = ax25_rt_ioctl(cmd, argp);
1828		break;
1829
1830	case SIOCAX25CTLCON:
1831		if (!capable(CAP_NET_ADMIN)) {
1832			res = -EPERM;
1833			break;
1834		}
1835		res = ax25_ctl_ioctl(cmd, argp);
1836		break;
1837
1838	case SIOCAX25GETINFO:
1839	case SIOCAX25GETINFOOLD: {
1840		ax25_cb *ax25 = sk_to_ax25(sk);
1841		struct ax25_info_struct ax25_info;
1842
1843		ax25_info.t1        = ax25->t1   / HZ;
1844		ax25_info.t2        = ax25->t2   / HZ;
1845		ax25_info.t3        = ax25->t3   / HZ;
1846		ax25_info.idle      = ax25->idle / (60 * HZ);
1847		ax25_info.n2        = ax25->n2;
1848		ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1849		ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1850		ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1851		ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1852		ax25_info.n2count   = ax25->n2count;
1853		ax25_info.state     = ax25->state;
1854		ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1855		ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1856		ax25_info.vs        = ax25->vs;
1857		ax25_info.vr        = ax25->vr;
1858		ax25_info.va        = ax25->va;
1859		ax25_info.vs_max    = ax25->vs; /* reserved */
1860		ax25_info.paclen    = ax25->paclen;
1861		ax25_info.window    = ax25->window;
1862
1863		/* old structure? */
1864		if (cmd == SIOCAX25GETINFOOLD) {
1865			static int warned = 0;
1866			if (!warned) {
1867				printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1868					current->comm);
1869				warned=1;
1870			}
1871
1872			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1873				res = -EFAULT;
1874				break;
1875			}
1876		} else {
1877			if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1878				res = -EINVAL;
1879				break;
1880			}
1881		}
1882		res = 0;
1883		break;
1884	}
1885
1886	case SIOCAX25ADDFWD:
1887	case SIOCAX25DELFWD: {
1888		struct ax25_fwd_struct ax25_fwd;
1889		if (!capable(CAP_NET_ADMIN)) {
1890			res = -EPERM;
1891			break;
1892		}
1893		if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1894			res = -EFAULT;
1895			break;
1896		}
1897		res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1898		break;
1899	}
1900
1901	case SIOCGIFADDR:
1902	case SIOCSIFADDR:
1903	case SIOCGIFDSTADDR:
1904	case SIOCSIFDSTADDR:
1905	case SIOCGIFBRDADDR:
1906	case SIOCSIFBRDADDR:
1907	case SIOCGIFNETMASK:
1908	case SIOCSIFNETMASK:
1909	case SIOCGIFMETRIC:
1910	case SIOCSIFMETRIC:
1911		res = -EINVAL;
1912		break;
1913
1914	default:
1915		res = -ENOIOCTLCMD;
1916		break;
1917	}
1918	release_sock(sk);
1919
1920	return res;
1921}
1922
1923#ifdef CONFIG_PROC_FS
1924
1925static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1926	__acquires(ax25_list_lock)
1927{
1928	spin_lock_bh(&ax25_list_lock);
1929	return seq_hlist_start(&ax25_list, *pos);
1930}
1931
1932static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1933{
1934	return seq_hlist_next(v, &ax25_list, pos);
1935}
1936
1937static void ax25_info_stop(struct seq_file *seq, void *v)
1938	__releases(ax25_list_lock)
1939{
1940	spin_unlock_bh(&ax25_list_lock);
1941}
1942
1943static int ax25_info_show(struct seq_file *seq, void *v)
1944{
1945	ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1946	char buf[11];
1947	int k;
1948
1949
1950	/*
1951	 * New format:
1952	 * 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
1953	 */
1954
1955	seq_printf(seq, "%p %s %s%s ",
1956		   ax25,
1957		   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1958		   ax2asc(buf, &ax25->source_addr),
1959		   ax25->iamdigi? "*":"");
1960	seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1961
1962	for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1963		seq_printf(seq, ",%s%s",
1964			   ax2asc(buf, &ax25->digipeat->calls[k]),
1965			   ax25->digipeat->repeated[k]? "*":"");
1966	}
1967
1968	seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1969		   ax25->state,
1970		   ax25->vs, ax25->vr, ax25->va,
1971		   ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1972		   ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1973		   ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1974		   ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1975		   ax25->idle / (60 * HZ),
1976		   ax25->n2count, ax25->n2,
1977		   ax25->rtt / HZ,
1978		   ax25->window,
1979		   ax25->paclen);
1980
1981	if (ax25->sk != NULL) {
1982		seq_printf(seq, " %d %d %lu\n",
1983			   sk_wmem_alloc_get(ax25->sk),
1984			   sk_rmem_alloc_get(ax25->sk),
1985			   sock_i_ino(ax25->sk));
1986	} else {
1987		seq_puts(seq, " * * *\n");
1988	}
1989	return 0;
1990}
1991
1992static const struct seq_operations ax25_info_seqops = {
1993	.start = ax25_info_start,
1994	.next = ax25_info_next,
1995	.stop = ax25_info_stop,
1996	.show = ax25_info_show,
1997};
1998#endif
1999
2000static const struct net_proto_family ax25_family_ops = {
2001	.family =	PF_AX25,
2002	.create =	ax25_create,
2003	.owner	=	THIS_MODULE,
2004};
2005
2006static const struct proto_ops ax25_proto_ops = {
2007	.family		= PF_AX25,
2008	.owner		= THIS_MODULE,
2009	.release	= ax25_release,
2010	.bind		= ax25_bind,
2011	.connect	= ax25_connect,
2012	.socketpair	= sock_no_socketpair,
2013	.accept		= ax25_accept,
2014	.getname	= ax25_getname,
2015	.poll		= datagram_poll,
2016	.ioctl		= ax25_ioctl,
2017	.gettstamp	= sock_gettstamp,
2018	.listen		= ax25_listen,
2019	.shutdown	= ax25_shutdown,
2020	.setsockopt	= ax25_setsockopt,
2021	.getsockopt	= ax25_getsockopt,
2022	.sendmsg	= ax25_sendmsg,
2023	.recvmsg	= ax25_recvmsg,
2024	.mmap		= sock_no_mmap,
2025};
2026
2027/*
2028 *	Called by socket.c on kernel start up
2029 */
2030static struct packet_type ax25_packet_type __read_mostly = {
2031	.type	=	cpu_to_be16(ETH_P_AX25),
2032	.func	=	ax25_kiss_rcv,
2033};
2034
2035static struct notifier_block ax25_dev_notifier = {
2036	.notifier_call = ax25_device_event,
2037};
2038
2039static int __init ax25_init(void)
2040{
2041	int rc = proto_register(&ax25_proto, 0);
2042
2043	if (rc != 0)
2044		goto out;
2045
2046	sock_register(&ax25_family_ops);
2047	dev_add_pack(&ax25_packet_type);
2048	register_netdevice_notifier(&ax25_dev_notifier);
2049
2050	proc_create_seq("ax25_route", 0444, init_net.proc_net, &ax25_rt_seqops);
2051	proc_create_seq("ax25", 0444, init_net.proc_net, &ax25_info_seqops);
2052	proc_create_seq("ax25_calls", 0444, init_net.proc_net,
2053			&ax25_uid_seqops);
2054out:
2055	return rc;
2056}
2057module_init(ax25_init);
2058
2059
2060MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2061MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2062MODULE_LICENSE("GPL");
2063MODULE_ALIAS_NETPROTO(PF_AX25);
2064
2065static void __exit ax25_exit(void)
2066{
2067	remove_proc_entry("ax25_route", init_net.proc_net);
2068	remove_proc_entry("ax25", init_net.proc_net);
2069	remove_proc_entry("ax25_calls", init_net.proc_net);
2070
2071	unregister_netdevice_notifier(&ax25_dev_notifier);
2072
2073	dev_remove_pack(&ax25_packet_type);
2074
2075	sock_unregister(PF_AX25);
2076	proto_unregister(&ax25_proto);
2077
2078	ax25_rt_free();
2079	ax25_uid_free();
2080	ax25_dev_free();
2081}
2082module_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);