📄 mn_tool.c
字号:
-1); } if (r == API_SUCCESS) printf("Location updated.\n"); else printf("Call failed: %s\n", dynamics_mn_get_error_string(r));}void cmd_confirm(int argc, char *argv[]){ int r; r = dynamics_mn_confirm(-1); if (r == API_SUCCESS) printf("Confirmed.\n"); else printf("Call failed: %s\n", dynamics_mn_get_error_string(r));}void cmd_path(int argc, char *argv[]){ char *p; if (argc < 2) { p = dynamics_mn_get_agent_path(); if (p) printf("Current agent path is \"%s\".\n", p); return; } else if (argc > 2) { printf("Invalid arguments. Usage 'path <path>'.\n"); return; } if (dynamics_mn_init(argv[1]) == API_SUCCESS) { printf("Using agent '%s'.\n", argv[1]); } else printf("Failed.\n");}void cmd_force(int argc, char *argv[]){ int r; struct in_addr addr; if (argc >= 2 && inet_aton(argv[1], &addr) == 0) { printf("Invalid arguments. Usage example 'force 10.1.2.3'\n"); return; } if (argc == 1) addr.s_addr = 0; r = dynamics_mn_force_fa(&addr, -1); if (r == API_SUCCESS) printf("FA selection forced to %s.\n", inet_ntoa(addr)); else printf("Call failed: %s\n", dynamics_mn_get_error_string(r));}void cmd_list(int argc, char *argv[]){ int r, c; struct dynamics_mobile_fa_list data[MAX_NUM_FA]; struct timeval tstamp; if (argc == 2 && (r = atoi(argv[1])) > 0) { tool_monitor(argv[0], r); } c = MAX_NUM_FA; r = dynamics_mn_get_fa_list(&c, data, -1); gettimeofday(&tstamp, NULL); if (r == API_SUCCESS) { printf("List of heard mobility agents:\n"); for (r = 0; r < c; r++) { printf("%-16s %-5s ", inet_ntoa(data[r].addr), data[r].interface); if (data[r].priority != -2 && data[r].priority != MAXINT) printf("prio %2d (-%3d%%), ", data[r].priority, data[r].reduce); if (data[r].priority == MAXINT) printf("prio MAX (-%3d%%), ", data[r].reduce); printf("age %2ds", (int)(tstamp.tv_sec - data[r].last)); if (data[r].quality_avg >= 0) printf(", qual %2d%%", data[r].quality_avg); if (data[r].flags & API_MA_FLAGS_FA) printf(" FA"); if (data[r].flags & API_MA_FLAGS_HA) printf(" HA"); if (data[r].flags & API_MA_FLAGS_BUSY) printf(" BUSY"); if (data[r].flags & API_MA_FLAGS_DYNAMICS) printf(" DYN"); if (data[r].in_use == 1) printf(" IN-USE"); if (data[r].current_adv == 1) printf(" CURRENT"); printf("\n"); } } else { printf("Call failed: %s\n", dynamics_mn_get_error_string(r)); }}void cmd_show(int argc, char *argv[]){ int r; struct dynamics_mobile_fa_info info; struct timeval tstamp; if (argc < 2) { printf("Invalid arguments. Usage 'show <FA-addr> " "[<interface>]'.\n"); return; } if (inet_aton(argv[1], &info.list.addr) == 0) { printf("Invalid <FA-addr> argument\n"); return; } gettimeofday(&tstamp, NULL); if (argc >= 3) { if (strlen(argv[2]) > IFNAMSIZ - 1) { printf("Invalid <interface> argument. " "Too long (max %d).\n", IFNAMSIZ - 1); return; } dynamics_strlcpy(info.list.interface, argv[2], IFNAMSIZ); } else info.list.interface[0] = '\0'; r = dynamics_mn_get_fa_info(&info, -1); if (r == API_SUCCESS) { printf("FA %s", inet_ntoa(info.list.addr)); if (info.list.in_use) printf(" (IN-USE)"); printf("\nInterface %s\n", info.list.interface); printf("Interface index %d\n", info.ifindex); printf("Priority %d\n", info.list.priority); if (info.list.quality_avg > 0) printf("Link quality %2d%%\n", info.list.quality_avg); printf("Last adv. %ds (expires in %ds)\n", (int)(info.list.last - tstamp.tv_sec), (int)(info.expire - tstamp.tv_sec)); if (info.nai[0] != '\0') printf("NAI %s\n", info.nai); } else { printf("Call failed: %s\n", dynamics_mn_get_error_string(r)); }}static int match(char *cmp1, char *cmp2){ int len = strlen(cmp1); if (len > strlen(cmp2)) return -1; return memcmp(cmp1, cmp2, len);}static void wireless_set_channel(int argc, char *argv[]) { int channel = -1; char *ifname = NULL; int r; ifname = argv[0]; channel = atoi(argv[1]); if (channel < 0 || channel > 14) { printf("Invalid channel (%d). Use 1 - 14\n", channel); return; } r = dynamics_mn_iw_set_ch(channel, ifname, -1); if (r == API_SUCCESS) { printf("Channel changed (%s, ch %d)\n", ifname, channel); } else { printf("Call failed: %s\n", dynamics_mn_get_error_string(r)); }}static void wireless_get_channel(void){#define MAX_NUM_IF 5 struct dynamics_mn_iw_ch_info info[MAX_NUM_IF]; int r, i, c = MAX_NUM_IF; memset(info, 0, sizeof(info)); r = dynamics_mn_iw_get_ch(&c, info, -1); if (r == API_SUCCESS) { for (i = 0; i < c; i++) if (info[i].ifname != NULL) { printf("Interface: %s, Channel: %d, AP: %s\n", info[i].ifname, info[i].channel, ether_hwtoa((unsigned char *) info[i].ap_hwaddr)); } else break; } else { printf("Call failed: %s\n", dynamics_mn_get_error_string(r)); }}void cmd_wireless(int argc, char *argv[]){ char short_usage[]="wireless <command> [<options> ..]\n" "command(s):\n\tchannel [<interface> <channel>]\n"; if (argc < 2) { printf("%s", short_usage); } else { argc--; argv++; /* Branch according to the command */ if (!match(argv[0], "channel")) { /* Set/get channel */ argc--; argv++; if (argc > 1) wireless_set_channel(argc, argv); else wireless_get_channel(); return; } else if (0) { /* Add other wireless commands here */ return; } else { /* default */ printf("Unknown command '%s'. Try 'help wireless'.\n" "%s", argv[0], short_usage); return; } }}void cmd_rescan(int argc, char *argv[]){ int r; r = dynamics_mn_rescan(-1); if (r != API_SUCCESS) printf("Call failed: %s\n", dynamics_mn_get_error_string(r));}void cmd_register(int argc, char *argv[]){ if (argc != 2) { printf("Invalid arguments. Usage 'register <path>'.\n"); return; } if (dynamics_mn_register_dev_info_socket(argv[1], -1) == API_SUCCESS) printf("Succeeded.\n"); else printf("Failed.\n");}void cmd_policy(int argc, char *argv[]){ int r; char buffer[BUFLEN]; if (argc == 1) { memset(buffer, 0, sizeof(buffer)); if (dynamics_mn_get_policy(buffer, BUFLEN, -1) == API_SUCCESS) printf(buffer); else printf("Get policy failed.\n"); return; } if (argc != 3) { printf("Not enough arguments. " "Usage 'policy <policy> on|off'.\n"); return; } if (strcmp("on", argv[2]) == 0) r = dynamics_mn_policy_on(argv[1], -1); else if (strcmp("off", argv[2]) == 0) r = dynamics_mn_policy_off(argv[1], -1); else { printf("Use \"on\" or \"off\". " "Usage 'policy <policy> on|off'.\n"); return; } if (r == API_SUCCESS) printf("Set policy succeeded.\n"); else printf("Set policy failed.\n");}void cmd_monitor(int argc, char *argv[]){ int r, value, varlen; char buffer[BUFLEN]; memset(buffer, 0, sizeof(buffer)); if (argc == 1) { r = dynamics_mn_get_mon_conf(buffer, BUFLEN, -1); if (r == API_SUCCESS) printf(buffer); else printf("Get monitor state failed.\n%s\n", dynamics_mn_get_error_string(r)); return; } if (argc == 2) { varlen = strlen(argv[1]); r = dynamics_mn_get_mon_conf_var(argv[1], varlen, buffer, BUFLEN, -1); if (r == API_SUCCESS) printf(buffer); else printf("Get monitor state variable failed.\n%s\n", dynamics_mn_get_error_string(r)); return; } if (argc > 3) { printf("Too many arguments.\n" "Usage 'monitor [<variable> [<value>]]'\n"); return; } value = atoi(argv[2]); varlen = strlen(argv[1]); r = dynamics_mn_set_mon_conf_var(argv[1], varlen, value, -1); if (r == API_SUCCESS) printf("Set monitor state variable succeeded.\n"); else printf("Set monitor state variable failed.\n%s\n", dynamics_mn_get_error_string(r));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -