summaryrefslogtreecommitdiffstats
path: root/zebra
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2019-05-01 02:49:13 +0200
committerQuentin Young <qlyoung@cumulusnetworks.com>2019-05-03 21:55:44 +0200
commit49b3b01f4cd6265380dd804279c2ced73a3a8220 (patch)
treeda208fa205c8e57d937e1f9cd434ad9a991768b6 /zebra
parentMerge pull request #4247 from mjstapp/fix_topotest_topo_only (diff)
downloadfrr-49b3b01f4cd6265380dd804279c2ced73a3a8220.tar.xz
frr-49b3b01f4cd6265380dd804279c2ced73a3a8220.zip
zebra: fix zapi msg debugging dumps
When we switched to a pthread per client, we lost the ability to correlate zapi message debugs with their handlers in zlog, because the message was logged when it was read off the zapi socket and not right before it was processed. Move the zapi msg hexdump to happen right before we call the message handler. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'zebra')
-rw-r--r--zebra/zapi_msg.c3
-rw-r--r--zebra/zserv.c7
-rw-r--r--zebra/zserv.h16
3 files changed, 21 insertions, 5 deletions
diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c
index f31fb53a3..7f6af8201 100644
--- a/zebra/zapi_msg.c
+++ b/zebra/zapi_msg.c
@@ -2507,6 +2507,9 @@ void zserv_handle_commands(struct zserv *client, struct stream *msg)
zapi_parse_header(msg, &hdr);
+ if (IS_ZEBRA_DEBUG_PACKET && IS_ZEBRA_DEBUG_RECV)
+ zserv_log_message(NULL, msg, &hdr);
+
#if defined(HANDLE_ZAPI_FUZZING)
zserv_write_incoming(msg, hdr.command);
#endif
diff --git a/zebra/zserv.c b/zebra/zserv.c
index df5f236c0..e7b0a2302 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -149,8 +149,8 @@ static void zserv_event(struct zserv *client, enum zserv_event event);
* hdr (optional)
* The message header
*/
-static void zserv_log_message(const char *errmsg, struct stream *msg,
- struct zmsghdr *hdr)
+void zserv_log_message(const char *errmsg, struct stream *msg,
+ struct zmsghdr *hdr)
{
zlog_debug("Rx'd ZAPI message");
if (errmsg)
@@ -411,9 +411,6 @@ static int zserv_read(struct thread *thread)
hdr.vrf_id, hdr.length,
sock);
- if (IS_ZEBRA_DEBUG_PACKET && IS_ZEBRA_DEBUG_RECV)
- zserv_log_message(NULL, client->ibuf_work, &hdr);
-
stream_set_getp(client->ibuf_work, 0);
struct stream *msg = stream_dup(client->ibuf_work);
diff --git a/zebra/zserv.h b/zebra/zserv.h
index 90fd19571..380f23916 100644
--- a/zebra/zserv.h
+++ b/zebra/zserv.h
@@ -240,6 +240,22 @@ extern struct zserv *zserv_find_client(uint8_t proto, unsigned short instance);
*/
extern void zserv_close_client(struct zserv *client);
+
+/*
+ * Log a ZAPI message hexdump.
+ *
+ * errmsg
+ * Error message to include with packet hexdump
+ *
+ * msg
+ * Message to log
+ *
+ * hdr
+ * Message header
+ */
+void zserv_log_message(const char *errmsg, struct stream *msg,
+ struct zmsghdr *hdr);
+
#if defined(HANDLE_ZAPI_FUZZING)
extern void zserv_read_file(char *input);
#endif