Skip to content

Commit

Permalink
zebra: fix zapi msg debugging dumps
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
qlyoung committed May 3, 2019
1 parent 43932ad commit 49b3b01
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
3 changes: 3 additions & 0 deletions zebra/zapi_msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 2 additions & 5 deletions zebra/zserv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);

Expand Down
16 changes: 16 additions & 0 deletions zebra/zserv.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 49b3b01

Please sign in to comment.