This shows you the differences between two versions of the page.
sdk:set-default-route-based-on-current-ssid [2014/11/26 16:26] |
sdk:set-default-route-based-on-current-ssid [2014/11/26 16:26] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Set fake default route dynamically based on SSID ====== | ||
+ | This script checks every 5 seconds which interface should be used as default gateway. As the default gateway is managed by the link-manager, a fake default gateway is configured by this script. \\ | ||
+ | Conditions could be any, here it depend on which WLAN SSID the router is connected. | ||
+ | <code c set-route.are> | ||
+ | /* DESC: set route to server depending on active WWAN / WLAN network | ||
+ | * Copyright (C) 2014 NetModule AG | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | nb_syslog("starting"); | ||
+ | |||
+ | void restartIPsec(){ | ||
+ | nb_config_set("ipsec.status=0"); | ||
+ | sleep(6); // lower valus result in disabled ipsec admin status | ||
+ | nb_config_set("ipsec.status=1"); | ||
+ | } | ||
+ | void addRoute(int id, string interface, string destination, string netmask, string gateway){ | ||
+ | route = strcat("route." ,id, ".metric=", 0); | ||
+ | route = strcat(route, " route." ,id, ".interface=", interface); | ||
+ | route = strcat(route, " route." ,id, ".target=", destination); | ||
+ | route = strcat(route, " route." ,id, ".netmask=", netmask); | ||
+ | route = strcat(route, " route." ,id, ".gateway=", gateway); | ||
+ | nb_config_set(route); | ||
+ | } | ||
+ | |||
+ | lastWanInterface = ""; | ||
+ | while (1) { | ||
+ | wanInterface = ""; | ||
+ | status = nb_status("wan"); | ||
+ | wwan_status = status.WANLINK1_STATE; | ||
+ | wlan_status = status.WANLINK2_STATE; | ||
+ | wlan_network = status.WANLINK2_NETWORK; | ||
+ | SERVER = nb_config_get("ipsec.0.remote.serverIp"); | ||
+ | nb_syslog("WLAN is %s with %s", wlan_status, wlan_network); | ||
+ | nb_syslog("WWAN is %s", wwan_status); | ||
+ | nb_syslog("routing traffic over %s", lastWanInterface); | ||
+ | |||
+ | if (wlan_status == "up" && wlan_network == "kis") { | ||
+ | // take wlan link for IPsec | ||
+ | wanInterface = "wlan0"; | ||
+ | } else if (wwan_status == "up" || wlan_status == "up" && wlan_network == "video") { | ||
+ | // take mobile link for IPsec | ||
+ | wanInterface = "wwan0"; | ||
+ | } | ||
+ | if (wanInterface != "" && wanInterface != lastWanInterface) { | ||
+ | if (wanInterface == "wlan0") { | ||
+ | addRoute(0, wanInterface, SERVER, "255.255.255.255", struct_get(status, "WANLINK2_GATEWAY")); | ||
+ | addRoute(1, wanInterface, "0.0.0.0", "128.0.0.0", struct_get(status, "WANLINK2_GATEWAY")); | ||
+ | addRoute(2, wanInterface, "128.0.0.0", "128.0.0.0", struct_get(status, "WANLINK2_GATEWAY")); | ||
+ | nb_syslog("routing traffic over wlan"); | ||
+ | } else if (wanInterface == "wwan0") { | ||
+ | addRoute(0, wanInterface, SERVER, "255.255.255.255", struct_get(status, "WANLINK1_GATEWAY")); | ||
+ | addRoute(1, wanInterface, "0.0.0.0", "128.0.0.0", struct_get(status, "WANLINK1_GATEWAY")); | ||
+ | addRoute(2, wanInterface, "128.0.0.0", "128.0.0.0", struct_get(status, "WANLINK1_GATEWAY")); | ||
+ | nb_syslog("routing traffic over mobile"); | ||
+ | } | ||
+ | restartIPsec(); | ||
+ | lastWanInterface = wanInterface; | ||
+ | } | ||
+ | sleep(5); | ||
+ | } | ||
+ | nb_syslog("exit"); | ||
+ | exit(0); | ||
+ | </code> |