diff mbox

[ovs-dev,3/3] datapath: pass extended ACK struct to parsing functions

Message ID 1492637745-73976-3-git-send-email-jarno@ovn.org
State Superseded
Headers show

Commit Message

Jarno Rajahalme April 19, 2017, 9:35 p.m. UTC
From: Johannes Berg <johannes.berg@intel.com>

Upstream commit:

    commit fceb6435e85298f747fee938415057af837f5a8a
    Author: Johannes Berg <johannes.berg@intel.com>
    Date:   Wed Apr 12 14:34:07 2017 +0200

    netlink: pass extended ACK struct to parsing functions

    Pass the new extended ACK reporting struct to all of the generic
    netlink parsing functions. For now, pass NULL in almost all callers
    (except for some in the core.)

    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
---
 acinclude.m4                                  |  3 +++
 datapath/datapath.c                           |  2 +-
 datapath/flow_netlink.c                       |  4 ++--
 datapath/linux/compat/include/net/genetlink.h | 14 +++++++++-----
 datapath/linux/compat/include/net/netlink.h   | 14 ++++++++++++++
 datapath/vport-vxlan.c                        |  3 ++-
 6 files changed, 31 insertions(+), 9 deletions(-)

Comments

Joe Stringer April 19, 2017, 10:50 p.m. UTC | #1
On 19 April 2017 at 14:35, Jarno Rajahalme <jarno@ovn.org> wrote:
> From: Johannes Berg <johannes.berg@intel.com>
>
> Upstream commit:
>
>     commit fceb6435e85298f747fee938415057af837f5a8a
>     Author: Johannes Berg <johannes.berg@intel.com>
>     Date:   Wed Apr 12 14:34:07 2017 +0200
>
>     netlink: pass extended ACK struct to parsing functions
>
>     Pass the new extended ACK reporting struct to all of the generic
>     netlink parsing functions. For now, pass NULL in almost all callers
>     (except for some in the core.)
>
>     Signed-off-by: Johannes Berg <johannes.berg@intel.com>
>     Signed-off-by: David S. Miller <davem@davemloft.net>
>
> Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
> ---
>  acinclude.m4                                  |  3 +++
>  datapath/datapath.c                           |  2 +-
>  datapath/flow_netlink.c                       |  4 ++--
>  datapath/linux/compat/include/net/genetlink.h | 14 +++++++++-----
>  datapath/linux/compat/include/net/netlink.h   | 14 ++++++++++++++
>  datapath/vport-vxlan.c                        |  3 ++-
>  6 files changed, 31 insertions(+), 9 deletions(-)
>
> diff --git a/acinclude.m4 b/acinclude.m4
> index 6a2b9f1..9f8e30d 100644
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -663,6 +663,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>    OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_is_last])
>    OVS_GREP_IFELSE([$KSRC/include/linux/netlink.h], [void.*netlink_set_err],
>                    [OVS_DEFINE([HAVE_VOID_NETLINK_SET_ERR])])
> +  OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netlink.h],
> +                        [nla_parse], [netlink_ext_ack],
> +                        [OVS_DEFINE([HAVE_NETLINK_EXT_ACK])])
>
>    OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
>
> diff --git a/datapath/datapath.c b/datapath/datapath.c
> index 8cf0381..c85029c 100644
> --- a/datapath/datapath.c
> +++ b/datapath/datapath.c
> @@ -1365,7 +1365,7 @@ static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
>         int err;
>
>         err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a,
> -                           OVS_FLOW_ATTR_MAX, flow_policy);
> +                           OVS_FLOW_ATTR_MAX, flow_policy, NULL);
>         if (err)
>                 return err;
>         ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]);
> diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
> index 0762f6c..07ab8e9 100644
> --- a/datapath/flow_netlink.c
> +++ b/datapath/flow_netlink.c
> @@ -2431,8 +2431,8 @@ static int validate_userspace(const struct nlattr *attr)
>         struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1];
>         int error;
>
> -       error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX,
> -                                attr, userspace_policy);
> +       error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX, attr,
> +                                userspace_policy, NULL);
>         if (error)
>                 return error;
>
> diff --git a/datapath/linux/compat/include/net/genetlink.h b/datapath/linux/compat/include/net/genetlink.h
> index 4b42cf7..f35bc02 100644
> --- a/datapath/linux/compat/include/net/genetlink.h
> +++ b/datapath/linux/compat/include/net/genetlink.h
> @@ -125,15 +125,19 @@ static inline int rpl_genl_has_listeners(struct genl_family *family,
>
>  #endif /* HAVE_GENL_HAS_LISTENERS */
>
> -#ifndef HAVE_GENLMSG_PARSE
> -static inline int genlmsg_parse(const struct nlmsghdr *nlh,
> -                               const struct genl_family *family,
> -                               struct nlattr *tb[], int maxtype,
> -                               const struct nla_policy *policy)
> +#ifndef HAVE_NETLINK_EXT_ACK
> +struct netlink_ext_ack;
> +
> +static inline int rpl_genlmsg_parse(const struct nlmsghdr *nlh,
> +                                   const struct genl_family *family,
> +                                   struct nlattr *tb[], int maxtype,
> +                                   const struct nla_policy *policy,
> +                                   struct netlink_ext_ack *extack)
>  {
>         return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
>                            policy);
>  }
> +#define genlmsg_parse rpl_genlmsg_parse
>  #endif
>
>  #endif /* genetlink.h */
> diff --git a/datapath/linux/compat/include/net/netlink.h b/datapath/linux/compat/include/net/netlink.h
> index 082afac..b791a3f 100644
> --- a/datapath/linux/compat/include/net/netlink.h
> +++ b/datapath/linux/compat/include/net/netlink.h
> @@ -157,4 +157,18 @@ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
>  }
>
>  #endif
> +
> +#ifndef HAVE_NETLINK_EXT_ACK
> +struct netlink_ext_ack;
> +
> +static inline int rpl_nla_parse_nested(struct nlattr *tb[], int maxtype,
> +                                      const struct nlattr *nla,
> +                                      const struct nla_policy *policy,
> +                                      struct netlink_ext_ack *extack)
> +{
> +       return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy);

