[PATCH 1/9] Allow tunnel setup prior to entering mainloop

Kevin Cernekee cernekee at gmail.com
Sun Feb 7 20:25:58 PST 2016


Legacy callers can invoke openconnect_setup_tun_fd() before DTLS
starts.  If this happens, don't try to set up the tunnel from the
mainloop.

Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
 mainloop.c  | 5 -----
 tun-win32.c | 1 +
 tun.c       | 1 +
 3 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/mainloop.c b/mainloop.c
index 8a830d7..cb45389 100644
--- a/mainloop.c
+++ b/mainloop.c
@@ -168,7 +168,6 @@ int openconnect_mainloop(struct openconnect_info *vpninfo,
 {
 	int ret = 0;
 
-	vpninfo->tun_is_up = 0;
 	vpninfo->reconnect_timeout = reconnect_timeout;
 	vpninfo->reconnect_interval = reconnect_interval;
 
@@ -206,8 +205,6 @@ int openconnect_mainloop(struct openconnect_info *vpninfo,
 				if (ret) {
 					break;
 				}
-
-				vpninfo->tun_is_up = 1;
 			}
 
 			ret = vpninfo->proto.udp_mainloop(vpninfo, &timeout);
@@ -220,8 +217,6 @@ int openconnect_mainloop(struct openconnect_info *vpninfo,
 			ret = setup_tun_device(vpninfo);
 			if (ret)
 				break;
-
-			vpninfo->tun_is_up = 1;
 		}
 
 		ret = vpninfo->proto.tcp_mainloop(vpninfo, &timeout);
diff --git a/tun-win32.c b/tun-win32.c
index a7f2258..41f70de 100644
--- a/tun-win32.c
+++ b/tun-win32.c
@@ -326,6 +326,7 @@ int openconnect_setup_tun_fd(struct openconnect_info *vpninfo, intptr_t tun_fd)
 {
 	vpninfo->tun_fh = (HANDLE)tun_fd;
 	vpninfo->tun_rd_overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+	vpninfo->tun_is_up = 1;
 	monitor_read_fd(vpninfo, tun);
 
 	return 0;
diff --git a/tun.c b/tun.c
index 89dc87b..7d18db0 100644
--- a/tun.c
+++ b/tun.c
@@ -447,6 +447,7 @@ int openconnect_setup_tun_fd(struct openconnect_info *vpninfo, int tun_fd)
 		unmonitor_read_fd(vpninfo, tun);
 
 	vpninfo->tun_fd = tun_fd;
+	vpninfo->tun_is_up = 1;
 
 	monitor_fd_new(vpninfo, tun);
 	monitor_read_fd(vpninfo, tun);
-- 
1.9.1




More information about the openconnect-devel mailing list