File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / mpd / src / link.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Nov 1 09:56:12 2016 UTC (7 years, 8 months ago) by misho
Branches: mpd, MAIN
CVS tags: v5_8p7, v5_8p1_cross, v5_8p1, v5_8, HEAD
mpd 5.8

    1: 
    2: /*
    3:  * link.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 _LINK_H_
   11: #define _LINK_H_
   12: 
   13: #include "defs.h"
   14: #include "proto.h"
   15: #include "lcp.h"
   16: #include "ip.h"
   17: #include "mp.h"
   18: #include "vars.h"
   19: #include "auth.h"
   20: #include "fsm.h"
   21: #include "mbuf.h"
   22: #include "phys.h"
   23: #include "vars.h"
   24: #include <netgraph/ng_ppp.h>
   25: #include <regex.h>
   26: 
   27: /*
   28:  * DEFINITIONS
   29:  */
   30: 
   31:   /* Bounds */
   32:   /* Default bundle-layer FSM retry timeout */
   33:   #define LINK_DEFAULT_RETRY	2
   34: 
   35:   /* Default latency and bandwidth */
   36:   #define LINK_DEFAULT_BANDWIDTH	64000		/* 64k */
   37:   #define LINK_DEFAULT_LATENCY		2000		/* 2ms */
   38: 
   39:   enum {
   40:     LINK_ACTION_FORWARD,
   41:     LINK_ACTION_BUNDLE,
   42:     LINK_ACTION_DROP
   43:   };
   44: 
   45:   struct linkaction {
   46:     int 		action;
   47:     char		regex[128];
   48:     regex_t		regexp;
   49:     char		arg[LINK_MAX_NAME];	/* Link/Bundle template name */
   50:     SLIST_ENTRY(linkaction) next;
   51:   };
   52: 
   53:   /* Configuration options */
   54:   enum {
   55:     LINK_CONF_PAP,
   56:     LINK_CONF_CHAPMD5,
   57:     LINK_CONF_CHAPMSv1,
   58:     LINK_CONF_CHAPMSv2,
   59:     LINK_CONF_EAP,
   60:     LINK_CONF_INCOMING,
   61:     LINK_CONF_ACFCOMP,
   62:     LINK_CONF_PROTOCOMP,
   63:     LINK_CONF_MSDOMAIN,
   64:     LINK_CONF_MAGICNUM,
   65:     LINK_CONF_PASSIVE,
   66:     LINK_CONF_CHECK_MAGIC,
   67:     LINK_CONF_RINGBACK,
   68:     LINK_CONF_NO_ORIG_AUTH,
   69:     LINK_CONF_CALLBACK,
   70:     LINK_CONF_MULTILINK,	/* multi-link */
   71:     LINK_CONF_SHORTSEQ,		/* multi-link short sequence numbers */
   72:     LINK_CONF_TIMEREMAIN,	/* Send LCP Time-Remain if known */
   73:     LINK_CONF_PEER_AS_CALLING,
   74:     LINK_CONF_REPORT_MAC,
   75:     LINK_CONF_REMOVE_TEE	/* Remove ng_tee from the resulting chain */
   76:   };
   77: 
   78:   /* Configuration for a link */
   79:   struct linkconf {
   80:     u_short		mtu;		/* Initial MTU value */
   81:     u_short		mru;		/* Initial MRU value */
   82:     uint16_t		mrru;		/* Initial MRRU value */
   83:     uint32_t		accmap;		/* Initial ACCMAP value */
   84:     short		retry_timeout;	/* FSM timeout for retries */
   85:     short		max_redial;	/* Max failed connect attempts */
   86:     short		redial_delay;	/* Failed connect retry time */
   87:     char		*ident;		/* LCP ident string */
   88:     struct optinfo	options;	/* Configured options */
   89:     int			max_children;	/* Maximal number of children */
   90:   };
   91: 
   92:   struct linkbm {
   93:     struct ng_ppp_link_stat
   94: 		idleStats;		/* Link management stats */
   95:   };
   96:   typedef struct linkbm	*LinkBm;
   97: 
   98:   /* Values for link origination (must fit in 2 bits) */
   99:   #define LINK_ORIGINATE_UNKNOWN	0
  100:   #define LINK_ORIGINATE_LOCAL		1
  101:   #define LINK_ORIGINATE_REMOTE		2
  102: 
  103:   #define LINK_ORIGINATION(o)	((o) == LINK_ORIGINATE_LOCAL ? "local" :    \
  104:   				 (o) == LINK_ORIGINATE_REMOTE ? "remote" :  \
  105: 				 "unknown")
  106: 
  107:   /* Total state of a link */
  108:   struct linkst {
  109:     char		name[LINK_MAX_NAME];	/* Human readable name */
  110:     int			id;			/* Index of this link in gLinks */
  111:     u_char		tmpl;			/* This is template, not an instance */
  112:     u_char		stay;			/* Must not disappear */
  113:     u_char		state;			/* Device current state */
  114:     u_char		joined_bund;		/* Link successfully joined bundle */
  115:     u_char		originate;		/* Who originated the connection */
  116:     u_char		die;			/* LCP agreed to die */
  117:     u_char		dead;			/* Dead flag (shutted down) */
  118:     Bund		bund;			/* My bundle */
  119:     Rep			rep;			/* Rep connected to the device */
  120:     int			bundleIndex;		/* Link number in bundle */
  121:     int			parent;			/* Index of the parent in gLinks */
  122:     int			children;		/* Number of children */
  123:     int			refs;			/* Number of references */
  124:     char		hook[NG_HOOKSIZ];	/* session hook name */
  125:     ng_ID_t		nodeID;			/* ID of the tee node */
  126:     MsgHandler		msgs;			/* Link events */
  127:     SLIST_HEAD(, linkaction) actions;
  128: 
  129:     /* State info */
  130:     struct linkconf	conf;		/* Link configuration */
  131:     struct lcpstate	lcp;		/* LCP state info */
  132:     struct linkbm	bm;		/* Link bandwidth mgmt info */
  133:     struct ng_ppp_link_stat64	stats;	/* Link statistics */
  134: #ifndef NG_PPP_STATS64
  135:     struct ng_ppp_link_stat oldStats;	/* Previous stats for 64bit emulation */
  136: #endif
  137: 
  138:     /* Link properties */
  139:     short		num_redial;	/* Counter for retry attempts */
  140:     u_char		upReasonValid;
  141:     u_char		downReasonValid;
  142:     u_char		tee_removed;
  143:     char		*upReason;	/* Reason for link going up */
  144:     char		*downReason;	/* Reason for link going down */
  145:     int			bandwidth;	/* Bandwidth in bits per second */
  146:     int			latency;	/* Latency in microseconds */
  147:     time_t		last_up;	/* Time this link last got up */
  148:     char		msession_id[AUTH_MAX_SESSIONID]; /* a uniq msession-id */
  149:     char		session_id[AUTH_MAX_SESSIONID];	/* a uniq session-id */
  150: 
  151:     PhysType		type;			/* Device type descriptor */
  152:     void		*info;			/* Type specific info */
  153:     MsgHandler		pmsgs;			/* Message channel */
  154:     struct pppTimer	openTimer;		/* Open retry timer */
  155:   };
  156: 
  157:   
  158: /*
  159:  * VARIABLES
  160:  */
  161: 
  162:   extern const struct cmdtab	LinkSetCmds[];
  163: 
  164:   extern int		gLinksCsock;		/* Socket node control socket */
  165:   extern int		gLinksDsock;		/* Socket node data socket */
  166: 
  167: /*
  168:  * FUNCTIONS
  169:  */
  170:   extern int	LinksInit(void);
  171:   extern void	LinksShutdown(void);
  172: 
  173:   extern void	LinkUp(Link l);
  174:   extern void	LinkDown(Link l);
  175:   extern void	LinkOpen(Link l);
  176:   extern void	LinkClose(Link l);
  177:   extern int	LinkOpenCmd(Context ctx);
  178:   extern int	LinkCloseCmd(Context ctx);
  179: 
  180:   extern int	LinkCreate(Context ctx, int ac, char *av[], void *arg);
  181:   extern int	LinkDestroy(Context ctx, int ac, char *av[], void *arg);
  182:   extern Link	LinkInst(Link lt, char *name, int tmpl, int stay);
  183:   extern void	LinkShutdownCheck(Link l, short state);
  184:   extern void	LinkShutdown(Link l);
  185:   extern int	LinkNgInit(Link l);
  186:   extern int	LinkNgJoin(Link l);
  187:   extern int	LinkNgToRep(Link l);
  188:   extern int	LinkNgLeave(Link l);
  189:   extern void	LinkNgShutdown(Link l);
  190:   extern int	LinkNuke(Link link);
  191:   extern int	LinkStat(Context ctx, int ac, char *av[], void *arg);
  192:   extern void	LinkUpdateStats(Link l);
  193:   extern void	LinkResetStats(Link l);
  194:   extern Link	LinkFind(const char *name);
  195:   extern int	LinkCommand(Context ctx, int ac, char *av[], void *arg);
  196:   extern int	SessionCommand(Context ctx, int ac, char *av[], void *arg);
  197:   extern int	AuthnameCommand(Context ctx, int ac, char *av[], void *arg);
  198:   extern void	RecordLinkUpDownReason(Bund b, Link l, int up, const char *fmt,
  199: 			  const char *arg, ...);
  200: 
  201:   extern const char	*LinkMatchAction(Link l, int stage, char *login);
  202: 
  203: #endif
  204: 

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