int main(int argc, char **argv) { HANDLE irh; WINERR err = ERROR_SUCCESS; int ap_mode = 0; cmd_t *cmd = NULL; int init_err = TRUE; char *ifname = NULL; int help = 0; int status; /* initialize irelay and select default adapter */ irh = INVALID_HANDLE_VALUE; if ((err = ir_init(&irh)) != ERROR_SUCCESS) goto done; ndevs = ARRAYSIZE(devlist); if (((err = ir_adapter_list(irh, &devlist[0], &ndevs)) != ERROR_SUCCESS) || ((err = select_adapter(irh, -1)) != ERROR_SUCCESS)) goto done; init_err = FALSE; for (++argv; *argv;) { /* command line option */ if ((status = dhd_option(&argv, &ifname, &help)) == CMD_OPT) { /* print usage */ if (help) break; /* select different adapter */ if (ifname) { ir_unbind(irh); if ((err = select_adapter(irh, atoi(ifname))) != ERROR_SUCCESS) break; if (dhd_check((void *)irh)) break; } continue; } if (dhd_check((void *)irh)) break; /* search for command */ for (cmd = dhd_cmds; cmd->name && strcmp(cmd->name, *argv); cmd++); /* defaults to using the set_var and get_var commands */ if (cmd->name == NULL) cmd = &dhd_varcmd; /* do command */ if (cmd->name) err = (WINERR) (*cmd->func)((void *) irh, cmd, argv); break; } done: /* In case of COMMAND_ERROR, command has already printed an error message */ if (!cmd) dhd_usage(NULL); else if (err == USAGE_ERROR) dhd_cmd_usage(cmd); else if (err == IOCTL_ERROR) display_err("main:", err); if (irh != INVALID_HANDLE_VALUE) { ir_unbind(irh); ir_exit(irh); } return err; }
/* Main client function * The code is mostly from wlu_linux.c. This function takes care of executing remote dhd commands * along with the local dhd commands now. */ int main(int argc, char **argv) { struct ifreq ifr; char *ifname = NULL; int err = 0; int help = 0; int status = CMD_DHD; #ifdef RWL_SOCKET struct ipv4_addr temp; #endif /* RWL_SOCKET */ UNUSED_PARAMETER(argc); av0 = argv[0]; memset(&ifr, 0, sizeof(ifr)); argv++; if ((status = dhd_option(&argv, &ifname, &help)) == CMD_OPT) { if (ifname) strncpy(ifr.ifr_name, ifname, IFNAMSIZ); } /* Linux client looking for a Win32 server */ if (*argv && strncmp (*argv, "--wince", strlen(*argv)) == 0) { rwl_os_type = WIN32_OS; argv++; } /* RWL socket transport Usage: --socket ipaddr [port num] */ if (*argv && strncmp (*argv, "--socket", strlen(*argv)) == 0) { argv++; remote_type = REMOTE_SOCKET; #ifdef RWL_SOCKET if (!(*argv)) { rwl_usage(remote_type); return err; } if (!dhd_atoip(*argv, &temp)) { rwl_usage(remote_type); return err; } g_rwl_servIP = *argv; argv++; g_rwl_servport = DEFAULT_SERVER_PORT; if ((*argv) && isdigit(**argv)) { g_rwl_servport = atoi(*argv); argv++; } #endif /* RWL_SOCKET */ } /* RWL from system serial port on client to uart dongle port on server */ /* Usage: --dongle /dev/ttyS0 */ if (*argv && strncmp (*argv, "--dongle", strlen(*argv)) == 0) { argv++; remote_type = REMOTE_DONGLE; } /* RWL over wifi. Usage: --wifi mac_address */ if (*argv && strncmp (*argv, "--wifi", strlen(*argv)) == 0) { argv++; #ifdef RWL_WIFI remote_type = NO_REMOTE; if (!ifr.ifr_name[0]) { dhd_find(&ifr, "wl"); } /* validate the interface */ if (!ifr.ifr_name[0] || wl_check((void*)&ifr)) { fprintf(stderr, "%s: wl driver adapter not found\n", av0); exit(1); } remote_type = REMOTE_WIFI; if (argc < 4) { rwl_usage(remote_type); return err; } /* copy server mac address to local buffer for later use by findserver cmd */ if (!dhd_ether_atoe(*argv, (struct ether_addr *)g_rwl_buf_mac)) { fprintf(stderr, "could not parse as an ethernet MAC address\n"); return FAIL; } argv++; #else /* RWL_WIFI */ remote_type = REMOTE_WIFI; #endif /* RWL_WIFI */ } /* Process for local dhd */ if (remote_type == NO_REMOTE) { err = process_args(&ifr, argv); return err; } #ifdef RWL_ENABLE if (*argv) { err = process_args(&ifr, argv); if ((err == SERIAL_PORT_ERR) && (remote_type == REMOTE_DONGLE)) { DPRINT_ERR(ERR, "\n Retry again\n"); err = process_args((struct ifreq*)&ifr, argv); } return err; } rwl_usage(remote_type); #endif /* RWL_ENABLE */ return err; }
/* * Function called for 'local' execution and for 'remote' non-interactive session * (shell cmd, wl cmd) .The code is mostly from wlu_linux.c. This code can be * common to wlu_linux.c and dhdu_linux.c */ static int process_args(struct ifreq* ifr, char **argv) { char *ifname = NULL; int help = 0; int status = 0; int err = BCME_OK; cmd_t *cmd = NULL; while (*argv) { #ifdef RWL_ENABLE if ((strcmp (*argv, "sh") == 0) && (remote_type != NO_REMOTE)) { argv++; /* Get the shell command */ if (*argv) { /* Register handler in case of shell command only */ signal(SIGINT, ctrlc_handler); err = rwl_shell_cmd_proc((void*)ifr, argv, SHELL_CMD); } else { DPRINT_ERR(ERR, "Enter the shell command (e.g ls(Linux) or dir(Win CE) \n"); err = BCME_ERROR; } return err; } #endif /* RWL_ENABLE */ if ((status = dhd_option(&argv, &ifname, &help)) == CMD_OPT) { if (help) break; if (ifname) strncpy(ifr->ifr_name, ifname, IFNAMSIZ); continue; } /* parse error */ else if (status == CMD_ERR) break; if (remote_type == NO_REMOTE) { /* use default interface */ if (!ifr->ifr_name[0]) dhd_find(ifr, "dhd"); /* validate the interface */ if (!ifr->ifr_name[0] || dhd_check((void *)ifr)) { if (strcmp("dldn", *argv) != 0) { fprintf(stderr, "%s: dhd driver adapter not found\n", av0); exit(BCME_ERROR); } } } /* search for command */ cmd = dhd_find_cmd(*argv); /* if not found, use default set_var and get_var commands */ if (!cmd) { cmd = &dhd_varcmd; } /* do command */ err = (*cmd->func)((void *) ifr, cmd, argv); break; } /* while loop end */ /* provide for help on a particular command */ if (help && *argv) { cmd = dhd_find_cmd(*argv); if (cmd) { dhd_cmd_usage(cmd); } else { DPRINT_ERR(ERR, "%s: Unrecognized command \"%s\", type -h for help\n", av0, *argv); } } else if (!cmd) dhd_usage(NULL); else if (err == USAGE_ERROR) dhd_cmd_usage(cmd); else if (err == IOCTL_ERROR) dhd_printlasterror((void *) ifr); return err; }
int main(int argc, char **argv) { struct ifreq ifr; cmd_t *cmd = NULL; int err = 0; char *ifname = NULL; int help = 0; int status = CMD_DHD; UNUSED_PARAMETER(argc); dhdu_av0 = argv[0]; memset(&ifr, 0, sizeof(ifr)); for (++argv; *argv;) { /* command option */ if ((status = dhd_option(&argv, &ifname, &help)) == CMD_OPT) { if (help) break; if (ifname) { if (strlen(ifname) > IFNAMSIZ) { fprintf(stderr, "%s: interface name too long\n", dhdu_av0); break; } strncpy(ifr.ifr_name, ifname, IFNAMSIZ); } continue; } /* parse error */ else if (status == CMD_ERR) break; /* use default if no interface specified */ if (!*ifr.ifr_name) dhd_find(&ifr); /* validate the interface */ if (!*ifr.ifr_name || dhd_check((void *)&ifr)) { fprintf(stderr, "%s: dhd driver adapter not found\n", dhdu_av0); exit(1); } /* search for command */ for (cmd = dhd_cmds; cmd->name && strcmp(cmd->name, *argv); cmd++); /* defaults to using the set_var and get_var commands */ if (cmd->name == NULL) cmd = &dhd_varcmd; /* do command */ if (cmd->name) err = (*cmd->func)((void *)&ifr, cmd, argv); break; } /* In case of COMMAND_ERROR, command has already printed an error message */ if (!cmd) dhd_usage(NULL); else if (err == USAGE_ERROR) dhd_cmd_usage(cmd); else if (err == IOCTL_ERROR) dhd_printlasterror((void *)&ifr); return err; }