diff mbox series

[v2,2/2] ipset: merge uadd and udel functions

Message ID 20181229161822.5772-2-florent.fourcot@wifirst.fr
State Accepted
Delegated to: Pablo Neira
Headers show
Series [v2,1/2] ipset: remove useless memset() calls | expand

Commit Message

Florent Fourcot Dec. 29, 2018, 4:18 p.m. UTC
Both functions are using exactly the same code, except the command value
passed to call_ad function.

Signed-off-by: Florent Fourcot <florent.fourcot@wifirst.fr>
---
 net/netfilter/ipset/ip_set_core.c | 69 +++++++++------------------------------
 1 file changed, 16 insertions(+), 53 deletions(-)

Comments

Kadlecsik József Jan. 8, 2019, 7:56 p.m. UTC | #1
Hi,

On Sat, 29 Dec 2018, Florent Fourcot wrote:

> Both functions are using exactly the same code, except the command value
> passed to call_ad function.

Yes, it makes the code simpler. Thanks, patch is applied.

Best regards,
Jozsef
 
> Signed-off-by: Florent Fourcot <florent.fourcot@wifirst.fr>
> ---
>  net/netfilter/ipset/ip_set_core.c | 69 +++++++++------------------------------
>  1 file changed, 16 insertions(+), 53 deletions(-)
> 
> diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
> index c1513e590a27..041baf28088a 100644
> --- a/net/netfilter/ipset/ip_set_core.c
> +++ b/net/netfilter/ipset/ip_set_core.c
> @@ -1562,10 +1562,11 @@ call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set,
>  	return ret;
>  }
>  
> -static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
> -		       const struct nlmsghdr *nlh,
> -		       const struct nlattr * const attr[],
> -		       struct netlink_ext_ack *extack)
> +static int ip_set_ad(struct net *net, struct sock *ctnl, struct sk_buff *skb,
> +		     enum ipset_adt adt,
> +		     const struct nlmsghdr *nlh,
> +		     const struct nlattr * const attr[],
> +		     struct netlink_ext_ack *extack)
>  {
>  	struct ip_set_net *inst = ip_set_pernet(net);
>  	struct ip_set *set;
> @@ -1596,7 +1597,7 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
>  				     attr[IPSET_ATTR_DATA],
>  				     set->type->adt_policy, NULL))
>  			return -IPSET_ERR_PROTOCOL;
> -		ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, flags,
> +		ret = call_ad(ctnl, skb, set, tb, adt, flags,
>  			      use_lineno);
>  	} else {
>  		int nla_rem;
> @@ -1607,7 +1608,7 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
>  			    nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla,
>  					     set->type->adt_policy, NULL))
>  				return -IPSET_ERR_PROTOCOL;
> -			ret = call_ad(ctnl, skb, set, tb, IPSET_ADD,
> +			ret = call_ad(ctnl, skb, set, tb, adt,
>  				      flags, use_lineno);
>  			if (ret < 0)
>  				return ret;
> @@ -1616,58 +1617,20 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
>  	return ret;
>  }
>  
> -static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
> +static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
>  		       const struct nlmsghdr *nlh,
>  		       const struct nlattr * const attr[],
>  		       struct netlink_ext_ack *extack)
>  {
> -	struct ip_set_net *inst = ip_set_pernet(net);
> -	struct ip_set *set;
> -	struct nlattr *tb[IPSET_ATTR_ADT_MAX + 1] = {};
> -	const struct nlattr *nla;
> -	u32 flags = flag_exist(nlh);
> -	bool use_lineno;
> -	int ret = 0;
> -
> -	if (unlikely(protocol_min_failed(attr) ||
> -		     !attr[IPSET_ATTR_SETNAME] ||
> -		     !((attr[IPSET_ATTR_DATA] != NULL) ^
> -		       (attr[IPSET_ATTR_ADT] != NULL)) ||
> -		     (attr[IPSET_ATTR_DATA] &&
> -		      !flag_nested(attr[IPSET_ATTR_DATA])) ||
> -		     (attr[IPSET_ATTR_ADT] &&
> -		      (!flag_nested(attr[IPSET_ATTR_ADT]) ||
> -		       !attr[IPSET_ATTR_LINENO]))))
> -		return -IPSET_ERR_PROTOCOL;
> -
> -	set = find_set(inst, nla_data(attr[IPSET_ATTR_SETNAME]));
> -	if (!set)
> -		return -ENOENT;
> -
> -	use_lineno = !!attr[IPSET_ATTR_LINENO];
> -	if (attr[IPSET_ATTR_DATA]) {
> -		if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX,
> -				     attr[IPSET_ATTR_DATA],
> -				     set->type->adt_policy, NULL))
> -			return -IPSET_ERR_PROTOCOL;
> -		ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, flags,
> -			      use_lineno);
> -	} else {
> -		int nla_rem;
> +	return ip_set_ad(net, ctnl, skb, IPSET_ADD, nlh, attr, extack);
> +}
>  
> -		nla_for_each_nested(nla, attr[IPSET_ATTR_ADT], nla_rem) {
> -			if (nla_type(nla) != IPSET_ATTR_DATA ||
> -			    !flag_nested(nla) ||
> -			    nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla,
> -					     set->type->adt_policy, NULL))
> -				return -IPSET_ERR_PROTOCOL;
> -			ret = call_ad(ctnl, skb, set, tb, IPSET_DEL,
> -				      flags, use_lineno);
> -			if (ret < 0)
> -				return ret;
> -		}
> -	}
> -	return ret;
> +static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
> +		       const struct nlmsghdr *nlh,
> +		       const struct nlattr * const attr[],
> +		       struct netlink_ext_ack *extack)
> +{
> +	return ip_set_ad(net, ctnl, skb, IPSET_DEL, nlh, attr, extack);
>  }
>  
>  static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb,
> -- 
> 2.11.0
> 
> 

