The following issues with the current socket layer hinders socket diagnostics
implementation, which led to this patch series. The series does not add any
functional change.

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 three:
1. A bug fix in patch-1
2. Express all tipc states using a single variable. This is done in patch#2-5.
3. Migrate the new tipc states to sk->sk_state. This is done in patch#6-12.

The figures below represents the FSM after this series:

Unconnected Sockets:
+------------------+        +--------------------+
| TIPC_UNCONNECTED |------->| TIPC_DISCONNECTING |
+------------------+        +--------------------+

Stream Server Listening Socket:
+------------------+        +-------------+
| TIPC_UNCONNECTED |------->| TIPC_LISTEN |
+------------------+        +-------------+
                                  |
+--------------------+            |
| TIPC_DISCONNECTING |<-----------+
+--------------------+

Stream Server Data Socket:
+-----------------+        +------------------+
|TIPC_UNCONNECTED |------> | TIPC_ESTABLISHED |<---+
+-----------------+        +------------------+    |
                               ^   |    |          |
                               |   |    +----------+
                               |   v
+------------------+      +-------------+
|TIPC_DISCONNECTING|<-----|TIPC_PROBING |
+------------------+      +-------------+

Stream Socket Client:
+-----------------+       +-----------------+
|TIPC_UNCONNECTED |------>| TIPC_CONNECTING |
+-----------------+       +-----------------+
                                  |
                                  |
                                  v
                          +------------------+
                          | TIPC_ESTABLISHED |<---+
                          +------------------+    |
                               ^   |    |         |
                               |   |    +---------+
                               |   v
+------------------+      +-------------+
|TIPC_DISCONNECTING|<-----|TIPC_PROBING |
+------------------+      +-------------+

NOTE:
This is just a base refractoring required for socket diagnostics.
Implementation of TIPC socket diagnostics will be sent as a
separate series.

v2: - Address comments from Ying Xue <ying....@windriver.com> in
      patch #4, #5, #12.
    - Added a note that the socket diagnostics will be sent as
      another series.
v1: - I base the following patch series as the first version:
      [RFC PATCH v1 00/12] tipc: create socket FSM using sk_state only

Parthasarathy Bhuvaragan (12):
  tipc: set kern=0 in sk_alloc() during tipc_accept()
  tipc: rename tsk->remote to tsk->peer for consistent naming
  tipc: remove tsk->connected for connection less 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_UNCONNECTED as a new sk_state
  tipc: create TIPC_DISCONNECTING 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 |  12 ++
 net/tipc/socket.c         | 340 ++++++++++++++++++++++++++--------------------
 2 files changed, 205 insertions(+), 147 deletions(-)

-- 
2.1.4


------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. http://sdm.link/zohodev2dev
_______________________________________________
tipc-discussion mailing list
tipc-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to