Re: [PATCH nf-next 2/3] netfilter: add struct nf_nat_hook and use it

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Pablo,

I love your patch! Yet something to improve:

[auto build test ERROR on nf-next/master]

url:    https://github.com/0day-ci/linux/commits/Pablo-Neira-Ayuso/netfilter-add-struct-nf_ct_hook-and-use-it/20180515-034151
base:   https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git master
config: arm-multi_v5_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=arm 

All errors (new ones prefixed by >>):

   In file included from include/net/netfilter/nf_conntrack_tuple.h:14:0,
                    from include/linux/netfilter/nf_conntrack_proto_gre.h:14,
                    from include/net/netfilter/nf_conntrack.h:25,
                    from include/net/netfilter/nf_nat_core.h:5,
                    from net/xfrm/xfrm_policy.c:35:
   include/linux/netfilter/x_tables.h: In function 'xt_net':
>> include/linux/netfilter/x_tables.h:46:19: error: dereferencing pointer to incomplete type 'const struct nf_hook_state'
     return par->state->net;
                      ^~
   In file included from include/net/netfilter/nf_conntrack_tuple.h:14:0,
                    from include/linux/netfilter/nf_conntrack_proto_gre.h:14,
                    from include/net/netfilter/nf_conntrack.h:25,
                    from include/net/netfilter/nf_nat_core.h:5,
                    from net/xfrm/xfrm_policy.c:35:
   include/linux/netfilter/x_tables.h: At top level:
>> include/linux/netfilter/x_tables.h:450:64: error: unknown type name 'nf_hookfn'
    struct nf_hook_ops *xt_hook_ops_alloc(const struct xt_table *, nf_hookfn *);
                                                                   ^~~~~~~~~
   In file included from include/linux/netfilter/nf_conntrack_proto_gre.h:14:0,
                    from include/net/netfilter/nf_conntrack.h:25,
                    from include/net/netfilter/nf_nat_core.h:5,
                    from net/xfrm/xfrm_policy.c:35:
   include/net/netfilter/nf_conntrack_tuple.h: In function '__nf_ct_tuple_src_equal':
