Skip to content

Commit

Permalink
datapath: pass extended ACK struct to parsing functions
Browse files Browse the repository at this point in the history
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]>
Acked-by: Joe Stringer <[email protected]>
  • Loading branch information
jmberg-intel authored and Jarno Rajahalme committed Apr 21, 2017
1 parent ceb0a8a commit 15702dc
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 9 deletions.
3 changes: 3 additions & 0 deletions acinclude.m4
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand Down
2 changes: 1 addition & 1 deletion datapath/datapath.c
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
Expand Down
4 changes: 2 additions & 2 deletions datapath/flow_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
18 changes: 13 additions & 5 deletions datapath/linux/compat/include/net/genetlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,15 +125,23 @@ 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)
{
#ifdef HAVE_GENLMSG_PARSE
return genlmsg_parse(nlh, family, tb, maxtype, policy);
#else
return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
policy);
#endif
}
#define genlmsg_parse rpl_genlmsg_parse
#endif

#endif /* genetlink.h */
14 changes: 14 additions & 0 deletions datapath/linux/compat/include/net/netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -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_nested(tb, maxtype, nla, policy);
}
#define nla_parse_nested rpl_nla_parse_nested
#endif

#endif /* net/netlink.h */
3 changes: 2 additions & 1 deletion datapath/vport-vxlan.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit 15702dc

Please sign in to comment.