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
86 if (skb->remcsum_offload) in gue_remcsum()
89 if (!pskb_may_pull(skb, plen)) in gue_remcsum()
91 guehdr = (struct guehdr *)&udp_hdr(skb)[1]; in gue_remcsum()
93 skb_remcsum_process(skb, (void *)guehdr + hdrlen, in gue_remcsum()
99 static int gue_control_message(struct sk_buff *skb, struct guehdr *guehdr) in gue_control_message() argument
102 kfree_skb(skb); in gue_control_message()
106 static int gue_udp_recv(struct sock *sk, struct sk_buff *skb) in gue_udp_recv() argument
118 if (!pskb_may_pull(skb, len)) in gue_udp_recv()
121 guehdr = (struct guehdr *)&udp_hdr(skb)[1]; in gue_udp_recv()
126 if (!pskb_may_pull(skb, len)) in gue_udp_recv()
130 guehdr = (struct guehdr *)&udp_hdr(skb)[1]; in gue_udp_recv()
139 ip_hdr(skb)->tot_len = htons(ntohs(ip_hdr(skb)->tot_len) - len); in gue_udp_recv()
144 skb_postpull_rcsum(skb, udp_hdr(skb), len); in gue_udp_recv()
154 guehdr = gue_remcsum(skb, guehdr, data + doffset, in gue_udp_recv()
168 return gue_control_message(skb, guehdr); in gue_udp_recv()
170 __skb_pull(skb, sizeof(struct udphdr) + hdrlen); in gue_udp_recv()
171 skb_reset_transport_header(skb); in gue_udp_recv()
176 kfree_skb(skb); in gue_udp_recv()
181 struct sk_buff *skb, in fou_gro_receive() argument
186 u8 proto = NAPI_GRO_CB(skb)->proto; in fou_gro_receive()
190 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in fou_gro_receive()
195 pp = ops->callbacks.gro_receive(head, skb); in fou_gro_receive()
203 static int fou_gro_complete(struct sk_buff *skb, int nhoff, in fou_gro_complete() argument
207 u8 proto = NAPI_GRO_CB(skb)->proto; in fou_gro_complete()
211 udp_tunnel_gro_complete(skb, nhoff); in fou_gro_complete()
214 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in fou_gro_complete()
219 err = ops->callbacks.gro_complete(skb, nhoff); in fou_gro_complete()
227 static struct guehdr *gue_gro_remcsum(struct sk_buff *skb, unsigned int off, in gue_gro_remcsum() argument
236 if (skb->remcsum_offload) in gue_gro_remcsum()
239 if (!NAPI_GRO_CB(skb)->csum_valid) in gue_gro_remcsum()
242 guehdr = skb_gro_remcsum_process(skb, (void *)guehdr, off, hdrlen, in gue_gro_remcsum()
245 skb->remcsum_offload = 1; in gue_gro_remcsum()
251 struct sk_buff *skb, in gue_gro_receive() argument
268 off = skb_gro_offset(skb); in gue_gro_receive()
271 guehdr = skb_gro_header_fast(skb, off); in gue_gro_receive()
272 if (skb_gro_header_hard(skb, len)) { in gue_gro_receive()
273 guehdr = skb_gro_header_slow(skb, len, off); in gue_gro_receive()
281 if (skb_gro_header_hard(skb, len)) { in gue_gro_receive()
282 guehdr = skb_gro_header_slow(skb, len, off); in gue_gro_receive()
296 skb_gro_postpull_rcsum(skb, guehdr, hdrlen); in gue_gro_receive()
306 guehdr = gue_gro_remcsum(skb, off, guehdr, in gue_gro_receive()
320 skb_gro_pull(skb, hdrlen); in gue_gro_receive()
349 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in gue_gro_receive()
354 pp = ops->callbacks.gro_receive(head, skb); in gue_gro_receive()
359 NAPI_GRO_CB(skb)->flush |= flush; in gue_gro_receive()
360 skb_gro_remcsum_cleanup(skb, &grc); in gue_gro_receive()
365 static int gue_gro_complete(struct sk_buff *skb, int nhoff, in gue_gro_complete() argument
369 struct guehdr *guehdr = (struct guehdr *)(skb->data + nhoff); in gue_gro_complete()
380 offloads = NAPI_GRO_CB(skb)->is_ipv6 ? inet6_offloads : inet_offloads; in gue_gro_complete()
385 err = ops->callbacks.gro_complete(skb, nhoff + guehlen); in gue_gro_complete()
594 static int fou_nl_cmd_add_port(struct sk_buff *skb, struct genl_info *info) in fou_nl_cmd_add_port() argument
607 static int fou_nl_cmd_rm_port(struct sk_buff *skb, struct genl_info *info) in fou_nl_cmd_rm_port() argument
635 u32 flags, struct sk_buff *skb, u8 cmd) in fou_dump_info() argument
639 hdr = genlmsg_put(skb, portid, seq, &fou_nl_family, flags, cmd); in fou_dump_info()
643 if (fou_fill_info(fou, skb) < 0) in fou_dump_info()
646 genlmsg_end(skb, hdr); in fou_dump_info()
650 genlmsg_cancel(skb, hdr); in fou_dump_info()
654 static int fou_nl_cmd_get_port(struct sk_buff *skb, struct genl_info *info) in fou_nl_cmd_get_port() argument
696 static int fou_nl_dump(struct sk_buff *skb, struct netlink_callback *cb) in fou_nl_dump() argument
698 struct net *net = sock_net(skb->sk); in fou_nl_dump()
707 ret = fou_dump_info(fout, NETLINK_CB(cb->skb).portid, in fou_nl_dump()
709 skb, FOU_CMD_GET); in fou_nl_dump()
716 return skb->len; in fou_nl_dump()
764 static void fou_build_udp(struct sk_buff *skb, struct ip_tunnel_encap *e, in fou_build_udp() argument
769 skb_push(skb, sizeof(struct udphdr)); in fou_build_udp()
770 skb_reset_transport_header(skb); in fou_build_udp()
772 uh = udp_hdr(skb); in fou_build_udp()
776 uh->len = htons(skb->len); in fou_build_udp()
778 udp_set_csum(!(e->flags & TUNNEL_ENCAP_FLAG_CSUM), skb, in fou_build_udp()
779 fl4->saddr, fl4->daddr, skb->len); in fou_build_udp()
784 int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e, in fou_build_header() argument
791 skb = iptunnel_handle_offloads(skb, csum, type); in fou_build_header()
793 if (IS_ERR(skb)) in fou_build_header()
794 return PTR_ERR(skb); in fou_build_header()
796 sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev), in fou_build_header()
797 skb, 0, 0, false); in fou_build_header()
798 fou_build_udp(skb, e, fl4, protocol, sport); in fou_build_header()
804 int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e, in gue_build_header() argument
816 skb->ip_summed == CHECKSUM_PARTIAL) { in gue_build_header()
825 skb = iptunnel_handle_offloads(skb, csum, type); in gue_build_header()
827 if (IS_ERR(skb)) in gue_build_header()
828 return PTR_ERR(skb); in gue_build_header()
831 sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev), in gue_build_header()
832 skb, 0, 0, false); in gue_build_header()
836 skb_push(skb, hdrlen); in gue_build_header()
838 guehdr = (struct guehdr *)skb->data; in gue_build_header()
856 u16 csum_start = skb_checksum_start_offset(skb); in gue_build_header()
864 pd[1] = htons(csum_start + skb->csum_offset); in gue_build_header()
866 if (!skb_is_gso(skb)) { in gue_build_header()
867 skb->ip_summed = CHECKSUM_NONE; in gue_build_header()
868 skb->encapsulation = 0; in gue_build_header()
877 fou_build_udp(skb, e, fl4, protocol, sport); in gue_build_header()