/*
- * Copyright (c) 2009, 2010, 2011 Nicira Networks.
+ * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
format_odp_action(ds, a);
}
if (left) {
+ int i;
+
if (left == actions_len) {
ds_put_cstr(ds, "<empty>");
}
- ds_put_format(ds, ",***%u leftover bytes***", left);
+ ds_put_format(ds, ",***%u leftover bytes*** (", left);
+ for (i = 0; i < left; i++) {
+ ds_put_format(ds, "%02x", ((const uint8_t *) a)[i]);
+ }
+ ds_put_char(ds, ')');
}
} else {
ds_put_cstr(ds, "drop");
format_odp_key_attr(a, ds);
}
if (left) {
+ int i;
+
if (left == key_len) {
ds_put_cstr(ds, "<empty>");
}
- ds_put_format(ds, ",***%u leftover bytes***", left);
+ ds_put_format(ds, ",***%u leftover bytes*** (", left);
+ for (i = 0; i < left; i++) {
+ ds_put_format(ds, "%02x", ((const uint8_t *) a)[i]);
+ }
+ ds_put_char(ds, ')');
}
} else {
ds_put_cstr(ds, "<empty>");
nl_msg_put_be64(buf, OVS_KEY_ATTR_TUN_ID, flow->tun_id);
}
- if (flow->in_port != OFPP_NONE) {
+ if (flow->in_port != OFPP_NONE && flow->in_port != OFPP_CONTROLLER) {
nl_msg_put_u32(buf, OVS_KEY_ATTR_IN_PORT,
ofp_port_to_odp_port(flow->in_port));
}
expected_attrs, flow, key, key_len);
}
+/* Returns 'fitness' as a string, for use in debug messages. */
+const char *
+odp_key_fitness_to_string(enum odp_key_fitness fitness)
+{
+ switch (fitness) {
+ case ODP_FIT_PERFECT:
+ return "OK";
+ case ODP_FIT_TOO_MUCH:
+ return "too_much";
+ case ODP_FIT_TOO_LITTLE:
+ return "too_little";
+ case ODP_FIT_ERROR:
+ return "error";
+ default:
+ return "<unknown>";
+ }
+}
+
/* Appends an OVS_ACTION_ATTR_USERSPACE action to 'odp_actions' that specifies
* Netlink PID 'pid'. If 'cookie' is nonnull, adds a userdata attribute whose
* contents contains 'cookie' and returns the offset within 'odp_actions' of