Lines Matching refs:skb
51 static void fou_recv_pull(struct sk_buff *skb, size_t len) in fou_recv_pull() argument
53 struct iphdr *iph = ip_hdr(skb); in fou_recv_pull()
59 __skb_pull(skb, len); in fou_recv_pull()
60 skb_postpull_rcsum(skb, udp_hdr(skb), len); in fou_recv_pull()
61 skb_reset_transport_header(skb); in fou_recv_pull()
64 static int fou_udp_recv(struct sock *sk, struct sk_buff *skb) in fou_udp_recv() argument
71 fou_recv_pull(skb, sizeof(struct udphdr)); in fou_udp_recv()
76 static struct guehdr *gue_remcsum(struct sk_buff *skb, struct guehdr *guehdr, in gue_remcsum() argument
85 if (!pskb_may_pull(skb, plen)) in gue_remcsum()
87 guehdr = (struct guehdr *)&udp_hdr(skb)[1]; in gue_remcsum()
89 skb_remcsum_process(skb, (void *)guehdr + hdrlen, in gue_remcsum()
95 static int gue_control_message(struct sk_buff *skb, struct guehdr *guehdr) in gue_control_message() argument
98 kfree_skb(skb); in gue_control_message()
102 static int gue_udp_recv(struct sock *sk, struct sk_buff *skb) in gue_udp_recv() argument
114 if (!pskb_may_pull(skb, len)) in gue_udp_recv()
117 guehdr = (struct guehdr *)&udp_hdr(skb)[1]; in gue_udp_recv()
122 if (!pskb_may_pull(skb, len)) in gue_udp_recv()
126 guehdr = (struct guehdr *)&udp_hdr(skb)[1]; in gue_udp_recv()
135 ip_hdr(skb)->tot_len = htons(ntohs(ip_hdr(skb)->tot_len) - len); in gue_udp_recv()
140 skb_postpull_rcsum(skb, udp_hdr(skb), len); in gue_udp_recv()
150 guehdr = gue_remcsum(skb, guehdr, data + doffset, in gue_udp_recv()
164 return gue_control_message(skb, guehdr); in gue_udp_recv()
166 __skb_pull(skb, sizeof(struct udphdr) + hdrlen); in gue_udp_recv()
167 skb_reset_transport_header(skb); in gue_udp_recv()
172 kfree_skb(skb); in gue_udp_recv()
177 struct sk_buff *skb, in fou_gro_receive() argument
182 u8 proto = NAPI_GRO_CB(skb)->proto; in fou_gro_receive()
186 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in fou_gro_receive()
191 pp = ops->callbacks.gro_receive(head, skb); in fou_gro_receive()
199 static int fou_gro_complete(struct sk_buff *skb, int nhoff, in fou_gro_complete() argument
203 u8 proto = NAPI_GRO_CB(skb)->proto; in fou_gro_complete()
207 udp_tunnel_gro_complete(skb, nhoff); in fou_gro_complete()
210 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in fou_gro_complete()
215 err = ops->callbacks.gro_complete(skb, nhoff); in fou_gro_complete()
223 static struct guehdr *gue_gro_remcsum(struct sk_buff *skb, unsigned int off, in gue_gro_remcsum() argument
233 if (skb->remcsum_offload) in gue_gro_remcsum()
236 if (!NAPI_GRO_CB(skb)->csum_valid) in gue_gro_remcsum()
240 if (skb_gro_header_hard(skb, off + plen)) { in gue_gro_remcsum()
241 guehdr = skb_gro_header_slow(skb, off + plen, off); in gue_gro_remcsum()
246 skb_gro_remcsum_process(skb, (void *)guehdr + hdrlen, in gue_gro_remcsum()
249 skb->remcsum_offload = 1; in gue_gro_remcsum()
255 struct sk_buff *skb, in gue_gro_receive() argument
272 off = skb_gro_offset(skb); in gue_gro_receive()
275 guehdr = skb_gro_header_fast(skb, off); in gue_gro_receive()
276 if (skb_gro_header_hard(skb, len)) { in gue_gro_receive()
277 guehdr = skb_gro_header_slow(skb, len, off); in gue_gro_receive()
285 if (skb_gro_header_hard(skb, len)) { in gue_gro_receive()
286 guehdr = skb_gro_header_slow(skb, len, off); in gue_gro_receive()
300 skb_gro_postpull_rcsum(skb, guehdr, hdrlen); in gue_gro_receive()
310 guehdr = gue_gro_remcsum(skb, off, guehdr, in gue_gro_receive()
324 skb_gro_pull(skb, hdrlen); in gue_gro_receive()
353 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in gue_gro_receive()
358 pp = ops->callbacks.gro_receive(head, skb); in gue_gro_receive()
363 NAPI_GRO_CB(skb)->flush |= flush; in gue_gro_receive()
364 skb_gro_remcsum_cleanup(skb, &grc); in gue_gro_receive()
369 static int gue_gro_complete(struct sk_buff *skb, int nhoff, in gue_gro_complete() argument
373 struct guehdr *guehdr = (struct guehdr *)(skb->data + nhoff); in gue_gro_complete()
384 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in gue_gro_complete()
389 err = ops->callbacks.gro_complete(skb, nhoff + guehlen); in gue_gro_complete()
598 static int fou_nl_cmd_add_port(struct sk_buff *skb, struct genl_info *info) in fou_nl_cmd_add_port() argument
611 static int fou_nl_cmd_rm_port(struct sk_buff *skb, struct genl_info *info) in fou_nl_cmd_rm_port() argument
639 u32 flags, struct sk_buff *skb, u8 cmd) in fou_dump_info() argument
643 hdr = genlmsg_put(skb, portid, seq, &fou_nl_family, flags, cmd); in fou_dump_info()
647 if (fou_fill_info(fou, skb) < 0) in fou_dump_info()
650 genlmsg_end(skb, hdr); in fou_dump_info()
654 genlmsg_cancel(skb, hdr); in fou_dump_info()
658 static int fou_nl_cmd_get_port(struct sk_buff *skb, struct genl_info *info) in fou_nl_cmd_get_port() argument
700 static int fou_nl_dump(struct sk_buff *skb, struct netlink_callback *cb) in fou_nl_dump() argument
702 struct net *net = sock_net(skb->sk); in fou_nl_dump()
711 ret = fou_dump_info(fout, NETLINK_CB(cb->skb).portid, in fou_nl_dump()
713 skb, FOU_CMD_GET); in fou_nl_dump()
720 return skb->len; in fou_nl_dump()
768 static void fou_build_udp(struct sk_buff *skb, struct ip_tunnel_encap *e, in fou_build_udp() argument
773 skb_push(skb, sizeof(struct udphdr)); in fou_build_udp()
774 skb_reset_transport_header(skb); in fou_build_udp()
776 uh = udp_hdr(skb); in fou_build_udp()
780 uh->len = htons(skb->len); in fou_build_udp()
782 udp_set_csum(!(e->flags & TUNNEL_ENCAP_FLAG_CSUM), skb, in fou_build_udp()
783 fl4->saddr, fl4->daddr, skb->len); in fou_build_udp()
788 int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e, in fou_build_header() argument
795 skb = iptunnel_handle_offloads(skb, csum, type); in fou_build_header()
797 if (IS_ERR(skb)) in fou_build_header()
798 return PTR_ERR(skb); in fou_build_header()
800 sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev), in fou_build_header()
801 skb, 0, 0, false); in fou_build_header()
802 fou_build_udp(skb, e, fl4, protocol, sport); in fou_build_header()
808 int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e, in gue_build_header() argument
820 skb->ip_summed == CHECKSUM_PARTIAL) { in gue_build_header()
829 skb = iptunnel_handle_offloads(skb, csum, type); in gue_build_header()
831 if (IS_ERR(skb)) in gue_build_header()
832 return PTR_ERR(skb); in gue_build_header()
835 sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev), in gue_build_header()
836 skb, 0, 0, false); in gue_build_header()
840 skb_push(skb, hdrlen); in gue_build_header()
842 guehdr = (struct guehdr *)skb->data; in gue_build_header()
860 u16 csum_start = skb_checksum_start_offset(skb); in gue_build_header()
868 pd[1] = htons(csum_start + skb->csum_offset); in gue_build_header()
870 if (!skb_is_gso(skb)) { in gue_build_header()
871 skb->ip_summed = CHECKSUM_NONE; in gue_build_header()
872 skb->encapsulation = 0; in gue_build_header()
881 fou_build_udp(skb, e, fl4, protocol, sport); in gue_build_header()