- [ ] Add sampling so that RTT is not calculated for every packet (with unique value) for large flows
- This serves two purposes, limiting the output from pping and reducing the rate at which the timestamp map grows (making it less likely to become full)
- Will likely be based on a per-flow rate limit
- [ ] Keep some per-flow state
- Will likely be needed for the sampling
- [ ] Could potentially include keeping track of average RTT, which may be useful for some decisions (ex. how often to sample, when entry can be removed etc)
- [ ] Could potentially include keeping track of minimum RTT (as done by the original pping), ex. to track bufferbloat
- [ ] Could potentially include keeping track of if flow is bi-directional
- Original pping checks if flow is bi-directional before adding timestamps, but this could miss shorter flows
- [ ] Improve map cleaning: Use a dynamic time to live for map entries based on flow's RTT, instead of static 10s limit
- Keeping entries around for a long time allows the map to grow unnecessarily large, which slows down the cleaning and may block new entries
- TCP timestamp need to be kept for a while so only first packet with unique value is timestamped. For identifiers that are unique per packet, they can be removed directly after RTT is calculated
- Once sampling is introduced, keeping entry around will not be sufficient to guarantee only timestamping first packet. May at that point remove every entry once RTT is calculated.
- [ ] Use libxdp to load XDP program
- [ ] Add option for machine-readable output (as original pping)
- [ ] Add timestamps to output (as original pping)