Home | History | Annotate | Line # | Download | only in pppd
      1 /*
      2  * options.h - header declarations for option processing for PPP.
      3  *
      4  * Copyright (c) 2000-2024 Paul Mackerras. All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  *
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  *
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in
     15  *    the documentation and/or other materials provided with the
     16  *    distribution.
     17  *
     18  * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
     19  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
     20  * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
     21  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     22  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
     23  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
     24  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     25  */
     26 
     27 #ifndef PPP_OPTIONS_H
     28 #define PPP_OPTIONS_H
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 enum opt_type {
     35 	o_special_noarg,
     36 	o_special,
     37 	o_bool,
     38 	o_int,
     39 	o_uint32,
     40 	o_string,
     41 	o_wild
     42 };
     43 
     44 struct option {
     45 	char	*name;		/* name of the option */
     46 	enum opt_type type;
     47 	void	*addr;
     48 	char	*description;
     49 	unsigned int flags;
     50 	void	*addr2;
     51 	int	upper_limit;
     52 	int	lower_limit;
     53 	const char *source;
     54 	short int priority;
     55 	short int winner;
     56 };
     57 
     58 typedef struct option option_t;
     59 
     60 /* Values for flags */
     61 #define OPT_VALUE	0xff	/* mask for presupplied value */
     62 #define OPT_HEX		0x100	/* int option is in hex */
     63 #define OPT_NOARG	0x200	/* option doesn't take argument */
     64 #define OPT_OR		0x400	/* for u32, OR in argument to value */
     65 #define OPT_INC		0x400	/* for o_int, increment value */
     66 #define OPT_A2OR	0x800	/* for o_bool, OR arg to *(u_char *)addr2 */
     67 #define OPT_PRIV	0x1000	/* privileged option */
     68 #define OPT_STATIC	0x2000	/* string option goes into static array */
     69 #define OPT_NOINCR	0x2000	/* for o_int, value mustn't be increased */
     70 #define OPT_LLIMIT	0x4000	/* check value against lower limit */
     71 #define OPT_ULIMIT	0x8000	/* check value against upper limit */
     72 #define OPT_LIMITS	(OPT_LLIMIT|OPT_ULIMIT)
     73 #define OPT_ZEROOK	0x10000	/* 0 value is OK even if not within limits */
     74 #define OPT_HIDE	0x10000	/* for o_string, print value as ?????? */
     75 #define OPT_A2LIST	0x20000 /* for o_special, keep list of values */
     76 #define OPT_A2CLRB	0x20000 /* o_bool, clr val bits in *(u_char *)addr2 */
     77 #define OPT_ZEROINF	0x40000	/* with OPT_NOINCR, 0 == infinity */
     78 #define OPT_PRIO	0x80000	/* process option priorities for this option */
     79 #define OPT_PRIOSUB	0x100000 /* subsidiary member of priority group */
     80 #define OPT_ALIAS	0x200000 /* option is alias for previous option */
     81 #define OPT_A2COPY	0x400000 /* addr2 -> second location to rcv value */
     82 #define OPT_ENABLE	0x800000 /* use *addr2 as enable for option */
     83 #define OPT_A2CLR	0x1000000 /* clear *(bool *)addr2 */
     84 #define OPT_PRIVFIX	0x2000000 /* user can't override if set by root */
     85 #define OPT_INITONLY	0x4000000 /* option can only be set in init phase */
     86 #define OPT_DEVEQUIV	0x8000000 /* equiv to device name */
     87 #define OPT_DEVNAM	(OPT_INITONLY | OPT_DEVEQUIV)
     88 #define OPT_A2PRINTER	0x10000000 /* *addr2 printer_func to print option */
     89 #define OPT_A2STRVAL	0x20000000 /* *addr2 points to current string value */
     90 #define OPT_NOPRINT	0x40000000 /* don't print this option at all */
     91 
     92 #define OPT_VAL(x)	((x) & OPT_VALUE)
     93 
     94 /* Values for priority */
     95 #define OPRIO_DEFAULT   0	/* a default value */
     96 #define OPRIO_CFGFILE   1	/* value from a configuration file */
     97 #define OPRIO_CMDLINE   2	/* value from the command line */
     98 #define OPRIO_SECFILE   3	/* value from options in a secrets file */
     99 #define OPRIO_ROOT      100	/* added to priority if OPT_PRIVFIX && root */
    100 
    101 /* Add additional supported options by e.g. plug-in */
    102 void ppp_add_options(struct option *options);
    103 
    104 /* Parse options from an options file */
    105 int ppp_options_from_file(char *filename, int must_exist, int check_prot,
    106 		       int privileged);
    107 
    108 /* Simplified number_option for decimal ints */
    109 int ppp_int_option(char *name, int *value);
    110 
    111 /* Print an error message about an option */
    112 void ppp_option_error(char *fmt, ...);
    113 
    114 
    115 #ifdef __cplusplus
    116 }
    117 #endif
    118 
    119 #endif // PPP_OPTIONS_H
    120