[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/ppp-2.4.1/pppoecd/options.c b/ap/app/ppp-2.4.1/pppoecd/options.c
new file mode 100644
index 0000000..5467021
--- /dev/null
+++ b/ap/app/ppp-2.4.1/pppoecd/options.c
@@ -0,0 +1,175 @@
+/*
+ * 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;
+}