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