Lines Matching refs:np

227 static void refill_skbs(struct netpoll *np)  in refill_skbs()  argument
233 skb_pool = &np->skb_pool; in refill_skbs()
274 static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) in find_skb() argument
284 skb = skb_dequeue(&np->skb_pool); in find_skb()
285 schedule_work(&np->refill_wq); in find_skb()
290 netpoll_poll_dev(np->dev); in find_skb()
313 static netdev_tx_t __netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) in __netpoll_send_skb() argument
324 dev = np->dev; in __netpoll_send_skb()
354 netpoll_poll_dev(np->dev); in __netpoll_send_skb()
375 static void netpoll_udp_checksum(struct netpoll *np, struct sk_buff *skb, in netpoll_udp_checksum() argument
386 if (np->ipv6) in netpoll_udp_checksum()
387 udph->check = csum_ipv6_magic(&np->local_ip.in6, in netpoll_udp_checksum()
388 &np->remote_ip.in6, in netpoll_udp_checksum()
392 udph->check = csum_tcpudp_magic(np->local_ip.ip, in netpoll_udp_checksum()
393 np->remote_ip.ip, in netpoll_udp_checksum()
400 netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) in netpoll_send_skb() argument
405 if (unlikely(!np)) { in netpoll_send_skb()
410 ret = __netpoll_send_skb(np, skb); in netpoll_send_skb()
417 static void push_ipv6(struct netpoll *np, struct sk_buff *skb, int len) in push_ipv6() argument
434 ip6h->saddr = np->local_ip.in6; in push_ipv6()
435 ip6h->daddr = np->remote_ip.in6; in push_ipv6()
440 static void push_ipv4(struct netpoll *np, struct sk_buff *skb, int len) in push_ipv4() argument
461 put_unaligned(np->local_ip.ip, &iph->saddr); in push_ipv4()
462 put_unaligned(np->remote_ip.ip, &iph->daddr); in push_ipv4()
467 static void push_udp(struct netpoll *np, struct sk_buff *skb, int len) in push_udp() argument
478 udph->source = htons(np->local_port); in push_udp()
479 udph->dest = htons(np->remote_port); in push_udp()
482 netpoll_udp_checksum(np, skb, len); in push_udp()
485 static void push_eth(struct netpoll *np, struct sk_buff *skb) in push_eth() argument
491 ether_addr_copy(eth->h_source, np->dev->dev_addr); in push_eth()
492 ether_addr_copy(eth->h_dest, np->remote_mac); in push_eth()
493 if (np->ipv6) in push_eth()
499 int netpoll_send_udp(struct netpoll *np, const char *msg, int len) in netpoll_send_udp() argument
508 if (np->ipv6) in netpoll_send_udp()
513 total_len = ip_len + LL_RESERVED_SPACE(np->dev); in netpoll_send_udp()
515 skb = find_skb(np, total_len + np->dev->needed_tailroom, in netpoll_send_udp()
523 push_udp(np, skb, len); in netpoll_send_udp()
524 if (np->ipv6) in netpoll_send_udp()
525 push_ipv6(np, skb, len); in netpoll_send_udp()
527 push_ipv4(np, skb, len); in netpoll_send_udp()
528 push_eth(np, skb); in netpoll_send_udp()
529 skb->dev = np->dev; in netpoll_send_udp()
531 return (int)netpoll_send_skb(np, skb); in netpoll_send_udp()
536 static void skb_pool_flush(struct netpoll *np) in skb_pool_flush() argument
540 cancel_work_sync(&np->refill_wq); in skb_pool_flush()
541 skb_pool = &np->skb_pool; in skb_pool_flush()
547 struct netpoll *np = in refill_skbs_work_handler() local
550 refill_skbs(np); in refill_skbs_work_handler()
553 int __netpoll_setup(struct netpoll *np, struct net_device *ndev) in __netpoll_setup() argument
559 skb_queue_head_init(&np->skb_pool); in __netpoll_setup()
562 np_err(np, "%s doesn't support polling, aborting\n", in __netpoll_setup()
592 np->dev = ndev; in __netpoll_setup()
593 strscpy(np->dev_name, ndev->name, IFNAMSIZ); in __netpoll_setup()
594 npinfo->netpoll = np; in __netpoll_setup()
597 refill_skbs(np); in __netpoll_setup()
598 INIT_WORK(&np->refill_wq, refill_skbs_work_handler); in __netpoll_setup()
617 static char *egress_dev(struct netpoll *np, char *buf) in egress_dev() argument
619 if (np->dev_name[0]) in egress_dev()
620 return np->dev_name; in egress_dev()
622 snprintf(buf, MAC_ADDR_STR_LEN, "%pM", np->dev_mac); in egress_dev()
626 static void netpoll_wait_carrier(struct netpoll *np, struct net_device *ndev, in netpoll_wait_carrier() argument
634 np_notice(np, "timeout waiting for carrier\n"); in netpoll_wait_carrier()
644 static int netpoll_take_ipv6(struct netpoll *np, struct net_device *ndev) in netpoll_take_ipv6() argument
651 np_err(np, "IPv6 is not supported %s, aborting\n", in netpoll_take_ipv6()
652 egress_dev(np, buf)); in netpoll_take_ipv6()
663 !!(ipv6_addr_type(&np->remote_ip.in6) & IPV6_ADDR_LINKLOCAL)) in netpoll_take_ipv6()
666 np->local_ip.in6 = ifp->addr; in netpoll_take_ipv6()
673 np_err(np, "no IPv6 address for %s, aborting\n", in netpoll_take_ipv6()
674 egress_dev(np, buf)); in netpoll_take_ipv6()
678 np_info(np, "local IPv6 %pI6c\n", &np->local_ip.in6); in netpoll_take_ipv6()
685 static int netpoll_take_ipv4(struct netpoll *np, struct net_device *ndev) in netpoll_take_ipv4() argument
693 np_err(np, "no IP address for %s, aborting\n", in netpoll_take_ipv4()
694 egress_dev(np, buf)); in netpoll_take_ipv4()
700 np_err(np, "no IP address for %s, aborting\n", in netpoll_take_ipv4()
701 egress_dev(np, buf)); in netpoll_take_ipv4()
705 np->local_ip.ip = ifa->ifa_local; in netpoll_take_ipv4()
706 np_info(np, "local IP %pI4\n", &np->local_ip.ip); in netpoll_take_ipv4()
711 int netpoll_setup(struct netpoll *np) in netpoll_setup() argument
720 if (np->dev_name[0]) in netpoll_setup()
721 ndev = __dev_get_by_name(net, np->dev_name); in netpoll_setup()
722 else if (is_valid_ether_addr(np->dev_mac)) in netpoll_setup()
723 ndev = dev_getbyhwaddr(net, ARPHRD_ETHER, np->dev_mac); in netpoll_setup()
726 np_err(np, "%s doesn't exist, aborting\n", egress_dev(np, buf)); in netpoll_setup()
730 netdev_hold(ndev, &np->dev_tracker, GFP_KERNEL); in netpoll_setup()
733 np_err(np, "%s is a slave device, aborting\n", in netpoll_setup()
734 egress_dev(np, buf)); in netpoll_setup()
740 np_info(np, "device %s not up yet, forcing it\n", in netpoll_setup()
741 egress_dev(np, buf)); in netpoll_setup()
745 np_err(np, "failed to open %s\n", ndev->name); in netpoll_setup()
750 netpoll_wait_carrier(np, ndev, carrier_timeout); in netpoll_setup()
754 if (!np->local_ip.ip) { in netpoll_setup()
755 if (!np->ipv6) { in netpoll_setup()
756 err = netpoll_take_ipv4(np, ndev); in netpoll_setup()
760 err = netpoll_take_ipv6(np, ndev); in netpoll_setup()
767 err = __netpoll_setup(np, ndev); in netpoll_setup()
781 skb_pool_flush(np); in netpoll_setup()
783 DEBUG_NET_WARN_ON_ONCE(np->dev); in netpoll_setup()
785 memset(&np->local_ip, 0, sizeof(np->local_ip)); in netpoll_setup()
786 netdev_put(ndev, &np->dev_tracker); in netpoll_setup()
810 static void __netpoll_cleanup(struct netpoll *np) in __netpoll_cleanup() argument
814 npinfo = rtnl_dereference(np->dev->npinfo); in __netpoll_cleanup()
821 ops = np->dev->netdev_ops; in __netpoll_cleanup()
823 ops->ndo_netpoll_cleanup(np->dev); in __netpoll_cleanup()
825 RCU_INIT_POINTER(np->dev->npinfo, NULL); in __netpoll_cleanup()
828 RCU_INIT_POINTER(np->dev->npinfo, NULL); in __netpoll_cleanup()
830 skb_pool_flush(np); in __netpoll_cleanup()
833 void __netpoll_free(struct netpoll *np) in __netpoll_free() argument
839 __netpoll_cleanup(np); in __netpoll_free()
840 kfree(np); in __netpoll_free()
844 void do_netpoll_cleanup(struct netpoll *np) in do_netpoll_cleanup() argument
846 __netpoll_cleanup(np); in do_netpoll_cleanup()
847 netdev_put(np->dev, &np->dev_tracker); in do_netpoll_cleanup()
848 np->dev = NULL; in do_netpoll_cleanup()
852 void netpoll_cleanup(struct netpoll *np) in netpoll_cleanup() argument
855 if (!np->dev) in netpoll_cleanup()
857 do_netpoll_cleanup(np); in netpoll_cleanup()