]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/options.c
Added ability to detect and use either gcc or Sun WorkShop C compiler
[ppp.git] / pppd / options.c
index 3779b289419ca491fb8baeedb26d07053ec5a367..d17df58709e70afe15af92156521603b8fbdebcc 100644 (file)
@@ -17,7 +17,7 @@
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#define RCSID  "$Id: options.c,v 1.82 2002/03/01 14:39:18 dfs Exp $"
+#define RCSID  "$Id: options.c,v 1.86 2002/09/07 05:15:25 carlsonj Exp $"
 
 #include <ctype.h>
 #include <stdio.h>
@@ -86,6 +86,13 @@ bool dump_options;           /* print out option values */
 bool   dryrun;                 /* print out option values and exit */
 char   *domain;                /* domain name set by domain option */
 
+#ifdef MAXOCTETS
+unsigned int  maxoctets = 0;    /* default - no limit */
+int maxoctets_dir = 0;       /* default - sum of traffic */
+int maxoctets_timeout = 1;   /* default 1 second */ 
+#endif
+
+
 extern option_t auth_options[];
 extern struct stat devstat;
 
@@ -123,6 +130,10 @@ static int setpassfilter __P((char **));
 static int setactivefilter __P((char **));
 #endif
 
+#ifdef MAXOCTETS
+static int setmodir __P((char **));
+#endif
+
 static option_t *find_option __P((const char *name));
 static int process_option __P((option_t *, char *, char **));
 static int n_arguments __P((option_t *));
@@ -262,6 +273,19 @@ option_t general_options[] = {
       "set filter for active pkts", OPT_PRIO },
 #endif
 
+#ifdef MAXOCTETS
+    { "maxoctets", o_int, &maxoctets,
+      "Set connection traffic limit",
+      OPT_PRIO | OPT_LLIMIT | OPT_NOINCR | OPT_ZEROINF },
+    { "mo", o_int, &maxoctets,
+      "Set connection traffic limit",
+      OPT_ALIAS | OPT_PRIO | OPT_LLIMIT | OPT_NOINCR | OPT_ZEROINF },
+    { "mo-direction", o_special, setmodir,
+      "Set direction for limit traffic (sum,in,out,max)" },
+    { "mo-timeout", o_int, &maxoctets_timeout,
+      "Check for traffic limit every N seconds", OPT_PRIO | OPT_LLIMIT | 1 },
+#endif
+
     { NULL }
 };
 
@@ -627,6 +651,8 @@ process_option(opt, cmd, argv)
            *(bool *)(opt->addr2) = 0;
        else if (opt->addr2 && (opt->flags & OPT_A2CLRB))
            *(u_char *)(opt->addr2) &= ~v;
+       else if (opt->addr2 && (opt->flags & OPT_A2OR))
+           *(u_char *)(opt->addr2) |= v;
        if (opt->addr3 && (opt->flags & OPT_A3OR))
            *(u_char *)(opt->addr3) |= v;
        break;
@@ -730,7 +756,7 @@ process_option(opt, cmd, argv)
     }
 
     if (opt->addr2 && (opt->flags & (OPT_A2COPY|OPT_ENABLE
-               |OPT_A2PRINTER|OPT_A2STRVAL|OPT_A2LIST)) == 0)
+               |OPT_A2PRINTER|OPT_A2STRVAL|OPT_A2LIST|OPT_A2OR)) == 0)
        *(bool *)(opt->addr2) = !(opt->flags & OPT_A2CLR);
 
     mainopt->source = option_source;
@@ -876,7 +902,9 @@ print_option(opt, mainopt, printer, arg)
                        void (*oprt) __P((option_t *,
                                          void ((*)__P((void *, char *, ...))),
                                          void *));
-                       oprt = opt->addr2;
+                       oprt = (void (*) __P((option_t *,
+                                        void ((*)__P((void *, char *, ...))),
+                                        void *)))opt->addr2;
                        (*oprt)(opt, printer, arg);
                } else if (opt->flags & OPT_A2STRVAL) {
                        p = (char *) opt->addr2;
@@ -900,7 +928,7 @@ print_option(opt, mainopt, printer, arg)
                break;
 
        default:
-               printer(arg, "# %s value (type %d??)", opt->name, opt->type);
+               printer(arg, "# %s value (type %d\?\?)", opt->name, opt->type);
                break;
        }
        printer(arg, "\t\t# (from %s)\n", mainopt->source);
@@ -1461,6 +1489,25 @@ setlogfile(argv)
     log_default = 0;
     return 1;
 }
+#ifdef MAXOCTETS
+static int
+setmodir(argv)
+    char **argv;
+{
+    if(*argv == NULL)
+       return 0;
+    if(!strcmp(*argv,"in")) {
+        maxoctets_dir = PPP_OCTETS_DIRECTION_IN;
+    } else if (!strcmp(*argv,"out")) {
+        maxoctets_dir = PPP_OCTETS_DIRECTION_OUT;
+    } else if (!strcmp(*argv,"max")) {
+        maxoctets_dir = PPP_OCTETS_DIRECTION_MAXOVERAL;
+    } else {
+        maxoctets_dir = PPP_OCTETS_DIRECTION_SUM;
+    }
+    return 1;
+}
+#endif
 
 #ifdef PLUGIN
 static int