Commit 426cda5c authored by Jesse Gross's avatar Jesse Gross Committed by Pravin B Shelar

openvswitch: Additional logging for -EINVAL on flow setups.

There are many possible ways that a flow can be invalid so we've
added logging for most of them. This adds logs for the remaining
possible cases so there isn't any ambiguity while debugging.

CC: Federico Iezzi <fiezzi@enter.it>
Signed-off-by: default avatarJesse Gross <jesse@nicira.com>
Acked-by: default avatarThomas Graf <tgraf@noironetworks.com>
Signed-off-by: default avatarPravin B Shelar <pshelar@nicira.com>
parent 1b760fb9
...@@ -817,10 +817,14 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info) ...@@ -817,10 +817,14 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
/* Must have key and actions. */ /* Must have key and actions. */
error = -EINVAL; error = -EINVAL;
if (!a[OVS_FLOW_ATTR_KEY]) if (!a[OVS_FLOW_ATTR_KEY]) {
OVS_NLERR("Flow key attribute not present in new flow.\n");
goto error; goto error;
if (!a[OVS_FLOW_ATTR_ACTIONS]) }
if (!a[OVS_FLOW_ATTR_ACTIONS]) {
OVS_NLERR("Flow actions attribute not present in new flow.\n");
goto error; goto error;
}
/* Most of the time we need to allocate a new flow, do it before /* Most of the time we need to allocate a new flow, do it before
* locking. * locking.
...@@ -979,8 +983,10 @@ static int ovs_flow_cmd_set(struct sk_buff *skb, struct genl_info *info) ...@@ -979,8 +983,10 @@ static int ovs_flow_cmd_set(struct sk_buff *skb, struct genl_info *info)
/* Extract key. */ /* Extract key. */
error = -EINVAL; error = -EINVAL;
if (!a[OVS_FLOW_ATTR_KEY]) if (!a[OVS_FLOW_ATTR_KEY]) {
OVS_NLERR("Flow key attribute not present in set flow.\n");
goto error; goto error;
}
ovs_match_init(&match, &key, &mask); ovs_match_init(&match, &key, &mask);
error = ovs_nla_get_match(&match, error = ovs_nla_get_match(&match,
......
...@@ -581,10 +581,13 @@ static int metadata_from_nlattrs(struct sw_flow_match *match, u64 *attrs, ...@@ -581,10 +581,13 @@ static int metadata_from_nlattrs(struct sw_flow_match *match, u64 *attrs,
if (*attrs & (1 << OVS_KEY_ATTR_IN_PORT)) { if (*attrs & (1 << OVS_KEY_ATTR_IN_PORT)) {
u32 in_port = nla_get_u32(a[OVS_KEY_ATTR_IN_PORT]); u32 in_port = nla_get_u32(a[OVS_KEY_ATTR_IN_PORT]);
if (is_mask) if (is_mask) {
in_port = 0xffffffff; /* Always exact match in_port. */ in_port = 0xffffffff; /* Always exact match in_port. */
else if (in_port >= DP_MAX_PORTS) } else if (in_port >= DP_MAX_PORTS) {
OVS_NLERR("Port (%d) exceeds maximum allowable (%d).\n",
in_port, DP_MAX_PORTS);
return -EINVAL; return -EINVAL;
}
SW_FLOW_KEY_PUT(match, phy.in_port, in_port, is_mask); SW_FLOW_KEY_PUT(match, phy.in_port, in_port, is_mask);
*attrs &= ~(1 << OVS_KEY_ATTR_IN_PORT); *attrs &= ~(1 << OVS_KEY_ATTR_IN_PORT);
...@@ -824,8 +827,11 @@ static int ovs_key_from_nlattrs(struct sw_flow_match *match, u64 attrs, ...@@ -824,8 +827,11 @@ static int ovs_key_from_nlattrs(struct sw_flow_match *match, u64 attrs,
attrs &= ~(1 << OVS_KEY_ATTR_ND); attrs &= ~(1 << OVS_KEY_ATTR_ND);
} }
if (attrs != 0) if (attrs != 0) {
OVS_NLERR("Unknown key attributes (%llx).\n",
(unsigned long long)attrs);
return -EINVAL; return -EINVAL;
}
return 0; return 0;
} }
...@@ -1250,8 +1256,10 @@ struct sw_flow_actions *ovs_nla_alloc_flow_actions(int size) ...@@ -1250,8 +1256,10 @@ struct sw_flow_actions *ovs_nla_alloc_flow_actions(int size)
{ {
struct sw_flow_actions *sfa; struct sw_flow_actions *sfa;
if (size > MAX_ACTIONS_BUFSIZE) if (size > MAX_ACTIONS_BUFSIZE) {
OVS_NLERR("Flow action size (%u bytes) exceeds maximum", size);
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
}
sfa = kmalloc(sizeof(*sfa) + size, GFP_KERNEL); sfa = kmalloc(sizeof(*sfa) + size, GFP_KERNEL);
if (!sfa) if (!sfa)
...@@ -1786,6 +1794,7 @@ static int ovs_nla_copy_actions__(const struct nlattr *attr, ...@@ -1786,6 +1794,7 @@ static int ovs_nla_copy_actions__(const struct nlattr *attr,
break; break;
default: default:
OVS_NLERR("Unknown tunnel attribute (%d).\n", type);
return -EINVAL; return -EINVAL;
} }
if (!skip_copy) { if (!skip_copy) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment