Messages in this thread Patch in this message | | | From | Menglong Dong <> | Date | Fri, 28 Jan 2022 10:56:38 +0800 | Subject | Re: [PATCH v3 net-next] net: drop_monitor: support drop reason |
| |
On Fri, Jan 28, 2022 at 12:03 AM Ido Schimmel <idosch@idosch.org> wrote: > > On Thu, Jan 27, 2022 at 08:53:04AM -0700, David Ahern wrote: > > On 1/26/22 8:33 PM, menglong8.dong@gmail.com wrote: > > > From: Menglong Dong <imagedong@tencent.com> > > > > > > In the commit c504e5c2f964 ("net: skb: introduce kfree_skb_reason()") > > > drop reason is introduced to the tracepoint of kfree_skb. Therefore, > > > drop_monitor is able to report the drop reason to users by netlink. > > > > > > For now, the number of drop reason is passed to users ( seems it's > > > a little troublesome to pass the drop reason as string ). Therefore, > > > users can do some customized description of the reason. > > > > > > Signed-off-by: Menglong Dong <imagedong@tencent.com> > > > --- > > > v3: > > > - referring to cb->reason and cb->pc directly in > > > net_dm_packet_report_fill() > > > > > > v2: > > > - get a pointer to struct net_dm_skb_cb instead of local var for > > > each field > > > --- > > > include/uapi/linux/net_dropmon.h | 1 + > > > net/core/drop_monitor.c | 16 ++++++++++++---- > > > 2 files changed, 13 insertions(+), 4 deletions(-) > > > > > > diff --git a/include/uapi/linux/net_dropmon.h b/include/uapi/linux/net_dropmon.h > > > index 66048cc5d7b3..b2815166dbc2 100644 > > > --- a/include/uapi/linux/net_dropmon.h > > > +++ b/include/uapi/linux/net_dropmon.h > > > @@ -93,6 +93,7 @@ enum net_dm_attr { > > > NET_DM_ATTR_SW_DROPS, /* flag */ > > > NET_DM_ATTR_HW_DROPS, /* flag */ > > > NET_DM_ATTR_FLOW_ACTION_COOKIE, /* binary */ > > > + NET_DM_ATTR_REASON, /* u32 */ > > > > > > > For userspace to properly convert reason from id to string, enum > > skb_drop_reason needs to be moved from skbuff.h to a uapi file. > > include/uapi/linux/net_dropmon.h seems like the best candidate to me. > > Maybe others have a better idea. > > I think the best option would be to convert it to a string in the kernel > (or report both). Then you don't need to update user space tools such as > the Wireshark dissector [1] and DropWatch every time a new reason is > added.
I think reporting it as a string would be a good choice. Is it ok if we do like this (not tested yet)?
--- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c @@ -48,6 +48,16 @@ static int trace_state = TRACE_OFF; static bool monitor_hw;
+#undef EM +#undef EMe + +#define EM(a, b) [a] = #b, +#define EMe(a, b) [a] = #b + +static const char *drop_reasons[SKB_DROP_REASON_MAX + 1] = { + TRACE_SKB_DROP_REASON +}; + /* net_dm_mutex * * An overall lock guarding every operation coming from userspace. @@ -628,7 +638,8 @@ static int net_dm_packet_report_fill(struct sk_buff *msg, struct sk_buff *skb, NET_DM_ATTR_PAD)) goto nla_put_failure;
- if (nla_put_u32(msg, NET_DM_ATTR_REASON, cb->reason)) + if (nla_put_string(msg, NET_DM_ATTR_REASON, + drop_reasons[cb->reason])) goto nla_put_failure;
snprintf(buf, sizeof(buf), "%pS", cb->pc); Besides, I still think moving these reasons to uapi is necessary. @David Ahern Is it ok to create a new file (such as net_skbuff.h) for these reasons? Maybe other users need these enum in the feature, and this job is done the sooner the better.
Thanks! Menglong Dong
> > [1] https://www.wireshark.org/docs/dfref/n/net_dm.html
| |