aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Kiss <zoltan.kiss@linaro.org>2015-03-18 15:43:15 +0000
committerZoltan Kiss <zoltan.kiss@linaro.org>2015-07-09 14:48:32 +0100
commitcb9f8e66c8258ddd815eda15127d39ec067d5c7e (patch)
tree454468d66e0c537fe3db0c8edfc3b61faa186e01
parentfdf4e16180f7c35ee9b50b83aaf354451c6022eb (diff)
netdev-odp: implemenet odp_override_log
ODP logs now end up in OVS logs. Signed-off-by: Zoltan Kiss <zoltan.kiss@linaro.org>
-rw-r--r--lib/netdev-odp.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/lib/netdev-odp.c b/lib/netdev-odp.c
index b6c135b4d..c78940484 100644
--- a/lib/netdev-odp.c
+++ b/lib/netdev-odp.c
@@ -95,12 +95,23 @@ free_odp_buf(struct ofpbuf *b)
odp_packet_free(b->odp_pkt);
}
+static void odp_abort(void)
+{
+ VLOG_ERR("abort\n");
+ abort();
+}
+
int
odp_init()
{
int result;
+ odp_init_t params;
- result = odp_init_global(NULL, NULL);
+ memset(&params, 0, sizeof(params));
+ params.log_fn = &odp_override_log;
+ params.abort_fn = &odp_abort;
+
+ result = odp_init_global(&params, NULL);
if (result) {
VLOG_ERR("Error: ODP global init failed\n");
return result;
@@ -564,6 +575,32 @@ netdev_odp_rxq_recv(struct netdev_rxq *rxq_, struct dpif_packet **packets,
return ret;
}
+int odp_override_log(odp_log_level_e level, const char *fmt, ...)
+{
+ va_list args;
+ enum vlog_level ovs_level;
+
+ switch (level) {
+ case ODP_LOG_ERR:
+ case ODP_LOG_UNIMPLEMENTED:
+ case ODP_LOG_ABORT:
+ ovs_level = VLL_ERR;
+ break;
+ case ODP_LOG_PRINT:
+ ovs_level = VLL_INFO;
+ break;
+ case ODP_LOG_DBG:
+ default:
+ ovs_level = VLL_DBG;
+ }
+
+ va_start(args, fmt);
+ vlog_rate_limit_valist(THIS_MODULE, ovs_level, &rl, fmt, args);
+ va_end(args);
+
+ return 0;
+}
+
static struct netdev_class netdev_odp_class = {
"odp",
odp_class_init, /* init */