From a6ea2b1768e1653c2184c2ae1eeadbc3cef1a474 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Tue, 21 Jun 2016 14:06:29 -0700 Subject: [PATCH] ovn-controller: Log OpenFlow errors at "info" level. Otherwise, errors are logged at "debug" level. Errors when pushing flows can then seemingly be silently lost. Signed-off-by: Justin Pettit Acked-by: Ben Pfaff --- ovn/controller/ofctrl.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/ovn/controller/ofctrl.c b/ovn/controller/ofctrl.c index 52bf0cdcb..b451453c3 100644 --- a/ovn/controller/ofctrl.c +++ b/ovn/controller/ofctrl.c @@ -469,23 +469,32 @@ queue_msg(struct ofpbuf *msg) return xid; } +static void +log_openflow_rl(struct vlog_rate_limit *rl, enum vlog_level level, + const struct ofp_header *oh, const char *title) +{ + if (!vlog_should_drop(&this_module, level, rl)) { + char *s = ofp_to_string(oh, ntohs(oh->length), 2); + vlog(&this_module, level, "%s: %s", title, s); + free(s); + } +} + static void ofctrl_recv(const struct ofp_header *oh, enum ofptype type) { if (type == OFPTYPE_ECHO_REQUEST) { queue_msg(make_echo_reply(oh)); + } else if (type == OFPTYPE_ERROR) { + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300); + log_openflow_rl(&rl, VLL_INFO, oh, "OpenFlow error"); } else if (type != OFPTYPE_ECHO_REPLY && type != OFPTYPE_BARRIER_REPLY && type != OFPTYPE_PACKET_IN && type != OFPTYPE_PORT_STATUS && type != OFPTYPE_FLOW_REMOVED) { - if (VLOG_IS_DBG_ENABLED()) { - static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300); - - char *s = ofp_to_string(oh, ntohs(oh->length), 2); - VLOG_DBG_RL(&rl, "OpenFlow packet ignored: %s", s); - free(s); - } + static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300); + log_openflow_rl(&rl, VLL_DBG, oh, "OpenFlow packet ignored"); } } -- 2.20.1