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