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 get_modem_node_ras(char node_name[16], int *devnum_out) { int valid_node; // check ACM device valid_node = get_modem_node("ttyACM", 0, devnum_out); if (valid_node >= 0) { sprintf(node_name, "ttyACM%d", valid_node); return 1; } // check serial device valid_node = get_modem_node("ttyUSB", 0, devnum_out); if (valid_node >= 0) { sprintf(node_name, "ttyUSB%d", valid_node); return 1; } return 0; }
static int ndis_control_network(char *ndis_ifname, int devnum, int is_start) { int valid_node; char control_node_wdm[16] = {0}, control_node_tty[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) sprintf(control_node_wdm, "cdc-wdm%d", valid_node); /* check tty device */ valid_node = get_modem_node("ttyUSB", devnum, NULL); if (valid_node >= 0) sprintf(control_node_tty, "ttyUSB%d", valid_node); if (strlen(control_node_wdm) > 0) { if (is_usbnet_has_module(ndis_ifname, "qmi_wwan")) return qmi_control_network(control_node_wdm, is_start); if (is_usbnet_has_module(ndis_ifname, "cdc_mbim")) return mbim_control_network(control_node_wdm, is_start); if (is_usbnet_has_module(ndis_ifname, "huawei_cdc_ncm")) return ncm_control_network(control_node_wdm, is_start); } if (strlen(control_node_tty) > 0) { if (is_usbnet_has_module(ndis_ifname, "cdc_ncm")) return ncm_control_network(control_node_tty, is_start); if (is_usbnet_has_module(ndis_ifname, "sierra_net")) return sierra_control_network(control_node_tty, is_start); } return 1; }