Lines Matching full:np

227 static void refill_skbs(struct netpoll *np)  in refill_skbs()  argument
232 skb_pool = &np->skb_pool; in refill_skbs()
271 static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) in find_skb() argument
281 skb = skb_dequeue(&np->skb_pool); in find_skb()
282 schedule_work(&np->refill_wq); in find_skb()
287 netpoll_poll_dev(np->dev); in find_skb()
310 static netdev_tx_t __netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) in __netpoll_send_skb() argument
321 dev = np->dev; in __netpoll_send_skb()
351 netpoll_poll_dev(np->dev); in __netpoll_send_skb()
372 static void netpoll_udp_checksum(struct netpoll *np, struct sk_buff *skb, in netpoll_udp_checksum() argument
383 if (np->ipv6) in netpoll_udp_checksum()
384 udph->check = csum_ipv6_magic(&np->local_ip.in6, in netpoll_udp_checksum()
385 &np->remote_ip.in6, in netpoll_udp_checksum()
389 udph->check = csum_tcpudp_magic(np->local_ip.ip, in netpoll_udp_checksum()
390 np->remote_ip.ip, in netpoll_udp_checksum()
397 netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) in netpoll_send_skb() argument
402 if (unlikely(!np)) { in netpoll_send_skb()
407 ret = __netpoll_send_skb(np, skb); in netpoll_send_skb()
414 static void push_ipv6(struct netpoll *np, struct sk_buff *skb, int len) in push_ipv6() argument
431 ip6h->saddr = np->local_ip.in6; in push_ipv6()
432 ip6h->daddr = np->remote_ip.in6; in push_ipv6()
437 static void push_ipv4(struct netpoll *np, struct sk_buff *skb, int len) in push_ipv4() argument
458 put_unaligned(np->local_ip.ip, &iph->saddr); in push_ipv4()
459 put_unaligned(np->remote_ip.ip, &iph->daddr); in push_ipv4()
464 static void push_udp(struct netpoll *np, struct sk_buff *skb, int len) in push_udp() argument
475 udph->source = htons(np->local_port); in push_udp()
476 udph->dest = htons(np->remote_port); in push_udp()
479 netpoll_udp_checksum(np, skb, len); in push_udp()
482 static void push_eth(struct netpoll *np, struct sk_buff *skb) in push_eth() argument
488 ether_addr_copy(eth->h_source, np->dev->dev_addr); in push_eth()
489 ether_addr_copy(eth->h_dest, np->remote_mac); in push_eth()
490 if (np->ipv6) in push_eth()
496 int netpoll_send_udp(struct netpoll *np, const char *msg, int len) in netpoll_send_udp() argument
505 if (np->ipv6) in netpoll_send_udp()
510 total_len = ip_len + LL_RESERVED_SPACE(np->dev); in netpoll_send_udp()
512 skb = find_skb(np, total_len + np->dev->needed_tailroom, in netpoll_send_udp()
520 push_udp(np, skb, len); in netpoll_send_udp()
521 if (np->ipv6) in netpoll_send_udp()
522 push_ipv6(np, skb, len); in netpoll_send_udp()
524 push_ipv4(np, skb, len); in netpoll_send_udp()
525 push_eth(np, skb); in netpoll_send_udp()
526 skb->dev = np->dev; in netpoll_send_udp()
528 return (int)netpoll_send_skb(np, skb); in netpoll_send_udp()
533 static void skb_pool_flush(struct netpoll *np) in skb_pool_flush() argument
537 cancel_work_sync(&np->refill_wq); in skb_pool_flush()
538 skb_pool = &np->skb_pool; in skb_pool_flush()
544 struct netpoll *np = in refill_skbs_work_handler() local
547 refill_skbs(np); in refill_skbs_work_handler()
550 int __netpoll_setup(struct netpoll *np, struct net_device *ndev) in __netpoll_setup() argument
556 skb_queue_head_init(&np->skb_pool); in __netpoll_setup()
559 np_err(np, "%s doesn't support polling, aborting\n", in __netpoll_setup()
589 np->dev = ndev; in __netpoll_setup()
590 strscpy(np->dev_name, ndev->name, IFNAMSIZ); in __netpoll_setup()
593 refill_skbs(np); in __netpoll_setup()
594 INIT_WORK(&np->refill_wq, refill_skbs_work_handler); in __netpoll_setup()
613 static char *egress_dev(struct netpoll *np, char *buf) in egress_dev() argument
615 if (np->dev_name[0]) in egress_dev()
616 return np->dev_name; in egress_dev()
618 snprintf(buf, MAC_ADDR_STR_LEN, "%pM", np->dev_mac); in egress_dev()
622 static void netpoll_wait_carrier(struct netpoll *np, struct net_device *ndev, in netpoll_wait_carrier() argument
630 np_notice(np, "timeout waiting for carrier\n"); in netpoll_wait_carrier()
640 static int netpoll_take_ipv6(struct netpoll *np, struct net_device *ndev) in netpoll_take_ipv6() argument
647 np_err(np, "IPv6 is not supported %s, aborting\n", in netpoll_take_ipv6()
648 egress_dev(np, buf)); in netpoll_take_ipv6()
659 !!(ipv6_addr_type(&np->remote_ip.in6) & IPV6_ADDR_LINKLOCAL)) in netpoll_take_ipv6()
662 np->local_ip.in6 = ifp->addr; in netpoll_take_ipv6()
669 np_err(np, "no IPv6 address for %s, aborting\n", in netpoll_take_ipv6()
670 egress_dev(np, buf)); in netpoll_take_ipv6()
674 np_info(np, "local IPv6 %pI6c\n", &np->local_ip.in6); in netpoll_take_ipv6()
681 static int netpoll_take_ipv4(struct netpoll *np, struct net_device *ndev) in netpoll_take_ipv4() argument
689 np_err(np, "no IP address for %s, aborting\n", in netpoll_take_ipv4()
690 egress_dev(np, buf)); in netpoll_take_ipv4()
696 np_err(np, "no IP address for %s, aborting\n", in netpoll_take_ipv4()
697 egress_dev(np, buf)); in netpoll_take_ipv4()
701 np->local_ip.ip = ifa->ifa_local; in netpoll_take_ipv4()
702 np_info(np, "local IP %pI4\n", &np->local_ip.ip); in netpoll_take_ipv4()
707 int netpoll_setup(struct netpoll *np) in netpoll_setup() argument
716 if (np->dev_name[0]) in netpoll_setup()
717 ndev = __dev_get_by_name(net, np->dev_name); in netpoll_setup()
718 else if (is_valid_ether_addr(np->dev_mac)) in netpoll_setup()
719 ndev = dev_getbyhwaddr(net, ARPHRD_ETHER, np->dev_mac); in netpoll_setup()
722 np_err(np, "%s doesn't exist, aborting\n", egress_dev(np, buf)); in netpoll_setup()
726 netdev_hold(ndev, &np->dev_tracker, GFP_KERNEL); in netpoll_setup()
729 np_err(np, "%s is a slave device, aborting\n", in netpoll_setup()
730 egress_dev(np, buf)); in netpoll_setup()
736 np_info(np, "device %s not up yet, forcing it\n", in netpoll_setup()
737 egress_dev(np, buf)); in netpoll_setup()
741 np_err(np, "failed to open %s\n", ndev->name); in netpoll_setup()
746 netpoll_wait_carrier(np, ndev, carrier_timeout); in netpoll_setup()
750 if (!np->local_ip.ip) { in netpoll_setup()
751 if (!np->ipv6) { in netpoll_setup()
752 err = netpoll_take_ipv4(np, ndev); in netpoll_setup()
756 err = netpoll_take_ipv6(np, ndev); in netpoll_setup()
763 err = __netpoll_setup(np, ndev); in netpoll_setup()
777 skb_pool_flush(np); in netpoll_setup()
779 DEBUG_NET_WARN_ON_ONCE(np->dev); in netpoll_setup()
781 memset(&np->local_ip, 0, sizeof(np->local_ip)); in netpoll_setup()
782 netdev_put(ndev, &np->dev_tracker); in netpoll_setup()
806 static void __netpoll_cleanup(struct netpoll *np) in __netpoll_cleanup() argument
810 npinfo = rtnl_dereference(np->dev->npinfo); in __netpoll_cleanup()
817 ops = np->dev->netdev_ops; in __netpoll_cleanup()
819 ops->ndo_netpoll_cleanup(np->dev); in __netpoll_cleanup()
821 RCU_INIT_POINTER(np->dev->npinfo, NULL); in __netpoll_cleanup()
824 RCU_INIT_POINTER(np->dev->npinfo, NULL); in __netpoll_cleanup()
826 skb_pool_flush(np); in __netpoll_cleanup()
829 void __netpoll_free(struct netpoll *np) in __netpoll_free() argument
835 __netpoll_cleanup(np); in __netpoll_free()
836 kfree(np); in __netpoll_free()
840 void do_netpoll_cleanup(struct netpoll *np) in do_netpoll_cleanup() argument
842 __netpoll_cleanup(np); in do_netpoll_cleanup()
843 netdev_put(np->dev, &np->dev_tracker); in do_netpoll_cleanup()
844 np->dev = NULL; in do_netpoll_cleanup()
848 void netpoll_cleanup(struct netpoll *np) in netpoll_cleanup() argument
851 if (!np->dev) in netpoll_cleanup()
853 do_netpoll_cleanup(np); in netpoll_cleanup()