Re: [PATCH v2 1/7] netfilter: ipset: Support comments for ipset entries in the core.

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

 



On Fri, 20 Sep 2013, Jozsef Kadlecsik wrote:

> On Fri, 20 Sep 2013, Oliver wrote:
> 
> > From: Oliver Smith <oliver@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
> > 
> > This adds the core support for having comments on ipset entries.
> > 
> > The comments are stored as standard null-terminated strings in
> > dynamically allocated memory after being passed to the kernel. As a
> > result of this, code has been added to the generic destroy function to
> > iterate all extensions and call that extension's destroy task if the set
> > has that extension activated, and if such a task is defined.
> > 
> > Signed-off-by: Oliver Smith <oliver@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
> > ---
> >  kernel/include/linux/netfilter/ipset/ip_set.h      | 32 ++++++++---
> >  .../include/linux/netfilter/ipset/ip_set_comment.h | 65 ++++++++++++++++++++++
> >  kernel/include/uapi/linux/netfilter/ipset/ip_set.h |  4 ++
> >  kernel/net/netfilter/ipset/ip_set_core.c           | 14 +++++
> >  4 files changed, 107 insertions(+), 8 deletions(-)
> >  create mode 100644 kernel/include/linux/netfilter/ipset/ip_set_comment.h
> > 
> > diff --git a/kernel/include/linux/netfilter/ipset/ip_set.h b/kernel/include/linux/netfilter/ipset/ip_set.h
> > index c687abb..aaa166b 100644
> > --- a/kernel/include/linux/netfilter/ipset/ip_set.h
> > +++ b/kernel/include/linux/netfilter/ipset/ip_set.h
> > @@ -54,6 +54,8 @@ enum ip_set_extension {
> >  	IPSET_EXT_TIMEOUT = (1 << IPSET_EXT_BIT_TIMEOUT),
> >  	IPSET_EXT_BIT_COUNTER = 1,
> >  	IPSET_EXT_COUNTER = (1 << IPSET_EXT_BIT_COUNTER),
> > +	IPSET_EXT_BIT_COMMENT = 2,
> > +	IPSET_EXT_COMMENT = (1 << IPSET_EXT_BIT_COMMENT),
> >  	/* Mark set with an extension which needs to call destroy */
> >  	IPSET_EXT_BIT_DESTROY = 7,
> >  	IPSET_EXT_DESTROY = (1 << IPSET_EXT_BIT_DESTROY),
> > @@ -61,11 +63,13 @@ enum ip_set_extension {
> >  
> >  #define SET_WITH_TIMEOUT(s)	((s)->extensions & IPSET_EXT_TIMEOUT)
> >  #define SET_WITH_COUNTER(s)	((s)->extensions & IPSET_EXT_COUNTER)
> > +#define SET_WITH_COMMENT(s)	((s)->extensions & IPSET_EXT_COMMENT)
> >  
> >  /* Extension id, in size order */
> >  enum ip_set_ext_id {
> >  	IPSET_EXT_ID_COUNTER = 0,
> >  	IPSET_EXT_ID_TIMEOUT,
> > +	IPSET_EXT_ID_COMMENT,
> >  	IPSET_EXT_ID_MAX,
> >  };
> >  
> > @@ -86,6 +90,7 @@ struct ip_set_ext {
> >  	u64 packets;
> >  	u64 bytes;
> >  	u32 timeout;
> > +	char *comment;
> >  };
> >  
> >  struct ip_set_counter {
> > @@ -93,20 +98,19 @@ struct ip_set_counter {
> >  	atomic64_t packets;
> >  };
> >  
> > -struct ip_set;
> > +struct ip_set_comment {
> > +	char *str;
> > +};
> >  
> > -static inline void
> > -ip_set_ext_destroy(struct ip_set *set, void *data)
> > -{
> > -	/* Check that the extension is enabled for the set and
> > -	 * call it's destroy function for its extension part in data.
> > -	 */
> > -}
> > +struct ip_set;
> >  
> >  #define ext_timeout(e, s)	\
> >  (unsigned long *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_TIMEOUT])
> >  #define ext_counter(e, s)	\
> >  (struct ip_set_counter *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_COUNTER])
> > +#define ext_comment(e, s)	\
> > +(struct ip_set_comment *)(((void *)(e)) + (s)->offset[IPSET_EXT_ID_COMMENT])
> > +
> >  
> >  typedef int (*ipset_adtfn)(struct ip_set *set, void *value,
> >  			   const struct ip_set_ext *ext,
> > @@ -224,6 +228,17 @@ struct ip_set {
> >  };
> >  
> >  static inline void
> > +ip_set_ext_destroy(struct ip_set *set, void *data)
> > +{
> > +	/* Check that the extension is enabled for the set and
> > +	 * call it's destroy function for its extension part in data.
> > +	 */
> > +	if (SET_WITH_COMMENT(set))
> > +		ip_set_extensions[IPSET_EXT_ID_COMMENT].destroy(
> > +			ext_comment(data, set));
> > +}
> > +
> > +static inline void
> >  ip_set_add_bytes(u64 bytes, struct ip_set_counter *counter)
> >  {
> >  	atomic64_add((long long)bytes, &(counter)->bytes);
> > @@ -426,6 +441,7 @@ bitmap_bytes(u32 a, u32 b)
> >  }
> >  
> >  #include <linux/netfilter/ipset/ip_set_timeout.h>
> > +#include <linux/netfilter/ipset/ip_set_comment.h>
> 
> You should have received an error at compiling: 
> IP_SET_MAX_COMMENT_SIZE is defined both in 
> uapi/linux/netfilter/ipset/ip_set.h and 
> linux/netfilter/ipset/ip_set_comment.h.

The double definition confused me: in ip_set_comment.h it is 
IP_SET_MAX_COMMENT_SIZE, in ip_set.h it is IPSET_MAX_COMMENT_SIZE. Keep 
the latter only.

Best regards,
Jozsef
-
E-mail  : kadlec@xxxxxxxxxxxxxxxxx, kadlecsik.jozsef@xxxxxxxxxxxxx
PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address : Wigner Research Centre for Physics, Hungarian Academy of Sciences
          H-1525 Budapest 114, POB. 49, Hungary
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




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

  Powered by Linux