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

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

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