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: Jesse Gross <jesse@nicira.com> Acked-by: Thomas Graf <tgraf@noironetworks.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
This commit is contained in:
parent
1b760fb9a8
commit
426cda5cc1
2 changed files with 22 additions and 7 deletions
|
@ -817,10 +817,14 @@ static int ovs_flow_cmd_new(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
/* Must have key and actions. */
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
/* Most of the time we need to allocate a new flow, do it before
|
||||
* locking.
|
||||
|
@ -979,8 +983,10 @@ static int ovs_flow_cmd_set(struct sk_buff *skb, struct genl_info *info)
|
|||
|
||||
/* Extract key. */
|
||||
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;
|
||||
}
|
||||
|
||||
ovs_match_init(&match, &key, &mask);
|
||||
error = ovs_nla_get_match(&match,
|
||||
|
|
|
@ -581,10 +581,13 @@ static int metadata_from_nlattrs(struct sw_flow_match *match, u64 *attrs,
|
|||
if (*attrs & (1 << 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. */
|
||||
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;
|
||||
}
|
||||
|
||||
SW_FLOW_KEY_PUT(match, phy.in_port, in_port, is_mask);
|
||||
*attrs &= ~(1 << OVS_KEY_ATTR_IN_PORT);
|
||||
|
@ -824,8 +827,11 @@ static int ovs_key_from_nlattrs(struct sw_flow_match *match, u64 attrs,
|
|||
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 0;
|
||||
}
|
||||
|
@ -1250,8 +1256,10 @@ struct sw_flow_actions *ovs_nla_alloc_flow_actions(int size)
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
||||
sfa = kmalloc(sizeof(*sfa) + size, GFP_KERNEL);
|
||||
if (!sfa)
|
||||
|
@ -1786,6 +1794,7 @@ static int ovs_nla_copy_actions__(const struct nlattr *attr,
|
|||
break;
|
||||
|
||||
default:
|
||||
OVS_NLERR("Unknown tunnel attribute (%d).\n", type);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (!skip_copy) {
|
||||
|
|
Loading…
Reference in a new issue