Annotation of embedaddon/mpd/src/bund.h, revision 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>