mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 12:10:38 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says: ==================== Netfilter updates for net-next The following patchset contains Netfilter updates for net-next: 1) Use array_size() in ebtables, from Gustavo A. R. Silva. 2) Attach IPS_ASSURED to internal UDP stream state, reported by Maciej Zenczykowski. 3) Add NFT_META_IFTYPE to match on the interface type either from ingress or egress. 4) Generalize pktinfo->tprot_set to flags field. 5) Allow to match on inner headers / payload data. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -21,13 +21,19 @@ struct module;
|
||||
|
||||
#define NFT_JUMP_STACK_SIZE 16
|
||||
|
||||
enum {
|
||||
NFT_PKTINFO_L4PROTO = (1 << 0),
|
||||
NFT_PKTINFO_INNER = (1 << 1),
|
||||
};
|
||||
|
||||
struct nft_pktinfo {
|
||||
struct sk_buff *skb;
|
||||
const struct nf_hook_state *state;
|
||||
bool tprot_set;
|
||||
u8 flags;
|
||||
u8 tprot;
|
||||
u16 fragoff;
|
||||
unsigned int thoff;
|
||||
unsigned int inneroff;
|
||||
};
|
||||
|
||||
static inline struct sock *nft_sk(const struct nft_pktinfo *pkt)
|
||||
@@ -75,7 +81,7 @@ static inline void nft_set_pktinfo(struct nft_pktinfo *pkt,
|
||||
|
||||
static inline void nft_set_pktinfo_unspec(struct nft_pktinfo *pkt)
|
||||
{
|
||||
pkt->tprot_set = false;
|
||||
pkt->flags = 0;
|
||||
pkt->tprot = 0;
|
||||
pkt->thoff = 0;
|
||||
pkt->fragoff = 0;
|
||||
|
||||
@@ -10,7 +10,7 @@ static inline void nft_set_pktinfo_ipv4(struct nft_pktinfo *pkt)
|
||||
struct iphdr *ip;
|
||||
|
||||
ip = ip_hdr(pkt->skb);
|
||||
pkt->tprot_set = true;
|
||||
pkt->flags = NFT_PKTINFO_L4PROTO;
|
||||
pkt->tprot = ip->protocol;
|
||||
pkt->thoff = ip_hdrlen(pkt->skb);
|
||||
pkt->fragoff = ntohs(ip->frag_off) & IP_OFFSET;
|
||||
@@ -36,7 +36,7 @@ static inline int __nft_set_pktinfo_ipv4_validate(struct nft_pktinfo *pkt)
|
||||
else if (len < thoff)
|
||||
return -1;
|
||||
|
||||
pkt->tprot_set = true;
|
||||
pkt->flags = NFT_PKTINFO_L4PROTO;
|
||||
pkt->tprot = iph->protocol;
|
||||
pkt->thoff = thoff;
|
||||
pkt->fragoff = ntohs(iph->frag_off) & IP_OFFSET;
|
||||
@@ -71,7 +71,7 @@ static inline int nft_set_pktinfo_ipv4_ingress(struct nft_pktinfo *pkt)
|
||||
goto inhdr_error;
|
||||
}
|
||||
|
||||
pkt->tprot_set = true;
|
||||
pkt->flags = NFT_PKTINFO_L4PROTO;
|
||||
pkt->tprot = iph->protocol;
|
||||
pkt->thoff = thoff;
|
||||
pkt->fragoff = ntohs(iph->frag_off) & IP_OFFSET;
|
||||
@@ -82,4 +82,5 @@ static inline int nft_set_pktinfo_ipv4_ingress(struct nft_pktinfo *pkt)
|
||||
__IP_INC_STATS(nft_net(pkt), IPSTATS_MIB_INHDRERRORS);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -18,7 +18,7 @@ static inline void nft_set_pktinfo_ipv6(struct nft_pktinfo *pkt)
|
||||
return;
|
||||
}
|
||||
|
||||
pkt->tprot_set = true;
|
||||
pkt->flags = NFT_PKTINFO_L4PROTO;
|
||||
pkt->tprot = protohdr;
|
||||
pkt->thoff = thoff;
|
||||
pkt->fragoff = frag_off;
|
||||
@@ -50,7 +50,7 @@ static inline int __nft_set_pktinfo_ipv6_validate(struct nft_pktinfo *pkt)
|
||||
if (protohdr < 0)
|
||||
return -1;
|
||||
|
||||
pkt->tprot_set = true;
|
||||
pkt->flags = NFT_PKTINFO_L4PROTO;
|
||||
pkt->tprot = protohdr;
|
||||
pkt->thoff = thoff;
|
||||
pkt->fragoff = frag_off;
|
||||
@@ -96,7 +96,7 @@ static inline int nft_set_pktinfo_ipv6_ingress(struct nft_pktinfo *pkt)
|
||||
if (protohdr < 0)
|
||||
goto inhdr_error;
|
||||
|
||||
pkt->tprot_set = true;
|
||||
pkt->flags = NFT_PKTINFO_L4PROTO;
|
||||
pkt->tprot = protohdr;
|
||||
pkt->thoff = thoff;
|
||||
pkt->fragoff = frag_off;
|
||||
|
||||
Reference in New Issue
Block a user