From f7dc8cc77cecd4b0784ea3350cb223b2eefdab04 Mon Sep 17 00:00:00 2001 From: Shibby Date: Wed, 19 Nov 2014 13:46:08 +0100 Subject: [PATCH] OpenVPN GUI: Selectable LAN interface to bridge with TAP --- release/src-rt-6.x.4708/router/httpd/tomato.c | 4 ++++ release/src-rt-6.x.4708/router/rc/vpn.c | 8 +++++-- release/src-rt-6.x.4708/router/shared/defaults.c | 4 ++++ release/src-rt-6.x.4708/router/www/vpn-client.asp | 29 ++++++++++++++++++++++- release/src-rt-6.x.4708/router/www/vpn-server.asp | 29 ++++++++++++++++++++++- 5 files changed, 70 insertions(+), 4 deletions(-) diff --git a/release/src-rt-6.x.4708/router/httpd/tomato.c b/release/src-rt-6.x.4708/router/httpd/tomato.c index 97b8a6413c..cf5d25b276 100644 --- a/release/src-rt-6.x.4708/router/httpd/tomato.c +++ b/release/src-rt-6.x.4708/router/httpd/tomato.c @@ -1365,6 +1365,7 @@ static const nvset_t nvset_list[] = { { "vpn_server1_crt", V_NONE }, { "vpn_server1_key", V_NONE }, { "vpn_server1_dh", V_NONE }, + { "vpn_server1_br", V_LENGTH(0, 50) }, { "vpn_server2_poll", V_RANGE(0, 1440) }, { "vpn_server2_if", V_TEXT(3, 3) }, // tap, tun { "vpn_server2_proto", V_TEXT(3, 10) }, // udp, tcp-server @@ -1398,6 +1399,7 @@ static const nvset_t nvset_list[] = { { "vpn_server2_crt", V_NONE }, { "vpn_server2_key", V_NONE }, { "vpn_server2_dh", V_NONE }, + { "vpn_server2_br", V_LENGTH(0, 50) }, { "vpn_client_eas", V_NONE }, { "vpn_client1_poll", V_RANGE(0, 1440) }, { "vpn_client1_if", V_TEXT(3, 3) }, // tap, tun @@ -1430,6 +1432,7 @@ static const nvset_t nvset_list[] = { { "vpn_client1_useronly", V_01 }, { "vpn_client1_tlsremote",V_01 }, { "vpn_client1_cn", V_NONE }, + { "vpn_client1_br", V_LENGTH(0, 50) }, { "vpn_client2_poll", V_RANGE(0, 1440) }, { "vpn_client2_if", V_TEXT(3, 3) }, // tap, tun { "vpn_client2_bridge", V_01 }, @@ -1461,6 +1464,7 @@ static const nvset_t nvset_list[] = { { "vpn_client2_useronly", V_01 }, { "vpn_client2_tlsremote",V_01 }, { "vpn_client2_cn", V_NONE }, + { "vpn_client2_br", V_LENGTH(0, 50) }, #endif // vpn #ifdef TCONFIG_PPTPD diff --git a/release/src-rt-6.x.4708/router/rc/vpn.c b/release/src-rt-6.x.4708/router/rc/vpn.c index dddfb5a4fe..31795c8203 100644 --- a/release/src-rt-6.x.4708/router/rc/vpn.c +++ b/release/src-rt-6.x.4708/router/rc/vpn.c @@ -50,6 +50,7 @@ void start_vpnclient(int clientNum) FILE *fp; char iface[IF_SIZE]; char buffer[BUF_SIZE]; + char buffer2[BUF_SIZE]; char *argv[6]; int argc = 0; enum { TLS, SECRET, CUSTOM } cryptMode = CUSTOM; @@ -148,7 +149,8 @@ void start_vpnclient(int clientNum) { if ( routeMode == BRIDGE ) { - snprintf(&buffer[0], BUF_SIZE, "brctl addif %s %s", nvram_safe_get("lan_ifname"), &iface[0]); + sprintf(&buffer2[0], "vpn_client%d_br", clientNum); + snprintf(&buffer[0], BUF_SIZE, "brctl addif %s %s", nvram_safe_get(&buffer2[0]), &iface[0]); for (argv[argc=0] = strtok(&buffer[0], " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " ")); if ( _eval(argv, NULL, 0, NULL) ) { @@ -511,6 +513,7 @@ void start_vpnserver(int serverNum) FILE *fp, *ccd; char iface[IF_SIZE]; char buffer[BUF_SIZE]; + char buffer2[BUF_SIZE]; char *argv[6], *chp, *route; int argc = 0; int c2c = 0; @@ -597,7 +600,8 @@ void start_vpnserver(int serverNum) // Add interface to LAN bridge (TAP only) if( ifType == TAP ) { - snprintf(&buffer[0], BUF_SIZE, "brctl addif %s %s", nvram_safe_get("lan_ifname"), &iface[0]); + sprintf(&buffer2[0], "vpn_server%d_br", serverNum); + snprintf(&buffer[0], BUF_SIZE, "brctl addif %s %s", nvram_safe_get(&buffer2[0]), &iface[0]); for (argv[argc=0] = strtok(&buffer[0], " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " ")); if ( _eval(argv, NULL, 0, NULL) ) { diff --git a/release/src-rt-6.x.4708/router/shared/defaults.c b/release/src-rt-6.x.4708/router/shared/defaults.c index 2acfc99e8d..9507c65aa1 100644 --- a/release/src-rt-6.x.4708/router/shared/defaults.c +++ b/release/src-rt-6.x.4708/router/shared/defaults.c @@ -849,6 +849,7 @@ struct nvram_tuple router_defaults[] = { { "vpn_server1_crt", "" , 0 }, { "vpn_server1_key", "" , 0 }, { "vpn_server1_dh", "" , 0 }, + { "vpn_server1_br", "br0" , 0 }, { "vpn_server2_poll", "0" , 0 }, { "vpn_server2_if", "tun" , 0 }, { "vpn_server2_proto", "udp" , 0 }, @@ -879,6 +880,7 @@ struct nvram_tuple router_defaults[] = { { "vpn_server2_crt", "" , 0 }, { "vpn_server2_key", "" , 0 }, { "vpn_server2_dh", "" , 0 }, + { "vpn_server2_br", "br0" , 0 }, { "vpn_client_eas", "" , 0 }, { "vpn_client1_poll", "0" , 0 }, { "vpn_client1_if", "tun" , 0 }, @@ -906,6 +908,7 @@ struct nvram_tuple router_defaults[] = { { "vpn_client1_ca", "" , 0 }, { "vpn_client1_crt", "" , 0 }, { "vpn_client1_key", "" , 0 }, + { "vpn_client1_br", "br0" , 0 }, { "vpn_client2_poll", "0" , 0 }, { "vpn_client2_if", "tun" , 0 }, { "vpn_client2_bridge", "1" , 0 }, @@ -932,6 +935,7 @@ struct nvram_tuple router_defaults[] = { { "vpn_client2_ca", "" , 0 }, { "vpn_client2_crt", "" , 0 }, { "vpn_client2_key", "" , 0 }, + { "vpn_client2_br", "br0" , 0 }, #endif // vpn #ifdef TCONFIG_PPTPD { "pptp_client_enable", "0" , 0 }, diff --git a/release/src-rt-6.x.4708/router/www/vpn-client.asp b/release/src-rt-6.x.4708/router/www/vpn-client.asp index ef0efe3b0a..c6d716a4fc 100644 --- a/release/src-rt-6.x.4708/router/www/vpn-client.asp +++ b/release/src-rt-6.x.4708/router/www/vpn-client.asp @@ -21,7 +21,7 @@