Annotation of embedaddon/mpd/src/ppp.h, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * ppp.h
                      4:  *
                      5:  * Written by Archie Cobbs <archie@freebsd.org>
                      6:  * Copyright (c) 1995-1999 Whistle Communications, Inc. All rights reserved.
                      7:  * See ``COPYRIGHT.whistle''
                      8:  */
                      9: 
                     10: #ifndef _PPP_H_
                     11: #define _PPP_H_
                     12: 
                     13: /* Keep source files simple */
                     14: 
                     15: #include <sys/types.h>
                     16: #include <sys/param.h>
                     17: #include <sys/socket.h>
                     18: #include <sys/ioctl.h>
                     19: #include <poll.h>
                     20: #include <sys/time.h>
                     21: #include <sys/uio.h>
                     22: #include <sys/queue.h>
                     23: #include <stdio.h>
                     24: #include <stdlib.h>
                     25: #include <limits.h>
                     26: #include <stddef.h>
                     27: #include <stdarg.h>
                     28: #include <string.h>
                     29: #include <signal.h>
                     30: #include <ctype.h>
                     31: #include <unistd.h>
                     32: #include <errno.h>
                     33: #include <err.h>
                     34: #include <netdb.h>
                     35: #include <fcntl.h>
                     36: #include <machine/endian.h>
                     37: #include <net/ppp_defs.h>
                     38: #include <netinet/in.h>
                     39: #include <arpa/inet.h>
                     40: 
                     41: #include <pthread.h>
                     42: #ifdef NOLIBPDEL
                     43: #include "contrib/libpdel/structs/structs.h"
                     44: #include "contrib/libpdel/structs/type/array.h"
                     45: #include "contrib/libpdel/util/typed_mem.h"
                     46: #include "contrib/libpdel/util/pevent.h"
                     47: #include "contrib/libpdel/util/paction.h"
                     48: #include "contrib/libpdel/util/ghash.h"
                     49: #else
                     50: #include <pdel/structs/structs.h>
                     51: #include <pdel/structs/type/array.h>
                     52: #include <pdel/util/typed_mem.h>
                     53: #include <pdel/util/pevent.h>
                     54: #include <pdel/util/paction.h>
                     55: #include <pdel/util/ghash.h>
                     56: #endif
                     57: 
                     58: #include <netgraph/ng_message.h>
                     59: #include <netgraph/ng_ppp.h>
                     60: 
                     61: #include "defs.h"
                     62: 
                     63: /*
                     64:  * DEFINITIONS
                     65:  */
                     66: 
                     67:   /* Do our own version of assert() so it shows up in the logs */
                     68:   #define assert(e)    ((e) ? (void)0 : DoAssert(__FILE__, __LINE__, #e))
                     69: 
                     70:   /* Giant Mutex handling */
                     71:   #define GIANT_MUTEX_LOCK()   assert(pthread_mutex_lock(&gGiantMutex) == 0)
                     72:   #define GIANT_MUTEX_UNLOCK() assert(pthread_mutex_unlock(&gGiantMutex) == 0)
                     73: 
                     74:   #define MUTEX_LOCK(m)                assert(pthread_mutex_lock(&m) == 0)
                     75:   #define MUTEX_UNLOCK(m)      assert(pthread_mutex_unlock(&m) == 0)
                     76: 
                     77:   #define RWLOCK_RDLOCK(m)     assert(pthread_rwlock_rdlock(&m) == 0)
                     78:   #define RWLOCK_WRLOCK(m)     assert(pthread_rwlock_wrlock(&m) == 0)
                     79:   #define RWLOCK_UNLOCK(m)     assert(pthread_rwlock_unlock(&m) == 0)
                     80:   
                     81:   #define SETOVERLOAD(q)       do {                                    \
                     82:                                    int t = (q);                        \
                     83:                                    if (t > 60) {                       \
                     84:                                        gOverload = 100;                \
                     85:                                    } else if (t > 10) {                \
                     86:                                        gOverload = (t - 10) * 2;       \
                     87:                                    } else {                            \
                     88:                                        gOverload = 0;                  \
                     89:                                    }                                   \
                     90:                                } while (0)
                     91: 
                     92:   #define OVERLOAD()           (gOverload > (random() % 100))
                     93:   
                     94:   #define REF(p)               do {                                    \
                     95:                                    (p)->refs++;                        \
                     96:                                } while (0)
                     97: 
                     98:   #define UNREF(p)             do {                                    \
                     99:                                    if ((--(p)->refs) == 0)             \
                    100:                                        Freee(p);                       \
                    101:                                } while (0)
                    102: 
                    103:   #define RESETREF(v, p)       do {                                    \
                    104:                                    if (v) UNREF(v);                    \
                    105:                                    (v) = (p);                          \
                    106:                                    if (v) REF(v);                      \
                    107:                                } while (0)
                    108: 
                    109:   #define ADLG_WAN_AUTHORIZATION_FAILURE       0
                    110:   #define ADLG_WAN_CONNECTED                   1
                    111:   #define ADLG_WAN_CONNECTING                  2
                    112:   #define ADLG_WAN_CONNECT_FAILURE             3
                    113:   #define ADLG_WAN_DISABLED                    4
                    114:   #define ADLG_WAN_MESSAGE                     5
                    115:   #define ADLG_WAN_NEGOTIATION_FAILURE         6
                    116:   #define ADLG_WAN_WAIT_FOR_DEMAND             7
                    117: 
                    118: #ifndef NG_PPP_STATS64
                    119:   /* internal 64 bit counters as workaround for the 32 bit 
                    120:    * limitation for ng_ppp_link_stat
                    121:    */
                    122:   struct ng_ppp_link_stat64 {
                    123:        u_int64_t       xmitFrames;     /* xmit frames on link */
                    124:        u_int64_t       xmitOctets;     /* xmit octets on link */
                    125:        u_int64_t       recvFrames;     /* recv frames on link */
                    126:        u_int64_t       recvOctets;     /* recv octets on link */
                    127:        u_int64_t       badProtos;      /* frames rec'd with bogus protocol */
                    128:        u_int64_t       runts;          /* Too short MP fragments */
                    129:        u_int64_t       dupFragments;   /* MP frames with duplicate seq # */
                    130:        u_int64_t       dropFragments;  /* MP fragments we had to drop */
                    131:   };
                    132: #endif
                    133: 
                    134: #if defined(USE_NG_BPF) || defined(USE_IPFW)
                    135:   /* max. length of acl rule */
                    136:   #define ACL_LEN      256
                    137:   #define ACL_NAME_LEN 16
                    138:   /* max. number of acl_filters */
                    139:   #define ACL_FILTERS  16
                    140:   /* There are two directions for acl_limits */
                    141:   #define ACL_DIRS     2
                    142: #endif
                    143: 
                    144: #ifdef USE_NG_BPF
                    145:   struct svcssrc {
                    146:     int                                type;
                    147:   #define SSSS_IN      1
                    148:   #define SSSS_MATCH   2
                    149:   #define SSSS_NOMATCH 3
                    150:   #define SSSS_OUT     4
                    151:     char                       hook[NG_HOOKSIZ];
                    152:     SLIST_ENTRY(svcssrc)       next;
                    153:   };
                    154: 
                    155:   struct svcs {
                    156:     char                       name[ACL_NAME_LEN];     /* Name of ACL */
                    157:     SLIST_HEAD(, svcssrc)      src;
                    158:     SLIST_ENTRY(svcs)          next;
                    159:   };
                    160: 
                    161:   struct svcstatrec {
                    162:     char                       name[ACL_NAME_LEN];     /* Name of ACL */
                    163:     u_int64_t                  Packets;
                    164:     u_int64_t                  Octets;
                    165:     SLIST_ENTRY(svcstatrec)    next;
                    166:   };
                    167:   
                    168:   struct svcstat {
                    169:     SLIST_HEAD(, svcstatrec)   stat[ACL_DIRS];
                    170:   };
                    171: #endif /* USE_NG_BPF */
                    172: 
                    173: #include "bund.h"
                    174: #include "link.h"
                    175: #include "rep.h"
                    176: #include "phys.h"
                    177: #include "msgdef.h"
                    178: 
                    179: /*
                    180:  * VARIABLES
                    181:  */
                    182: 
                    183:   extern Rep           *gReps;                 /* Repeaters */
                    184:   extern Link          *gLinks;                /* Links */
                    185:   extern Bund          *gBundles;              /* Bundles */
                    186: 
                    187:   extern int           gNumReps;               /* Total number of repeaters */
                    188:   extern int           gNumLinks;              /* Total number of links */
                    189:   extern int           gNumBundles;            /* Total number of bundles */
                    190:   extern struct console        gConsole;
                    191:   extern struct web    gWeb;
                    192:   extern struct radsrv gRadsrv;
                    193:   extern int           gBackground;
                    194:   extern int           gShutdownInProgress;
                    195:   extern int           gOverload;
                    196:   extern pid_t         gPid;
                    197:   extern int           gRouteSeq;
                    198: 
                    199: #ifdef PHYSTYPE_PPTP
                    200:   extern int           gPPTPto;
                    201:   extern int           gPPTPtunlimit;
                    202: #endif
                    203: #ifdef PHYSTYPE_L2TP
                    204:   extern int           gL2TPto;
                    205:   extern int           gL2TPtunlimit;
                    206: #endif
                    207:   extern int           gChildren;
                    208:   extern int           gMaxChildren;
                    209: 
                    210:   extern struct globalconf     gGlobalConf;    /* Global config settings */
                    211: 
                    212: #ifdef USE_NG_BPF
                    213:   extern struct acl            *acl_filters[ACL_FILTERS]; /* mpd's internal bpf filters */
                    214: #endif
                    215: 
                    216:   extern struct pevent_ctx     *gPeventCtx;
                    217:   extern pthread_mutex_t       gGiantMutex;    /* Giant Mutex */
                    218: 
                    219:   extern const char    *gVersion;              /* Program version string */
                    220:   extern const char    *gConfigFile;           /* Main config file */
                    221:   extern const char    *gConfDirectory;        /* Where the files are */
                    222: 
                    223: /*
                    224:  * FUNCTIONS
                    225:  */
                    226: 
                    227:   extern void          Greetings(void);
                    228:   extern void          SendSignal(int sig);
                    229:   extern void          DoExit(int code) __dead2;
                    230:   extern void          DoAssert(const char *file, int line, const char *x) __dead2;
                    231:   extern void          CheckOneShot(void);
                    232: 
                    233: #endif
                    234: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>