int disconnect_ndis(int devnum) { int valid_node, qmi_mode = 0; char control_node[16] = {0}; // check wdm device valid_node = find_modem_node("cdc-wdm", 0, 0, -1, NULL); // todo (need devnode for cdc-wdm) if (valid_node >= 0) { qmi_mode = 1; sprintf(control_node, "cdc-wdm%d", valid_node); } else { // check serial device valid_node = get_modem_node("ttyUSB", devnum, NULL); if (valid_node >= 0) sprintf(control_node, "ttyUSB%d", valid_node); } if (strlen(control_node) > 0) { if (!qmi_mode) { int vid = 0, pid = 0; get_modem_vid_pid(control_node, &vid, &pid); if ( (vid == 0x1199 || vid == 0x0f3d) && (pid == 0x68a3 || pid == 0x68aa) ) return doSystem("/bin/comgt -d /dev/%s -s %s/ppp/3g/%s", control_node, MODEM_SCRIPTS_DIR, "Sierra_disconn.scr"); else return doSystem("/bin/comgt -d /dev/%s -s %s/ppp/3g/%s", control_node, MODEM_SCRIPTS_DIR, "NDIS_disconn.scr"); } else return qmi_stop_network(control_node); } return 1; }
static int write_pppd_ras_conf(const char* call_path, const char *modem_node, int unit) { FILE *fp; int modem_type, vid = 0, pid = 0; char tmp[256], *user, *pass, *isp, *connect; if (!get_modem_vid_pid(modem_node, &vid, &pid)) return 0; if (!(fp = fopen(call_path, "w+"))) return 0; modem_type = nvram_get_int("modem_type"); user = nvram_safe_get("modem_user"); pass = nvram_safe_get("modem_pass"); isp = nvram_safe_get("modem_isp"); fprintf(fp, "/dev/%s\n", modem_node); fprintf(fp, "crtscts\n"); fprintf(fp, "modem\n"); fprintf(fp, "noauth\n"); if(strlen(user) > 0) fprintf(fp, "user '%s'\n", safe_pppd_line(user, tmp, sizeof(tmp))); if(strlen(pass) > 0) fprintf(fp, "password '%s'\n", safe_pppd_line(pass, tmp, sizeof(tmp))); if(!strcmp(isp, "Virgin") || !strcmp(isp, "CDMA-UA")){ fprintf(fp, "refuse-chap\n"); fprintf(fp, "refuse-mschap\n"); fprintf(fp, "refuse-mschap-v2\n"); } fprintf(fp, "mtu %d\n", nvram_safe_get_int("modem_mtu", 1500, 1000, 1500)); fprintf(fp, "mru %d\n", 1500); fprintf(fp, "persist\n"); fprintf(fp, "maxfail %d\n", 0); fprintf(fp, "holdoff %d\n", 10); fprintf(fp, "nopcomp noaccomp\n"); fprintf(fp, "novj nobsdcomp nodeflate\n"); fprintf(fp, "noipdefault\n"); if (nvram_invmatch("modem_dnsa", "0")) fprintf(fp, "usepeerdns\n"); fprintf(fp, "minunit %d\n", RAS_PPP_UNIT); fprintf(fp, "linkname wan%d\n", unit); if (nvram_get_int("modem_dbg") == 1) fprintf(fp, "debug\n"); connect = "Generic_conn.scr"; if (modem_type == 1) { connect = "EVDO_conn.scr"; } else if( modem_type == 2) { connect = "td_conn.scr"; } else { if (vid == 0x0b05 && pid == 0x0302) // T500 connect = "t500_conn.scr"; else if (vid == 0x0421 && pid == 0x0612) // CS-15 connect = "t500_conn.scr"; else if (vid == 0x106c && pid == 0x3716) connect = "verizon_conn.scr"; else if (vid == 0x1410 && pid == 0x4400) connect = "rogers_conn.scr"; } fprintf(fp, "%s \"/bin/comgt -d /dev/%s -s %s/ppp/3g/%s\"\n", "connect", modem_node, MODEM_SCRIPTS_DIR, connect); fprintf(fp, "%s \"/bin/comgt -d /dev/%s -s %s/ppp/3g/%s\"\n", "disconnect", modem_node, MODEM_SCRIPTS_DIR, "Generic_disconn.scr"); fclose(fp); return 1; }
static int write_pppd_ras_conf(const char* call_path, const char *modem_node, int ppp_unit) { FILE *fp; int modem_type, vid = 0, pid = 0; char *user, *pass, *isp; if (!get_modem_vid_pid(modem_node, &vid, &pid)) return 0; if (!(fp = fopen(call_path, "w+"))) return 0; modem_type = nvram_get_int("modem_type"); user = nvram_safe_get("modem_user"); pass = nvram_safe_get("modem_pass"); isp = nvram_safe_get("modem_isp"); fprintf(fp, "/dev/%s\n", modem_node); fprintf(fp, "modem\n"); fprintf(fp, "crtscts\n"); fprintf(fp, "noauth\n"); if(strlen(user) > 0) fprintf(fp, "user '%s'\n", user); if(strlen(pass) > 0) fprintf(fp, "password '%s'\n", pass); if(!strcmp(isp, "Virgin") || !strcmp(isp, "CDMA-UA")){ fprintf(fp, "refuse-chap\n"); fprintf(fp, "refuse-mschap\n"); fprintf(fp, "refuse-mschap-v2\n"); } fprintf(fp, "mtu %d\n", nvram_safe_get_int("modem_mtu", 1500, 1000, 1500)); fprintf(fp, "mru %d\n", 1500); fprintf(fp, "persist\n"); fprintf(fp, "maxfail %d\n", 0); fprintf(fp, "holdoff %d\n", 10); fprintf(fp, "nopcomp noaccomp\n"); fprintf(fp, "novj nobsdcomp nodeflate\n"); fprintf(fp, "noipdefault\n"); if (nvram_invmatch("modem_dnsa", "0")) fprintf(fp, "usepeerdns\n"); fprintf(fp, "minunit %d\n", ppp_unit); if(modem_type == 2){ fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/td.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); fprintf(fp, "disconnect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/Generic_disconn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); } else if(modem_type == 1){ fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/EVDO_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); fprintf(fp, "disconnect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/EVDO_disconn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); } else { if (vid == 0x0b05 && pid == 0x0302) // T500 fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/t500_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else if(vid == 0x0421 && pid == 0x0612) // CS-15 fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/t500_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else if(vid == 0x106c && pid == 0x3716) fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/verizon_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else if(vid == 0x1410 && pid == 0x4400) fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/rogers_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); else fprintf(fp, "connect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/Generic_conn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); fprintf(fp, "disconnect \"/bin/comgt -d /dev/%s -s %s/ppp/3g/Generic_disconn.scr\"\n", modem_node, MODEM_SCRIPTS_DIR); } fclose(fp); return 1; }