>> include/net/netfilter/nf_conntrack_tuple.h:127:10: error: implicit declaration of function 'nf_inet_addr_cmp'; did you mean 'inet_addr_type'? [-Werror=implicit-function-declaration]
     return (nf_inet_addr_cmp(&t1->src.u3, &t2->src.u3) &&
             ^~~~~~~~~~~~~~~~
             inet_addr_type
   In file included from include/net/netfilter/nf_nat_core.h:5:0,
                    from net/xfrm/xfrm_policy.c:35:
   include/net/netfilter/nf_conntrack.h: At top level:
>> include/net/netfilter/nf_conntrack.h:59:22: error: field 'ct_general' has incomplete type
     struct nf_conntrack ct_general;
                         ^~~~~~~~~~
   include/net/netfilter/nf_conntrack.h: In function 'nf_ct_get':
>> include/net/netfilter/nf_conntrack.h:148:15: error: 'const struct sk_buff' has no member named '_nfct'
     *ctinfo = skb->_nfct & NFCT_INFOMASK;
                  ^~
   include/net/netfilter/nf_conntrack.h:150:31: error: 'const struct sk_buff' has no member named '_nfct'
     return (struct nf_conn *)(skb->_nfct & NFCT_PTRMASK);
                                  ^~
   include/net/netfilter/nf_conntrack.h: In function 'nf_ct_put':
>> include/net/netfilter/nf_conntrack.h:157:2: error: implicit declaration of function 'nf_conntrack_put'; did you mean 'nf_ct_put'? [-Werror=implicit-function-declaration]
     nf_conntrack_put(&ct->ct_general);
     ^~~~~~~~~~~~~~~~
     nf_ct_put
   include/net/netfilter/nf_conntrack.h: In function 'nf_ct_set':
>> include/net/netfilter/nf_conntrack.h:316:5: error: 'struct sk_buff' has no member named '_nfct'
     skb->_nfct = (unsigned long)ct | info;
        ^~
   cc1: some warnings being treated as errors

vim +148 include/net/netfilter/nf_conntrack.h

f8eb24a89 Patrick McHardy        2006-11-29   49  
ea781f197 Eric Dumazet           2009-03-25   50  struct nf_conn {
f330a7fdb Florian Westphal       2016-08-25   51  	/* Usage count in here is 1 for hash table, 1 per skb,
b476b72a0 Jesper Dangaard Brouer 2014-03-03   52  	 * plus 1 for any connection(s) we are `master' for
b476b72a0 Jesper Dangaard Brouer 2014-03-03   53  	 *
a9e419dc7 Florian Westphal       2017-01-23   54  	 * Hint, SKB address this struct and refcnt via skb->_nfct and
b476b72a0 Jesper Dangaard Brouer 2014-03-03   55  	 * helpers nf_conntrack_get() and nf_conntrack_put().
b476b72a0 Jesper Dangaard Brouer 2014-03-03   56  	 * Helper nf_ct_put() equals nf_conntrack_put() by dec refcnt,
b476b72a0 Jesper Dangaard Brouer 2014-03-03   57  	 * beware nf_ct_get() is different and don't inc refcnt.
b476b72a0 Jesper Dangaard Brouer 2014-03-03   58  	 */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  @59  	struct nf_conntrack ct_general;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   60  
440f0d588 Patrick McHardy        2009-06-10   61  	spinlock_t	lock;
b7779d06f Jesper Dangaard Brouer 2014-03-03   62  	u16		cpu;
440f0d588 Patrick McHardy        2009-06-10   63  
6c8dee984 Florian Westphal       2016-06-11   64  #ifdef CONFIG_NF_CONNTRACK_ZONES
6c8dee984 Florian Westphal       2016-06-11   65  	struct nf_conntrack_zone zone;
6c8dee984 Florian Westphal       2016-06-11   66  #endif
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   67  	/* XXX should I move this to the tail ? - Y.K */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   68  	/* These are my tuples; original and reply */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   69  	struct nf_conntrack_tuple_hash tuplehash[IP_CT_DIR_MAX];
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   70  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   71  	/* Have we seen traffic both ways yet? (bitset) */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   72  	unsigned long status;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   73  
f330a7fdb Florian Westphal       2016-08-25   74  	/* jiffies32 when this ct is considered dead */
f330a7fdb Florian Westphal       2016-08-25   75  	u32 timeout;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   76  
0c5c9fb55 Eric W. Biederman      2015-03-11   77  	possible_net_t ct_net;
0c5c9fb55 Eric W. Biederman      2015-03-11   78  
5173bc679 Florian Westphal       2016-11-23   79  #if IS_ENABLED(CONFIG_NF_NAT)
e1bf16877 Florian Westphal       2017-09-06   80  	struct hlist_node	nat_bysource;
5173bc679 Florian Westphal       2016-11-23   81  #endif
c41884ce0 Florian Westphal       2014-11-24   82  	/* all members below initialized via memset */
c41884ce0 Florian Westphal       2014-11-24   83  	u8 __nfct_init_offset[0];
c41884ce0 Florian Westphal       2014-11-24   84  
c41884ce0 Florian Westphal       2014-11-24   85  	/* If we were expected by an expectation, this will be it */
c41884ce0 Florian Westphal       2014-11-24   86  	struct nf_conn *master;
c41884ce0 Florian Westphal       2014-11-24   87  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   88  #if defined(CONFIG_NF_CONNTRACK_MARK)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   89  	u_int32_t mark;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   90  #endif
9fb9cbb10 Yasuyuki Kozakai       2005-11-09   91  
7c9728c39 James Morris           2006-06-09   92  #ifdef CONFIG_NF_CONNTRACK_SECMARK
7c9728c39 James Morris           2006-06-09   93  	u_int32_t secmark;
7c9728c39 James Morris           2006-06-09   94  #endif
7c9728c39 James Morris           2006-06-09   95  
ecfab2c9f Yasuyuki Kozakai       2007-07-07   96  	/* Extensions */
ecfab2c9f Yasuyuki Kozakai       2007-07-07   97  	struct nf_ct_ext *ext;
e5fc9e7a6 Changli Gao            2010-11-12   98  
e5fc9e7a6 Changli Gao            2010-11-12   99  	/* Storage reserved for other modules, must be the last member */
e5fc9e7a6 Changli Gao            2010-11-12  100  	union nf_conntrack_proto proto;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  101  };
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  102  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  103  static inline struct nf_conn *
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  104  nf_ct_tuplehash_to_ctrack(const struct nf_conntrack_tuple_hash *hash)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  105  {
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  106  	return container_of(hash, struct nf_conn,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  107  			    tuplehash[hash->tuple.dst.dir]);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  108  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  109  
5e8fbe2ac Patrick McHardy        2008-04-14  110  static inline u_int16_t nf_ct_l3num(const struct nf_conn *ct)
5e8fbe2ac Patrick McHardy        2008-04-14  111  {
5e8fbe2ac Patrick McHardy        2008-04-14  112  	return ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.l3num;
5e8fbe2ac Patrick McHardy        2008-04-14  113  }
5e8fbe2ac Patrick McHardy        2008-04-14  114  
5e8fbe2ac Patrick McHardy        2008-04-14  115  static inline u_int8_t nf_ct_protonum(const struct nf_conn *ct)
5e8fbe2ac Patrick McHardy        2008-04-14  116  {
5e8fbe2ac Patrick McHardy        2008-04-14  117  	return ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.protonum;
5e8fbe2ac Patrick McHardy        2008-04-14  118  }
5e8fbe2ac Patrick McHardy        2008-04-14  119  
f2f3e38c6 Pablo Neira Ayuso      2009-06-02  120  #define nf_ct_tuple(ct, dir) (&(ct)->tuplehash[dir].tuple)
f2f3e38c6 Pablo Neira Ayuso      2009-06-02  121  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  122  /* get master conntrack via master expectation */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  123  #define master_ct(conntr) (conntr->master)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  124  
5a1fb391d Alexey Dobriyan        2008-10-08  125  extern struct net init_net;
5a1fb391d Alexey Dobriyan        2008-10-08  126  
5a1fb391d Alexey Dobriyan        2008-10-08  127  static inline struct net *nf_ct_net(const struct nf_conn *ct)
5a1fb391d Alexey Dobriyan        2008-10-08  128  {
c2d9ba9bc Eric Dumazet           2010-06-01  129  	return read_pnet(&ct->ct_net);
5a1fb391d Alexey Dobriyan        2008-10-08  130  }
5a1fb391d Alexey Dobriyan        2008-10-08  131  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  132  /* Alter reply tuple (maybe alter helper). */
4e77be463 Joe Perches            2013-09-23  133  void nf_conntrack_alter_reply(struct nf_conn *ct,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  134  			      const struct nf_conntrack_tuple *newreply);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  135  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  136  /* Is this tuple taken? (ignoring any belonging to the given
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  137     conntrack). */
4e77be463 Joe Perches            2013-09-23  138  int nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  139  			     const struct nf_conn *ignored_conntrack);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  140  
303223092 Florian Westphal       2017-01-23  141  #define NFCT_INFOMASK	7UL
a9e419dc7 Florian Westphal       2017-01-23  142  #define NFCT_PTRMASK	~(NFCT_INFOMASK)
303223092 Florian Westphal       2017-01-23  143  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  144  /* Return conntrack_info and tuple hash for given skb. */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  145  static inline struct nf_conn *
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  146  nf_ct_get(const struct sk_buff *skb, enum ip_conntrack_info *ctinfo)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  147  {
a9e419dc7 Florian Westphal       2017-01-23 @148  	*ctinfo = skb->_nfct & NFCT_INFOMASK;
a9e419dc7 Florian Westphal       2017-01-23  149  
a9e419dc7 Florian Westphal       2017-01-23 @150  	return (struct nf_conn *)(skb->_nfct & NFCT_PTRMASK);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  151  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  152  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  153  /* decrement reference count on a conntrack */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  154  static inline void nf_ct_put(struct nf_conn *ct)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  155  {
44d6e2f27 Varsha Rao             2017-08-30  156  	WARN_ON(!ct);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09 @157  	nf_conntrack_put(&ct->ct_general);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  158  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  159  
b9f78f9fc Pablo Neira Ayuso      2006-03-22  160  /* Protocol module loading */
4e77be463 Joe Perches            2013-09-23  161  int nf_ct_l3proto_try_module_get(unsigned short l3proto);
4e77be463 Joe Perches            2013-09-23  162  void nf_ct_l3proto_module_put(unsigned short l3proto);
b9f78f9fc Pablo Neira Ayuso      2006-03-22  163  
ecb2421b5 Florian Westphal       2016-11-15  164  /* load module; enable/disable conntrack in this namespace */
ecb2421b5 Florian Westphal       2016-11-15  165  int nf_ct_netns_get(struct net *net, u8 nfproto);
ecb2421b5 Florian Westphal       2016-11-15  166  void nf_ct_netns_put(struct net *net, u8 nfproto);
ecb2421b5 Florian Westphal       2016-11-15  167  
ea781f197 Eric Dumazet           2009-03-25  168  /*
ea781f197 Eric Dumazet           2009-03-25  169   * Allocate a hashtable of hlist_head (if nulls == 0),
ea781f197 Eric Dumazet           2009-03-25  170   * or hlist_nulls_head (if nulls == 1)
ea781f197 Eric Dumazet           2009-03-25  171   */
4e77be463 Joe Perches            2013-09-23  172  void *nf_ct_alloc_hashtable(unsigned int *sizep, int nulls);
ea781f197 Eric Dumazet           2009-03-25  173  
4e77be463 Joe Perches            2013-09-23  174  void nf_ct_free_hashtable(void *hash, unsigned int size);
ac565e5fc Patrick McHardy        2007-07-07  175  
4e77be463 Joe Perches            2013-09-23  176  int nf_conntrack_hash_check_insert(struct nf_conn *ct);
02982c27b Florian Westphal       2013-07-29  177  bool nf_ct_delete(struct nf_conn *ct, u32 pid, int report);
c1d10adb4 Pablo Neira Ayuso      2006-01-05  178  
4e77be463 Joe Perches            2013-09-23  179  bool nf_ct_get_tuplepr(const struct sk_buff *skb, unsigned int nhoff,
a31f1adc0 Eric W. Biederman      2015-09-18  180  		       u_int16_t l3num, struct net *net,
a31f1adc0 Eric W. Biederman      2015-09-18  181  		       struct nf_conntrack_tuple *tuple);
4e77be463 Joe Perches            2013-09-23  182  bool nf_ct_invert_tuplepr(struct nf_conntrack_tuple *inverse,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  183  			  const struct nf_conntrack_tuple *orig);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  184  
4e77be463 Joe Perches            2013-09-23  185  void __nf_ct_refresh_acct(struct nf_conn *ct, enum ip_conntrack_info ctinfo,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  186  			  const struct sk_buff *skb,
4e77be463 Joe Perches            2013-09-23  187  			  unsigned long extra_jiffies, int do_acct);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  188  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  189  /* Refresh conntrack for this many jiffies and do accounting */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  190  static inline void nf_ct_refresh_acct(struct nf_conn *ct,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  191  				      enum ip_conntrack_info ctinfo,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  192  				      const struct sk_buff *skb,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  193  				      unsigned long extra_jiffies)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  194  {
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  195  	__nf_ct_refresh_acct(ct, ctinfo, skb, extra_jiffies, 1);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  196  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  197  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  198  /* Refresh conntrack for this many jiffies */
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  199  static inline void nf_ct_refresh(struct nf_conn *ct,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  200  				 const struct sk_buff *skb,
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  201  				 unsigned long extra_jiffies)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  202  {
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  203  	__nf_ct_refresh_acct(ct, 0, skb, extra_jiffies, 0);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  204  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  205  
718d4ad98 Fabian Hugelshofer     2008-06-09  206  /* kill conntrack and do accounting */
ad66713f5 Florian Westphal       2016-08-25  207  bool nf_ct_kill_acct(struct nf_conn *ct, enum ip_conntrack_info ctinfo,
ad66713f5 Florian Westphal       2016-08-25  208  		     const struct sk_buff *skb);
718d4ad98 Fabian Hugelshofer     2008-06-09  209  
718d4ad98 Fabian Hugelshofer     2008-06-09  210  /* kill conntrack without accounting */
4c8894980 David S. Miller        2008-07-14  211  static inline bool nf_ct_kill(struct nf_conn *ct)
718d4ad98 Fabian Hugelshofer     2008-06-09  212  {
ad66713f5 Florian Westphal       2016-08-25  213  	return nf_ct_delete(ct, 0, 0);
718d4ad98 Fabian Hugelshofer     2008-06-09  214  }
51091764f Patrick McHardy        2008-06-09  215  
84657984c Florian Westphal       2017-07-26  216  /* Set all unconfirmed conntrack as dying */
84657984c Florian Westphal       2017-07-26  217  void nf_ct_unconfirmed_destroy(struct net *);
84657984c Florian Westphal       2017-07-26  218  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  219  /* Iterate over all conntracks: if iter returns true, it's deleted. */
9fd6452d6 Florian Westphal       2017-05-21  220  void nf_ct_iterate_cleanup_net(struct net *net,
c655bc689 Florian Westphal       2013-07-29  221  			       int (*iter)(struct nf_conn *i, void *data),
c655bc689 Florian Westphal       2013-07-29  222  			       void *data, u32 portid, int report);
308ac9143 Daniel Borkmann        2015-08-08  223  
2843fb699 Florian Westphal       2017-05-21  224  /* also set unconfirmed conntracks as dying. Only use in module exit path. */
2843fb699 Florian Westphal       2017-05-21  225  void nf_ct_iterate_destroy(int (*iter)(struct nf_conn *i, void *data),
2843fb699 Florian Westphal       2017-05-21  226  			   void *data);
2843fb699 Florian Westphal       2017-05-21  227  
308ac9143 Daniel Borkmann        2015-08-08  228  struct nf_conntrack_zone;
308ac9143 Daniel Borkmann        2015-08-08  229  
4e77be463 Joe Perches            2013-09-23  230  void nf_conntrack_free(struct nf_conn *ct);
308ac9143 Daniel Borkmann        2015-08-08  231  struct nf_conn *nf_conntrack_alloc(struct net *net,
308ac9143 Daniel Borkmann        2015-08-08  232  				   const struct nf_conntrack_zone *zone,
5a1fb391d Alexey Dobriyan        2008-10-08  233  				   const struct nf_conntrack_tuple *orig,
b891c5a83 Pablo Neira Ayuso      2008-07-08  234  				   const struct nf_conntrack_tuple *repl,
b891c5a83 Pablo Neira Ayuso      2008-07-08  235  				   gfp_t gfp);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  236  
b2a15a604 Patrick McHardy        2010-02-03  237  static inline int nf_ct_is_template(const struct nf_conn *ct)
b2a15a604 Patrick McHardy        2010-02-03  238  {
b2a15a604 Patrick McHardy        2010-02-03  239  	return test_bit(IPS_TEMPLATE_BIT, &ct->status);
b2a15a604 Patrick McHardy        2010-02-03  240  }
b2a15a604 Patrick McHardy        2010-02-03  241  
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  242  /* It's confirmed if it is, or has been in the hash table. */
d51ed8367 Florian Westphal       2016-07-08  243  static inline int nf_ct_is_confirmed(const struct nf_conn *ct)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  244  {
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  245  	return test_bit(IPS_CONFIRMED_BIT, &ct->status);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  246  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  247  
d51ed8367 Florian Westphal       2016-07-08  248  static inline int nf_ct_is_dying(const struct nf_conn *ct)
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  249  {
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  250  	return test_bit(IPS_DYING_BIT, &ct->status);
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  251  }
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  252  
42c1edd34 Julian Anastasov       2011-06-16  253  /* Packet is received from loopback */
42c1edd34 Julian Anastasov       2011-06-16  254  static inline bool nf_is_loopback_packet(const struct sk_buff *skb)
42c1edd34 Julian Anastasov       2011-06-16  255  {
42c1edd34 Julian Anastasov       2011-06-16  256  	return skb->dev && skb->skb_iif && skb->dev->flags & IFF_LOOPBACK;
42c1edd34 Julian Anastasov       2011-06-16  257  }
42c1edd34 Julian Anastasov       2011-06-16  258  
f330a7fdb Florian Westphal       2016-08-25  259  #define nfct_time_stamp ((u32)(jiffies))
f330a7fdb Florian Westphal       2016-08-25  260  
c8607e020 Florian Westphal       2016-07-06  261  /* jiffies until ct expires, 0 if already expired */
c8607e020 Florian Westphal       2016-07-06  262  static inline unsigned long nf_ct_expires(const struct nf_conn *ct)
c8607e020 Florian Westphal       2016-07-06  263  {
f330a7fdb Florian Westphal       2016-08-25  264  	s32 timeout = ct->timeout - nfct_time_stamp;
c8607e020 Florian Westphal       2016-07-06  265  
c8607e020 Florian Westphal       2016-07-06  266  	return timeout > 0 ? timeout : 0;
c8607e020 Florian Westphal       2016-07-06  267  }
c8607e020 Florian Westphal       2016-07-06  268  
f330a7fdb Florian Westphal       2016-08-25  269  static inline bool nf_ct_is_expired(const struct nf_conn *ct)
f330a7fdb Florian Westphal       2016-08-25  270  {
f330a7fdb Florian Westphal       2016-08-25  271  	return (__s32)(ct->timeout - nfct_time_stamp) <= 0;
f330a7fdb Florian Westphal       2016-08-25  272  }
f330a7fdb Florian Westphal       2016-08-25  273  
f330a7fdb Florian Westphal       2016-08-25  274  /* use after obtaining a reference count */
f330a7fdb Florian Westphal       2016-08-25  275  static inline bool nf_ct_should_gc(const struct nf_conn *ct)
f330a7fdb Florian Westphal       2016-08-25  276  {
f330a7fdb Florian Westphal       2016-08-25  277  	return nf_ct_is_expired(ct) && nf_ct_is_confirmed(ct) &&
f330a7fdb Florian Westphal       2016-08-25  278  	       !nf_ct_is_dying(ct);
f330a7fdb Florian Westphal       2016-08-25  279  }
f330a7fdb Florian Westphal       2016-08-25  280  
34641c6d0 Paul Gortmaker         2011-08-29  281  struct kernel_param;
34641c6d0 Paul Gortmaker         2011-08-29  282  
e4dca7b7a Kees Cook              2017-10-17  283  int nf_conntrack_set_hashsize(const char *val, const struct kernel_param *kp);
3183ab899 Florian Westphal       2016-06-22  284  int nf_conntrack_hash_resize(unsigned int hashsize);
92e47ba88 Liping Zhang           2016-08-13  285  
92e47ba88 Liping Zhang           2016-08-13  286  extern struct hlist_nulls_head *nf_conntrack_hash;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  287  extern unsigned int nf_conntrack_htable_size;
92e47ba88 Liping Zhang           2016-08-13  288  extern seqcount_t nf_conntrack_generation;
e478075c6 Hagen Paul Pfeifer     2009-02-20  289  extern unsigned int nf_conntrack_max;
9fb9cbb10 Yasuyuki Kozakai       2005-11-09  290  
92e47ba88 Liping Zhang           2016-08-13  291  /* must be called with rcu read lock held */
92e47ba88 Liping Zhang           2016-08-13  292  static inline void
92e47ba88 Liping Zhang           2016-08-13  293  nf_conntrack_get_ht(struct hlist_nulls_head **hash, unsigned int *hsize)
92e47ba88 Liping Zhang           2016-08-13  294  {
92e47ba88 Liping Zhang           2016-08-13  295  	struct hlist_nulls_head *hptr;
92e47ba88 Liping Zhang           2016-08-13  296  	unsigned int sequence, hsz;
92e47ba88 Liping Zhang           2016-08-13  297  
92e47ba88 Liping Zhang           2016-08-13  298  	do {
92e47ba88 Liping Zhang           2016-08-13  299  		sequence = read_seqcount_begin(&nf_conntrack_generation);
92e47ba88 Liping Zhang           2016-08-13  300  		hsz = nf_conntrack_htable_size;
92e47ba88 Liping Zhang           2016-08-13  301  		hptr = nf_conntrack_hash;
92e47ba88 Liping Zhang           2016-08-13  302  	} while (read_seqcount_retry(&nf_conntrack_generation, sequence));
92e47ba88 Liping Zhang           2016-08-13  303  
92e47ba88 Liping Zhang           2016-08-13  304  	*hash = hptr;
92e47ba88 Liping Zhang           2016-08-13  305  	*hsize = hsz;
92e47ba88 Liping Zhang           2016-08-13  306  }
92e47ba88 Liping Zhang           2016-08-13  307  
308ac9143 Daniel Borkmann        2015-08-08  308  struct nf_conn *nf_ct_tmpl_alloc(struct net *net,
308ac9143 Daniel Borkmann        2015-08-08  309  				 const struct nf_conntrack_zone *zone,
308ac9143 Daniel Borkmann        2015-08-08  310  				 gfp_t flags);
9cf94eab8 Daniel Borkmann        2015-08-31  311  void nf_ct_tmpl_free(struct nf_conn *tmpl);
e53376bef Pablo Neira Ayuso      2014-02-03  312  
c74454fad Florian Westphal       2017-01-23  313  static inline void
c74454fad Florian Westphal       2017-01-23  314  nf_ct_set(struct sk_buff *skb, struct nf_conn *ct, enum ip_conntrack_info info)
c74454fad Florian Westphal       2017-01-23  315  {
a9e419dc7 Florian Westphal       2017-01-23 @316  	skb->_nfct = (unsigned long)ct | info;
c74454fad Florian Westphal       2017-01-23  317  }
c74454fad Florian Westphal       2017-01-23  318  

:::::: The code at line 148 was first introduced by commit
:::::: a9e419dc7be6997409dca6d1b9daf3cc7046902f netfilter: merge ctinfo into nfct pointer storage area

:::::: TO: Florian Westphal <fw@xxxxxxxxx>
:::::: CC: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux