Blame view
net/ipv4/xfrm4_state.c
2.36 KB
b24413180 License cleanup: ... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
1da177e4c Linux-2.6.12-rc2 |
2 3 4 5 6 7 8 9 |
/* * xfrm4_state.c * * Changes: * YOSHIFUJI Hideaki @USAGI * Split up af-specific portion * */ |
dd87147ee [IPSEC]: Add XFRM... |
10 |
#include <net/ip.h> |
1da177e4c Linux-2.6.12-rc2 |
11 12 13 |
#include <net/xfrm.h> #include <linux/pfkeyv2.h> #include <linux/ipsec.h> |
862b82c6f [IPSEC]: Merge mo... |
14 |
#include <linux/netfilter_ipv4.h> |
bc3b2d7fb net: Add export.h... |
15 |
#include <linux/export.h> |
1da177e4c Linux-2.6.12-rc2 |
16 |
|
dd87147ee [IPSEC]: Add XFRM... |
17 18 |
static int xfrm4_init_flags(struct xfrm_state *x) { |
974eda11c inet: make no_pmt... |
19 |
if (xs_net(x)->ipv4.sysctl_ip_no_pmtu_disc) |
dd87147ee [IPSEC]: Add XFRM... |
20 21 22 |
x->props.flags |= XFRM_STATE_NOPMTUDISC; return 0; } |
1da177e4c Linux-2.6.12-rc2 |
23 |
static void |
73e5ebb20 xfrm: Mark flowi ... |
24 |
__xfrm4_init_tempsel(struct xfrm_selector *sel, const struct flowi *fl) |
8444cf712 xfrm: Allow diffe... |
25 |
{ |
7e1dc7b6f net: Use flowi4 a... |
26 27 28 29 30 |
const struct flowi4 *fl4 = &fl->u.ip4; sel->daddr.a4 = fl4->daddr; sel->saddr.a4 = fl4->saddr; sel->dport = xfrm_flowi_dport(fl, &fl4->uli); |
8444cf712 xfrm: Allow diffe... |
31 |
sel->dport_mask = htons(0xffff); |
7e1dc7b6f net: Use flowi4 a... |
32 |
sel->sport = xfrm_flowi_sport(fl, &fl4->uli); |
8444cf712 xfrm: Allow diffe... |
33 34 35 36 |
sel->sport_mask = htons(0xffff); sel->family = AF_INET; sel->prefixlen_d = 32; sel->prefixlen_s = 32; |
7e1dc7b6f net: Use flowi4 a... |
37 38 |
sel->proto = fl4->flowi4_proto; sel->ifindex = fl4->flowi4_oif; |
8444cf712 xfrm: Allow diffe... |
39 40 41 |
} static void |
19bd62441 xfrm: Const'ify t... |
42 43 |
xfrm4_init_temprop(struct xfrm_state *x, const struct xfrm_tmpl *tmpl, const xfrm_address_t *daddr, const xfrm_address_t *saddr) |
1da177e4c Linux-2.6.12-rc2 |
44 |
{ |
1da177e4c Linux-2.6.12-rc2 |
45 46 47 48 49 50 51 52 53 54 |
x->id = tmpl->id; if (x->id.daddr.a4 == 0) x->id.daddr.a4 = daddr->a4; x->props.saddr = tmpl->saddr; if (x->props.saddr.a4 == 0) x->props.saddr.a4 = saddr->a4; x->props.mode = tmpl->mode; x->props.reqid = tmpl->reqid; x->props.family = AF_INET; } |
36cf9acf9 [IPSEC]: Separate... |
55 56 |
int xfrm4_extract_header(struct sk_buff *skb) { |
b71d1d426 inet: constify ip... |
57 |
const struct iphdr *iph = ip_hdr(skb); |
36cf9acf9 [IPSEC]: Separate... |
58 |
|
732c8bd59 [IPSEC]: Fix BEET... |
59 |
XFRM_MODE_SKB_CB(skb)->ihl = sizeof(*iph); |
36cf9acf9 [IPSEC]: Separate... |
60 61 62 63 |
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; |
732c8bd59 [IPSEC]: Fix BEET... |
64 |
XFRM_MODE_SKB_CB(skb)->optlen = iph->ihl * 4 - sizeof(*iph); |
36cf9acf9 [IPSEC]: Separate... |
65 66 67 68 69 |
memset(XFRM_MODE_SKB_CB(skb)->flow_lbl, 0, sizeof(XFRM_MODE_SKB_CB(skb)->flow_lbl)); return 0; } |
1da177e4c Linux-2.6.12-rc2 |
70 71 |
static struct xfrm_state_afinfo xfrm4_state_afinfo = { .family = AF_INET, |
36cf9acf9 [IPSEC]: Separate... |
72 |
.proto = IPPROTO_IPIP, |
227620e29 [IPSEC]: Separate... |
73 |
.eth_proto = htons(ETH_P_IP), |
17c2a42a2 [IPSEC]: Store af... |
74 |
.owner = THIS_MODULE, |
dd87147ee [IPSEC]: Add XFRM... |
75 |
.init_flags = xfrm4_init_flags, |
1da177e4c Linux-2.6.12-rc2 |
76 |
.init_tempsel = __xfrm4_init_tempsel, |
8444cf712 xfrm: Allow diffe... |
77 |
.init_temprop = xfrm4_init_temprop, |
cdca72652 [IPSEC]: exportin... |
78 |
.output = xfrm4_output, |
43a4dea4c xfrm: Assign the ... |
79 |
.output_finish = xfrm4_output_finish, |
227620e29 [IPSEC]: Separate... |
80 |
.extract_input = xfrm4_extract_input, |
36cf9acf9 [IPSEC]: Separate... |
81 |
.extract_output = xfrm4_extract_output, |
716062fd4 [IPSEC]: Merge mo... |
82 |
.transport_finish = xfrm4_transport_finish, |
628e341f3 xfrm: make local ... |
83 |
.local_error = xfrm4_local_error, |
1da177e4c Linux-2.6.12-rc2 |
84 85 86 87 88 89 |
}; void __init xfrm4_state_init(void) { xfrm_state_register_afinfo(&xfrm4_state_afinfo); } |