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