Message ID | 20240424135109.3524355-4-amorenoz@redhat.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: openvswitch: Add sample multicasting. | expand |
On Wed, Apr 24, 2024 at 03:50:50PM +0200, Adrian Moreno wrote: > @@ -579,6 +580,15 @@ void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, > goto error; > } > #endif > + if (md->user_cookie && md->user_cookie_len) { > + int nla_len = nla_total_size(md->user_cookie_len); > + struct nlattr *nla; > + > + nla = skb_put(nl_skb, nla_len); > + nla->nla_type = PSAMPLE_ATTR_USER_COOKIE; > + nla->nla_len = nla_attr_size(md->user_cookie_len); > + memcpy(nla_data(nla), md->user_cookie, md->user_cookie_len); > + } Did you consider using nla_put() instead? diff --git a/net/psample/psample.c b/net/psample/psample.c index 92db8ffa2ba2..ea59ca46b119 100644 --- a/net/psample/psample.c +++ b/net/psample/psample.c @@ -589,15 +589,10 @@ void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, goto error; } #endif - if (md->user_cookie && md->user_cookie_len) { - int nla_len = nla_total_size(md->user_cookie_len); - struct nlattr *nla; - - nla = skb_put(nl_skb, nla_len); - nla->nla_type = PSAMPLE_ATTR_USER_COOKIE; - nla->nla_len = nla_attr_size(md->user_cookie_len); - memcpy(nla_data(nla), md->user_cookie, md->user_cookie_len); - } + if (md->user_cookie && md->user_cookie_len && + nla_put(nl_skb, PSAMPLE_ATTR_USER_COOKIE, md->user_cookie_len, + md->user_cookie)) + goto error; genlmsg_end(nl_skb, data); psample_nl_obj_desc_init(&desc, group->group_num);
On 4/25/24 09:32, Ido Schimmel wrote: > On Wed, Apr 24, 2024 at 03:50:50PM +0200, Adrian Moreno wrote: >> @@ -579,6 +580,15 @@ void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, >> goto error; >> } >> #endif >> + if (md->user_cookie && md->user_cookie_len) { >> + int nla_len = nla_total_size(md->user_cookie_len); >> + struct nlattr *nla; >> + >> + nla = skb_put(nl_skb, nla_len); >> + nla->nla_type = PSAMPLE_ATTR_USER_COOKIE; >> + nla->nla_len = nla_attr_size(md->user_cookie_len); >> + memcpy(nla_data(nla), md->user_cookie, md->user_cookie_len); >> + } > > Did you consider using nla_put() instead? > That's way simpler, thanks. I'll update it and send another version. > diff --git a/net/psample/psample.c b/net/psample/psample.c > index 92db8ffa2ba2..ea59ca46b119 100644 > --- a/net/psample/psample.c > +++ b/net/psample/psample.c > @@ -589,15 +589,10 @@ void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, > goto error; > } > #endif > - if (md->user_cookie && md->user_cookie_len) { > - int nla_len = nla_total_size(md->user_cookie_len); > - struct nlattr *nla; > - > - nla = skb_put(nl_skb, nla_len); > - nla->nla_type = PSAMPLE_ATTR_USER_COOKIE; > - nla->nla_len = nla_attr_size(md->user_cookie_len); > - memcpy(nla_data(nla), md->user_cookie, md->user_cookie_len); > - } > + if (md->user_cookie && md->user_cookie_len && > + nla_put(nl_skb, PSAMPLE_ATTR_USER_COOKIE, md->user_cookie_len, > + md->user_cookie)) > + goto error; > > genlmsg_end(nl_skb, data); > psample_nl_obj_desc_init(&desc, group->group_num); >
diff --git a/include/net/psample.h b/include/net/psample.h index 0509d2d6be67..2ac71260a546 100644 --- a/include/net/psample.h +++ b/include/net/psample.h @@ -25,6 +25,8 @@ struct psample_metadata { out_tc_occ_valid:1, latency_valid:1, unused:5; + const u8 *user_cookie; + u32 user_cookie_len; }; struct psample_group *psample_group_get(struct net *net, u32 group_num); diff --git a/include/uapi/linux/psample.h b/include/uapi/linux/psample.h index 9d62983af0a4..83dc919c4023 100644 --- a/include/uapi/linux/psample.h +++ b/include/uapi/linux/psample.h @@ -19,6 +19,7 @@ enum { PSAMPLE_ATTR_LATENCY, /* u64, nanoseconds */ PSAMPLE_ATTR_TIMESTAMP, /* u64, nanoseconds */ PSAMPLE_ATTR_PROTO, /* u16 */ + PSAMPLE_ATTR_USER_COOKIE, /* binary, user provided data */ __PSAMPLE_ATTR_MAX }; diff --git a/net/psample/psample.c b/net/psample/psample.c index f5f77515b969..476aaad7a885 100644 --- a/net/psample/psample.c +++ b/net/psample/psample.c @@ -480,7 +480,8 @@ void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, nla_total_size(sizeof(u32)) + /* group_num */ nla_total_size(sizeof(u32)) + /* seq */ nla_total_size_64bit(sizeof(u64)) + /* timestamp */ - nla_total_size(sizeof(u16)); /* protocol */ + nla_total_size(sizeof(u16)) + /* protocol */ + nla_total_size(md->user_cookie_len); /* user_cookie */ #ifdef CONFIG_INET tun_info = skb_tunnel_info(skb); @@ -579,6 +580,15 @@ void psample_sample_packet(struct psample_group *group, struct sk_buff *skb, goto error; } #endif + if (md->user_cookie && md->user_cookie_len) { + int nla_len = nla_total_size(md->user_cookie_len); + struct nlattr *nla; + + nla = skb_put(nl_skb, nla_len); + nla->nla_type = PSAMPLE_ATTR_USER_COOKIE; + nla->nla_len = nla_attr_size(md->user_cookie_len); + memcpy(nla_data(nla), md->user_cookie, md->user_cookie_len); + } genlmsg_end(nl_skb, data); psample_nl_obj_desc_init(&desc, group->group_num);
Add a user cookie to the sample metadata so that sample emitters can provide more contextual information to samples. If present, send the user cookie in a new attribute: PSAMPLE_ATTR_USER_COOKIE. Signed-off-by: Adrian Moreno <amorenoz@redhat.com> --- include/net/psample.h | 2 ++ include/uapi/linux/psample.h | 1 + net/psample/psample.c | 12 +++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-)