Annotation of embedaddon/mpd/src/bund.h, revision 1.1.1.1
1.1 misho 1:
2: /*
3: * bund.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 _BUND_H_
11: #define _BUND_H_
12:
13: #include "defs.h"
14: #include "ip.h"
15: #include "mp.h"
16: #include "ipcp.h"
17: #include "ipv6cp.h"
18: #include "chap.h"
19: #include "ccp.h"
20: #include "ecp.h"
21: #include "msg.h"
22: #include "auth.h"
23: #include "command.h"
24: #include <netgraph/ng_message.h>
25:
26: /*
27: * DEFINITIONS
28: */
29:
30: /* Configuration options */
31: enum {
32: BUND_CONF_IPCP, /* IPCP */
33: BUND_CONF_IPV6CP, /* IPV6CP */
34: BUND_CONF_COMPRESSION, /* compression */
35: BUND_CONF_ENCRYPTION, /* encryption */
36: BUND_CONF_CRYPT_REQD, /* encryption is required */
37: BUND_CONF_BWMANAGE, /* dynamic bandwidth */
38: BUND_CONF_ROUNDROBIN /* round-robin MP scheduling */
39: };
40:
41: /* Default bundle-layer FSM retry timeout */
42: #define BUND_DEFAULT_RETRY 2
43:
44: enum {
45: NCP_NONE = 0,
46: NCP_IPCP,
47: NCP_IPV6CP,
48: NCP_ECP,
49: NCP_CCP
50: };
51:
52: /*
53:
54: Bundle bandwidth management
55:
56: We treat the first link as different from the rest. It connects
57: immediately when there is (qualifying) outgoing traffic. The
58: idle timeout applies globally, no matter how many links are up.
59:
60: Additional links are connected/disconnected according to a simple
61: algorithm that uses the following constants:
62:
63: S Sampling interval. Number of seconds over which we average traffic.
64:
65: N Number of sub-intervals we chop the S seconds into (granularity).
66:
67: Hi Hi water mark: if traffic is more than H% of total available
68: bandwidth, averaged over S seconds, time to add the second link.
69:
70: Lo Low water mark: if traffic is less than L% of total available
71: bandwidth during all N sub-intervals, time to hang up the second link.
72:
73: Mc Minimum amount of time after connecting a link before
74: connecting next.
75:
76: Md Minimum amount of time after disconnecting any link before
77: disconnecting next.
78:
79: We treat incoming and outgoing traffic separately when comparing
80: against Hi and Lo.
81:
82: */
83:
84: #define BUND_BM_DFL_S 60 /* Length of sampling interval (secs) */
85: #define BUND_BM_DFL_Hi 80 /* High water mark % */
86: #define BUND_BM_DFL_Lo 20 /* Low water mark % */
87: #define BUND_BM_DFL_Mc 30 /* Min connect period (secs) */
88: #define BUND_BM_DFL_Md 90 /* Min disconnect period (secs) */
89:
90: #define BUND_BM_N 6 /* Number of sampling intervals */
91:
92: struct bundbm {
93: u_int traffic[2][BUND_BM_N]; /* Traffic deltas */
94: u_int avail[BUND_BM_N]; /* Available traffic deltas */
95: u_char wasUp[BUND_BM_N]; /* Sub-intervals link was up */
96: time_t last_open; /* Time we last open any link */
97: time_t last_close; /* Time we last closed any link */
98: struct pppTimer bmTimer; /* Bandwidth mgmt timer */
99: u_int total_bw; /* Total bandwidth available */
100: };
101: typedef struct bundbm *BundBm;
102:
103: /* Configuration for a bundle */
104: struct bundconf {
105: short retry_timeout; /* Timeout for retries */
106: u_short bm_S; /* Bandwidth mgmt constants */
107: u_short bm_Hi;
108: u_short bm_Lo;
109: u_short bm_Mc;
110: u_short bm_Md;
111: struct optinfo options; /* Configured options */
112: char linkst[NG_PPP_MAX_LINKS][LINK_MAX_NAME]; /* Link names for DoD */
113: };
114:
115: #define BUND_STATS_UPDATE_INTERVAL 65 * SECONDS
116:
117: /* Total state of a bundle */
118: struct bundle {
119: char name[LINK_MAX_NAME]; /* Name of this bundle */
120: int id; /* Index of this bundle in gBundles */
121: u_char tmpl; /* This is template, not an instance */
122: u_char stay; /* Must not disappear */
123: u_char dead; /* Dead flag */
124: Link links[NG_PPP_MAX_LINKS]; /* Real links in this bundle */
125: u_short n_links; /* Number of links in bundle */
126: u_short n_up; /* Number of links joined the bundle */
127: ng_ID_t nodeID; /* ID of ppp node */
128: char hook[NG_HOOKSIZ]; /* session hook name */
129: MsgHandler msgs; /* Bundle events */
130: int refs; /* Number of references */
131:
132: /* PPP node config */
133: struct ng_ppp_node_conf pppConfig;
134:
135: /* Data chunks */
136: char msession_id[AUTH_MAX_SESSIONID]; /* a uniq session-id */
137: u_int16_t peer_mrru; /* MRRU set by peer, or zero */
138: struct discrim peer_discrim; /* Peer's discriminator */
139: struct bundbm bm; /* Bandwidth management state */
140: struct bundconf conf; /* Configuration for this bundle */
141: struct ng_ppp_link_stat64 stats; /* Statistics for this bundle */
142: #ifndef NG_PPP_STATS64
143: struct ng_ppp_link_stat oldStats; /* Previous stats for 64bit emulation */
144: struct pppTimer statsUpdateTimer; /* update Timer */
145: #endif
146: time_t last_up; /* Time first link got up */
147: struct ifacestate iface; /* IP state info */
148: struct ipcpstate ipcp; /* IPCP state info */
149: struct ipv6cpstate ipv6cp; /* IPV6CP state info */
150: struct ccpstate ccp; /* CCP state info */
151: struct ecpstate ecp; /* ECP state info */
152: u_int ncpstarted; /* Bitmask of active NCPs wich is sufficient to keep bundle open */
153:
154: /* Link management stuff */
155: struct pppTimer bmTimer; /* Bandwidth mgmt timer */
156: struct pppTimer reOpenTimer; /* Re-open timer */
157:
158: /* Boolean variables */
159: u_char open; /* In the open state */
160: u_char originate; /* Who originated the connection */
161:
162: struct authparams params; /* params to pass to from auth backend */
163: };
164:
165: /*
166: * VARIABLES
167: */
168:
169: extern struct discrim self_discrim; /* My discriminator */
170: extern const struct cmdtab BundSetCmds[];
171:
172: /*
173: * FUNCTIONS
174: */
175:
176: extern void BundOpen(Bund b);
177: extern void BundClose(Bund b);
178: extern int BundOpenCmd(Context ctx);
179: extern int BundCloseCmd(Context ctx);
180: extern int BundStat(Context ctx, int ac, char *av[], void *arg);
181: extern void BundUpdateParams(Bund b);
182: extern int BundCommand(Context ctx, int ac, char *av[], void *arg);
183: extern int MSessionCommand(Context ctx, int ac, char *av[], void *arg);
184: extern int IfaceCommand(Context ctx, int ac, char *av[], void *arg);
185: extern int BundCreate(Context ctx, int ac, char *av[], void *arg);
186: extern int BundDestroy(Context ctx, int ac, char *av[], void *arg);
187: extern Bund BundInst(Bund bt, char *name, int tmpl, int stay);
188: extern Bund BundFind(const char *name);
189: extern void BundShutdown(Bund b);
190: extern void BundUpdateStats(Bund b);
191: extern void BundUpdateStatsTimer(void *cookie);
192: extern void BundResetStats(Bund b);
193:
194: extern int BundJoin(Link l);
195: extern void BundLeave(Link l);
196: extern void BundNcpsJoin(Bund b, int proto);
197: extern void BundNcpsLeave(Bund b, int proto);
198: extern void BundNcpsStart(Bund b, int proto);
199: extern void BundNcpsFinish(Bund b, int proto);
200: extern void BundOpenLinks(Bund b);
201: extern void BundCloseLinks(Bund b);
202: extern int BundCreateOpenLink(Bund b, int n);
203: extern void BundOpenLink(Link l);
204:
205: extern void BundNcpsOpen(Bund b);
206: extern void BundNcpsClose(Bund b);
207:
208: extern void BundShowLinks(Context ctx, Bund sb);
209:
210: #endif
211:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>