linux/net/core/netpoll.c
<<
>>
Prefs
   1/*
   2 * Common framework for low-level network console, dump, and debugger code
   3 *
   4 * Sep 8 2003  Matt Mackall <mpm@selenic.com>
   5 *
   6 * based on the netconsole code from:
   7 *
   8 * Copyright (C) 2001  Ingo Molnar <mingo@redhat.com>
   9 * Copyright (C) 2002  Red Hat, Inc.
  10 */
  11
  12#include <linux/moduleparam.h>
  13#include <linux/netdevice.h>
  14#include <linux/etherdevice.h>
  15#include <linux/string.h>
  16#include <linux/if_arp.h>
  17#include <linux/inetdevice.h>
  18#include <linux/inet.h>
  19#include <linux/interrupt.h>
  20#include <linux/netpoll.h>
  21#include <linux/sched.h>
  22#include <linux/delay.h>
  23#include <linux/rcupdate.h>
  24#include <linux/workqueue.h>
  25#include <linux/slab.h>
  26#include <net/tcp.h>
  27#include <net/udp.h>
  28#include <asm/unaligned.h>
  29#include <trace/events/napi.h>
  30
  31/*
  32 * We maintain a small pool of fully-sized skbs, to make sure the
  33 * message gets out even in extreme OOM situations.
  34 */
  35
  36#define MAX_UDP_CHUNK 1460
  37#define MAX_SKBS 32
  38#define MAX_QUEUE_DEPTH (MAX_SKBS / 2)
  39
  40static struct sk_buff_head skb_pool;
  41
  42static atomic_t trapped;
  43
  44#define USEC_PER_POLL   50
  45#define NETPOLL_RX_ENABLED  1
  46#define NETPOLL_RX_DROP     2
  47
  48#define MAX_SKB_SIZE \
  49                (MAX_UDP_CHUNK + sizeof(struct udphdr) + \
  50                                sizeof(struct iphdr) + sizeof(struct ethhdr))
  51
  52static void zap_completion_queue(void);
  53static void arp_reply(struct sk_buff *skb);
  54
  55static unsigned int carrier_timeout = 4;
  56module_param(carrier_timeout, uint, 0644);
  57
  58static void queue_process(struct work_struct *work)
  59{
  60        struct netpoll_info *npinfo =
  61                container_of(work, struct netpoll_info, tx_work.work);
  62        struct sk_buff *skb;
  63        unsigned long flags;
  64
  65        while ((skb = skb_dequeue(&npinfo->txq))) {
  66                struct net_device *dev = skb->dev;
  67                const struct net_device_ops *ops = dev->netdev_ops;
  68                struct netdev_queue *txq;
  69
  70                if (!netif_device_present(dev) || !netif_running(dev)) {
  71                        __kfree_skb(skb);
  72                        continue;
  73                }
  74
  75                txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
  76
  77                local_irq_save(flags);
  78                __netif_tx_lock(txq, smp_processor_id());
  79                if (netif_tx_queue_stopped(txq) ||
  80                    netif_tx_queue_frozen(txq) ||
  81                    ops->ndo_start_xmit(skb, dev) != NETDEV_TX_OK) {
  82                        skb_queue_head(&npinfo->txq, skb);
  83                        __netif_tx_unlock(txq);
  84                        local_irq_restore(flags);
  85
  86                        schedule_delayed_work(&npinfo->tx_work, HZ/10);
  87                        return;
  88                }
  89                __netif_tx_unlock(txq);
  90                local_irq_restore(flags);
  91        }
  92}
  93
  94static __sum16 checksum_udp(struct sk_buff *skb, struct udphdr *uh,
  95                            unsigned short ulen, __be32 saddr, __be32 daddr)
  96{
  97        __wsum psum;
  98
  99        if (uh->check == 0 || skb_csum_unnecessary(skb))
 100                return 0;
 101
 102        psum = csum_tcpudp_nofold(saddr, daddr, ulen, IPPROTO_UDP, 0);
 103
 104        if (skb->ip_summed == CHECKSUM_COMPLETE &&
 105            !csum_fold(csum_add(psum, skb->csum)))
 106                return 0;
 107
 108        skb->csum = psum;
 109
 110        return __skb_checksum_complete(skb);
 111}
 112
 113/*
 114 * Check whether delayed processing was scheduled for our NIC. If so,
 115 * we attempt to grab the poll lock and use ->poll() to pump the card.
 116 * If this fails, either we've recursed in ->poll() or it's already
 117 * running on another CPU.
 118 *
 119 * Note: we don't mask interrupts with this lock because we're using
 120 * trylock here and interrupts are already disabled in the softirq
 121 * case. Further, we test the poll_owner to avoid recursion on UP
 122 * systems where the lock doesn't exist.
 123 *
 124 * In cases where there is bi-directional communications, reading only
 125 * one message at a time can lead to packets being dropped by the
 126 * network adapter, forcing superfluous retries and possibly timeouts.
 127 * Thus, we set our budget to greater than 1.
 128 */
 129static int poll_one_napi(struct netpoll_info *npinfo,
 130                         struct napi_struct *napi, int budget)
 131{
 132        int work;
 133
 134        /* net_rx_action's ->poll() invocations and our's are
 135         * synchronized by this test which is only made while
 136         * holding the napi->poll_lock.
 137         */
 138        if (!test_bit(NAPI_STATE_SCHED, &napi->state))
 139                return budget;
 140
 141        npinfo->rx_flags |= NETPOLL_RX_DROP;
 142        atomic_inc(&trapped);
 143        set_bit(NAPI_STATE_NPSVC, &napi->state);
 144
 145        work = napi->poll(napi, budget);
 146        trace_napi_poll(napi);
 147
 148        clear_bit(NAPI_STATE_NPSVC, &napi->state);
 149        atomic_dec(&trapped);
 150        npinfo->rx_flags &= ~NETPOLL_RX_DROP;
 151
 152        return budget - work;
 153}
 154
 155static void poll_napi(struct net_device *dev)
 156{
 157        struct napi_struct *napi;
 158        int budget = 16;
 159
 160        list_for_each_entry(napi, &dev->napi_list, dev_list) {
 161                if (napi->poll_owner != smp_processor_id() &&
 162                    spin_trylock(&napi->poll_lock)) {
 163                        budget = poll_one_napi(dev->npinfo, napi, budget);
 164                        spin_unlock(&napi->poll_lock);
 165
 166                        if (!budget)
 167                                break;
 168                }
 169        }
 170}
 171
 172static void service_arp_queue(struct netpoll_info *npi)
 173{
 174        if (npi) {
 175                struct sk_buff *skb;
 176
 177                while ((skb = skb_dequeue(&npi->arp_tx)))
 178                        arp_reply(skb);
 179        }
 180}
 181
 182void netpoll_poll_dev(struct net_device *dev)
 183{
 184        const struct net_device_ops *ops;
 185
 186        if (!dev || !netif_running(dev))
 187                return;
 188
 189        ops = dev->netdev_ops;
 190        if (!ops->ndo_poll_controller)
 191                return;
 192
 193        /* Process pending work on NIC */
 194        ops->ndo_poll_controller(dev);
 195
 196        poll_napi(dev);
 197
 198        service_arp_queue(dev->npinfo);
 199
 200        zap_completion_queue();
 201}
 202
 203void netpoll_poll(struct netpoll *np)
 204{
 205        netpoll_poll_dev(np->dev);
 206}
 207
 208static void refill_skbs(void)
 209{
 210        struct sk_buff *skb;
 211        unsigned long flags;
 212
 213        spin_lock_irqsave(&skb_pool.lock, flags);
 214        while (skb_pool.qlen < MAX_SKBS) {
 215                skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
 216                if (!skb)
 217                        break;
 218
 219                __skb_queue_tail(&skb_pool, skb);
 220        }
 221        spin_unlock_irqrestore(&skb_pool.lock, flags);
 222}
 223
 224static void zap_completion_queue(void)
 225{
 226        unsigned long flags;
 227        struct softnet_data *sd = &get_cpu_var(softnet_data);
 228
 229        if (sd->completion_queue) {
 230                struct sk_buff *clist;
 231
 232                local_irq_save(flags);
 233                clist = sd->completion_queue;
 234                sd->completion_queue = NULL;
 235                local_irq_restore(flags);
 236
 237                while (clist != NULL) {
 238                        struct sk_buff *skb = clist;
 239                        clist = clist->next;
 240                        if (skb->destructor) {
 241                                atomic_inc(&skb->users);
 242                                dev_kfree_skb_any(skb); /* put this one back */
 243                        } else {
 244                                __kfree_skb(skb);
 245                        }
 246                }
 247        }
 248
 249        put_cpu_var(softnet_data);
 250}
 251
 252static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve)
 253{
 254        int count = 0;
 255        struct sk_buff *skb;
 256
 257        zap_completion_queue();
 258        refill_skbs();
 259repeat:
 260
 261        skb = alloc_skb(len, GFP_ATOMIC);
 262        if (!skb)
 263                skb = skb_dequeue(&skb_pool);
 264
 265        if (!skb) {
 266                if (++count < 10) {
 267                        netpoll_poll(np);
 268                        goto repeat;
 269                }
 270                return NULL;
 271        }
 272
 273        atomic_set(&skb->users, 1);
 274        skb_reserve(skb, reserve);
 275        return skb;
 276}
 277
 278static int netpoll_owner_active(struct net_device *dev)
 279{
 280        struct napi_struct *napi;
 281
 282        list_for_each_entry(napi, &dev->napi_list, dev_list) {
 283                if (napi->poll_owner == smp_processor_id())
 284                        return 1;
 285        }
 286        return 0;
 287}
 288
 289void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
 290{
 291        int status = NETDEV_TX_BUSY;
 292        unsigned long tries;
 293        struct net_device *dev = np->dev;
 294        const struct net_device_ops *ops = dev->netdev_ops;
 295        struct netpoll_info *npinfo = np->dev->npinfo;
 296
 297        if (!npinfo || !netif_running(dev) || !netif_device_present(dev)) {
 298                __kfree_skb(skb);
 299                return;
 300        }
 301
 302        /* don't get messages out of order, and no recursion */
 303        if (skb_queue_len(&npinfo->txq) == 0 && !netpoll_owner_active(dev)) {
 304                struct netdev_queue *txq;
 305                unsigned long flags;
 306
 307                txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
 308
 309                local_irq_save(flags);
 310                /* try until next clock tick */
 311                for (tries = jiffies_to_usecs(1)/USEC_PER_POLL;
 312                     tries > 0; --tries) {
 313                        if (__netif_tx_trylock(txq)) {
 314                                if (!netif_tx_queue_stopped(txq)) {
 315                                        dev->priv_flags |= IFF_IN_NETPOLL;
 316                                        status = ops->ndo_start_xmit(skb, dev);
 317                                        dev->priv_flags &= ~IFF_IN_NETPOLL;
 318                                        if (status == NETDEV_TX_OK)
 319                                                txq_trans_update(txq);
 320                                }
 321                                __netif_tx_unlock(txq);
 322
 323                                if (status == NETDEV_TX_OK)
 324                                        break;
 325
 326                        }
 327
 328                        /* tickle device maybe there is some cleanup */
 329                        netpoll_poll(np);
 330
 331                        udelay(USEC_PER_POLL);
 332                }
 333
 334                WARN_ONCE(!irqs_disabled(),
 335                        "netpoll_send_skb(): %s enabled interrupts in poll (%pF)\n",
 336                        dev->name, ops->ndo_start_xmit);
 337
 338                local_irq_restore(flags);
 339        }
 340
 341        if (status != NETDEV_TX_OK) {
 342                skb_queue_tail(&npinfo->txq, skb);
 343                schedule_delayed_work(&npinfo->tx_work,0);
 344        }
 345}
 346
 347void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
 348{
 349        int total_len, eth_len, ip_len, udp_len;
 350        struct sk_buff *skb;
 351        struct udphdr *udph;
 352        struct iphdr *iph;
 353        struct ethhdr *eth;
 354
 355        udp_len = len + sizeof(*udph);
 356        ip_len = eth_len = udp_len + sizeof(*iph);
 357        total_len = eth_len + ETH_HLEN + NET_IP_ALIGN;
 358
 359        skb = find_skb(np, total_len, total_len - len);
 360        if (!skb)
 361                return;
 362
 363        skb_copy_to_linear_data(skb, msg, len);
 364        skb->len += len;
 365
 366        skb_push(skb, sizeof(*udph));
 367        skb_reset_transport_header(skb);
 368        udph = udp_hdr(skb);
 369        udph->source = htons(np->local_port);
 370        udph->dest = htons(np->remote_port);
 371        udph->len = htons(udp_len);
 372        udph->check = 0;
 373        udph->check = csum_tcpudp_magic(np->local_ip,
 374                                        np->remote_ip,
 375                                        udp_len, IPPROTO_UDP,
 376                                        csum_partial(udph, udp_len, 0));
 377        if (udph->check == 0)
 378                udph->check = CSUM_MANGLED_0;
 379
 380        skb_push(skb, sizeof(*iph));
 381        skb_reset_network_header(skb);
 382        iph = ip_hdr(skb);
 383
 384        /* iph->version = 4; iph->ihl = 5; */
 385        put_unaligned(0x45, (unsigned char *)iph);
 386        iph->tos      = 0;
 387        put_unaligned(htons(ip_len), &(iph->tot_len));
 388        iph->id       = 0;
 389        iph->frag_off = 0;
 390        iph->ttl      = 64;
 391        iph->protocol = IPPROTO_UDP;
 392        iph->check    = 0;
 393        put_unaligned(np->local_ip, &(iph->saddr));
 394        put_unaligned(np->remote_ip, &(iph->daddr));
 395        iph->check    = ip_fast_csum((unsigned char *)iph, iph->ihl);
 396
 397        eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
 398        skb_reset_mac_header(skb);
 399        skb->protocol = eth->h_proto = htons(ETH_P_IP);
 400        memcpy(eth->h_source, np->dev->dev_addr, ETH_ALEN);
 401        memcpy(eth->h_dest, np->remote_mac, ETH_ALEN);
 402
 403        skb->dev = np->dev;
 404
 405        netpoll_send_skb(np, skb);
 406}
 407
 408static void arp_reply(struct sk_buff *skb)
 409{
 410        struct netpoll_info *npinfo = skb->dev->npinfo;
 411        struct arphdr *arp;
 412        unsigned char *arp_ptr;
 413        int size, type = ARPOP_REPLY, ptype = ETH_P_ARP;
 414        __be32 sip, tip;
 415        unsigned char *sha;
 416        struct sk_buff *send_skb;
 417        struct netpoll *np, *tmp;
 418        unsigned long flags;
 419        int hits = 0;
 420
 421        if (list_empty(&npinfo->rx_np))
 422                return;
 423
 424        /* Before checking the packet, we do some early
 425           inspection whether this is interesting at all */
 426        spin_lock_irqsave(&npinfo->rx_lock, flags);
 427        list_for_each_entry_safe(np, tmp, &npinfo->rx_np, rx) {
 428                if (np->dev == skb->dev)
 429                        hits++;
 430        }
 431        spin_unlock_irqrestore(&npinfo->rx_lock, flags);
 432
 433        /* No netpoll struct is using this dev */
 434        if (!hits)
 435                return;
 436
 437        /* No arp on this interface */
 438        if (skb->dev->flags & IFF_NOARP)
 439                return;
 440
 441        if (!pskb_may_pull(skb, arp_hdr_len(skb->dev)))
 442                return;
 443
 444        skb_reset_network_header(skb);
 445        skb_reset_transport_header(skb);
 446        arp = arp_hdr(skb);
 447
 448        if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
 449             arp->ar_hrd != htons(ARPHRD_IEEE802)) ||
 450            arp->ar_pro != htons(ETH_P_IP) ||
 451            arp->ar_op != htons(ARPOP_REQUEST))
 452                return;
 453
 454        arp_ptr = (unsigned char *)(arp+1);
 455        /* save the location of the src hw addr */
 456        sha = arp_ptr;
 457        arp_ptr += skb->dev->addr_len;
 458        memcpy(&sip, arp_ptr, 4);
 459        arp_ptr += 4;
 460        /* If we actually cared about dst hw addr,
 461           it would get copied here */
 462        arp_ptr += skb->dev->addr_len;
 463        memcpy(&tip, arp_ptr, 4);
 464
 465        /* Should we ignore arp? */
 466        if (ipv4_is_loopback(tip) || ipv4_is_multicast(tip))
 467                return;
 468
 469        size = arp_hdr_len(skb->dev);
 470
 471        spin_lock_irqsave(&npinfo->rx_lock, flags);
 472        list_for_each_entry_safe(np, tmp, &npinfo->rx_np, rx) {
 473                if (tip != np->local_ip)
 474                        continue;
 475
 476                send_skb = find_skb(np, size + LL_ALLOCATED_SPACE(np->dev),
 477                                    LL_RESERVED_SPACE(np->dev));
 478                if (!send_skb)
 479                        continue;
 480
 481                skb_reset_network_header(send_skb);
 482                arp = (struct arphdr *) skb_put(send_skb, size);
 483                send_skb->dev = skb->dev;
 484                send_skb->protocol = htons(ETH_P_ARP);
 485
 486                /* Fill the device header for the ARP frame */
 487                if (dev_hard_header(send_skb, skb->dev, ptype,
 488                                    sha, np->dev->dev_addr,
 489                                    send_skb->len) < 0) {
 490                        kfree_skb(send_skb);
 491                        continue;
 492                }
 493
 494                /*
 495                 * Fill out the arp protocol part.
 496                 *
 497                 * we only support ethernet device type,
 498                 * which (according to RFC 1390) should
 499                 * always equal 1 (Ethernet).
 500                 */
 501
 502                arp->ar_hrd = htons(np->dev->type);
 503                arp->ar_pro = htons(ETH_P_IP);
 504                arp->ar_hln = np->dev->addr_len;
 505                arp->ar_pln = 4;
 506                arp->ar_op = htons(type);
 507
 508                arp_ptr = (unsigned char *)(arp + 1);
 509                memcpy(arp_ptr, np->dev->dev_addr, np->dev->addr_len);
 510                arp_ptr += np->dev->addr_len;
 511                memcpy(arp_ptr, &tip, 4);
 512                arp_ptr += 4;
 513                memcpy(arp_ptr, sha, np->dev->addr_len);
 514                arp_ptr += np->dev->addr_len;
 515                memcpy(arp_ptr, &sip, 4);
 516
 517                netpoll_send_skb(np, send_skb);
 518
 519                /* If there are several rx_hooks for the same address,
 520                   we're fine by sending a single reply */
 521                break;
 522        }
 523        spin_unlock_irqrestore(&npinfo->rx_lock, flags);
 524}
 525
 526int __netpoll_rx(struct sk_buff *skb)
 527{
 528        int proto, len, ulen;
 529        int hits = 0;
 530        struct iphdr *iph;
 531        struct udphdr *uh;
 532        struct netpoll_info *npinfo = skb->dev->npinfo;
 533        struct netpoll *np, *tmp;
 534
 535        if (list_empty(&npinfo->rx_np))
 536                goto out;
 537
 538        if (skb->dev->type != ARPHRD_ETHER)
 539                goto out;
 540
 541        /* check if netpoll clients need ARP */
 542        if (skb->protocol == htons(ETH_P_ARP) &&
 543            atomic_read(&trapped)) {
 544                skb_queue_tail(&npinfo->arp_tx, skb);
 545                return 1;
 546        }
 547
 548        proto = ntohs(eth_hdr(skb)->h_proto);
 549        if (proto != ETH_P_IP)
 550                goto out;
 551        if (skb->pkt_type == PACKET_OTHERHOST)
 552                goto out;
 553        if (skb_shared(skb))
 554                goto out;
 555
 556        iph = (struct iphdr *)skb->data;
 557        if (!pskb_may_pull(skb, sizeof(struct iphdr)))
 558                goto out;
 559        if (iph->ihl < 5 || iph->version != 4)
 560                goto out;
 561        if (!pskb_may_pull(skb, iph->ihl*4))
 562                goto out;
 563        if (ip_fast_csum((u8 *)iph, iph->ihl) != 0)
 564                goto out;
 565
 566        len = ntohs(iph->tot_len);
 567        if (skb->len < len || len < iph->ihl*4)
 568                goto out;
 569
 570        /*
 571         * Our transport medium may have padded the buffer out.
 572         * Now We trim to the true length of the frame.
 573         */
 574        if (pskb_trim_rcsum(skb, len))
 575                goto out;
 576
 577        if (iph->protocol != IPPROTO_UDP)
 578                goto out;
 579
 580        len -= iph->ihl*4;
 581        uh = (struct udphdr *)(((char *)iph) + iph->ihl*4);
 582        ulen = ntohs(uh->len);
 583
 584        if (ulen != len)
 585                goto out;
 586        if (checksum_udp(skb, uh, ulen, iph->saddr, iph->daddr))
 587                goto out;
 588
 589        list_for_each_entry_safe(np, tmp, &npinfo->rx_np, rx) {
 590                if (np->local_ip && np->local_ip != iph->daddr)
 591                        continue;
 592                if (np->remote_ip && np->remote_ip != iph->saddr)
 593                        continue;
 594                if (np->local_port && np->local_port != ntohs(uh->dest))
 595                        continue;
 596
 597                np->rx_hook(np, ntohs(uh->source),
 598                               (char *)(uh+1),
 599                               ulen - sizeof(struct udphdr));
 600                hits++;
 601        }
 602
 603        if (!hits)
 604                goto out;
 605
 606        kfree_skb(skb);
 607        return 1;
 608
 609out:
 610        if (atomic_read(&trapped)) {
 611                kfree_skb(skb);
 612                return 1;
 613        }
 614
 615        return 0;
 616}
 617
 618void netpoll_print_options(struct netpoll *np)
 619{
 620        printk(KERN_INFO "%s: local port %d\n",
 621                         np->name, np->local_port);
 622        printk(KERN_INFO "%s: local IP %pI4\n",
 623                         np->name, &np->local_ip);
 624        printk(KERN_INFO "%s: interface '%s'\n",
 625                         np->name, np->dev_name);
 626        printk(KERN_INFO "%s: remote port %d\n",
 627                         np->name, np->remote_port);
 628        printk(KERN_INFO "%s: remote IP %pI4\n",
 629                         np->name, &np->remote_ip);
 630        printk(KERN_INFO "%s: remote ethernet address %pM\n",
 631                         np->name, np->remote_mac);
 632}
 633
 634int netpoll_parse_options(struct netpoll *np, char *opt)
 635{
 636        char *cur=opt, *delim;
 637
 638        if (*cur != '@') {
 639                if ((delim = strchr(cur, '@')) == NULL)
 640                        goto parse_failed;
 641                *delim = 0;
 642                np->local_port = simple_strtol(cur, NULL, 10);
 643                cur = delim;
 644        }
 645        cur++;
 646
 647        if (*cur != '/') {
 648                if ((delim = strchr(cur, '/')) == NULL)
 649                        goto parse_failed;
 650                *delim = 0;
 651                np->local_ip = in_aton(cur);
 652                cur = delim;
 653        }
 654        cur++;
 655
 656        if (*cur != ',') {
 657                /* parse out dev name */
 658                if ((delim = strchr(cur, ',')) == NULL)
 659                        goto parse_failed;
 660                *delim = 0;
 661                strlcpy(np->dev_name, cur, sizeof(np->dev_name));
 662                cur = delim;
 663        }
 664        cur++;
 665
 666        if (*cur != '@') {
 667                /* dst port */
 668                if ((delim = strchr(cur, '@')) == NULL)
 669                        goto parse_failed;
 670                *delim = 0;
 671                if (*cur == ' ' || *cur == '\t')
 672                        printk(KERN_INFO "%s: warning: whitespace"
 673                                        "is not allowed\n", np->name);
 674                np->remote_port = simple_strtol(cur, NULL, 10);
 675                cur = delim;
 676        }
 677        cur++;
 678
 679        /* dst ip */
 680        if ((delim = strchr(cur, '/')) == NULL)
 681                goto parse_failed;
 682        *delim = 0;
 683        np->remote_ip = in_aton(cur);
 684        cur = delim + 1;
 685
 686        if (*cur != 0) {
 687                /* MAC address */
 688                if ((delim = strchr(cur, ':')) == NULL)
 689                        goto parse_failed;
 690                *delim = 0;
 691                np->remote_mac[0] = simple_strtol(cur, NULL, 16);
 692                cur = delim + 1;
 693                if ((delim = strchr(cur, ':')) == NULL)
 694                        goto parse_failed;
 695                *delim = 0;
 696                np->remote_mac[1] = simple_strtol(cur, NULL, 16);
 697                cur = delim + 1;
 698                if ((delim = strchr(cur, ':')) == NULL)
 699                        goto parse_failed;
 700                *delim = 0;
 701                np->remote_mac[2] = simple_strtol(cur, NULL, 16);
 702                cur = delim + 1;
 703                if ((delim = strchr(cur, ':')) == NULL)
 704                        goto parse_failed;
 705                *delim = 0;
 706                np->remote_mac[3] = simple_strtol(cur, NULL, 16);
 707                cur = delim + 1;
 708                if ((delim = strchr(cur, ':')) == NULL)
 709                        goto parse_failed;
 710                *delim = 0;
 711                np->remote_mac[4] = simple_strtol(cur, NULL, 16);
 712                cur = delim + 1;
 713                np->remote_mac[5] = simple_strtol(cur, NULL, 16);
 714        }
 715
 716        netpoll_print_options(np);
 717
 718        return 0;
 719
 720 parse_failed:
 721        printk(KERN_INFO "%s: couldn't parse config at '%s'!\n",
 722               np->name, cur);
 723        return -1;
 724}
 725
 726int netpoll_setup(struct netpoll *np)
 727{
 728        struct net_device *ndev = NULL;
 729        struct in_device *in_dev;
 730        struct netpoll_info *npinfo;
 731        struct netpoll *npe, *tmp;
 732        unsigned long flags;
 733        int err;
 734
 735        if (np->dev_name)
 736                ndev = dev_get_by_name(&init_net, np->dev_name);
 737        if (!ndev) {
 738                printk(KERN_ERR "%s: %s doesn't exist, aborting.\n",
 739                       np->name, np->dev_name);
 740                return -ENODEV;
 741        }
 742
 743        np->dev = ndev;
 744        if (!ndev->npinfo) {
 745                npinfo = kmalloc(sizeof(*npinfo), GFP_KERNEL);
 746                if (!npinfo) {
 747                        err = -ENOMEM;
 748                        goto put;
 749                }
 750
 751                npinfo->rx_flags = 0;
 752                INIT_LIST_HEAD(&npinfo->rx_np);
 753
 754                spin_lock_init(&npinfo->rx_lock);
 755                skb_queue_head_init(&npinfo->arp_tx);
 756                skb_queue_head_init(&npinfo->txq);
 757                INIT_DELAYED_WORK(&npinfo->tx_work, queue_process);
 758
 759                atomic_set(&npinfo->refcnt, 1);
 760        } else {
 761                npinfo = ndev->npinfo;
 762                atomic_inc(&npinfo->refcnt);
 763        }
 764
 765        npinfo->netpoll = np;
 766
 767        if ((ndev->priv_flags & IFF_DISABLE_NETPOLL) ||
 768            !ndev->netdev_ops->ndo_poll_controller) {
 769                printk(KERN_ERR "%s: %s doesn't support polling, aborting.\n",
 770                       np->name, np->dev_name);
 771                err = -ENOTSUPP;
 772                goto release;
 773        }
 774
 775        if (!netif_running(ndev)) {
 776                unsigned long atmost, atleast;
 777
 778                printk(KERN_INFO "%s: device %s not up yet, forcing it\n",
 779                       np->name, np->dev_name);
 780
 781                rtnl_lock();
 782                err = dev_open(ndev);
 783                rtnl_unlock();
 784
 785                if (err) {
 786                        printk(KERN_ERR "%s: failed to open %s\n",
 787                               np->name, ndev->name);
 788                        goto release;
 789                }
 790
 791                atleast = jiffies + HZ/10;
 792                atmost = jiffies + carrier_timeout * HZ;
 793                while (!netif_carrier_ok(ndev)) {
 794                        if (time_after(jiffies, atmost)) {
 795                                printk(KERN_NOTICE
 796                                       "%s: timeout waiting for carrier\n",
 797                                       np->name);
 798                                break;
 799                        }
 800                        msleep(1);
 801                }
 802
 803                /* If carrier appears to come up instantly, we don't
 804                 * trust it and pause so that we don't pump all our
 805                 * queued console messages into the bitbucket.
 806                 */
 807
 808                if (time_before(jiffies, atleast)) {
 809                        printk(KERN_NOTICE "%s: carrier detect appears"
 810                               " untrustworthy, waiting 4 seconds\n",
 811                               np->name);
 812                        msleep(4000);
 813                }
 814        }
 815
 816        if (!np->local_ip) {
 817                rcu_read_lock();
 818                in_dev = __in_dev_get_rcu(ndev);
 819
 820                if (!in_dev || !in_dev->ifa_list) {
 821                        rcu_read_unlock();
 822                        printk(KERN_ERR "%s: no IP address for %s, aborting\n",
 823                               np->name, np->dev_name);
 824                        err = -EDESTADDRREQ;
 825                        goto release;
 826                }
 827
 828                np->local_ip = in_dev->ifa_list->ifa_local;
 829                rcu_read_unlock();
 830                printk(KERN_INFO "%s: local IP %pI4\n", np->name, &np->local_ip);
 831        }
 832
 833        if (np->rx_hook) {
 834                spin_lock_irqsave(&npinfo->rx_lock, flags);
 835                npinfo->rx_flags |= NETPOLL_RX_ENABLED;
 836                list_add_tail(&np->rx, &npinfo->rx_np);
 837                spin_unlock_irqrestore(&npinfo->rx_lock, flags);
 838        }
 839
 840        /* fill up the skb queue */
 841        refill_skbs();
 842
 843        /* last thing to do is link it to the net device structure */
 844        ndev->npinfo = npinfo;
 845
 846        /* avoid racing with NAPI reading npinfo */
 847        synchronize_rcu();
 848
 849        return 0;
 850
 851 release:
 852        if (!ndev->npinfo) {
 853                spin_lock_irqsave(&npinfo->rx_lock, flags);
 854                list_for_each_entry_safe(npe, tmp, &npinfo->rx_np, rx) {
 855                        npe->dev = NULL;
 856                }
 857                spin_unlock_irqrestore(&npinfo->rx_lock, flags);
 858
 859                kfree(npinfo);
 860        }
 861put:
 862        dev_put(ndev);
 863        return err;
 864}
 865
 866static int __init netpoll_init(void)
 867{
 868        skb_queue_head_init(&skb_pool);
 869        return 0;
 870}
 871core_initcall(netpoll_init);
 872
 873void netpoll_cleanup(struct netpoll *np)
 874{
 875        struct netpoll_info *npinfo;
 876        unsigned long flags;
 877
 878        if (np->dev) {
 879                npinfo = np->dev->npinfo;
 880                if (npinfo) {
 881                        if (!list_empty(&npinfo->rx_np)) {
 882                                spin_lock_irqsave(&npinfo->rx_lock, flags);
 883                                list_del(&np->rx);
 884                                if (list_empty(&npinfo->rx_np))
 885                                        npinfo->rx_flags &= ~NETPOLL_RX_ENABLED;
 886                                spin_unlock_irqrestore(&npinfo->rx_lock, flags);
 887                        }
 888
 889                        if (atomic_dec_and_test(&npinfo->refcnt)) {
 890                                const struct net_device_ops *ops;
 891                                skb_queue_purge(&npinfo->arp_tx);
 892                                skb_queue_purge(&npinfo->txq);
 893                                cancel_rearming_delayed_work(&npinfo->tx_work);
 894
 895                                /* clean after last, unfinished work */
 896                                __skb_queue_purge(&npinfo->txq);
 897                                kfree(npinfo);
 898                                ops = np->dev->netdev_ops;
 899                                if (ops->ndo_netpoll_cleanup)
 900                                        ops->ndo_netpoll_cleanup(np->dev);
 901                                else
 902                                        np->dev->npinfo = NULL;
 903                        }
 904                }
 905
 906                dev_put(np->dev);
 907        }
 908
 909        np->dev = NULL;
 910}
 911
 912int netpoll_trap(void)
 913{
 914        return atomic_read(&trapped);
 915}
 916
 917void netpoll_set_trap(int trap)
 918{
 919        if (trap)
 920                atomic_inc(&trapped);
 921        else
 922                atomic_dec(&trapped);
 923}
 924
 925EXPORT_SYMBOL(netpoll_send_skb);
 926EXPORT_SYMBOL(netpoll_set_trap);
 927EXPORT_SYMBOL(netpoll_trap);
 928EXPORT_SYMBOL(netpoll_print_options);
 929EXPORT_SYMBOL(netpoll_parse_options);
 930EXPORT_SYMBOL(netpoll_setup);
 931EXPORT_SYMBOL(netpoll_cleanup);
 932EXPORT_SYMBOL(netpoll_send_udp);
 933EXPORT_SYMBOL(netpoll_poll_dev);
 934EXPORT_SYMBOL(netpoll_poll);
 935
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.