[Openvpn-devel,v3] multi_io: replace TA_INITIAL with TA_INSTANCE_POST

Message ID 20261114165505.8053-1-gert@greenie.muc.de
State New
Headers
Series [Openvpn-devel,v3] multi_io: replace TA_INITIAL with TA_INSTANCE_POST |

Commit Message

Gert Doering Nov. 14, 2026, 4:55 p.m. UTC
  From: Gianmarco De Gregori <gianmarco@mandelbit.com>

TA_INITIAL is TA_INSTANCE_POST plus multi_tcp_set_global_rw_flags(),
which multi_io_post() already calls once the instance has no output
left. Use TA_INSTANCE_POST for new TCP instances too and drop
TA_INITIAL.

With UDP instances going through the state machine as well, make the
MTP_NONE branch of multi_io_post() explicitly TCP only: reading the
stream residual and re-arming the socket only make sense on a
connection-oriented socket. multi_tcp_set_global_rw_flags() is then
never called on a datagram instance, and loses its proto check.

Change-Id: I4637d59ed1fba450e81518766526d934cd2902b7
Signed-off-by: Gianmarco De Gregori <gianmarco@mandelbit.com>
Acked-by: Razvan Cojocaru <razvanc@mailbox.org>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2049
---

This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.

Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2049
This mail reflects revision 3 of this Change.

Acked-by according to Gerrit (reflected above):
Razvan Cojocaru <razvanc@mailbox.org>
  

Patch

diff --git a/src/openvpn/mtcp.c b/src/openvpn/mtcp.c
index 2d0af06..524e437 100644
--- a/src/openvpn/mtcp.c
+++ b/src/openvpn/mtcp.c
@@ -118,11 +118,8 @@ 
 void
 multi_tcp_set_global_rw_flags(struct multi_context *m, struct multi_instance *mi)
 {
-    if (mi && !proto_is_dgram(mi->context.c2.link_sockets[0]->info.proto))
-    {
-        mi->socket_set_called = true;
-        socket_set(mi->context.c2.link_sockets[0], m->multi_io->es,
-                   mbuf_defined(mi->tcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ, &mi->ev_arg,
-                   &mi->tcp_rwflags);
-    }
+    mi->socket_set_called = true;
+    socket_set(mi->context.c2.link_sockets[0], m->multi_io->es,
+               mbuf_defined(mi->tcp_link_out_deferred) ? EVENT_WRITE : EVENT_READ, &mi->ev_arg,
+               &mi->tcp_rwflags);
 }
diff --git a/src/openvpn/multi_io.c b/src/openvpn/multi_io.c
index a6ce1d4..50c95b5 100644
--- a/src/openvpn/multi_io.c
+++ b/src/openvpn/multi_io.c
@@ -76,9 +76,6 @@ 
         case TA_TUN_WRITE:
             return "TA_TUN_WRITE";
 
-        case TA_INITIAL:
-            return "TA_INITIAL";
-
         case TA_TIMEOUT:
             return "TA_TIMEOUT";
 
@@ -435,12 +432,6 @@ 
             multi_io_write_link(m, mi, true, mpp_flags);
             break;
 
-        case TA_INITIAL:
-            ASSERT(mi);
-            multi_tcp_set_global_rw_flags(m, mi);
-            multi_process_post(m, mi, mpp_flags);
-            break;
-
         case TA_INSTANCE_POST:
             ASSERT(mi);
             multi_process_post(m, mi, mpp_flags);
@@ -486,13 +477,16 @@ 
             break;
 
         case MTP_NONE:
-            if (mi && sockets_read_residual(c))
+            if (mi && link_socket_connection_oriented(mi->context.c2.link_sockets[0]))
             {
-                newaction = TA_SOCKET_READ_RESIDUAL;
-            }
-            else
-            {
-                multi_tcp_set_global_rw_flags(m, mi);
+                if (sockets_read_residual(c))
+                {
+                    newaction = TA_SOCKET_READ_RESIDUAL;
+                }
+                else
+                {
+                    multi_tcp_set_global_rw_flags(m, mi);
+                }
             }
             break;
 
@@ -564,7 +558,7 @@ 
                          * before returning to the main loop. */
                         if (mi)
                         {
-                            multi_io_action(m, mi, NULL, TA_INITIAL, false);
+                            multi_io_action(m, mi, NULL, TA_INSTANCE_POST, false);
                         }
                     }
                     else if (e->rwflags & EVENT_READ)
diff --git a/src/openvpn/multi_io.h b/src/openvpn/multi_io.h
index 591225c..e178240 100644
--- a/src/openvpn/multi_io.h
+++ b/src/openvpn/multi_io.h
@@ -41,10 +41,9 @@ 
 #define TA_SOCKET_WRITE_DEFERRED 5
 #define TA_TUN_READ              6
 #define TA_TUN_WRITE             7
-#define TA_INITIAL               8
-#define TA_TIMEOUT               9
-#define TA_TUN_WRITE_TIMEOUT     10
-#define TA_INSTANCE_POST         11
+#define TA_TIMEOUT               8
+#define TA_TUN_WRITE_TIMEOUT     9
+#define TA_INSTANCE_POST         10
 
 /*
  * I/O state and events tracker