File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mpd / src / bund.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 08:44:29 2013 UTC (11 years ago) by misho
Branches: mpd, MAIN
CVS tags: v5_8p7, v5_8p1_cross, v5_8p1, v5_8, v5_7p0, v5_7, v5_6, HEAD
5.7

    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>