On 19 April 2017 at 14:35, Jarno Rajahalme <[email protected]> wrote:
> From: Johannes Berg <[email protected]>
>
> Upstream commit:
>
>     commit fceb6435e85298f747fee938415057af837f5a8a
>     Author: Johannes Berg <[email protected]>
>     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 <[email protected]>
>     Signed-off-by: David S. Miller <[email protected]>
>
> Signed-off-by: Jarno Rajahalme <[email protected]>
> ---
>  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() ?
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to