Lines Matching refs:skb
20 int ip_route_me_harder(struct sk_buff *skb, unsigned int addr_type) in ip_route_me_harder() argument
22 struct net *net = dev_net(skb_dst(skb)->dev); in ip_route_me_harder()
23 const struct iphdr *iph = ip_hdr(skb); in ip_route_me_harder()
27 __u8 flags = skb->sk ? inet_sk_flowi_flags(skb->sk) : 0; in ip_route_me_harder()
43 fl4.flowi4_oif = skb->sk ? skb->sk->sk_bound_dev_if : 0; in ip_route_me_harder()
44 fl4.flowi4_mark = skb->mark; in ip_route_me_harder()
51 skb_dst_drop(skb); in ip_route_me_harder()
52 skb_dst_set(skb, &rt->dst); in ip_route_me_harder()
54 if (skb_dst(skb)->error) in ip_route_me_harder()
55 return skb_dst(skb)->error; in ip_route_me_harder()
58 if (!(IPCB(skb)->flags & IPSKB_XFRM_TRANSFORMED) && in ip_route_me_harder()
59 xfrm_decode_session(skb, flowi4_to_flowi(&fl4), AF_INET) == 0) { in ip_route_me_harder()
60 struct dst_entry *dst = skb_dst(skb); in ip_route_me_harder()
61 skb_dst_set(skb, NULL); in ip_route_me_harder()
62 dst = xfrm_lookup(net, dst, flowi4_to_flowi(&fl4), skb->sk, 0); in ip_route_me_harder()
65 skb_dst_set(skb, dst); in ip_route_me_harder()
70 hh_len = skb_dst(skb)->dev->hard_header_len; in ip_route_me_harder()
71 if (skb_headroom(skb) < hh_len && in ip_route_me_harder()
72 pskb_expand_head(skb, HH_DATA_ALIGN(hh_len - skb_headroom(skb)), in ip_route_me_harder()
92 static void nf_ip_saveroute(const struct sk_buff *skb, in nf_ip_saveroute() argument
98 const struct iphdr *iph = ip_hdr(skb); in nf_ip_saveroute()
103 rt_info->mark = skb->mark; in nf_ip_saveroute()
107 static int nf_ip_reroute(struct sk_buff *skb, in nf_ip_reroute() argument
113 const struct iphdr *iph = ip_hdr(skb); in nf_ip_reroute()
116 skb->mark == rt_info->mark && in nf_ip_reroute()
119 return ip_route_me_harder(skb, RTN_UNSPEC); in nf_ip_reroute()
124 __sum16 nf_ip_checksum(struct sk_buff *skb, unsigned int hook, in nf_ip_checksum() argument
127 const struct iphdr *iph = ip_hdr(skb); in nf_ip_checksum()
130 switch (skb->ip_summed) { in nf_ip_checksum()
134 if ((protocol == 0 && !csum_fold(skb->csum)) || in nf_ip_checksum()
136 skb->len - dataoff, protocol, in nf_ip_checksum()
137 skb->csum)) { in nf_ip_checksum()
138 skb->ip_summed = CHECKSUM_UNNECESSARY; in nf_ip_checksum()
144 skb->csum = 0; in nf_ip_checksum()
146 skb->csum = csum_tcpudp_nofold(iph->saddr, iph->daddr, in nf_ip_checksum()
147 skb->len - dataoff, in nf_ip_checksum()
149 csum = __skb_checksum_complete(skb); in nf_ip_checksum()
155 static __sum16 nf_ip_checksum_partial(struct sk_buff *skb, unsigned int hook, in nf_ip_checksum_partial() argument
159 const struct iphdr *iph = ip_hdr(skb); in nf_ip_checksum_partial()
162 switch (skb->ip_summed) { in nf_ip_checksum_partial()
164 if (len == skb->len - dataoff) in nf_ip_checksum_partial()
165 return nf_ip_checksum(skb, hook, dataoff, protocol); in nf_ip_checksum_partial()
168 skb->csum = csum_tcpudp_nofold(iph->saddr, iph->daddr, protocol, in nf_ip_checksum_partial()
169 skb->len - dataoff, 0); in nf_ip_checksum_partial()
170 skb->ip_summed = CHECKSUM_NONE; in nf_ip_checksum_partial()
171 return __skb_checksum_complete_head(skb, dataoff + len); in nf_ip_checksum_partial()