summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorfenglei <1579628578@qq.com>2024-12-31 15:20:16 +0800
committerBenoit Ganne <bganne@cisco.com>2025-01-20 10:47:21 +0000
commit0fce01265182934c42dba801a6287120b86de161 (patch)
tree2902e6c568a5a9388d35ad7137ba8678915a5e76 /src
parentd9f3fbefcf5135da12e1a6f1bb164405770f4faf (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.c17
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);
}