⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mn_tool.c

📁 mobile ip 在linux下的一种实现
💻 C
📖 第 1 页 / 共 2 页
字号:
								  -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 + -