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
