Lines Matching refs:skb

81 static struct amt_skb_cb *amt_skb_cb(struct sk_buff *skb)  in amt_skb_cb()  argument
86 return (struct amt_skb_cb *)((void *)skb->cb + in amt_skb_cb()
517 struct sk_buff *skb; in amt_build_igmp_gq() local
524 skb = netdev_alloc_skb_ip_align(amt->dev, len); in amt_build_igmp_gq()
525 if (!skb) in amt_build_igmp_gq()
528 skb_reserve(skb, hlen); in amt_build_igmp_gq()
529 skb_push(skb, sizeof(*eth)); in amt_build_igmp_gq()
530 skb->protocol = htons(ETH_P_IP); in amt_build_igmp_gq()
531 skb_reset_mac_header(skb); in amt_build_igmp_gq()
532 skb->priority = TC_PRIO_CONTROL; in amt_build_igmp_gq()
533 skb_put(skb, sizeof(*iph)); in amt_build_igmp_gq()
534 skb_put_data(skb, ra, sizeof(ra)); in amt_build_igmp_gq()
535 skb_put(skb, sizeof(*ihv3)); in amt_build_igmp_gq()
536 skb_pull(skb, sizeof(*eth)); in amt_build_igmp_gq()
537 skb_reset_network_header(skb); in amt_build_igmp_gq()
539 iph = ip_hdr(skb); in amt_build_igmp_gq()
552 eth = eth_hdr(skb); in amt_build_igmp_gq()
557 ihv3 = skb_pull(skb, sizeof(*iph) + AMT_IPHDR_OPTS); in amt_build_igmp_gq()
558 skb_reset_transport_header(skb); in amt_build_igmp_gq()
571 offset = skb_transport_offset(skb); in amt_build_igmp_gq()
572 skb->csum = skb_checksum(skb, offset, skb->len - offset, 0); in amt_build_igmp_gq()
573 skb->ip_summed = CHECKSUM_NONE; in amt_build_igmp_gq()
575 skb_push(skb, sizeof(*eth) + sizeof(*iph) + AMT_IPHDR_OPTS); in amt_build_igmp_gq()
577 return skb; in amt_build_igmp_gq()
617 struct sk_buff *skb; in amt_send_discovery() local
645 skb = netdev_alloc_skb_ip_align(amt->dev, len); in amt_send_discovery()
646 if (!skb) { in amt_send_discovery()
652 skb->priority = TC_PRIO_CONTROL; in amt_send_discovery()
653 skb_dst_set(skb, &rt->dst); in amt_send_discovery()
656 skb_reset_network_header(skb); in amt_send_discovery()
657 skb_put(skb, len); in amt_send_discovery()
658 amtd = skb_pull(skb, sizeof(*iph) + sizeof(*udph)); in amt_send_discovery()
663 skb_push(skb, sizeof(*udph)); in amt_send_discovery()
664 skb_reset_transport_header(skb); in amt_send_discovery()
665 udph = udp_hdr(skb); in amt_send_discovery()
670 offset = skb_transport_offset(skb); in amt_send_discovery()
671 skb->csum = skb_checksum(skb, offset, skb->len - offset, 0); in amt_send_discovery()
674 IPPROTO_UDP, skb->csum); in amt_send_discovery()
676 skb_push(skb, sizeof(*iph)); in amt_send_discovery()
677 iph = ip_hdr(skb); in amt_send_discovery()
688 skb->ip_summed = CHECKSUM_NONE; in amt_send_discovery()
689 ip_select_ident(amt->net, skb, NULL); in amt_send_discovery()
691 err = ip_local_out(amt->net, sock->sk, skb); in amt_send_discovery()
706 struct sk_buff *skb; in amt_send_request() local
734 skb = netdev_alloc_skb_ip_align(amt->dev, len); in amt_send_request()
735 if (!skb) { in amt_send_request()
741 skb->priority = TC_PRIO_CONTROL; in amt_send_request()
742 skb_dst_set(skb, &rt->dst); in amt_send_request()
745 skb_reset_network_header(skb); in amt_send_request()
746 skb_put(skb, len); in amt_send_request()
747 amtrh = skb_pull(skb, sizeof(*iph) + sizeof(*udph)); in amt_send_request()
754 skb_push(skb, sizeof(*udph)); in amt_send_request()
755 skb_reset_transport_header(skb); in amt_send_request()
756 udph = udp_hdr(skb); in amt_send_request()
761 offset = skb_transport_offset(skb); in amt_send_request()
762 skb->csum = skb_checksum(skb, offset, skb->len - offset, 0); in amt_send_request()
765 IPPROTO_UDP, skb->csum); in amt_send_request()
767 skb_push(skb, sizeof(*iph)); in amt_send_request()
768 iph = ip_hdr(skb); in amt_send_request()
779 skb->ip_summed = CHECKSUM_NONE; in amt_send_request()
780 ip_select_ident(amt->net, skb, NULL); in amt_send_request()
782 err = ip_local_out(amt->net, sock->sk, skb); in amt_send_request()
793 struct sk_buff *skb; in amt_send_igmp_gq() local
795 skb = amt_build_igmp_gq(amt); in amt_send_igmp_gq()
796 if (!skb) in amt_send_igmp_gq()
799 amt_skb_cb(skb)->tunnel = tunnel; in amt_send_igmp_gq()
800 dev_queue_xmit(skb); in amt_send_igmp_gq()
813 struct sk_buff *skb; in amt_build_mld_gq() local
818 skb = netdev_alloc_skb_ip_align(amt->dev, len); in amt_build_mld_gq()
819 if (!skb) in amt_build_mld_gq()
822 skb_reserve(skb, hlen); in amt_build_mld_gq()
823 skb_push(skb, sizeof(*eth)); in amt_build_mld_gq()
824 skb_reset_mac_header(skb); in amt_build_mld_gq()
825 eth = eth_hdr(skb); in amt_build_mld_gq()
826 skb->priority = TC_PRIO_CONTROL; in amt_build_mld_gq()
827 skb->protocol = htons(ETH_P_IPV6); in amt_build_mld_gq()
828 skb_put_zero(skb, sizeof(*ip6h)); in amt_build_mld_gq()
829 skb_put_data(skb, ra, sizeof(ra)); in amt_build_mld_gq()
830 skb_put_zero(skb, sizeof(*mld2q)); in amt_build_mld_gq()
831 skb_pull(skb, sizeof(*eth)); in amt_build_mld_gq()
832 skb_reset_network_header(skb); in amt_build_mld_gq()
833 ip6h = ipv6_hdr(skb); in amt_build_mld_gq()
843 kfree_skb(skb); in amt_build_mld_gq()
851 skb_pull(skb, sizeof(*ip6h) + sizeof(ra)); in amt_build_mld_gq()
852 skb_reset_transport_header(skb); in amt_build_mld_gq()
853 mld2q = (struct mld2_query *)icmp6_hdr(skb); in amt_build_mld_gq()
871 skb->ip_summed = CHECKSUM_NONE; in amt_build_mld_gq()
872 skb_push(skb, sizeof(*eth) + sizeof(*ip6h) + sizeof(ra)); in amt_build_mld_gq()
873 return skb; in amt_build_mld_gq()
878 struct sk_buff *skb; in amt_send_mld_gq() local
880 skb = amt_build_mld_gq(amt); in amt_send_mld_gq()
881 if (!skb) in amt_send_mld_gq()
884 amt_skb_cb(skb)->tunnel = tunnel; in amt_send_mld_gq()
885 dev_queue_xmit(skb); in amt_send_mld_gq()
894 struct sk_buff *skb) in amt_queue_event() argument
906 amt->events[index].skb = skb; in amt_queue_event()
997 struct sk_buff *skb, in amt_send_membership_update() argument
1011 err = skb_cow_head(skb, LL_RESERVED_SPACE(amt->dev) + sizeof(*amtmu) + in amt_send_membership_update()
1016 skb_reset_inner_headers(skb); in amt_send_membership_update()
1029 amtmu = skb_push(skb, sizeof(*amtmu)); in amt_send_membership_update()
1037 skb_set_inner_protocol(skb, htons(ETH_P_IP)); in amt_send_membership_update()
1039 skb_set_inner_protocol(skb, htons(ETH_P_IPV6)); in amt_send_membership_update()
1040 udp_tunnel_xmit_skb(rt, sock->sk, skb, in amt_send_membership_update()
1061 struct sk_buff *skb; in amt_send_multicast_data() local
1070 skb = skb_copy_expand(oskb, sizeof(*amtmd) + sizeof(*iph) + in amt_send_multicast_data()
1072 if (!skb) in amt_send_multicast_data()
1075 skb_reset_inner_headers(skb); in amt_send_multicast_data()
1084 kfree_skb(skb); in amt_send_multicast_data()
1088 amtmd = skb_push(skb, sizeof(*amtmd)); in amt_send_multicast_data()
1094 skb_set_inner_protocol(skb, htons(ETH_P_IP)); in amt_send_multicast_data()
1096 skb_set_inner_protocol(skb, htons(ETH_P_IPV6)); in amt_send_multicast_data()
1097 udp_tunnel_xmit_skb(rt, sock->sk, skb, in amt_send_multicast_data()
1110 struct sk_buff *skb, in amt_send_membership_query() argument
1124 err = skb_cow_head(skb, LL_RESERVED_SPACE(amt->dev) + sizeof(*amtmq) + in amt_send_membership_query()
1129 skb_reset_inner_headers(skb); in amt_send_membership_query()
1142 amtmq = skb_push(skb, sizeof(*amtmq)); in amt_send_membership_query()
1152 skb_set_inner_protocol(skb, htons(ETH_P_IP)); in amt_send_membership_query()
1154 skb_set_inner_protocol(skb, htons(ETH_P_IPV6)); in amt_send_membership_query()
1155 udp_tunnel_xmit_skb(rt, sock->sk, skb, in amt_send_membership_query()
1169 static netdev_tx_t amt_dev_xmit(struct sk_buff *skb, struct net_device *dev) in amt_dev_xmit() argument
1187 iph = ip_hdr(skb); in amt_dev_xmit()
1192 if (!ip_mc_check_igmp(skb)) { in amt_dev_xmit()
1193 ih = igmp_hdr(skb); in amt_dev_xmit()
1212 ip6h = ipv6_hdr(skb); in amt_dev_xmit()
1216 if (!ipv6_mc_check_mld(skb)) { in amt_dev_xmit()
1217 mld = (struct mld_msg *)skb_transport_header(skb); in amt_dev_xmit()
1240 if (!pskb_may_pull(skb, sizeof(struct ethhdr))) in amt_dev_xmit()
1243 skb_pull(skb, sizeof(struct ethhdr)); in amt_dev_xmit()
1252 if (amt_send_membership_update(amt, skb, v6)) in amt_dev_xmit()
1257 tunnel = amt_skb_cb(skb)->tunnel; in amt_dev_xmit()
1264 if (amt_send_membership_query(amt, skb, tunnel, v6)) in amt_dev_xmit()
1288 amt_send_multicast_data(amt, skb, tunnel, v6); in amt_dev_xmit()
1292 dev_kfree_skb(skb); in amt_dev_xmit()
1295 dev_kfree_skb(skb); in amt_dev_xmit()
1301 static int amt_parse_type(struct sk_buff *skb) in amt_parse_type() argument
1305 if (!pskb_may_pull(skb, sizeof(struct udphdr) + in amt_parse_type()
1309 amth = (struct amt_header *)(udp_hdr(skb) + 1); in amt_parse_type()
1937 static void amt_igmpv2_report_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_igmpv2_report_handler() argument
1940 struct igmphdr *ih = igmp_hdr(skb); in amt_igmpv2_report_handler()
1941 struct iphdr *iph = ip_hdr(skb); in amt_igmpv2_report_handler()
1974 static void amt_igmpv2_leave_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_igmpv2_leave_handler() argument
1977 struct igmphdr *ih = igmp_hdr(skb); in amt_igmpv2_leave_handler()
1978 struct iphdr *iph = ip_hdr(skb); in amt_igmpv2_leave_handler()
1992 static void amt_igmpv3_report_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_igmpv3_report_handler() argument
1995 struct igmpv3_report *ihrv3 = igmpv3_report_hdr(skb); in amt_igmpv3_report_handler()
1996 int len = skb_transport_offset(skb) + sizeof(*ihrv3); in amt_igmpv3_report_handler()
1998 struct iphdr *iph = ip_hdr(skb); in amt_igmpv3_report_handler()
2007 if (!ip_mc_may_pull(skb, len)) in amt_igmpv3_report_handler()
2010 grec = (void *)(skb->data + len - sizeof(*grec)); in amt_igmpv3_report_handler()
2014 if (!ip_mc_may_pull(skb, len)) in amt_igmpv3_report_handler()
2063 static void amt_igmp_report_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_igmp_report_handler() argument
2066 struct igmphdr *ih = igmp_hdr(skb); in amt_igmp_report_handler()
2070 amt_igmpv3_report_handler(amt, skb, tunnel); in amt_igmp_report_handler()
2073 amt_igmpv2_report_handler(amt, skb, tunnel); in amt_igmp_report_handler()
2076 amt_igmpv2_leave_handler(amt, skb, tunnel); in amt_igmp_report_handler()
2098 static void amt_mldv1_report_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_mldv1_report_handler() argument
2101 struct mld_msg *mld = (struct mld_msg *)icmp6_hdr(skb); in amt_mldv1_report_handler()
2102 struct ipv6hdr *ip6h = ipv6_hdr(skb); in amt_mldv1_report_handler()
2135 static void amt_mldv1_leave_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_mldv1_leave_handler() argument
2138 struct mld_msg *mld = (struct mld_msg *)icmp6_hdr(skb); in amt_mldv1_leave_handler()
2139 struct iphdr *iph = ip_hdr(skb); in amt_mldv1_leave_handler()
2154 static void amt_mldv2_report_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_mldv2_report_handler() argument
2157 struct mld2_report *mld2r = (struct mld2_report *)icmp6_hdr(skb); in amt_mldv2_report_handler()
2158 int len = skb_transport_offset(skb) + sizeof(*mld2r); in amt_mldv2_report_handler()
2160 struct ipv6hdr *ip6h = ipv6_hdr(skb); in amt_mldv2_report_handler()
2169 if (!ipv6_mc_may_pull(skb, len)) in amt_mldv2_report_handler()
2172 grec = (void *)(skb->data + len - sizeof(*grec)); in amt_mldv2_report_handler()
2176 if (!ipv6_mc_may_pull(skb, len)) in amt_mldv2_report_handler()
2225 static void amt_mld_report_handler(struct amt_dev *amt, struct sk_buff *skb, in amt_mld_report_handler() argument
2228 struct mld_msg *mld = (struct mld_msg *)icmp6_hdr(skb); in amt_mld_report_handler()
2232 amt_mldv1_report_handler(amt, skb, tunnel); in amt_mld_report_handler()
2235 amt_mldv2_report_handler(amt, skb, tunnel); in amt_mld_report_handler()
2238 amt_mldv1_leave_handler(amt, skb, tunnel); in amt_mld_report_handler()
2246 static bool amt_advertisement_handler(struct amt_dev *amt, struct sk_buff *skb) in amt_advertisement_handler() argument
2252 if (!pskb_may_pull(skb, hdr_size)) in amt_advertisement_handler()
2255 amta = (struct amt_header_advertisement *)(udp_hdr(skb) + 1); in amt_advertisement_handler()
2278 static bool amt_multicast_data_handler(struct amt_dev *amt, struct sk_buff *skb) in amt_multicast_data_handler() argument
2289 if (!pskb_may_pull(skb, hdr_size)) in amt_multicast_data_handler()
2292 amtmd = (struct amt_header_mcast_data *)(udp_hdr(skb) + 1); in amt_multicast_data_handler()
2296 if (iptunnel_pull_header(skb, hdr_size, htons(ETH_P_IP), false)) in amt_multicast_data_handler()
2299 skb_reset_network_header(skb); in amt_multicast_data_handler()
2300 skb_push(skb, sizeof(*eth)); in amt_multicast_data_handler()
2301 skb_reset_mac_header(skb); in amt_multicast_data_handler()
2302 skb_pull(skb, sizeof(*eth)); in amt_multicast_data_handler()
2303 eth = eth_hdr(skb); in amt_multicast_data_handler()
2305 if (!pskb_may_pull(skb, sizeof(*iph))) in amt_multicast_data_handler()
2307 iph = ip_hdr(skb); in amt_multicast_data_handler()
2312 skb->protocol = htons(ETH_P_IP); in amt_multicast_data_handler()
2319 if (!pskb_may_pull(skb, sizeof(*ip6h))) in amt_multicast_data_handler()
2322 ip6h = ipv6_hdr(skb); in amt_multicast_data_handler()
2325 skb->protocol = htons(ETH_P_IPV6); in amt_multicast_data_handler()
2333 skb->pkt_type = PACKET_MULTICAST; in amt_multicast_data_handler()
2334 skb->ip_summed = CHECKSUM_NONE; in amt_multicast_data_handler()
2335 len = skb->len; in amt_multicast_data_handler()
2336 err = gro_cells_receive(&amt->gro_cells, skb); in amt_multicast_data_handler()
2346 struct sk_buff *skb) in amt_membership_query_handler() argument
2355 if (!pskb_may_pull(skb, hdr_size)) in amt_membership_query_handler()
2358 amtmq = (struct amt_header_membership_query *)(udp_hdr(skb) + 1); in amt_membership_query_handler()
2366 if (iptunnel_pull_header(skb, hdr_size, htons(ETH_P_TEB), false)) in amt_membership_query_handler()
2369 oeth = eth_hdr(skb); in amt_membership_query_handler()
2370 skb_reset_mac_header(skb); in amt_membership_query_handler()
2371 skb_pull(skb, sizeof(*eth)); in amt_membership_query_handler()
2372 skb_reset_network_header(skb); in amt_membership_query_handler()
2373 eth = eth_hdr(skb); in amt_membership_query_handler()
2374 if (!pskb_may_pull(skb, sizeof(*iph))) in amt_membership_query_handler()
2377 iph = ip_hdr(skb); in amt_membership_query_handler()
2382 if (!pskb_may_pull(skb, sizeof(*iph) + AMT_IPHDR_OPTS + in amt_membership_query_handler()
2389 ihv3 = skb_pull(skb, sizeof(*iph) + AMT_IPHDR_OPTS); in amt_membership_query_handler()
2390 skb_reset_transport_header(skb); in amt_membership_query_handler()
2391 skb_push(skb, sizeof(*iph) + AMT_IPHDR_OPTS); in amt_membership_query_handler()
2396 skb->protocol = htons(ETH_P_IP); in amt_membership_query_handler()
2407 if (!pskb_may_pull(skb, sizeof(*ip6h) + AMT_IP6HDR_OPTS + in amt_membership_query_handler()
2411 ip6h = ipv6_hdr(skb); in amt_membership_query_handler()
2415 mld2q = skb_pull(skb, sizeof(*ip6h) + AMT_IP6HDR_OPTS); in amt_membership_query_handler()
2416 skb_reset_transport_header(skb); in amt_membership_query_handler()
2417 skb_push(skb, sizeof(*ip6h) + AMT_IP6HDR_OPTS); in amt_membership_query_handler()
2422 skb->protocol = htons(ETH_P_IPV6); in amt_membership_query_handler()
2431 skb->pkt_type = PACKET_MULTICAST; in amt_membership_query_handler()
2432 skb->ip_summed = CHECKSUM_NONE; in amt_membership_query_handler()
2433 len = skb->len; in amt_membership_query_handler()
2435 if (__netif_rx(skb) == NET_RX_SUCCESS) { in amt_membership_query_handler()
2446 static bool amt_update_handler(struct amt_dev *amt, struct sk_buff *skb) in amt_update_handler() argument
2454 iph = ip_hdr(skb); in amt_update_handler()
2457 if (!pskb_may_pull(skb, hdr_size)) in amt_update_handler()
2460 amtmu = (struct amt_header_membership_update *)(udp_hdr(skb) + 1); in amt_update_handler()
2464 if (iptunnel_pull_header(skb, hdr_size, skb->protocol, false)) in amt_update_handler()
2467 skb_reset_network_header(skb); in amt_update_handler()
2487 if (!pskb_may_pull(skb, sizeof(*iph))) in amt_update_handler()
2490 iph = ip_hdr(skb); in amt_update_handler()
2492 if (ip_mc_check_igmp(skb)) { in amt_update_handler()
2498 amt_igmp_report_handler(amt, skb, tunnel); in amt_update_handler()
2501 skb_push(skb, sizeof(struct ethhdr)); in amt_update_handler()
2502 skb_reset_mac_header(skb); in amt_update_handler()
2503 eth = eth_hdr(skb); in amt_update_handler()
2504 skb->protocol = htons(ETH_P_IP); in amt_update_handler()
2509 struct ipv6hdr *ip6h = ipv6_hdr(skb); in amt_update_handler()
2511 if (ipv6_mc_check_mld(skb)) { in amt_update_handler()
2517 amt_mld_report_handler(amt, skb, tunnel); in amt_update_handler()
2520 skb_push(skb, sizeof(struct ethhdr)); in amt_update_handler()
2521 skb_reset_mac_header(skb); in amt_update_handler()
2522 eth = eth_hdr(skb); in amt_update_handler()
2523 skb->protocol = htons(ETH_P_IPV6); in amt_update_handler()
2532 skb_pull(skb, sizeof(struct ethhdr)); in amt_update_handler()
2533 skb->pkt_type = PACKET_MULTICAST; in amt_update_handler()
2534 skb->ip_summed = CHECKSUM_NONE; in amt_update_handler()
2535 len = skb->len; in amt_update_handler()
2536 if (__netif_rx(skb) == NET_RX_SUCCESS) { in amt_update_handler()
2554 struct sk_buff *skb; in amt_send_advertisement() local
2582 skb = netdev_alloc_skb_ip_align(amt->dev, len); in amt_send_advertisement()
2583 if (!skb) { in amt_send_advertisement()
2589 skb->priority = TC_PRIO_CONTROL; in amt_send_advertisement()
2590 skb_dst_set(skb, &rt->dst); in amt_send_advertisement()
2593 skb_reset_network_header(skb); in amt_send_advertisement()
2594 skb_put(skb, len); in amt_send_advertisement()
2595 amta = skb_pull(skb, sizeof(*iph) + sizeof(*udph)); in amt_send_advertisement()
2601 skb_push(skb, sizeof(*udph)); in amt_send_advertisement()
2602 skb_reset_transport_header(skb); in amt_send_advertisement()
2603 udph = udp_hdr(skb); in amt_send_advertisement()
2608 offset = skb_transport_offset(skb); in amt_send_advertisement()
2609 skb->csum = skb_checksum(skb, offset, skb->len - offset, 0); in amt_send_advertisement()
2612 IPPROTO_UDP, skb->csum); in amt_send_advertisement()
2614 skb_push(skb, sizeof(*iph)); in amt_send_advertisement()
2615 iph = ip_hdr(skb); in amt_send_advertisement()
2626 skb->ip_summed = CHECKSUM_NONE; in amt_send_advertisement()
2627 ip_select_ident(amt->net, skb, NULL); in amt_send_advertisement()
2629 err = ip_local_out(amt->net, sock->sk, skb); in amt_send_advertisement()
2637 static bool amt_discovery_handler(struct amt_dev *amt, struct sk_buff *skb) in amt_discovery_handler() argument
2643 if (!pskb_may_pull(skb, sizeof(*udph) + sizeof(*amtd))) in amt_discovery_handler()
2646 iph = ip_hdr(skb); in amt_discovery_handler()
2647 udph = udp_hdr(skb); in amt_discovery_handler()
2648 amtd = (struct amt_header_discovery *)(udp_hdr(skb) + 1); in amt_discovery_handler()
2658 static bool amt_request_handler(struct amt_dev *amt, struct sk_buff *skb) in amt_request_handler() argument
2668 if (!pskb_may_pull(skb, sizeof(*udph) + sizeof(*amtrh))) in amt_request_handler()
2671 iph = ip_hdr(skb); in amt_request_handler()
2672 udph = udp_hdr(skb); in amt_request_handler()
2673 amtrh = (struct amt_header_request *)(udp_hdr(skb) + 1); in amt_request_handler()
2685 icmp_ndo_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0); in amt_request_handler()
2735 static void amt_gw_rcv(struct amt_dev *amt, struct sk_buff *skb) in amt_gw_rcv() argument
2737 int type = amt_parse_type(skb); in amt_gw_rcv()
2746 err = amt_advertisement_handler(amt, skb); in amt_gw_rcv()
2749 err = amt_membership_query_handler(amt, skb); in amt_gw_rcv()
2761 kfree_skb(skb); in amt_gw_rcv()
2763 consume_skb(skb); in amt_gw_rcv()
2767 static int amt_rcv(struct sock *sk, struct sk_buff *skb) in amt_rcv() argument
2778 kfree_skb(skb); in amt_rcv()
2782 skb->dev = amt->dev; in amt_rcv()
2783 iph = ip_hdr(skb); in amt_rcv()
2784 type = amt_parse_type(skb); in amt_rcv()
2798 if (amt_queue_event(amt, AMT_EVENT_RECEIVE, skb)) { in amt_rcv()
2810 err = amt_multicast_data_handler(amt, skb); in amt_rcv()
2821 if (amt_queue_event(amt, AMT_EVENT_RECEIVE, skb)) { in amt_rcv()
2835 err = amt_discovery_handler(amt, skb); in amt_rcv()
2838 err = amt_request_handler(amt, skb); in amt_rcv()
2841 err = amt_update_handler(amt, skb); in amt_rcv()
2855 kfree_skb(skb); in amt_rcv()
2857 consume_skb(skb); in amt_rcv()
2867 struct sk_buff *skb; in amt_event_work() local
2878 skb = amt->events[amt->event_idx].skb; in amt_event_work()
2880 amt->events[amt->event_idx].skb = NULL; in amt_event_work()
2888 amt_gw_rcv(amt, skb); in amt_event_work()
2897 kfree_skb(skb); in amt_event_work()
2903 static int amt_err_lookup(struct sock *sk, struct sk_buff *skb) in amt_err_lookup() argument
2916 type = amt_parse_type(skb); in amt_err_lookup()
3018 struct sk_buff *skb; in amt_dev_stop() local
3034 skb = amt->events[i].skb; in amt_dev_stop()
3035 kfree_skb(skb); in amt_dev_stop()
3037 amt->events[i].skb = NULL; in amt_dev_stop()
3311 static int amt_fill_info(struct sk_buff *skb, const struct net_device *dev) in amt_fill_info() argument
3315 if (nla_put_u32(skb, IFLA_AMT_MODE, amt->mode)) in amt_fill_info()
3317 if (nla_put_be16(skb, IFLA_AMT_RELAY_PORT, amt->relay_port)) in amt_fill_info()
3319 if (nla_put_be16(skb, IFLA_AMT_GATEWAY_PORT, amt->gw_port)) in amt_fill_info()
3321 if (nla_put_u32(skb, IFLA_AMT_LINK, amt->stream_dev->ifindex)) in amt_fill_info()
3323 if (nla_put_in_addr(skb, IFLA_AMT_LOCAL_IP, amt->local_ip)) in amt_fill_info()
3325 if (nla_put_in_addr(skb, IFLA_AMT_DISCOVERY_IP, amt->discovery_ip)) in amt_fill_info()
3328 if (nla_put_in_addr(skb, IFLA_AMT_REMOTE_IP, amt->remote_ip)) in amt_fill_info()
3330 if (nla_put_u32(skb, IFLA_AMT_MAX_TUNNELS, amt->max_tunnels)) in amt_fill_info()