The following issues with the current socket layer hinders socket diagnostics
implementation, which led to this patch series.
1. tipc socket state is derived from multiple variables like
sock->state, tsk->probing_state and tsk->connected. This style forces
us to export multiple attributes to the user space, which has to be
backward compatible.
2. Abuse of sock->state cannot be exported to user-space without
requiring tipc specific hacks in the user-space.
- For connection less (CL) sockets sock->state is overloaded to
tipc state SS_READY.
- For connection oriented (CO) listening socket sock->state is
overloaded to tipc state SS_LISTEN.
This series is split into four:
1. Bug fixes in patch #1,2,3.
2. Minor cleanups in patch#4-5.
3. Express all tipc states using a single variable in patch#6-8.
4. Migrate the new tipc states to sk->sk_state in patch#9-16.
The figures below represents the FSM after this series:
For connectionless sockets:
+-----------+ +--------------+
| TIPC_OPEN |------>| TIPC_CLOSING |
+-----------+ +--------------+
Stream Server Listening Socket:
+-----------+ +-------------+
| TIPC_OPEN |------>| TIPC_LISTEN |
+-----------+ +-------------+
|
+--------------+ |
| TIPC_CLOSING |<-----------+
+--------------+
Stream Server Data Socket:
+-----------+ +------------------+
| TIPC_OPEN |------>| TIPC_ESTABLISHED |<---+
+-----------+ +------------------+ |
^ | | |
| | +----------+
| v
+--------------+
| TIPC_PROBING |
+--------------+
|
|
v
+--------------+ +--------------------+
| TIPC_CLOSING |<---| TIPC_DISCONNECTING |
+--------------+ +--------------------+
Stream Socket Client:
+-----------+ +-----------------+
| TIPC_OPEN |------>| TIPC_CONNECTING |
+-----------+ +-----------------+
|
|
v
+------------------+
| TIPC_ESTABLISHED |<---+
+------------------+ |
^ | | |
| | +---------+
| v
+--------------+
| TIPC_PROBING |
+--------------+
|
|
v
+--------------+ +--------------------+
| TIPC_CLOSING |<---| TIPC_DISCONNECTING |
+--------------+ +--------------------+
NOTE:
This is just a base refractoring required for socket diagnostics.
TIPC socket diagnostics support will be introduced in a later series.
Parthasarathy Bhuvaragan (16):
tipc: return early for non-blocking sockets at link congestion
tipc: wakeup sleeping users at disconnect
tipc: set kern=0 in sk_alloc() during tipc_accept()
tipc: rename struct tipc_skb_cb member handle to bytes_read
tipc: rename tsk->remote to tsk->peer for consistent naming
tipc: remove tsk->connected for connectionless sockets
tipc: remove tsk->connected from tipc_sock
tipc: remove probing_intv from tipc_sock
tipc: remove socket state SS_READY
tipc: create TIPC_LISTEN as a new sk_state
tipc: create TIPC_PROBING/TIPC_ESTABLISHED as new sk_states
tipc: create TIPC_OPEN as a new sk_state
tipc: create TIPC_DISCONNECTING as a new sk_state
tipc: create TIPC_CLOSING as a new sk_state
tipc: create TIPC_CONNECTING as a new sk_state
tipc: remove SS_CONNECTED sock state
include/uapi/linux/tipc.h | 13 ++
net/tipc/msg.h | 2 +-
net/tipc/socket.c | 385 +++++++++++++++++++++++++---------------------
3 files changed, 222 insertions(+), 178 deletions(-)
--
2.1.4