#include "netlink.h"
#include "odp-util.h"
#include "ofp-print.h"
+#include "ofp-util.h"
#include "ofpbuf.h"
#include "packets.h"
#include "poll-loop.h"
#include "valgrind.h"
#include "vlog.h"
-VLOG_DEFINE_THIS_MODULE(dpif)
+VLOG_DEFINE_THIS_MODULE(dpif);
static const struct dpif_class *base_dpif_classes[] = {
#ifdef HAVE_NETLINK
{
if (!error) {
VLOG_DBG_RL(&dpmsg_rl, "%s: %s success", dpif_name(dpif), operation);
- } else {
+ } else if (is_errno(error)) {
VLOG_WARN_RL(&error_rl, "%s: %s failed (%s)",
dpif_name(dpif), operation, strerror(error));
+ } else {
+ VLOG_WARN_RL(&error_rl, "%s: %s failed (%d/%d)",
+ dpif_name(dpif), operation,
+ get_ofp_err_type(error), get_ofp_err_code(error));
}
}
static void
log_flow_message(const struct dpif *dpif, int error, const char *operation,
- const flow_t *flow, const struct odp_flow_stats *stats,
+ const struct odp_flow_key *flow,
+ const struct odp_flow_stats *stats,
const union odp_action *actions, size_t n_actions)
{
struct ds ds = DS_EMPTY_INITIALIZER;
if (error) {
ds_put_format(&ds, "(%s) ", strerror(error));
}
- flow_format(&ds, flow);
+ format_odp_flow_key(&ds, flow);
if (stats) {
ds_put_cstr(&ds, ", ");
format_odp_flow_stats(&ds, stats);