Index: /src/router/libutils/lib3g.c =================================================================== --- /src/router/libutils/lib3g.c (revision 12369) +++ /src/router/libutils/lib3g.c (revision 12432) @@ -82,9 +82,5 @@ mkdir("/tmp/usb"); eval("mount", "-t", "usbfs", "usb", "/tmp/usb"); - insmod("usbserial"); //insmod("sierra"); //further investigation required (compass problem) - insmod("option"); - insmod("ipw"); - insmod("pl2303"); #endif @@ -110,4 +106,6 @@ //sierra wireless fprintf(stderr, "Sierra Wireless Compass 885 deteted\n"); + insmod("usbserial"); + insmod("sierra"); nvram_set("3gdata", "/dev/usb/tts/4"); return "/dev/usb/tts/3"; @@ -116,4 +114,6 @@ //sierra wireless fprintf(stderr, "Sierra Wireless Compass 888 deteted\n"); + insmod("usbserial"); + insmod("sierra"); nvram_set("3gdata", "/dev/usb/tts/4"); return "/dev/usb/tts/3"; @@ -123,4 +123,6 @@ fprintf(stderr, "Sierra Wireless MC8790\n"); nvram_set("3gdata", "/dev/usb/tts/4"); + insmod("usbserial"); + insmod("sierra"); checkreset("/dev/usb/tts/3"); return "/dev/usb/tts/3"; @@ -130,4 +132,6 @@ fprintf(stderr, "Sierra Wireless MC8790\n"); nvram_set("3gdata", "/dev/usb/tts/4"); + insmod("usbserial"); + insmod("sierra"); checkreset("/dev/usb/tts/3"); return "/dev/usb/tts/3"; @@ -137,4 +141,6 @@ fprintf(stderr, "Sierra Wireless MC8790\n"); nvram_set("3gdata", "/dev/usb/tts/4"); + insmod("usbserial"); + insmod("sierra"); checkreset("/dev/usb/tts/3"); return "/dev/usb/tts/3"; @@ -143,4 +149,5 @@ //huawei fprintf(stderr, "HUAWEI/Option E172 detected\n"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/0"; @@ -149,4 +156,5 @@ //huawei fprintf(stderr, "HUAWEI/Option E301 HSUPA detected\n"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/0"; @@ -155,4 +163,5 @@ //huawei fprintf(stderr, "HUAWEI/Option E600 detected\n"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/0"; @@ -161,4 +170,5 @@ //huawei fprintf(stderr, "HUAWEI/Option EC270 detected\n"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/0"; @@ -167,4 +177,5 @@ //huawei fprintf(stderr, "HUAWEI/Option EC168 detected\n"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/0"; @@ -173,4 +184,5 @@ //huawei fprintf(stderr, "HUAWEI/Option EC168 detected\n"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/0"; @@ -181,4 +193,5 @@ fprintf(stderr, "QUALCOMM ICON 210 detected\n"); nvram_set("3gdata", "/dev/usb/tts/2"); + insmod("usbserial"); insmod("option"); return "/dev/usb/tts/2"; @@ -198,4 +211,5 @@ system("usb_modeswitch -c /tmp/usb_modeswitch.conf"); sleep(2); + insmod("usbserial"); insmod("option"); nvram_set("3gdata", "/dev/usb/tts/2"); @@ -206,19 +220,17 @@ //huawei fprintf(stderr, "QUALCOMM ICON 225 detected\n"); -/* FILE *out = fopen("/tmp/usb_modeswitch.conf","wb"); - fprintf(out,"DefaultVendor=0x0af0\n"); - fprintf(out,"DefaultProduct=0x6971\n"); - fprintf(out,"TargetClass=0xff\n"); - fprintf(out,"MessageContent=\"55534243785634120100000080000601000000000000000000000000000000\"\n"); + system("ozerocdoff -wi 0x6971"); + sleep(10); + system("insmod hso"); + FILE *out=fopen("/tmp/conninfo.ini","wb"); + fprintf(out,"APN=%s\n",nvram_safe_get("wan_apn")); + fprintf(out,"USER=%s\n",nvram_safe_get("ppp_username")); + fprintf(out,"PASS=%s\n",nvram_safe_get("ppp_passwd")); + fprintf(out,"PIN=%s\n",nvram_safe_get("wan_pin")); fclose(out); - system("usb_modeswitch -c /tmp/usb_modeswitch.conf");*/ - system("ozerocdoff -wi 0x6971"); - sleep(5); - system("insmod hso"); - nvram_set("3gdata", "/dev/usb/tts/2"); - return "/dev/usb/tts/2"; - } - - + nvram_set("3gdata", "hso"); + system("/etc/hso/hso_connect.sh restart"); + return "hso"; + } if (scanFor(0x1199, 0x6832)) { @@ -229,4 +241,6 @@ return "/dev/usb/tts/2"; } + insmod("usbserial"); + insmod("sierra"); insmod("option"); return ttsdevice; Index: /src/router/libutils/utils.c =================================================================== --- /src/router/libutils/utils.c (revision 12344) +++ /src/router/libutils/utils.c (revision 12432) @@ -1641,9 +1641,9 @@ int wan_link = 0; - if (nvram_match("wan_proto", "pptp") + if ((nvram_match("wan_proto", "pptp") || nvram_match("wan_proto", "l2tp") || nvram_match("wan_proto", "pppoe") || nvram_match("wan_proto", "3g") - || nvram_match("wan_proto", "heartbeat")) { + || nvram_match("wan_proto", "heartbeat")) && !nvram_match("3gdata","hso")) { FILE *fp; char filename[80]; Index: /src/router/services/sysinit/sysinit-rt2880.c =================================================================== --- /src/router/services/sysinit/sysinit-rt2880.c (revision 12224) +++ /src/router/services/sysinit/sysinit-rt2880.c (revision 12432) @@ -69,4 +69,5 @@ mount("proc", "/proc", "proc", MS_MGC_VAL, NULL); mount("sysfs", "/sys", "sysfs", MS_MGC_VAL, NULL); + mount("usbfs", "/proc/bus/usb", "usbfs", MS_MGC_VAL, NULL); cprintf("sysinit() tmp\n"); Index: /src/router/services/networking/ppp.c =================================================================== --- /src/router/services/networking/ppp.c (revision 12224) +++ /src/router/services/networking/ppp.c (revision 12432) @@ -47,4 +47,18 @@ #define IFUP (IFF_UP | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST) + +char *getenvs(char *env) +{ +static unsigned char r[64]; +char *e=getenv(env); +int c=0; +int i; +for (i=0;i