Lines Matching refs:skb

53 static int vti_input(struct sk_buff *skb, int nexthdr, __be32 spi,  in vti_input()  argument
57 const struct iphdr *iph = ip_hdr(skb); in vti_input()
58 struct net *net = dev_net(skb->dev); in vti_input()
61 tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, TUNNEL_NO_KEY, in vti_input()
64 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) in vti_input()
67 XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4 = tunnel; in vti_input()
69 return xfrm_input(skb, nexthdr, spi, encap_type); in vti_input()
74 kfree_skb(skb); in vti_input()
78 static int vti_rcv(struct sk_buff *skb) in vti_rcv() argument
80 XFRM_SPI_SKB_CB(skb)->family = AF_INET; in vti_rcv()
81 XFRM_SPI_SKB_CB(skb)->daddroff = offsetof(struct iphdr, daddr); in vti_rcv()
83 return vti_input(skb, ip_hdr(skb)->protocol, 0, 0); in vti_rcv()
86 static int vti_rcv_cb(struct sk_buff *skb, int err) in vti_rcv_cb() argument
92 struct ip_tunnel *tunnel = XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4; in vti_rcv_cb()
93 u32 orig_mark = skb->mark; in vti_rcv_cb()
108 x = xfrm_input_state(skb); in vti_rcv_cb()
111 skb->mark = be32_to_cpu(tunnel->parms.i_key); in vti_rcv_cb()
112 ret = xfrm_policy_check(NULL, XFRM_POLICY_IN, skb, family); in vti_rcv_cb()
113 skb->mark = orig_mark; in vti_rcv_cb()
118 skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(skb->dev))); in vti_rcv_cb()
119 skb->dev = dev; in vti_rcv_cb()
125 tstats->rx_bytes += skb->len; in vti_rcv_cb()
152 static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev, in vti_xmit() argument
157 struct dst_entry *dst = skb_dst(skb); in vti_xmit()
191 dst_link_failure(skb); in vti_xmit()
196 skb_scrub_packet(skb, !net_eq(tunnel->net, dev_net(dev))); in vti_xmit()
197 skb_dst_set(skb, dst); in vti_xmit()
198 skb->dev = skb_dst(skb)->dev; in vti_xmit()
200 err = dst_output(skb); in vti_xmit()
202 err = skb->len; in vti_xmit()
207 dst_link_failure(skb); in vti_xmit()
210 kfree_skb(skb); in vti_xmit()
217 static netdev_tx_t vti_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) in vti_tunnel_xmit() argument
224 switch (skb->protocol) { in vti_tunnel_xmit()
226 xfrm_decode_session(skb, &fl, AF_INET); in vti_tunnel_xmit()
227 memset(IPCB(skb), 0, sizeof(*IPCB(skb))); in vti_tunnel_xmit()
230 xfrm_decode_session(skb, &fl, AF_INET6); in vti_tunnel_xmit()
231 memset(IP6CB(skb), 0, sizeof(*IP6CB(skb))); in vti_tunnel_xmit()
235 dev_kfree_skb(skb); in vti_tunnel_xmit()
242 return vti_xmit(skb, dev, &fl); in vti_tunnel_xmit()
245 static int vti4_err(struct sk_buff *skb, u32 info) in vti4_err() argument
254 struct net *net = dev_net(skb->dev); in vti4_err()
255 const struct iphdr *iph = (const struct iphdr *)skb->data; in vti4_err()
259 tunnel = ip_tunnel_lookup(itn, skb->dev->ifindex, TUNNEL_NO_KEY, in vti4_err()
268 esph = (struct ip_esp_hdr *)(skb->data+(iph->ihl<<2)); in vti4_err()
272 ah = (struct ip_auth_hdr *)(skb->data+(iph->ihl<<2)); in vti4_err()
276 ipch = (struct ip_comp_hdr *)(skb->data+(iph->ihl<<2)); in vti4_err()
283 switch (icmp_hdr(skb)->type) { in vti4_err()
285 if (icmp_hdr(skb)->code != ICMP_FRAG_NEEDED) in vti4_err()
298 if (icmp_hdr(skb)->type == ICMP_DEST_UNREACH) in vti4_err()
299 ipv4_update_pmtu(skb, net, info, 0, 0, protocol, 0); in vti4_err()
301 ipv4_redirect(skb, net, 0, 0, protocol, 0); in vti4_err()
506 static int vti_fill_info(struct sk_buff *skb, const struct net_device *dev) in vti_fill_info() argument
511 nla_put_u32(skb, IFLA_VTI_LINK, p->link); in vti_fill_info()
512 nla_put_be32(skb, IFLA_VTI_IKEY, p->i_key); in vti_fill_info()
513 nla_put_be32(skb, IFLA_VTI_OKEY, p->o_key); in vti_fill_info()
514 nla_put_in_addr(skb, IFLA_VTI_LOCAL, p->iph.saddr); in vti_fill_info()
515 nla_put_in_addr(skb, IFLA_VTI_REMOTE, p->iph.daddr); in vti_fill_info()