diff options
author | fenglei <1579628578@qq.com> | 2024-12-31 15:20:16 +0800 |
---|---|---|
committer | Benoit Ganne <bganne@cisco.com> | 2025-01-20 10:47:21 +0000 |
commit | 0fce01265182934c42dba801a6287120b86de161 (patch) | |
tree | 2902e6c568a5a9388d35ad7137ba8678915a5e76 /src | |
parent | d9f3fbefcf5135da12e1a6f1bb164405770f4faf (diff) |
af_packet: worker thread call vlib_log coredump
Type: fix
-When deleting a veth pair interface in linux, vpp's call to af_packet_fd_error will cause it to hang because it's a worker thread.
Change-Id: I3dc9018e7e492ccbdf0f59381f9bbbfd5c1c88a5
Signed-off-by: fenglei <1579628578@qq.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/af_packet/af_packet.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/plugins/af_packet/af_packet.c b/src/plugins/af_packet/af_packet.c index 69245429918..8cb2af27d7f 100644 --- a/src/plugins/af_packet/af_packet.c +++ b/src/plugins/af_packet/af_packet.c @@ -189,7 +189,6 @@ af_packet_fd_read_ready (clib_file_t * uf) static clib_error_t * af_packet_fd_error (clib_file_t *uf) { - af_packet_main_t *apm = &af_packet_main; clib_error_t *err = 0; u64 u64; @@ -198,8 +197,20 @@ af_packet_fd_error (clib_file_t *uf) if (ret < 0) { err = clib_error_return_unix (0, ""); - vlib_log_notice (apm->log_class, "fd %u %U", uf->file_descriptor, - format_clib_error, err); + ELOG_TYPE_DECLARE (e) = { + .format = "af-packet-msg: fd %u reason %s", + .format_args = "i4T4", + }; + struct + { + u32 fd; + u32 reason; + } *ed; + ed = ELOG_DATA (&vlib_global_main.elog_main, e); + ed->fd = uf->file_descriptor; + ed->reason = + elog_string (vlib_get_elog_main (), "%U", format_clib_error, err); + clib_error_free (err); } |