On Mon, 2023-03-27 at 18:09 -0700, Jakub Kicinski wrote: > > Anyone have any great ideas? > > We need something that'd scale to more subsystems, so I don't think > having all the definitions in enum skb_drop_reason directly is an > option. Fair enough. > My knee jerk idea would be to either use the top 8 bits of the > skb reason enum to denote the space. And then we'd say 0 is core > 1 is wifi (enum ieee80211_rx_result) etc. Within the WiFi space > you can use whatever encoding you like. Right. That's not _that_ far from what I proposed above, except you pull the core out > On a quick look nothing is indexed by the reason directly, so no > problems with using the high bits. I think you missed he drop_reasons[] array in skbuff.c, but I guess we could just not add these to the DEFINE_DROP_REASON() macro (and couldn't really add them anyway). The only user seems to be drop_monitor, which anyway checks the array bounds (in the trace hit function.) Or we change the design of this to actually have each subsystem provide an array/a callback for their namespace, if the strings are important? Some registration/unregistration might be needed for modules, but that could be done. > Option #2 is to add one main drop reason called SKB_DROP_REASON_MAC80211 > and have a separate tracepoint which exposes the detailed wifi > reason and any necessary context. mac80211 would then have its own > wrapper around kfree_skb_reason() which triggers the tracepoint. Yeah, I considered doing that with just the line number, but who knows what people might want to use this for in the end, so that's not a great idea either I guess :-) I would prefer the version with the drop reasons, since then also you only have to worry about one tracepoint. johannes