Should this be calling nla_parse_nested() ?
Jarno Rajahalme April 19, 2017, 11:38 p.m. UTC | #2
> On Apr 19, 2017, at 3:50 PM, Joe Stringer <joe@ovn.org> wrote:
> 
> On 19 April 2017 at 14:35, Jarno Rajahalme <jarno@ovn.org <mailto:jarno@ovn.org>> wrote:
>> From: Johannes Berg <johannes.berg@intel.com>
>> 
>> Upstream commit:
>> 
>>    commit fceb6435e85298f747fee938415057af837f5a8a
>>    Author: Johannes Berg <johannes.berg@intel.com>
>>    Date:   Wed Apr 12 14:34:07 2017 +0200
>> 
>>    netlink: pass extended ACK struct to parsing functions
>> 
>>    Pass the new extended ACK reporting struct to all of the generic
>>    netlink parsing functions. For now, pass NULL in almost all callers
>>    (except for some in the core.)
>> 
>>    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
>>    Signed-off-by: David S. Miller <davem@davemloft.net>
>> 
>> Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
>> ---
>> acinclude.m4                                  |  3 +++
>> datapath/datapath.c                           |  2 +-
>> datapath/flow_netlink.c                       |  4 ++--
>> datapath/linux/compat/include/net/genetlink.h | 14 +++++++++-----
>> datapath/linux/compat/include/net/netlink.h   | 14 ++++++++++++++
>> datapath/vport-vxlan.c                        |  3 ++-
>> 6 files changed, 31 insertions(+), 9 deletions(-)
>> 
>> diff --git a/acinclude.m4 b/acinclude.m4
>> index 6a2b9f1..9f8e30d 100644
>> --- a/acinclude.m4
>> +++ b/acinclude.m4
>> @@ -663,6 +663,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
>>   OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_is_last])
>>   OVS_GREP_IFELSE([$KSRC/include/linux/netlink.h], [void.*netlink_set_err],
>>                   [OVS_DEFINE([HAVE_VOID_NETLINK_SET_ERR])])
>> +  OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netlink.h],
>> +                        [nla_parse], [netlink_ext_ack],
>> +                        [OVS_DEFINE([HAVE_NETLINK_EXT_ACK])])
>> 
>>   OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
>> 
>> diff --git a/datapath/datapath.c b/datapath/datapath.c
>> index 8cf0381..c85029c 100644
>> --- a/datapath/datapath.c
>> +++ b/datapath/datapath.c
>> @@ -1365,7 +1365,7 @@ static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
>>        int err;
>> 
>>        err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a,
>> -                           OVS_FLOW_ATTR_MAX, flow_policy);
>> +                           OVS_FLOW_ATTR_MAX, flow_policy, NULL);
>>        if (err)
>>                return err;
>>        ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]);
>> diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
>> index 0762f6c..07ab8e9 100644
>> --- a/datapath/flow_netlink.c
>> +++ b/datapath/flow_netlink.c
>> @@ -2431,8 +2431,8 @@ static int validate_userspace(const struct nlattr *attr)
>>        struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1];
>>        int error;
>> 
>> -       error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX,
>> -                                attr, userspace_policy);
>> +       error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX, attr,
>> +                                userspace_policy, NULL);
>>        if (error)
>>                return error;
>> 
>> diff --git a/datapath/linux/compat/include/net/genetlink.h b/datapath/linux/compat/include/net/genetlink.h
>> index 4b42cf7..f35bc02 100644
>> --- a/datapath/linux/compat/include/net/genetlink.h
>> +++ b/datapath/linux/compat/include/net/genetlink.h
>> @@ -125,15 +125,19 @@ static inline int rpl_genl_has_listeners(struct genl_family *family,
>> 
>> #endif /* HAVE_GENL_HAS_LISTENERS */
>> 
>> -#ifndef HAVE_GENLMSG_PARSE
>> -static inline int genlmsg_parse(const struct nlmsghdr *nlh,
>> -                               const struct genl_family *family,
>> -                               struct nlattr *tb[], int maxtype,
>> -                               const struct nla_policy *policy)
>> +#ifndef HAVE_NETLINK_EXT_ACK
>> +struct netlink_ext_ack;
>> +
>> +static inline int rpl_genlmsg_parse(const struct nlmsghdr *nlh,
>> +                                   const struct genl_family *family,
>> +                                   struct nlattr *tb[], int maxtype,
>> +                                   const struct nla_policy *policy,
>> +                                   struct netlink_ext_ack *extack)
>> {
>>        return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
>>                           policy);
>> }
>> +#define genlmsg_parse rpl_genlmsg_parse
>> #endif
>> 
>> #endif /* genetlink.h */
>> diff --git a/datapath/linux/compat/include/net/netlink.h b/datapath/linux/compat/include/net/netlink.h
>> index 082afac..b791a3f 100644
>> --- a/datapath/linux/compat/include/net/netlink.h
>> +++ b/datapath/linux/compat/include/net/netlink.h
>> @@ -157,4 +157,18 @@ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
>> }
>> 
>> #endif
>> +
>> +#ifndef HAVE_NETLINK_EXT_ACK
>> +struct netlink_ext_ack;
>> +
>> +static inline int rpl_nla_parse_nested(struct nlattr *tb[], int maxtype,
>> +                                      const struct nlattr *nla,
>> +                                      const struct nla_policy *policy,
>> +                                      struct netlink_ext_ack *extack)
>> +{
>> +       return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy);
> 
> Should this be calling nla_parse_nested() ?

