|
@@ -585,7 +585,6 @@ static inline bool skb_mstamp_after(const struct skb_mstamp *t1,
|
|
|
* @cloned: Head may be cloned (check refcnt to be sure)
|
|
|
* @ip_summed: Driver fed us an IP checksum
|
|
|
* @nohdr: Payload reference only, must not modify header
|
|
|
- * @nfctinfo: Relationship of this skb to the connection
|
|
|
* @pkt_type: Packet class
|
|
|
* @fclone: skbuff clone status
|
|
|
* @ipvs_property: skbuff is owned by ipvs
|
|
@@ -594,7 +593,7 @@ static inline bool skb_mstamp_after(const struct skb_mstamp *t1,
|
|
|
* @nf_trace: netfilter packet trace flag
|
|
|
* @protocol: Packet protocol from driver
|
|
|
* @destructor: Destruct function
|
|
|
- * @nfct: Associated connection, if any
|
|
|
+ * @_nfct: Associated connection, if any (with nfctinfo bits)
|
|
|
* @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
|
|
|
* @skb_iif: ifindex of device we arrived on
|
|
|
* @tc_index: Traffic control index
|
|
@@ -668,7 +667,7 @@ struct sk_buff {
|
|
|
struct sec_path *sp;
|
|
|
#endif
|
|
|
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
|
|
- struct nf_conntrack *nfct;
|
|
|
+ unsigned long _nfct;
|
|
|
#endif
|
|
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
|
|
struct nf_bridge_info *nf_bridge;
|
|
@@ -721,7 +720,6 @@ struct sk_buff {
|
|
|
__u8 pkt_type:3;
|
|
|
__u8 pfmemalloc:1;
|
|
|
__u8 ignore_df:1;
|
|
|
- __u8 nfctinfo:3;
|
|
|
|
|
|
__u8 nf_trace:1;
|
|
|
__u8 ip_summed:2;
|
|
@@ -836,6 +834,7 @@ static inline bool skb_pfmemalloc(const struct sk_buff *skb)
|
|
|
#define SKB_DST_NOREF 1UL
|
|
|
#define SKB_DST_PTRMASK ~(SKB_DST_NOREF)
|
|
|
|
|
|
+#define SKB_NFCT_PTRMASK ~(7UL)
|
|
|
/**
|
|
|
* skb_dst - returns skb dst_entry
|
|
|
* @skb: buffer
|
|
@@ -3556,7 +3555,7 @@ static inline void skb_remcsum_process(struct sk_buff *skb, void *ptr,
|
|
|
static inline struct nf_conntrack *skb_nfct(const struct sk_buff *skb)
|
|
|
{
|
|
|
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
|
|
- return skb->nfct;
|
|
|
+ return (void *)(skb->_nfct & SKB_NFCT_PTRMASK);
|
|
|
#else
|
|
|
return NULL;
|
|
|
#endif
|
|
@@ -3590,8 +3589,8 @@ static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge)
|
|
|
static inline void nf_reset(struct sk_buff *skb)
|
|
|
{
|
|
|
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
|
|
- nf_conntrack_put(skb->nfct);
|
|
|
- skb->nfct = NULL;
|
|
|
+ nf_conntrack_put(skb_nfct(skb));
|
|
|
+ skb->_nfct = 0;
|
|
|
#endif
|
|
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
|
|
nf_bridge_put(skb->nf_bridge);
|
|
@@ -3611,10 +3610,8 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
|
|
|
bool copy)
|
|
|
{
|
|
|
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
|
|
- dst->nfct = src->nfct;
|
|
|
- nf_conntrack_get(src->nfct);
|
|
|
- if (copy)
|
|
|
- dst->nfctinfo = src->nfctinfo;
|
|
|
+ dst->_nfct = src->_nfct;
|
|
|
+ nf_conntrack_get(skb_nfct(src));
|
|
|
#endif
|
|
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
|
|
dst->nf_bridge = src->nf_bridge;
|
|
@@ -3629,7 +3626,7 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
|
|
|
static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
|
|
|
{
|
|
|
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
|
|
- nf_conntrack_put(dst->nfct);
|
|
|
+ nf_conntrack_put(skb_nfct(dst));
|
|
|
#endif
|
|
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
|
|
nf_bridge_put(dst->nf_bridge);
|