Annotation of embedaddon/mpd/src/iface.h, revision 1.1

1.1     ! misho       1: 
        !             2: /*
        !             3:  * iface.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 _IFACE_H_
        !            11: #define _IFACE_H_
        !            12: 
        !            13: #include <sys/types.h>
        !            14: #include <sys/time.h>
        !            15: #include <sys/ioctl.h>
        !            16: #include <net/if_dl.h>
        !            17: #include <net/bpf.h>
        !            18: #include <netinet/ip.h>
        !            19: #include <netinet/tcp.h>
        !            20: #include <netgraph/ng_message.h>
        !            21: #include <netgraph/ng_ppp.h>
        !            22: #ifdef USE_NG_BPF
        !            23: #include <netgraph/ng_bpf.h>
        !            24: #endif
        !            25: #include "mbuf.h"
        !            26: #include "timer.h"
        !            27: #ifdef USE_NG_NAT
        !            28: #include "nat.h"
        !            29: #endif
        !            30: #include "vars.h"
        !            31: 
        !            32: /*
        !            33:  * DEFINITIONS
        !            34:  */
        !            35: 
        !            36:   #define IFACE_MAX_ROUTES     32
        !            37:   #define IFACE_MAX_SCRIPT     128
        !            38: 
        !            39:   #define IFACE_IDLE_SPLIT     4
        !            40:   
        !            41:   #define IFACE_MIN_MTU                296
        !            42:   #define IFACE_MAX_MTU                65536
        !            43: 
        !            44:   /*
        !            45:    * We are in a liberal position about MSS
        !            46:    * (RFC 879, section 7).
        !            47:    */
        !            48:   #define MAXMSS(mtu) (mtu - sizeof(struct ip) - sizeof(struct tcphdr))
        !            49: 
        !            50: /* Configuration options */
        !            51: 
        !            52:   enum {
        !            53:     IFACE_CONF_ONDEMAND,
        !            54:     IFACE_CONF_PROXY,
        !            55:     IFACE_CONF_TCPMSSFIX,
        !            56:     IFACE_CONF_TEE,
        !            57:     IFACE_CONF_NAT,
        !            58:     IFACE_CONF_NETFLOW_IN,
        !            59:     IFACE_CONF_NETFLOW_OUT,
        !            60:     IFACE_CONF_NETFLOW_ONCE,
        !            61:     IFACE_CONF_IPACCT
        !            62:   };
        !            63: 
        !            64:   /* Dial-on-demand packet cache */
        !            65:   struct dodcache {
        !            66:     Mbuf               pkt;
        !            67:     time_t             ts;
        !            68:     u_short            proto;
        !            69:   };
        !            70: 
        !            71:   #define MAX_DOD_CACHE_DELAY  30
        !            72:   
        !            73:   struct ifaceconf {
        !            74:     struct u_range     self_addr;              /* Interface's IP address */
        !            75:     struct u_addr      peer_addr;              /* Peer's IP address */
        !            76:     struct u_addr      self_ipv6_addr;
        !            77:     struct u_addr      peer_ipv6_addr;
        !            78:     u_char             self_addr_force;
        !            79:     u_char             peer_addr_force;
        !            80:     u_char             self_ipv6_addr_force;
        !            81:     u_char             peer_ipv6_addr_force;
        !            82:     char               ifname[IFNAMSIZ];       /* Name of my interface */
        !            83: #ifdef SIOCSIFDESCR
        !            84:     char               *ifdescr;               /* Interface description*/
        !            85: #endif
        !            86: #ifdef SIOCAIFGROUP
        !            87:     char               ifgroup[IFNAMSIZ];      /* Group of my interface */
        !            88: #endif
        !            89:   };
        !            90: 
        !            91:   struct ifaceroute {
        !            92:     struct u_range     dest;                   /* Destination of route */
        !            93:     u_char             ok;                     /* Route installed OK */
        !            94:     SLIST_ENTRY(ifaceroute)    next;
        !            95:   };
        !            96:   typedef struct ifaceroute    *IfaceRoute;
        !            97:   
        !            98:   struct ifacestate {
        !            99:     char               ifname[IFNAMSIZ];       /* Name of my interface */
        !           100:     char               ngname[IFNAMSIZ];       /* Name of my Netgraph node */
        !           101:     uint               ifindex;                /* System interface index */
        !           102: #ifdef SIOCSIFDESCR
        !           103:     char               *ifdescr;               /* Interface description*/
        !           104: #endif
        !           105:     struct ifaceconf   conf;
        !           106:     u_char             traffic[IFACE_IDLE_SPLIT];      /* Mark any traffic */
        !           107:     u_short            mtu;                    /* Interface MTU */
        !           108:     u_short            max_mtu;                /* Configured maximum MTU */
        !           109:     struct optinfo     options;                /* Configuration options */
        !           110:     u_int              idle_timeout;           /* Idle timeout */
        !           111:     u_int              session_timeout;        /* Session timeout */
        !           112:     SLIST_HEAD(, ifaceroute) routes;
        !           113: #ifdef USE_IPFW
        !           114:     struct acl                 *tables;                /* List of IP added to tables by iface */
        !           115: #endif
        !           116:     struct u_range     self_addr;              /* Interface's IP address */
        !           117:     struct u_addr      peer_addr;              /* Peer's IP address */
        !           118:     struct u_addr      proxy_addr;             /* Proxied IP address */
        !           119:     struct u_addr      self_ipv6_addr;
        !           120:     struct u_addr      peer_ipv6_addr;
        !           121:     struct pppTimer    idleTimer;              /* Idle timer */
        !           122:     struct pppTimer    sessionTimer;           /* Session timer */
        !           123:     char               up_script[IFACE_MAX_SCRIPT];
        !           124:     char               down_script[IFACE_MAX_SCRIPT];
        !           125: #ifdef USE_NG_BPF
        !           126:     ng_ID_t            limitID;                /* ID of limit (bpf) node */
        !           127:     SLIST_HEAD(, svcs) ss[ACL_DIRS];           /* Where to get service stats */
        !           128:     struct svcstat     prevstats;              /* Stats from gone layers */
        !           129: #endif
        !           130:     time_t             last_up;                /* Time this iface last got up */
        !           131:     u_char             open:1;                 /* In an open state */
        !           132:     u_char             dod:1;                  /* Interface flagged -link0 */
        !           133:     u_char             up:1;                   /* interface is up */
        !           134:     u_char             ip_up:1;                /* IP interface is up */
        !           135:     u_char             ipv6_up:1;              /* IPv6 interface is up */
        !           136:     u_char             nat_up:1;               /* NAT is up */
        !           137:     u_char             tee_up:1;               /* TEE is up */
        !           138:     u_char             tee6_up:1;              /* TEE6 is up */
        !           139:     u_char             nfin_up:1;              /* NFIN is up */
        !           140:     u_char             nfout_up:1;             /* NFOUT is up */
        !           141:     u_char             mss_up:1;               /* MSS is up */
        !           142:     u_char             ipacct_up:1;            /* IPACCT is up */
        !           143:     
        !           144:     struct dodcache    dodCache;               /* Dial-on-demand cache */
        !           145:     
        !           146: #ifdef USE_NG_NAT
        !           147:     struct natstate    nat;                    /* NAT config */
        !           148: #endif
        !           149: 
        !           150:     struct ng_ppp_link_stat64  idleStats;      /* Statistics for idle timeout */
        !           151:   };
        !           152:   typedef struct ifacestate    *IfaceState;
        !           153: 
        !           154: #ifdef USE_IPFW
        !           155:   struct acl_pool {                    /* Pool of used ACL numbers */
        !           156:     char               ifname[IFNAMSIZ];     /* Name of interface */
        !           157:     unsigned short     acl_number;             /* ACL number given by RADIUS unique on this interface */
        !           158:     unsigned short     real_number;            /* Real ACL number unique on this system */
        !           159:     struct acl_pool    *next;
        !           160:   };
        !           161: #endif
        !           162: 
        !           163: /*
        !           164:  * VARIABLES
        !           165:  */
        !           166: 
        !           167:   extern const struct cmdtab   IfaceSetCmds[];
        !           168: 
        !           169: #ifdef USE_IPFW
        !           170:   extern struct acl_pool * rule_pool; /* Pointer to the first element in the list of rules */
        !           171:   extern struct acl_pool * pipe_pool; /* Pointer to the first element in the list of pipes */
        !           172:   extern struct acl_pool * queue_pool; /* Pointer to the first element in the list of queues */
        !           173:   extern struct acl_pool * table_pool; /* Pointer to the first element in the list of tables */
        !           174:   extern int rule_pool_start; /* Initial number of ipfw rules pool */
        !           175:   extern int pipe_pool_start; /* Initial number of ipfw dummynet pipe pool */
        !           176:   extern int queue_pool_start; /* Initial number of ipfw dummynet queue pool */
        !           177:   extern int table_pool_start; /* Initial number of ipfw tables pool */
        !           178: #endif
        !           179: 
        !           180: /*
        !           181:  * FUNCTIONS
        !           182:  */
        !           183: 
        !           184:   extern void  IfaceInit(Bund b);
        !           185:   extern void  IfaceInst(Bund b, Bund bt);
        !           186:   extern void  IfaceDestroy(Bund b);
        !           187:   extern void  IfaceOpen(Bund b);
        !           188:   extern void  IfaceClose(Bund b);
        !           189:   extern int   IfaceOpenCmd(Context ctx);
        !           190:   extern int   IfaceCloseCmd(Context ctx);
        !           191:   extern int   IfaceIpIfaceUp(Bund b, int ready);
        !           192:   extern void  IfaceIpIfaceDown(Bund b);
        !           193:   extern int   IfaceIpv6IfaceUp(Bund b, int ready);
        !           194:   extern void  IfaceIpv6IfaceDown(Bund b);
        !           195:   extern void  IfaceUp(Bund b, int ready);
        !           196:   extern void  IfaceDown(Bund b);
        !           197:   extern int   IfaceStat(Context ctx, int ac, char *av[], void *arg);
        !           198: 
        !           199:   extern void  IfaceListenInput(Bund b, int proto, Mbuf pkt);
        !           200:   #ifndef USE_NG_TCPMSS
        !           201:   extern void  IfaceCorrectMSS(Mbuf pkt, uint16_t maxmss);
        !           202:   #endif
        !           203:   extern void  IfaceSetMTU(Bund b, int mtu);
        !           204:   extern void  IfaceChangeFlags(Bund b, int clear, int set);
        !           205:   extern int   IfaceChangeAddr(Bund b, int add, struct u_range *self, struct u_addr *peer);
        !           206:   extern int   IfaceSetRoute(Bund b, int cmd, struct u_range *dst, struct u_addr *gw);
        !           207: 
        !           208: #ifdef USE_NG_BPF
        !           209:   extern void  IfaceGetStats(Bund b, struct svcstat *stat);
        !           210:   extern void  IfaceAddStats(struct svcstat *stat1, struct svcstat *stat2);
        !           211:   extern void  IfaceFreeStats(struct svcstat *stat);
        !           212: #endif
        !           213: 
        !           214: #endif
        !           215: 

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