Would be clearer that way, so I’ll change this for v2.

  Jarno
diff mbox

Patch

diff --git a/acinclude.m4 b/acinclude.m4
index 6a2b9f1..9f8e30d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -663,6 +663,9 @@  AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
   OVS_GREP_IFELSE([$KSRC/include/net/netlink.h], [nla_is_last])
   OVS_GREP_IFELSE([$KSRC/include/linux/netlink.h], [void.*netlink_set_err],
                   [OVS_DEFINE([HAVE_VOID_NETLINK_SET_ERR])])
+  OVS_FIND_PARAM_IFELSE([$KSRC/include/net/netlink.h],
+                        [nla_parse], [netlink_ext_ack],
+                        [OVS_DEFINE([HAVE_NETLINK_EXT_ACK])])
 
   OVS_GREP_IFELSE([$KSRC/include/net/sctp/checksum.h], [sctp_compute_cksum])
 
diff --git a/datapath/datapath.c b/datapath/datapath.c
index 8cf0381..c85029c 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -1365,7 +1365,7 @@  static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
 	int err;
 
 	err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a,
-			    OVS_FLOW_ATTR_MAX, flow_policy);
+			    OVS_FLOW_ATTR_MAX, flow_policy, NULL);
 	if (err)
 		return err;
 	ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]);
diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
index 0762f6c..07ab8e9 100644
--- a/datapath/flow_netlink.c
+++ b/datapath/flow_netlink.c
@@ -2431,8 +2431,8 @@  static int validate_userspace(const struct nlattr *attr)
 	struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1];
 	int error;
 
-	error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX,
-				 attr, userspace_policy);
+	error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX, attr,
+				 userspace_policy, NULL);
 	if (error)
 		return error;
 
diff --git a/datapath/linux/compat/include/net/genetlink.h b/datapath/linux/compat/include/net/genetlink.h
index 4b42cf7..f35bc02 100644
--- a/datapath/linux/compat/include/net/genetlink.h
+++ b/datapath/linux/compat/include/net/genetlink.h
@@ -125,15 +125,19 @@  static inline int rpl_genl_has_listeners(struct genl_family *family,
 
 #endif /* HAVE_GENL_HAS_LISTENERS */
 
-#ifndef HAVE_GENLMSG_PARSE
-static inline int genlmsg_parse(const struct nlmsghdr *nlh,
-				const struct genl_family *family,
-				struct nlattr *tb[], int maxtype,
-				const struct nla_policy *policy)
+#ifndef HAVE_NETLINK_EXT_ACK
+struct netlink_ext_ack;
+
+static inline int rpl_genlmsg_parse(const struct nlmsghdr *nlh,
+				    const struct genl_family *family,
+				    struct nlattr *tb[], int maxtype,
+				    const struct nla_policy *policy,
+				    struct netlink_ext_ack *extack)
 {
 	return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
 			   policy);
 }
+#define genlmsg_parse rpl_genlmsg_parse
 #endif
 
 #endif /* genetlink.h */
diff --git a/datapath/linux/compat/include/net/netlink.h b/datapath/linux/compat/include/net/netlink.h
index 082afac..b791a3f 100644
--- a/datapath/linux/compat/include/net/netlink.h
+++ b/datapath/linux/compat/include/net/netlink.h
@@ -157,4 +157,18 @@  static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
 }
 
 #endif
+
+#ifndef HAVE_NETLINK_EXT_ACK
+struct netlink_ext_ack;
+
+static inline int rpl_nla_parse_nested(struct nlattr *tb[], int maxtype,
+				       const struct nlattr *nla,
+				       const struct nla_policy *policy,
+				       struct netlink_ext_ack *extack)
+{
+	return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy);
+}
+#define nla_parse_nested rpl_nla_parse_nested
+#endif
+
 #endif /* net/netlink.h */
diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c
index 11965c0..7beaf6e 100644
--- a/datapath/vport-vxlan.c
+++ b/datapath/vport-vxlan.c
@@ -70,7 +70,8 @@  static int vxlan_configure_exts(struct vport *vport, struct nlattr *attr,
 	if (nla_len(attr) < sizeof(struct nlattr))
 		return -EINVAL;
 
-	err = nla_parse_nested(exts, OVS_VXLAN_EXT_MAX, attr, exts_policy);
+	err = nla_parse_nested(exts, OVS_VXLAN_EXT_MAX, attr, exts_policy,
+			       NULL);
 	if (err < 0)
 		return err;