-static struct cmd {
- char *cmd_name;
- int num_args;
- int (*cmd_func)();
-} cmds[] = {
- {"-all", 0, noopt}, /* Don't request/allow any options (useless) */
- {"noaccomp", 0, noaccomp}, /* Disable Address/Control compression */
- {"-ac", 0, noaccomp}, /* Disable Address/Control compress */
- {"default-asyncmap", 0, noasyncmap}, /* Disable asyncmap negoatiation */
- {"-am", 0, noasyncmap}, /* Disable asyncmap negotiation */
- {"-as", 1, setasyncmap}, /* set the desired async map */
- {"-d", 0, setdebug}, /* Increase debugging level */
- {"nodetach", 0, setnodetach}, /* Don't detach from controlling tty */
- {"-detach", 0, setnodetach}, /* don't fork */
- {"noip", 0, noip}, /* Disable IP and IPCP */
- {"-ip", 0, noip}, /* Disable IP and IPCP */
- {"nomagic", 0, nomagicnumber}, /* Disable magic number negotiation */
- {"-mn", 0, nomagicnumber}, /* Disable magic number negotiation */
- {"default-mru", 0, nomru}, /* Disable MRU negotiation */
- {"-mru", 0, nomru}, /* Disable mru negotiation */
- {"-p", 0, setpassive}, /* Set passive mode */
- {"nopcomp", 0, nopcomp}, /* Disable protocol field compression */
- {"-pc", 0, nopcomp}, /* Disable protocol field compress */
-#if OLD_OPTIONS
- {"+ua", 1, setupapfile}, /* Get PAP user and password from file */
-#endif
- {"require-pap", 0, reqpap}, /* Require PAP authentication from peer */
- {"+pap", 0, reqpap}, /* Require PAP auth from peer */
- {"refuse-pap", 0, nopap}, /* Don't agree to auth to peer with PAP */
- {"-pap", 0, nopap}, /* Don't allow UPAP authentication with peer */
- {"require-chap", 0, reqchap}, /* Require CHAP authentication from peer */
- {"+chap", 0, reqchap}, /* Require CHAP authentication from peer */
- {"refuse-chap", 0, nochap}, /* Don't agree to auth to peer with CHAP */
- {"-chap", 0, nochap}, /* Don't allow CHAP authentication with peer */
- {"novj", 0, setnovj}, /* Disable VJ compression */
- {"-vj", 0, setnovj}, /* disable VJ compression */
- {"novjccomp", 0, setnovjccomp}, /* disable VJ connection-ID compression */
- {"-vjccomp", 0, setnovjccomp}, /* disable VJ connection-ID compression */
- {"vj-max-slots", 1, setvjslots}, /* Set maximum VJ header slots */
- {"asyncmap", 1, setasyncmap}, /* set the desired async map */
- {"escape", 1, setescape}, /* set chars to escape on transmission */
- {"connect", 1, setconnector}, /* A program to set up a connection */
- {"disconnect", 1, setdisconnector}, /* program to disconnect serial dev. */
- {"welcome", 1, setwelcomer},/* Script to welcome client */
- {"maxconnect", 1, setmaxconnect}, /* specify a maximum connect time */
- {"crtscts", 0, setcrtscts}, /* set h/w flow control */
- {"nocrtscts", 0, setnocrtscts}, /* clear h/w flow control */
- {"-crtscts", 0, setnocrtscts}, /* clear h/w flow control */
- {"xonxoff", 0, setxonxoff}, /* set s/w flow control */
- {"debug", 0, setdebug}, /* Increase debugging level */
- {"kdebug", 1, setkdebug}, /* Enable kernel-level debugging */
- {"domain", 1, setdomain}, /* Add given domain name to hostname*/
- {"mru", 1, setmru}, /* Set MRU value for negotiation */
- {"mtu", 1, setmtu}, /* Set our MTU */
- {"netmask", 1, setnetmask}, /* set netmask */
- {"passive", 0, setpassive}, /* Set passive mode */
- {"silent", 0, setsilent}, /* Set silent mode */
- {"modem", 0, setmodem}, /* Use modem control lines */
- {"local", 0, setlocal}, /* Don't use modem control lines */
- {"lock", 0, setlock}, /* Lock serial device (with lock file) */
- {"name", 1, setname}, /* Set local name for authentication */
- {"user", 1, setuser}, /* Set username for PAP auth with peer */
- {"usehostname", 0, setusehostname}, /* Must use hostname for auth. */
- {"remotename", 1, setremote}, /* Set remote name for authentication */
- {"auth", 0, setauth}, /* Require authentication from peer */
- {"file", 1, readfile}, /* Take options from a file */
- {"defaultroute", 0, setdefaultroute}, /* Add default route */
- {"nodefaultroute", 0, setnodefaultroute}, /* disable defaultroute option */
- {"-defaultroute", 0, setnodefaultroute}, /* disable defaultroute option */
- {"proxyarp", 0, setproxyarp}, /* Add proxy ARP entry */
- {"noproxyarp", 0, setnoproxyarp}, /* disable proxyarp option */
- {"-proxyarp", 0, setnoproxyarp}, /* disable proxyarp option */
- {"persist", 0, setpersist}, /* Keep on reopening connection after close */
- {"demand", 0, setdemand}, /* Dial on demand */
- {"login", 0, setdologin}, /* Use system password database for UPAP */
- {"noipdefault", 0, setnoipdflt}, /* Don't use name for default IP adrs */
- {"lcp-echo-failure", 1, setlcpechofails}, /* consecutive echo failures */
- {"lcp-echo-interval", 1, setlcpechointv}, /* time for lcp echo events */
- {"lcp-restart", 1, setlcptimeout}, /* Set timeout for LCP */
- {"lcp-max-terminate", 1, setlcpterm}, /* Set max #xmits for term-reqs */
- {"lcp-max-configure", 1, setlcpconf}, /* Set max #xmits for conf-reqs */
- {"lcp-max-failure", 1, setlcpfails}, /* Set max #conf-naks for LCP */
- {"ipcp-restart", 1, setipcptimeout}, /* Set timeout for IPCP */
- {"ipcp-max-terminate", 1, setipcpterm}, /* Set max #xmits for term-reqs */
- {"ipcp-max-configure", 1, setipcpconf}, /* Set max #xmits for conf-reqs */
- {"ipcp-max-failure", 1, setipcpfails}, /* Set max #conf-naks for IPCP */
- {"pap-restart", 1, setpaptimeout}, /* Set retransmit timeout for PAP */
- {"pap-max-authreq", 1, setpapreqs}, /* Set max #xmits for auth-reqs */
- {"pap-timeout", 1, setpapreqtime}, /* Set time limit for peer PAP auth. */
- {"chap-restart", 1, setchaptimeout}, /* Set timeout for CHAP */
- {"chap-max-challenge", 1, setchapchal}, /* Set max #xmits for challenge */
- {"chap-interval", 1, setchapintv}, /* Set interval for rechallenge */
- {"ipcp-accept-local", 0, setipcpaccl}, /* Accept peer's address for us */
- {"ipcp-accept-remote", 0, setipcpaccr}, /* Accept peer's address for it */
- {"noccp", 0, noccp}, /* Disable CCP negotiation */
- {"-ccp", 0, noccp}, /* Disable CCP negotiation */
- {"bsdcomp", 1, setbsdcomp}, /* request BSD-Compress */
- {"nobsdcomp", 0, setnobsdcomp}, /* don't allow BSD-Compress */
- {"-bsdcomp", 0, setnobsdcomp}, /* don't allow BSD-Compress */
- {"deflate", 1, setdeflate}, /* request Deflate compression */
- {"nodeflate", 0, setnodeflate}, /* don't allow Deflate compression */
- {"-deflate", 0, setnodeflate}, /* don't allow Deflate compression */
- {"predictor1", 0, setpred1comp}, /* request Predictor-1 */
- {"nopredictor1", 0, setnopred1comp},/* don't allow Predictor-1 */
- {"-predictor1", 0, setnopred1comp}, /* don't allow Predictor-1 */
- {"ipparam", 1, setipparam}, /* set ip script parameter */
- {"papcrypt", 0, setpapcrypt}, /* PAP passwords encrypted */
- {"idle", 1, setidle}, /* idle time limit (seconds) */
- {"holdoff", 1, setholdoff}, /* set holdoff time (seconds) */
-#if 0
- {"pass-filter", 1, setpassfilter}, /* set filter for packets to pass */
- {"active-filter", 1, setactivefilter}, /* set filter for active pkts */
+option_t general_options[] = {
+ { "debug", o_int, &debug,
+ "Increase debugging level", OPT_INC | OPT_NOARG | 1 },
+ { "-d", o_int, &debug,
+ "Increase debugging level",
+ OPT_ALIAS | OPT_INC | OPT_NOARG | 1 },
+
+ { "kdebug", o_int, &kdebugflag,
+ "Set kernel driver debug level", OPT_PRIO },
+
+ { "nodetach", o_bool, &nodetach,
+ "Don't detach from controlling tty", OPT_PRIO | 1 },
+ { "-detach", o_bool, &nodetach,
+ "Don't detach from controlling tty", OPT_ALIAS | OPT_PRIOSUB | 1 },
+ { "updetach", o_bool, &updetach,
+ "Detach from controlling tty once link is up",
+ OPT_PRIOSUB | OPT_A2CLR | 1, &nodetach },
+
+ { "holdoff", o_int, &holdoff,
+ "Set time in seconds before retrying connection",
+ OPT_PRIO, &holdoff_specified },
+
+ { "idle", o_int, &idle_time_limit,
+ "Set time in seconds before disconnecting idle link", OPT_PRIO },
+
+ { "maxconnect", o_int, &maxconnect,
+ "Set connection time limit",
+ OPT_PRIO | OPT_LLIMIT | OPT_NOINCR | OPT_ZEROINF },
+
+ { "domain", o_special, (void *)setdomain,
+ "Add given domain name to hostname",
+ OPT_PRIO | OPT_PRIV | OPT_A2STRVAL, &domain },
+
+ { "file", o_special, (void *)readfile,
+ "Take options from a file", OPT_NOPRINT },
+ { "call", o_special, (void *)callfile,
+ "Take options from a privileged file", OPT_NOPRINT },
+
+ { "persist", o_bool, &persist,
+ "Keep on reopening connection after close", OPT_PRIO | 1 },
+ { "nopersist", o_bool, &persist,
+ "Turn off persist option", OPT_PRIOSUB },
+
+ { "demand", o_bool, &demand,
+ "Dial on demand", OPT_INITONLY | 1, &persist },
+
+ { "--version", o_special_noarg, (void *)showversion,
+ "Show version number" },
+ { "--help", o_special_noarg, (void *)showhelp,
+ "Show brief listing of options" },
+ { "-h", o_special_noarg, (void *)showhelp,
+ "Show brief listing of options", OPT_ALIAS },
+
+ { "logfile", o_special, (void *)setlogfile,
+ "Append log messages to this file",
+ OPT_PRIO | OPT_A2STRVAL | OPT_STATIC, &logfile_name },
+ { "logfd", o_int, &log_to_fd,
+ "Send log messages to this file descriptor",
+ OPT_PRIOSUB | OPT_A2CLR, &log_default },
+ { "nolog", o_int, &log_to_fd,
+ "Don't send log messages to any file",
+ OPT_PRIOSUB | OPT_NOARG | OPT_VAL(-1) },
+ { "nologfd", o_int, &log_to_fd,
+ "Don't send log messages to any file descriptor",
+ OPT_PRIOSUB | OPT_ALIAS | OPT_NOARG | OPT_VAL(-1) },
+
+ { "linkname", o_string, linkname,
+ "Set logical name for link",
+ OPT_PRIO | OPT_PRIV | OPT_STATIC, NULL, MAXPATHLEN },
+
+ { "maxfail", o_int, &maxfail,
+ "Maximum number of unsuccessful connection attempts to allow",
+ OPT_PRIO },
+
+ { "ktune", o_bool, &tune_kernel,
+ "Alter kernel settings as necessary", OPT_PRIO | 1 },
+ { "noktune", o_bool, &tune_kernel,
+ "Don't alter kernel settings", OPT_PRIOSUB },
+
+ { "connect-delay", o_int, &connect_delay,
+ "Maximum time (in ms) to wait after connect script finishes",
+ OPT_PRIO },
+
+ { "unit", o_int, &req_unit,
+ "PPP interface unit number to use if possible",
+ OPT_PRIO | OPT_LLIMIT, 0, 0 },
+
+ { "dump", o_bool, &dump_options,
+ "Print out option values after parsing all options", 1 },
+ { "dryrun", o_bool, &dryrun,
+ "Stop after parsing, printing, and checking options", 1 },
+
+ { "child-timeout", o_int, &child_wait,
+ "Number of seconds to wait for child processes at exit",
+ OPT_PRIO },
+
+#ifdef HAVE_MULTILINK
+ { "multilink", o_bool, &multilink,
+ "Enable multilink operation", OPT_PRIO | 1 },
+ { "mp", o_bool, &multilink,
+ "Enable multilink operation", OPT_PRIOSUB | OPT_ALIAS | 1 },
+ { "nomultilink", o_bool, &multilink,
+ "Disable multilink operation", OPT_PRIOSUB | 0 },
+ { "nomp", o_bool, &multilink,
+ "Disable multilink operation", OPT_PRIOSUB | OPT_ALIAS | 0 },
+
+ { "bundle", o_string, &bundle_name,
+ "Bundle name for multilink", OPT_PRIO },
+#endif /* HAVE_MULTILINK */
+
+#ifdef PLUGIN
+ { "plugin", o_special, (void *)loadplugin,
+ "Load a plug-in module into pppd", OPT_PRIV | OPT_A2LIST },