xfrm: move xfrm4_extract_header to common helper
The function only initializes the XFRM CB in the skb. After previous patch xfrm4_extract_header is only called from net/xfrm/xfrm_{input,output}.c. Because of IPV6=m linker errors the ipv6 equivalent (xfrm6_extract_header) was already placed in xfrm_inout.h because we can't call functions residing in a module from the core. So do the same for the ipv4 helper and place it next to the ipv6 one. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
Родитель
a269fbfc4e
Коммит
171916cbd5
|
@ -1562,7 +1562,6 @@ int pktgen_xfrm_outer_mode_output(struct xfrm_state *x, struct sk_buff *skb);
|
|||
#endif
|
||||
|
||||
void xfrm_local_error(struct sk_buff *skb, int mtu);
|
||||
int xfrm4_extract_header(struct sk_buff *skb);
|
||||
int xfrm4_extract_input(struct xfrm_state *x, struct sk_buff *skb);
|
||||
int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
|
||||
int encap_type);
|
||||
|
|
|
@ -8,28 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <net/ip.h>
|
||||
#include <net/xfrm.h>
|
||||
#include <linux/pfkeyv2.h>
|
||||
#include <linux/ipsec.h>
|
||||
#include <linux/netfilter_ipv4.h>
|
||||
#include <linux/export.h>
|
||||
|
||||
int xfrm4_extract_header(struct sk_buff *skb)
|
||||
{
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
|
||||
XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph);
|
||||
XFRM_MODE_SKB_CB(skb)->id = iph->id;
|
||||
XFRM_MODE_SKB_CB(skb)->frag_off = iph->frag_off;
|
||||
XFRM_MODE_SKB_CB(skb)->tos = iph->tos;
|
||||
XFRM_MODE_SKB_CB(skb)->ttl = iph->ttl;
|
||||
XFRM_MODE_SKB_CB(skb)->optlen = iph->ihl * 4 - sizeof(*iph);
|
||||
memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0,
|
||||
sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct xfrm_state_afinfo xfrm4_state_afinfo = {
|
||||
.family = AF_INET,
|
||||
|
|
|
@ -6,6 +6,20 @@
|
|||
#ifndef XFRM_INOUT_H
|
||||
#define XFRM_INOUT_H 1
|
||||
|
||||
static inline void xfrm4_extract_header(struct sk_buff *skb)
|
||||
{
|
||||
const struct iphdr *iph = ip_hdr(skb);
|
||||
|
||||
XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph);
|
||||
XFRM_MODE_SKB_CB(skb)->id = iph->id;
|
||||
XFRM_MODE_SKB_CB(skb)->frag_off = iph->frag_off;
|
||||
XFRM_MODE_SKB_CB(skb)->tos = iph->tos;
|
||||
XFRM_MODE_SKB_CB(skb)->ttl = iph->ttl;
|
||||
XFRM_MODE_SKB_CB(skb)->optlen = iph->ihl * 4 - sizeof(*iph);
|
||||
memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0,
|
||||
sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl));
|
||||
}
|
||||
|
||||
static inline void xfrm6_extract_header(struct sk_buff *skb)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
|
|
Загрузка…
Ссылка в новой задаче