]>
git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - include/net/netfilter/nf_tables_ipv4.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _NF_TABLES_IPV4_H_
3 #define _NF_TABLES_IPV4_H_
5 #include <net/netfilter/nf_tables.h>
9 nft_set_pktinfo_ipv4(struct nft_pktinfo
*pkt
,
11 const struct nf_hook_state
*state
)
15 nft_set_pktinfo(pkt
, skb
, state
);
17 ip
= ip_hdr(pkt
->skb
);
18 pkt
->tprot_set
= true;
19 pkt
->tprot
= ip
->protocol
;
20 pkt
->xt
.thoff
= ip_hdrlen(pkt
->skb
);
21 pkt
->xt
.fragoff
= ntohs(ip
->frag_off
) & IP_OFFSET
;
25 __nft_set_pktinfo_ipv4_validate(struct nft_pktinfo
*pkt
,
27 const struct nf_hook_state
*state
)
29 struct iphdr
*iph
, _iph
;
32 iph
= skb_header_pointer(skb
, skb_network_offset(skb
), sizeof(*iph
),
37 if (iph
->ihl
< 5 || iph
->version
!= 4)
40 len
= ntohs(iph
->tot_len
);
47 pkt
->tprot_set
= true;
48 pkt
->tprot
= iph
->protocol
;
49 pkt
->xt
.thoff
= thoff
;
50 pkt
->xt
.fragoff
= ntohs(iph
->frag_off
) & IP_OFFSET
;
56 nft_set_pktinfo_ipv4_validate(struct nft_pktinfo
*pkt
,
58 const struct nf_hook_state
*state
)
60 nft_set_pktinfo(pkt
, skb
, state
);
61 if (__nft_set_pktinfo_ipv4_validate(pkt
, skb
, state
) < 0)
62 nft_set_pktinfo_proto_unspec(pkt
, skb
);
65 extern struct nft_af_info nft_af_ipv4
;