--
E-mail : kadlecsik.jozsef@wigner.mta.hu
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
diff mbox series

Patch

diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
index c1513e590a27..041baf28088a 100644
--- a/net/netfilter/ipset/ip_set_core.c
+++ b/net/netfilter/ipset/ip_set_core.c
@@ -1562,10 +1562,11 @@  call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set,
 	return ret;
 }
 
-static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
-		       const struct nlmsghdr *nlh,
-		       const struct nlattr * const attr[],
-		       struct netlink_ext_ack *extack)
+static int ip_set_ad(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+		     enum ipset_adt adt,
+		     const struct nlmsghdr *nlh,
+		     const struct nlattr * const attr[],
+		     struct netlink_ext_ack *extack)
 {
 	struct ip_set_net *inst = ip_set_pernet(net);
 	struct ip_set *set;
@@ -1596,7 +1597,7 @@  static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
 				     attr[IPSET_ATTR_DATA],
 				     set->type->adt_policy, NULL))
 			return -IPSET_ERR_PROTOCOL;
-		ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, flags,
+		ret = call_ad(ctnl, skb, set, tb, adt, flags,
 			      use_lineno);
 	} else {
 		int nla_rem;
@@ -1607,7 +1608,7 @@  static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
 			    nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla,
 					     set->type->adt_policy, NULL))
 				return -IPSET_ERR_PROTOCOL;
-			ret = call_ad(ctnl, skb, set, tb, IPSET_ADD,
+			ret = call_ad(ctnl, skb, set, tb, adt,
 				      flags, use_lineno);
 			if (ret < 0)
 				return ret;
@@ -1616,58 +1617,20 @@  static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
 	return ret;
 }
 
-static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
 		       const struct nlmsghdr *nlh,
 		       const struct nlattr * const attr[],
 		       struct netlink_ext_ack *extack)
 {
-	struct ip_set_net *inst = ip_set_pernet(net);
-	struct ip_set *set;
-	struct nlattr *tb[IPSET_ATTR_ADT_MAX + 1] = {};
-	const struct nlattr *nla;
-	u32 flags = flag_exist(nlh);
-	bool use_lineno;
-	int ret = 0;
-
-	if (unlikely(protocol_min_failed(attr) ||
-		     !attr[IPSET_ATTR_SETNAME] ||
-		     !((attr[IPSET_ATTR_DATA] != NULL) ^
-		       (attr[IPSET_ATTR_ADT] != NULL)) ||
-		     (attr[IPSET_ATTR_DATA] &&
-		      !flag_nested(attr[IPSET_ATTR_DATA])) ||
-		     (attr[IPSET_ATTR_ADT] &&
-		      (!flag_nested(attr[IPSET_ATTR_ADT]) ||
-		       !attr[IPSET_ATTR_LINENO]))))
-		return -IPSET_ERR_PROTOCOL;
-
-	set = find_set(inst, nla_data(attr[IPSET_ATTR_SETNAME]));
-	if (!set)
-		return -ENOENT;
-
-	use_lineno = !!attr[IPSET_ATTR_LINENO];
-	if (attr[IPSET_ATTR_DATA]) {
-		if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX,
-				     attr[IPSET_ATTR_DATA],
-				     set->type->adt_policy, NULL))
-			return -IPSET_ERR_PROTOCOL;
-		ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, flags,
-			      use_lineno);
-	} else {
-		int nla_rem;
+	return ip_set_ad(net, ctnl, skb, IPSET_ADD, nlh, attr, extack);
+}
 
-		nla_for_each_nested(nla, attr[IPSET_ATTR_ADT], nla_rem) {
-			if (nla_type(nla) != IPSET_ATTR_DATA ||
-			    !flag_nested(nla) ||
-			    nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla,
-					     set->type->adt_policy, NULL))
-				return -IPSET_ERR_PROTOCOL;
-			ret = call_ad(ctnl, skb, set, tb, IPSET_DEL,
-				      flags, use_lineno);
-			if (ret < 0)
-				return ret;
-		}
-	}
-	return ret;
+static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
+		       const struct nlmsghdr *nlh,
+		       const struct nlattr * const attr[],
+		       struct netlink_ext_ack *extack)
+{
+	return ip_set_ad(net, ctnl, skb, IPSET_DEL, nlh, attr, extack);
 }
 
 static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb,