> On Apr 19, 2017, at 3:50 PM, Joe Stringer <[email protected]> wrote: > > On 19 April 2017 at 14:35, Jarno Rajahalme <[email protected] > <mailto:[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() ?
Would be clearer that way, so I’ll change this for v2. Jarno _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
