| /* |
| * options.c - handles option processing for PPP. |
| * |
| * Copyright (c) 1989 Carnegie Mellon University. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms are permitted |
| * provided that the above copyright notice and this paragraph are |
| * duplicated in all such forms and that any documentation, |
| * advertising materials, and other materials related to such |
| * distribution and use acknowledge that the software was developed |
| * by Carnegie Mellon University. The name of the |
| * University may not be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
| * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
| */ |
| |
| #define RCSID "$Id: options.c,v 1.1 2008-08-04 06:11:52 winfred Exp $" |
| |
| #include <getopt.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <syslog.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| #include "pppd.h" |
| #include "fsm.h" |
| #include "lcp.h" |
| #include "ipcp.h" |
| |
| int debug = 0; /* Debug flag */ |
| int kdebugflag = 0; /* Tell kernel to print debug messages */ |
| int default_device = 1; /* Using /dev/tty or equivalent */ |
| char devnam[MAXPATHLEN]; /* Device name */ |
| bool nodetach = 0; /* Don't detach from controlling tty */ |
| bool updetach = 0; /* Detach once link is up */ |
| int maxconnect = 0; /* Maximum connect time */ |
| char user[MAXNAMELEN]; /* Username for PAP */ |
| char passwd[MAXSECRETLEN]; /* Password for PAP */ |
| bool persist = 0; /* Reopen link after it goes down */ |
| char our_name[MAXNAMELEN]; /* Our name for authentication purposes */ |
| bool demand = 0; /* do dial-on-demand */ |
| char *ipparam = NULL; /* Extra parameter for ip up/down scripts */ |
| int idle_time_limit = 0; /* Disconnect if idle for this many seconds */ |
| int holdoff = 30; /* # seconds to pause before reconnecting */ |
| bool holdoff_specified; /* true if a holdoff value has been given */ |
| int log_to_fd = 1; /* send log messages to this fd too */ |
| bool log_default = 1; /* log_to_fd is default (stdout) */ |
| int maxfail = 10; /* max # of unsuccessful connection attempts */ |
| char linkname[MAXPATHLEN]; /* logical name for link */ |
| bool tune_kernel = 1; /* may alter kernel settings */ |
| int connect_delay = 1000; /* wait this many ms after connect script */ |
| int req_unit = -1; /* requested interface unit */ |
| char *bundle_name = NULL; /* bundle name for multilink */ |
| bool dump_options; /* print out option values */ |
| bool dryrun; /* print out option values and exit */ |
| char *domain; /* domain name set by domain option */ |
| int baud_rate; /* Actual bits/second for serial device */ |
| #ifdef UNNUMBERIP_SUPPORT |
| char is_unnumber_ip = 0; /* This parameter use for unnumber IP. by tallest */ |
| #endif |
| char ppp_disconnect_func[MAXFUNCLEN]; /* This is a function for dial on demand disconnection using. by tallest 0407 */ |
| |
| char *current_option; /* the name of the option being parsed */ |
| int privileged_option; /* set iff the current option came from root */ |
| char *option_source; /* string saying where the option came from */ |
| int option_priority = OPRIO_CFGFILE; /* priority of the current options */ |
| bool devnam_fixed; /* can no longer change device name */ |
| |
| extern char *pppoe_ac_name; |
| extern char *pppoe_srv_name; |
| extern int lcp_echo_interval; /* Interval between LCP echo-requests */ |
| extern int lcp_echo_fails; /* Tolerance to unanswered echo-requests */ |
| extern int retry_num; /* interval of send disc */ |
| extern int retransmit_time; |
| |
| extern int setdevname_pppoe(const char *cp); |
| |
| static char *usage_string = "usage: %s interface -d -k [-i idle] [-u username] [-p passwd] [-a acname] [-s srvname] [-r mru] [-t mtu] [-I lcp_echo_interval] [-T lcp_echo_fails] [-P ipparam] [-L Local IP] [-N retry_num] [-R set default route] [-n use unnumber ip] [-C disconnected function]\n"; |
| |
| /* |
| * parse_args - parse a string of arguments from the command line. |
| */ |
| int |
| parse_args(argc, argv) |
| int argc; |
| char **argv; |
| { |
| int opt; |
| struct in_addr Laddr, Naddr; |
| |
| while ((opt = getopt(argc, argv, "dki:u:p:a:s:r:t:U:I:T:P:L:N:RnC:v:")) != -1) { |
| switch (opt) { |
| case 'd': |
| debug = nodetach = 1; |
| break; |
| case 'k': |
| persist = 1; |
| break; |
| case 'i': |
| idle_time_limit = atoi(optarg); |
| if (idle_time_limit > 0) |
| demand = 1; |
| break; |
| case 'u': |
| strncpy(user, optarg, MAXNAMELEN); |
| strncpy(our_name, optarg, MAXNAMELEN); |
| break; |
| case 'p': |
| strncpy(passwd, optarg, MAXSECRETLEN); |
| break; |
| case 'a': |
| pppoe_ac_name = optarg; |
| break; |
| case 's': |
| pppoe_srv_name = optarg; |
| break; |
| case 'r': |
| lcp_wantoptions[0].neg_mru = 1; |
| lcp_wantoptions[0].mru = atoi(optarg); |
| break; |
| case 't': |
| lcp_allowoptions[0].mru = atoi(optarg); |
| break; |
| case 'I': // by honor |
| lcp_echo_interval = atoi(optarg); |
| break; |
| case 'T': // by honor |
| lcp_echo_fails = atoi(optarg); |
| break; |
| case 'P': // by honor |
| ipparam = optarg; |
| break; |
| case 'L': // by honor, support static IP Address |
| inet_aton(optarg, &Laddr); |
| ipcp_wantoptions[0].ouraddr = Laddr.s_addr; |
| break; |
| case 'N': // by honor |
| retry_num = atoi(optarg); |
| break; |
| case 'U': |
| req_unit = atoi(optarg); |
| break; |
| case 'R': //by tallest set default route |
| ipcp_wantoptions[0].default_route = 1; |
| break; |
| case 'n': //by tallest for unnumber ip use. |
| #ifdef UNNUMBERIP_SUPPORT |
| is_unnumber_ip = 1; |
| #endif |
| break; |
| case 'C': //by tallest 0407 |
| strncpy(ppp_disconnect_func, optarg, MAXFUNCLEN); |
| break; |
| case 'v': //by tallest 0407 |
| retransmit_time = atoi(optarg); |
| break; |
| default: |
| fprintf(stderr, usage_string, argv[0]); |
| return 0; |
| } |
| } |
| |
| if (optind < argc) |
| setdevname_pppoe(argv[optind]); |
| else { |
| fprintf(stderr, usage_string, argv[0]); |
| return 0; |
| } |
| |
| return 1; |
| } |