There are a number of things that are more-or-less general to flows which are still explicitly handled in tcp.c and tcp_splice.c including allocation and freeing of flow entries, and dispatch of deferred and timer functions. Even without adding more fields to the common flow structure, we can handle a number of these in a more flow-centric way. Unlike v1 this version is based on the hash table rework series. Changes since v1: * Store the timestamp of last flow timers run in a global, rather than a ctx field * Rebased on the TCP hash table rework * Add patches 9..13/13 with changes to allocation and freeing of flow entries. David Gibson (13): flow: Make flow_table.h #include the protocol specific headers it needs treewide: Standardise on 'now' for current timestamp variables tcp, tcp_splice: Remove redundant handling from tcp_timer() tcp, tcp_splice: Move per-type cleanup logic into per-type helpers flow, tcp: Add flow-centric dispatch for deferred flow handling flow, tcp: Add handling for per-flow timers epoll: Better handling of number of epoll types tcp, tcp_splice: Avoid double layered dispatch for connected TCP sockets flow: Move flow_log_() to near top of flow.c flow: Move flow_count from context structure to a global flow: Abstract helpers for allocating new flows flow: Enforce that freeing of closed flows must happen in deferred handlers flow: Avoid moving flow entries to compact table flow.c | 201 +++++++++++++++++++++++++++++++++++++++++---------- flow.h | 5 +- flow_table.h | 34 +++++++++ icmp.c | 12 +-- icmp.h | 2 +- log.c | 34 ++++----- passt.c | 20 +++-- passt.h | 9 +-- tcp.c | 139 ++++++++--------------------------- tcp.h | 2 +- tcp_conn.h | 8 +- tcp_splice.c | 60 +++++++-------- tcp_splice.h | 6 +- udp.c | 16 ++-- udp.h | 2 +- 15 files changed, 317 insertions(+), 233 deletions(-) -- 2.43.0