?? ipvsadm.c
字號(hào):
"address[:port] specified"); break; case 'f': set_option(options, OPT_SERVICE); /* * Set protocol to a sane values, even * though it is not used */ ce->svc.protocol = IPPROTO_TCP; ce->svc.fwmark = parse_fwmark(optarg); break; case 's': set_option(options, OPT_SCHEDULER); strncpy(ce->svc.sched_name, optarg, IP_VS_SCHEDNAME_MAXLEN); break; case 'p': set_option(options, OPT_PERSISTENT); ce->svc.flags = IP_VS_SVC_F_PERSISTENT; ce->svc.timeout = parse_timeout(optarg, 1, MAX_TIMEOUT); break; case 'M': set_option(options, OPT_NETMASK); parse = parse_netmask(optarg, &ce->svc.netmask); if (parse != 1) fail(2, "illegal virtual server " "persistent mask specified"); break; case 'r': set_option(options, OPT_SERVER); parse = parse_service(optarg, ce->svc.protocol, &ce->dest.addr, &ce->dest.port); if (!(parse & SERVICE_ADDR)) fail(2, "illegal real server " "address[:port] specified"); /* copy vport to dport if not specified */ if (parse == 1) ce->dest.port = ce->svc.port; break; case 'i': set_option(options, OPT_FORWARD); ce->dest.conn_flags = IP_VS_CONN_F_TUNNEL; break; case 'g': set_option(options, OPT_FORWARD); ce->dest.conn_flags = IP_VS_CONN_F_DROUTE; break; case 'm': set_option(options, OPT_FORWARD); ce->dest.conn_flags = IP_VS_CONN_F_MASQ; break; case 'w': set_option(options, OPT_WEIGHT); if ((ce->dest.weight = string_to_number(optarg, 0, 65535)) == -1) fail(2, "illegal weight specified"); break; case 'x': set_option(options, OPT_UTHRESHOLD); if ((ce->dest.u_threshold = string_to_number(optarg, 0, INT_MAX)) == -1) fail(2, "illegal u_threshold specified"); break; case 'y': set_option(options, OPT_LTHRESHOLD); if ((ce->dest.l_threshold = string_to_number(optarg, 0, INT_MAX)) == -1) fail(2, "illegal l_threshold specified"); break; case 'c': set_option(options, OPT_CONNECTION); break; case 'n': set_option(options, OPT_NUMERIC); *format |= FMT_NUMERIC; break; case '3': set_option(options, OPT_MCAST); strncpy(ce->daemon.mcast_ifn, optarg, IP_VS_IFNAME_MAXLEN); break; case 'I': set_option(options, OPT_SYNCID); if ((ce->daemon.syncid = string_to_number(optarg, 0, 255)) == -1) fail(2, "illegal syncid specified"); break; case '5': set_option(options, OPT_TIMEOUT); break; case '6': set_option(options, OPT_DAEMON); break; case '7': set_option(options, OPT_STATS); *format |= FMT_STATS; break; case '8': set_option(options, OPT_RATE); *format |= FMT_RATE; break; case '9': set_option(options, OPT_THRESHOLDS); *format |= FMT_THRESHOLDS; break; case 'P': set_option(options, OPT_PERSISTENTCONN); *format |= FMT_PERSISTENTCONN; break; case '0': set_option(options, OPT_SORT); *format |= FMT_SORT; break; case 'X': set_option(options, OPT_EXACT); *format |= FMT_EXACT; break; default: fail(2, "invalid option `%s'", poptBadOption(context, POPT_BADOPTION_NOALIAS)); } } if (c < -1) { /* an error occurred during option processing */ fprintf(stderr, "%s: %s\n", poptBadOption(context, POPT_BADOPTION_NOALIAS), poptStrerror(c)); poptFreeContext(context); return -1; } if (ce->cmd == CMD_TIMEOUT) { char *optarg1, *optarg2; if ((optarg=(char *)poptGetArg(context)) && (optarg1=(char *)poptGetArg(context)) && (optarg2=(char *)poptGetArg(context))) { ce->timeout.tcp_timeout = parse_timeout(optarg, 0, MAX_TIMEOUT); ce->timeout.tcp_fin_timeout = parse_timeout(optarg1, 0, MAX_TIMEOUT); ce->timeout.udp_timeout = parse_timeout(optarg2, 0, MAX_TIMEOUT); } else fail(2, "--set option requires 3 timeout values"); } if ((optarg=(char *)poptGetArg(context))) fail(2, "unexpected argument %s", optarg); poptFreeContext(context); return 0;}#else /* HAVE_POPT */static intparse_options(int argc, char **argv, struct ipvs_command_entry *ce, unsigned int *options, unsigned int *format){ int c, parse; const char *optstring = "AEDCZSRaedlLhvt:u:f:s:M:p::r:gmiw:x:y:cnX"; const struct option long_options[] = { {"add-service", 0, 0, 'A'}, {"edit-service", 0, 0, 'E'}, {"delete-service", 0, 0, 'D'}, {"clear", 0, 0, 'C'}, {"list", 0, 0, 'L'}, {"zero", 0, 0, 'Z'}, {"add-server", 0, 0, 'a'}, {"edit-server", 0, 0, 'e'}, {"delete-server", 0, 0, 'd'}, {"help", 0, 0, 'h'}, {"version", 0, 0, 'v'}, {"save", 0, 0, 'S'}, {"restore", 0, 0, 'R'}, {"set", 1, 0, '4'}, {"start-daemon", 1, 0, '1'}, {"stop-daemon", 1, 0, '2'}, {"tcp-service", 1, 0, 't'}, {"udp-service", 1, 0, 'u'}, {"fwmark-service", 1, 0, 'f'}, {"scheduler", 1, 0, 's'}, {"persistent", 2, 0, 'p'}, {"real-server", 1, 0, 'r'}, {"masquerading", 0, 0, 'm'}, {"netmask", 1, 0, 'M'}, {"ipip", 0, 0, 'i'}, {"gatewaying", 0, 0, 'g'}, {"weight", 1, 0, 'w'}, {"u-threshold", 1, 0, 'x'}, {"l-threshold", 1, 0, 'y'}, {"numeric", 0, 0, 'n'}, {"connection", 0, 0, 'c'}, {"mcast-interface", 1, 0, '3'}, {"syncid", 1, 0, 'I'}, {"timeout", 0, 0, '5'}, {"daemon", 0, 0, '6'}, {"stats", 0, 0, '7'}, {"rate", 0, 0, '8'}, {"thresholds", 0, 0, '9'}, {"persistent-conn", 0, 0, 'P'}, {"sort", 0, 0, '0'}, {"exact", 0, 0, 'X'}, {"help", 0, 0, 'h'}, {0, 0, 0, 0} }; extern char *optarg; extern int optind; extern int opterr; extern int optopt; optind = 1; if ((c = getopt_long(argc, argv, optstring, long_options, NULL)) == EOF) tryhelp_exit(argv[0], -1); switch (c) { case 'A': set_command(&ce->cmd, CMD_ADD); break; case 'E': set_command(&ce->cmd, CMD_EDIT); break; case 'D': set_command(&ce->cmd, CMD_DEL); break; case 'a': set_command(&ce->cmd, CMD_ADDDEST); break; case 'e': set_command(&ce->cmd, CMD_EDITDEST); break; case 'd': set_command(&ce->cmd, CMD_DELDEST); break; case 'C': set_command(&ce->cmd, CMD_FLUSH); break; case 'L': case 'l': set_command(&ce->cmd, CMD_LIST); break; case 'Z': set_command(&ce->cmd, CMD_ZERO); break; case '4': set_command(&ce->cmd, CMD_TIMEOUT); if (optind + 1 < argc && argv[optind][0] != '!' && argv[optind][0] != '-' && argv[optind+1][0] != '!' && argv[optind+1][0] != '-') { ce->timeout.tcp_timeout = parse_timeout(optarg, 0, MAX_TIMEOUT); ce->timeout.tcp_fin_timeout = parse_timeout(argv[optind++], 0, MAX_TIMEOUT); ce->timeout.udp_timeout = parse_timeout(argv[optind++], 0, MAX_TIMEOUT); } else fail(2, "-s option requires 3 timeout values"); break; case 'R': set_command(&ce->cmd, CMD_RESTORE); break; case 'S': set_command(&ce->cmd, CMD_SAVE); break; case '1': set_command(&ce->cmd, CMD_STARTDAEMON); if (!strcmp(optarg, "master")) ce->daemon.state = IP_VS_STATE_MASTER; else if (!strcmp(optarg, "backup")) ce->daemon.state = IP_VS_STATE_BACKUP; else fail(2, "illegal start_daemon specified"); break; case '2': set_command(&ce->cmd, CMD_STOPDAEMON); if (!strcmp(optarg, "master")) ce->daemon.state = IP_VS_STATE_MASTER; else if (!strcmp(optarg, "backup")) ce->daemon.state = IP_VS_STATE_BACKUP; else fail(2, "illegal start_daemon specified"); break; case 'h': usage_exit(argv[0], 0); break; case 'v': version_exit(0); break; default: tryhelp_exit(argv[0], -1); } while ((c=getopt_long(argc, argv, optstring, long_options, NULL)) != EOF) { switch (c) { case 't': case 'u': set_option(options, OPT_SERVICE); ce->svc.protocol = (c=='t' ? IPPROTO_TCP : IPPROTO_UDP); parse = parse_service(optarg, ce->svc.protocol, &ce->svc.addr, &ce->svc.port); if (!(parse & SERVICE_ADDR )) fail(2, "illegal virtual server " "address[:port] specified"); break; case 'f': set_option(options, OPT_SERVICE); /* * Set protocol to a sane values, even * though it is not used */ ce->svc.protocol = IPPROTO_TCP; ce->svc.fwmark = parse_fwmark(optarg); break; case 's': set_option(options, OPT_SCHEDULER); strncpy(ce->svc.sched_name, optarg, IP_VS_SCHEDNAME_MAXLEN); break; case 'p': set_option(options, OPT_PERSISTENT); ce->svc.flags = IP_VS_SVC_F_PERSISTENT; if (!optarg && optind < argc && argv[optind][0] != '-' && argv[optind][0] != '!') optarg = argv[optind++]; ce->svc.timeout = parse_timeout(optarg, 1, MAX_TIMEOUT); break; case 'M': set_option(options, OPT_NETMASK); parse = parse_netmask(optarg, &ce->svc.netmask); if (parse != 1) fail(2, "illegal virtual server " "persistent mask specified"); break; case 'r': set_option(options, OPT_SERVER); parse = parse_service(optarg, ce->svc.protocol, &ce->dest.addr, &ce->dest.port); if (!(parse & SERVICE_ADDR)) fail(2, "illegal real server " "address[:port] specified"); /* copy vport to dport if not specified */ if (parse == 1) ce->dest.port = ce->svc.port; break; case 'i': set_option(options, OPT_FORWARD); ce->dest.conn_flags = IP_VS_CONN_F_TUNNEL; break; case 'g': set_option(options, OPT_FORWARD); ce->dest.conn_flags = IP_VS_CONN_F_DROUTE; break; case 'm': set_option(options, OPT_FORWARD); ce->dest.conn_flags = IP_VS_CONN_F_MASQ; break; case 'w': set_option(options, OPT_WEIGHT); if ((ce->dest.weight = string_to_number(optarg, 0, 65535)) == -1) fail(2, "illegal weight specified"); break; case 'x': set_option(options, OPT_UTHRESHOLD); if ((ce->dest.u_threshold = string_to_number(optarg, 0, INT_MAX)) == -1) fail(2, "illegal u_threshold specified"); break; case 'y': set_option(options, OPT_LTHRESHOLD); if ((ce->dest.l_threshold = string_to_number(optarg, 0, INT_MAX)) == -1) fail(2, "illegal l_threshold specified"); break; case 'c': set_option(options, OPT_CONNECTION); break; case 'n': set_option(options, OPT_NUMERIC); *format |= FMT_NUMERIC; break; case '3': set_option(options, OPT_MCAST); strncpy(ce->daemon.mcast_ifn, optarg, IP_VS_IFNAME_MAXLEN); break; case 'I': set_option(options, OPT_SYNCID); if ((ce->daemon.syncid = string_to_number(optarg, 0, 255)) == -1) fail(2, "illegal syncid specified"); break; case '5': set_option(options, OPT_TIMEOUT); break; case '6': set_option(options, OPT_DAEMON); break; case '7': set_option(options, OPT_STATS); *format |= FMT_STATS; break; case '8': set_option(options, OPT_RATE); *format |= FMT_RATE; break; case '9': set_option(options, OPT_THRESHOLDS); *format |= FMT_THRESHOLDS; break; case 'P': set_option(options, OPT_PERSISTENTCONN); *format |= FMT_PERSISTENTCONN; break; case '0': set_option(options, OPT_SORT); *format |= FMT_SORT; break; case 'X': set_option(options, OPT_EXACT); *format |= FMT_EXACT; break; default: fail(2, "invalid option `%s'", argv[optind-1]); } } if (optind < argc) fail(2, "unexpected argument %s", argv[optind]); return 0;}#endif /* HAVE_POPT */static int restore_table(int argc, char **argv, int reading_stdin){ int result = 0; dynamic_array_t *a; /* avoid infinite loop */ if (reading_stdin != 0) tryhelp_exit(argv[0], -1); while ((a = config_stream_read(stdin, argv[0])) != NULL) { int i; if ((i = (int)dynamic_array_get_count(a)) > 1) { char **strv = dynamic_array_get_vector(a); result = process_options(i, strv, 1); } dynamic_array_destroy(a, DESTROY_STR); } return result;}static int process_options(int argc, char **argv, int reading_stdin){ struct ipvs_command_entry ce; unsigned int options = OPT_NONE; unsigned int format = FMT_NONE; int result = 0; memset(&ce, 0, sizeof(struct ipvs_command_entry)); ce.cmd = CMD_NONE; /* Set the default weight 1 */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -