> >
> > -/*
> > - * tcp event with arguments sk and skb
> > - *
> > - * Note: this class requires a valid sk pointer; while skb pointer could
> > - * be NULL.
> > - */
> > -DECLARE_EVENT_CLASS(tcp_event_sk_skb,
> > +#define TCP_RETRANSMIT_QUIT_REASON \
> > + ENUM(TCP_RETRANS_ERR_DEFAULT, "retransmit
> > terminate unexpectedly") \
> > + ENUM(TCP_RETRANS_SUCCESS, "retransmit
> > successfully") \
> > + ENUM(TCP_RETRANS_IN_HOST_QUEUE, "packet still
> > queued in driver") \
> > + ENUM(TCP_RETRANS_END_SEQ_ERROR, "invalid end
> > sequence") \
> > + ENUM(TCP_RETRANS_TRIM_HEAD_NOMEM, "trim head no
> > memory") \
> > + ENUM(TCP_RETRANS_UNCLONE_NOMEM, "skb unclone
> > keeptruesize no memory") \
> > + ENUM(TCP_RETRANS_FRAG_NOMEM, "fragment no
> > memory") \
>
> Do we really need 3 + 1 different 'NOMEMORY' status ?
Yes, different "NOMEM" status pinpoint exact failure stages in packet
retransmission,
which helps distinguish which process triggered it. Beneficial for
troubleshooting.
> > + ENUM(TCP_RETRANS_ROUTE_FAIL, "routing failure")
> > \
> > + ENUM(TCP_RETRANS_RCV_ZERO_WINDOW, "closed recevier
> > window") \
>
> receiver
>
Thanks, will fix it in V3.
> > + ENUMe(TCP_RETRANS_PSKB_COPY_NOBUFS, "no buffer for skb
> > copy") \
>
> -> another NOMEM...
>
> > +
> > +
>
>
> > + __entry->quit_reason = quit_reason;
> > ),
> >
> > - TP_printk("skbaddr=%p skaddr=%p family=%s sport=%hu dport=%hu
> > saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s",
> > + TP_printk("skbaddr=%p skaddr=%p family=%s sport=%hu dport=%hu
> > saddr=%pI4 daddr=%pI4 saddrv6=%pI6c daddrv6=%pI6c state=%s quit_reason=%s",
>
> quit_reason is really weird, since most retransmits are a success.
>
> What about using : status or result ?
>
> Also, for scripts parsing the output, I would try to keep key=val
> format (no space in @val), and concise 'vals'
Good idea. Will fix it in V3.