diff options
-rw-r--r-- | acinclude.m4 | 1 | ||||
-rw-r--r-- | datapath/conntrack.c | 6 | ||||
-rw-r--r-- | datapath/linux/compat/include/linux/skbuff.h | 11 |
3 files changed, 15 insertions, 3 deletions
diff --git a/acinclude.m4 b/acinclude.m4 index e8b64b570..f26bcc1db 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -604,6 +604,7 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [ OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_clear_hash_if_not_l4]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_postpush_rcsum]) OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [lco_csum]) + OVS_GREP_IFELSE([$KSRC/include/linux/skbuff.h], [skb_nfct]) OVS_GREP_IFELSE([$KSRC/include/linux/types.h], [bool], [OVS_DEFINE([HAVE_BOOL_TYPE])]) diff --git a/datapath/conntrack.c b/datapath/conntrack.c index 3c51ce6bc..4a1b1ba69 100644 --- a/datapath/conntrack.c +++ b/datapath/conntrack.c @@ -762,8 +762,8 @@ static int __ovs_ct_lookup(struct net *net, struct sw_flow_key *key, /* Associate skb with specified zone. */ if (tmpl) { - if (skb->nfct) - nf_conntrack_put(skb->nfct); + if (skb_nfct(skb)) + nf_conntrack_put(skb_nfct(skb)); nf_conntrack_get(&tmpl->ct_general); skb->nfct = &tmpl->ct_general; skb->nfctinfo = IP_CT_NEW; @@ -864,7 +864,7 @@ static int ovs_ct_lookup(struct net *net, struct sw_flow_key *key, if (err) return err; - ct = (struct nf_conn *)skb->nfct; + ct = (struct nf_conn *)skb_nfct(skb); if (ct) nf_ct_deliver_cached_events(ct); } diff --git a/datapath/linux/compat/include/linux/skbuff.h b/datapath/linux/compat/include/linux/skbuff.h index a2cbd780c..943d5f821 100644 --- a/datapath/linux/compat/include/linux/skbuff.h +++ b/datapath/linux/compat/include/linux/skbuff.h @@ -371,4 +371,15 @@ static inline __wsum lco_csum(struct sk_buff *skb) return csum_partial(l4_hdr, csum_start - l4_hdr, partial); } #endif + +#ifndef HAVE_SKB_NFCT +static inline struct nf_conntrack *skb_nfct(const struct sk_buff *skb) +{ +#if IS_ENABLED(CONFIG_NF_CONNTRACK) + return skb->nfct; +#else + return NULL; +#endif +} +#endif #endif |