Annotation of XNU/bsd/netinet/ip_compat.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * Copyright (C) 1993-1997 by Darren Reed.
                     24:  *
                     25:  * Redistribution and use in source and binary forms are permitted
                     26:  * provided that this notice is preserved and due credit is given
                     27:  * to the original author and the contributors.
                     28:  *
                     29:  * @(#)ip_compat.h     1.8 1/14/96
                     30:  */
                     31: 
                     32: #if 0
                     33: 
                     34: #ifndef        __IP_COMPAT_H__
                     35: #define        __IP_COMPAT_H__
                     36: 
                     37: #ifndef        __P
                     38: # ifdef        __STDC__
                     39: #  define      __P(x)  x
                     40: # else
                     41: #  define      __P(x)  ()
                     42: #  define      const
                     43: # endif
                     44: #endif
                     45: 
                     46: #ifndef        SOLARIS
                     47: #define        SOLARIS (defined(sun) && (defined(__svr4__) || defined(__SVR4)))
                     48: #endif
                     49: 
                     50: #if defined(_KERNEL) && !defined(KERNEL)
                     51: # define       KERNEL
                     52: #endif
                     53: #if defined(KERNEL) && !defined(_KERNEL)
                     54: # define       _KERNEL
                     55: #endif
                     56: #if!defined(__KERNEL__) && defined(KERNEL)
                     57: # define       __KERNEL__
                     58: #endif
                     59: 
                     60: #if defined(__SVR4) || defined(__svr4__) || defined(__sgi)
                     61: #define index   strchr
                     62: # if !defined(_KERNEL)
                     63: #  define      bzero(a,b)      memset(a,0,b)
                     64: #  define      bcmp            memcmp
                     65: #  define      bcopy(a,b,c)    memmove(b,a,c)
                     66: # endif
                     67: #endif
                     68: 
                     69: struct  ether_addr {
                     70:         u_char  ether_addr_octet[6];
                     71: };
                     72: 
                     73: 
                     74: #if defined(__sgi) && !defined(IPFILTER_LKM)
                     75: # ifdef __STDC__
                     76: #  define IPL_EXTERN(ep) ipfilter##ep
                     77: # else
                     78: #  define IPL_EXTERN(ep) ipfilter/**/ep
                     79: # endif
                     80: #else
                     81: # ifdef __STDC__
                     82: #  define IPL_EXTERN(ep) ipl##ep
                     83: # else
                     84: #  define IPL_EXTERN(ep) ipl/**/ep
                     85: # endif
                     86: #endif
                     87: 
                     88: #ifdef linux
                     89: # include <sys/sysmacros.h>
                     90: #endif
                     91: #if    SOLARIS
                     92: # define       MTYPE(m)        ((m)->b_datap->db_type)
                     93: # include      <sys/ioccom.h>
                     94: # include      <sys/sysmacros.h>
                     95: # include      <sys/kmem.h>
                     96: /*
                     97:  * because Solaris 2 defines these in two places :-/
                     98:  */
                     99: # undef        IPOPT_EOL
                    100: # undef        IPOPT_NOP
                    101: # undef        IPOPT_LSRR
                    102: # undef        IPOPT_RR
                    103: # undef        IPOPT_SSRR
                    104: # ifndef       _KERNEL
                    105: #  define      _KERNEL
                    106: #  undef       RES_INIT
                    107: #  include <inet/common.h>
                    108: #  include <inet/ip.h>
                    109: #  include <inet/ip_ire.h>
                    110: #  undef       _KERNEL
                    111: # else /* _KERNEL */
                    112: #  include <inet/common.h>
                    113: #  include <inet/ip.h>
                    114: #  include <inet/ip_ire.h>
                    115: # endif /* _KERNEL */
                    116: #endif /* SOLARIS */
                    117: #define        IPMINLEN(i, h)  ((i)->ip_len >= ((i)->ip_hl * 4 + sizeof(struct h)))
                    118: 
                    119: #ifndef        IP_OFFMASK
                    120: #define        IP_OFFMASK      0x1fff
                    121: #endif
                    122: 
                    123: #if    BSD > 199306
                    124: # define       USE_QUAD_T
                    125: # define       U_QUAD_T        u_quad_t
                    126: # define       QUAD_T          quad_t
                    127: #else /* BSD > 199306 */
                    128: # define       U_QUAD_T        u_long
                    129: # define       QUAD_T          long
                    130: #endif /* BSD > 199306 */
                    131: 
                    132: /*
                    133:  * These operating systems already take care of the problem for us.
                    134:  */
                    135: #if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \
                    136:     defined(__sgi)
                    137: typedef u_int32_t       u_32_t;
                    138: #else
                    139: /*
                    140:  * Really, any arch where sizeof(long) != sizeof(int).
                    141:  */
                    142: # if defined(__alpha__) || defined(__alpha)
                    143: typedef unsigned int    u_32_t;
                    144: # else
                    145: typedef unsigned long   u_32_t;
                    146: # endif
                    147: #endif /* __NetBSD__ || __OpenBSD__ || __FreeBSD__ || __sgi */
                    148: 
                    149: #ifndef        MAX
                    150: #define        MAX(a,b)        (((a) > (b)) ? (a) : (b))
                    151: #endif
                    152: 
                    153: /*
                    154:  * Security Options for Intenet Protocol (IPSO) as defined in RFC 1108.
                    155:  *
                    156:  * Basic Option
                    157:  *
                    158:  * 00000001   -   (Reserved 4)
                    159:  * 00111101   -   Top Secret
                    160:  * 01011010   -   Secret
                    161:  * 10010110   -   Confidential
                    162:  * 01100110   -   (Reserved 3)
                    163:  * 11001100   -   (Reserved 2)
                    164:  * 10101011   -   Unclassified
                    165:  * 11110001   -   (Reserved 1)
                    166:  */
                    167: #define        IPSO_CLASS_RES4         0x01
                    168: #define        IPSO_CLASS_TOPS         0x3d
                    169: #define        IPSO_CLASS_SECR         0x5a
                    170: #define        IPSO_CLASS_CONF         0x96
                    171: #define        IPSO_CLASS_RES3         0x66
                    172: #define        IPSO_CLASS_RES2         0xcc
                    173: #define        IPSO_CLASS_UNCL         0xab
                    174: #define        IPSO_CLASS_RES1         0xf1
                    175: 
                    176: #define        IPSO_AUTH_GENSER        0x80
                    177: #define        IPSO_AUTH_ESI           0x40
                    178: #define        IPSO_AUTH_SCI           0x20
                    179: #define        IPSO_AUTH_NSA           0x10
                    180: #define        IPSO_AUTH_DOE           0x08
                    181: #define        IPSO_AUTH_UN            0x06
                    182: #define        IPSO_AUTH_FTE           0x01
                    183: 
                    184: /*
                    185:  * IP option #defines
                    186:  */
                    187: /*#define      IPOPT_RR        7 */
                    188: #define        IPOPT_ZSU       10      /* ZSU */
                    189: #define        IPOPT_MTUP      11      /* MTUP */
                    190: #define        IPOPT_MTUR      12      /* MTUR */
                    191: #define        IPOPT_ENCODE    15      /* ENCODE */
                    192: /*#define      IPOPT_TS        68 */
                    193: #define        IPOPT_TR        82      /* TR */
                    194: /*#define      IPOPT_SECURITY  130 */
                    195: /*#define      IPOPT_LSRR      131 */
                    196: #define        IPOPT_E_SEC     133     /* E-SEC */
                    197: #define        IPOPT_CIPSO     134     /* CIPSO */
                    198: /*#define      IPOPT_SATID     136 */
                    199: #ifndef        IPOPT_SID
                    200: # define       IPOPT_SID       IPOPT_SATID
                    201: #endif
                    202: /*#define      IPOPT_SSRR      137 */
                    203: #define        IPOPT_ADDEXT    147     /* ADDEXT */
                    204: #define        IPOPT_VISA      142     /* VISA */
                    205: #define        IPOPT_IMITD     144     /* IMITD */
                    206: #define        IPOPT_EIP       145     /* EIP */
                    207: #define        IPOPT_FINN      205     /* FINN */
                    208: 
                    209: 
                    210: #if defined(__FreeBSD__) && defined(KERNEL)
                    211: # if __FreeBSD__ < 3
                    212: #  include <machine/spl.h>
                    213: # endif
                    214: # if defined(IPFILTER_LKM) && !defined(ACTUALLY_LKM_NOT_KERNEL)
                    215: #  define      ACTUALLY_LKM_NOT_KERNEL
                    216: # endif
                    217: #endif /* __FreeBSD__ && KERNEL */
                    218: 
                    219: /*
                    220:  * Build some macros and #defines to enable the same code to compile anywhere
                    221:  * Well, that's the idea, anyway :-)
                    222:  */
                    223: #if KERNEL
                    224: # if SOLARIS
                    225: #  define      MUTEX_ENTER(x)  mutex_enter(x)
                    226: #  define      MUTEX_EXIT(x)   mutex_exit(x)
                    227: #  define      MTOD(m,t)       (t)((m)->b_rptr)
                    228: #  define      IRCOPY(a,b,c)   copyin((a), (b), (c))
                    229: #  define      IWCOPY(a,b,c)   copyout((a), (b), (c))
                    230: #  define      FREE_MB_T(m)    freemsg(m)
                    231: #  define      SPL_NET(x)      ;
                    232: #  define      SPL_IMP(x)      ;
                    233: #  undef       SPL_X
                    234: #  define      SPL_X(x)        ;
                    235: #  ifdef sparc
                    236: #   define     ntohs(x)        (x)
                    237: #   define     ntohl(x)        (x)
                    238: #   define     htons(x)        (x)
                    239: #   define     htonl(x)        (x)
                    240: #  endif /* sparc */
                    241: #  define      KMALLOC(a,b,c)  (a) = (b)kmem_alloc((c), KM_NOSLEEP)
                    242: #  define      GET_MINOR(x)    getminor(x)
                    243: typedef        struct  qif     {
                    244:        struct  qif     *qf_next;
                    245:        ill_t   *qf_ill;
                    246:        kmutex_t        qf_lock;
                    247:        void    *qf_iptr;
                    248:        void    *qf_optr;
                    249:        queue_t *qf_in;
                    250:        queue_t *qf_out;
                    251:        struct  qinit   *qf_wqinfo;
                    252:        struct  qinit   *qf_rqinfo;
                    253:        struct  qinit   qf_wqinit;
                    254:        struct  qinit   qf_rqinit;
                    255:        mblk_t  *qf_m;  /* These three fields are for passing data up from */
                    256:        queue_t *qf_q;  /* fr_qin and fr_qout to the packet processing. */
                    257:        int     qf_off;
                    258:        int     qf_len; /* this field is used for in ipfr_fastroute */
                    259:        char    qf_name[8];
                    260:        /*
                    261:         * in case the ILL has disappeared...
                    262:         */
                    263:        int     qf_hl;  /* header length */
                    264: } qif_t;
                    265: extern ill_t   *get_unit __P((char *));
                    266: #  define      GETUNIT(n)      get_unit((n))
                    267: # else /* SOLARIS */
                    268: #  if defined(__sgi)
                    269: #   include <sys/ksynch.h>
                    270: #   define     IPF_LOCK_PL     plhi
                    271: #   include <sys/sema.h>
                    272: #undef kmutex_t
                    273: typedef struct {
                    274:        lock_t *l;
                    275:        int pl;
                    276: } kmutex_t;
                    277: #   define     MUTEX_ENTER(x)  (x)->pl = LOCK((x)->l, IPF_LOCK_PL);
                    278: #   define     MUTEX_EXIT(x)   UNLOCK((x)->l, (x)->pl);
                    279: #  else /* __sgi */
                    280: #   define     MUTEX_ENTER(x)  ;
                    281: #   define     MUTEX_EXIT(x)   ;
                    282: #  endif /* __sgi */
                    283: #  ifndef linux
                    284: #   define     FREE_MB_T(m)    m_freem(m)
                    285: #   define     MTOD(m,t)       mtod(m,t)
                    286: #   define     IRCOPY(a,b,c)   bcopy((a), (b), (c))
                    287: #   define     IWCOPY(a,b,c)   bcopy((a), (b), (c))
                    288: #  endif /* !linux */
                    289: # endif /* SOLARIS */
                    290: 
                    291: # ifdef sun
                    292: #  if !SOLARIS
                    293: #   include    <sys/kmem_alloc.h>
                    294: #   define     GETUNIT(n)      ifunit((n), IFNAMSIZ)
                    295: #  endif
                    296: # else
                    297: #  ifndef      linux
                    298: #   define     GETUNIT(n)      ifunit((n))
                    299: #  endif
                    300: # endif /* sun */
                    301: 
                    302: # if defined(sun) && !defined(linux) || defined(__sgi)
                    303: #  define      UIOMOVE(a,b,c,d)        uiomove((caddr_t)a,b,c,d)
                    304: #  define      SLEEP(id, n)    sleep((id), PZERO+1)
                    305: #  define      WAKEUP(id)      wakeup(id)
                    306: #  define      KFREE(x)        kmem_free((char *)(x), sizeof(*(x)))
                    307: #  define      KFREES(x,s)     kmem_free((char *)(x), (s))
                    308: #  if !SOLARIS
                    309: extern void    m_copydata __P((struct mbuf *, int, int, caddr_t));
                    310: extern void    m_copyback __P((struct mbuf *, int, int, caddr_t));
                    311: #  endif
                    312: #  ifdef __sgi
                    313: #   include <sys/kmem.h>
                    314: #   include <sys/ddi.h>
                    315: #   define     KMALLOC(a,b,c)  (a) = (b)kmem_alloc((c), KM_NOSLEEP)
                    316: #   define     GET_MINOR(x)    getminor(x)
                    317: #  else
                    318: #   if !SOLARIS
                    319: #    define    KMALLOC(a,b,c)  (a) = (b)new_kmem_alloc((c), KMEM_NOSLEEP)
                    320: #   endif /* SOLARIS */
                    321: #  endif /* __sgi */
                    322: # endif /* sun && !linux */
                    323: # ifndef       GET_MINOR
                    324: #  define      GET_MINOR(x)    minor(x)
                    325: # endif
                    326: # if (BSD >= 199306) || defined(__FreeBSD__)
                    327: #  include <vm/vm.h>
                    328: #  if !defined(__FreeBSD__) || (defined (__FreeBSD__) && __FreeBSD__>=3)
                    329: #   include <vm/vm_extern.h>
                    330: #   include <sys/proc.h>
                    331: extern vm_map_t        kmem_map;
                    332: #  else /* !__FreeBSD__ || (__FreeBSD__ && __FreeBSD__>=3) */
                    333: #   include <vm/vm_kern.h>
                    334: #  endif /* !__FreeBSD__ || (__FreeBSD__ && __FreeBSD__>=3) */
                    335: #  ifdef       M_PFIL
                    336: #   define     KMALLOC(a, b, c)        MALLOC((a), b, (c), M_PFIL, M_NOWAIT)
                    337: #   define     KFREE(x)        FREE((x), M_PFIL)
                    338: #   define     KFREES(x,s)     FREE((x), M_PFIL)
                    339: #  else
                    340: #   define     KMALLOC(a, b, c)        MALLOC((a), b, (c), M_TEMP, M_NOWAIT)
                    341: #   define     KFREE(x)        FREE((x), M_TEMP)
                    342: #   define     KFREES(x,s)     FREE((x), M_TEMP)
                    343: #  endif /* M_PFIL */
                    344: #  define      UIOMOVE(a,b,c,d)        uiomove(a,b,d)
                    345: #  define      SLEEP(id, n)    tsleep((id), PPAUSE|PCATCH, n, 0)
                    346: #  define      WAKEUP(id)      wakeup(id)
                    347: # endif /* BSD */
                    348: # if defined(NetBSD) && NetBSD <= 1991011 && NetBSD >= 199407
                    349: #  define      SPL_NET(x)      x = splsoftnet()
                    350: #  define      SPL_X(x)        (void) splx(x)
                    351: # else
                    352: #  if !SOLARIS && !defined(linux)
                    353: #   define     SPL_IMP(x)      x = splimp()
                    354: #   define     SPL_NET(x)      x = splnet()
                    355: #   define     SPL_X(x)        (void) splx(x)
                    356: #  endif
                    357: # endif /* NetBSD && NetBSD <= 1991011 && NetBSD >= 199407 */
                    358: # define       PANIC(x,y)      if (x) panic y
                    359: #else /* KERNEL */
                    360: # define       SLEEP(x,y)      ;
                    361: # define       WAKEUP(x)       ;
                    362: # define       PANIC(x,y)      ;
                    363: # define       MUTEX_ENTER(x)  ;
                    364: # define       MUTEX_EXIT(x)   ;
                    365: # define       SPL_NET(x)      ;
                    366: # define       SPL_IMP(x)      ;
                    367: # undef                SPL_X
                    368: # define       SPL_X(x)        ;
                    369: /*# define     KMALLOC(a,b,c)  (a) = (b)malloc(c) */
                    370: # define       KFREE(x)        FREE(x)
                    371: # define       KFREES(x,s)     FREE(x)
                    372: # define       GETUNIT(x)      get_unit(x)
                    373: # define       IRCOPY(a,b,c)   bcopy((a), (b), (c))
                    374: # define       IWCOPY(a,b,c)   bcopy((a), (b), (c))
                    375: #endif /* KERNEL */
                    376: 
                    377: #if SOLARIS
                    378: typedef mblk_t mb_t;
                    379: #else
                    380: # ifdef        linux
                    381: typedef struct sk_buff mb_t;
                    382: # else
                    383: typedef struct mbuf mb_t;
                    384: # endif
                    385: #endif /* SOLARIS */
                    386: 
                    387: #if defined(linux) || defined(__sgi)
                    388: /*
                    389:  * These #ifdef's are here mainly for linux, but who knows, they may
                    390:  * not be in other places or maybe one day linux will grow up and some
                    391:  * of these will turn up there too.
                    392:  */
                    393: #ifndef        ICMP_MINLEN
                    394: # define       ICMP_MINLEN     8
                    395: #endif
                    396: #ifndef        ICMP_UNREACH
                    397: # define       ICMP_UNREACH    ICMP_DEST_UNREACH
                    398: #endif
                    399: #ifndef        ICMP_SOURCEQUENCH
                    400: # define       ICMP_SOURCEQUENCH       ICMP_SOURCE_QUENCH
                    401: #endif
                    402: #ifndef        ICMP_TIMXCEED
                    403: # define       ICMP_TIMXCEED   ICMP_TIME_EXCEEDED
                    404: #endif
                    405: #ifndef        ICMP_PARAMPROB
                    406: # define       ICMP_PARAMPROB  ICMP_PARAMETERPROB
                    407: #endif
                    408: #ifndef ICMP_TSTAMP
                    409: # define       ICMP_TSTAMP     ICMP_TIMESTAMP
                    410: #endif
                    411: #ifndef ICMP_TSTAMPREPLY
                    412: # define       ICMP_TSTAMPREPLY        ICMP_TIMESTAMPREPLY
                    413: #endif
                    414: #ifndef ICMP_IREQ
                    415: # define       ICMP_IREQ       ICMP_INFO_REQUEST
                    416: #endif
                    417: #ifndef ICMP_IREQREPLY
                    418: # define       ICMP_IREQREPLY  ICMP_INFO_REPLY
                    419: #endif
                    420: #ifndef        ICMP_MASKREQ
                    421: # define       ICMP_MASKREQ    ICMP_ADDRESS
                    422: #endif
                    423: #ifndef ICMP_MASKREPLY
                    424: # define       ICMP_MASKREPLY  ICMP_ADDRESSREPLY
                    425: #endif
                    426: #ifndef        IPVERSION
                    427: # define       IPVERSION       4
                    428: #endif
                    429: #ifndef        IPOPT_MINOFF
                    430: # define       IPOPT_MINOFF    4
                    431: #endif
                    432: #ifndef        IPOPT_COPIED
                    433: # define       IPOPT_COPIED(x) ((x)&0x80)
                    434: #endif
                    435: #ifndef        IPOPT_EOL
                    436: # define       IPOPT_EOL       0
                    437: #endif
                    438: #ifndef        IPOPT_NOP
                    439: # define       IPOPT_NOP       1
                    440: #endif
                    441: #ifndef        IP_MF
                    442: # define       IP_MF   ((u_short)0x2000)
                    443: #endif
                    444: #ifndef        ETHERTYPE_IP
                    445: # define       ETHERTYPE_IP    ((u_short)0x0800)
                    446: #endif
                    447: #ifndef        TH_FIN
                    448: # define       TH_FIN  0x01
                    449: #endif
                    450: #ifndef        TH_SYN
                    451: # define       TH_SYN  0x02
                    452: #endif
                    453: #ifndef        TH_RST
                    454: # define       TH_RST  0x04
                    455: #endif
                    456: #ifndef        TH_PUSH
                    457: # define       TH_PUSH 0x08
                    458: #endif
                    459: #ifndef        TH_ACK
                    460: # define       TH_ACK  0x10
                    461: #endif
                    462: #ifndef        TH_URG
                    463: # define       TH_URG  0x20
                    464: #endif
                    465: #ifndef        IPOPT_EOL
                    466: # define       IPOPT_EOL       0
                    467: #endif
                    468: #ifndef        IPOPT_NOP
                    469: # define       IPOPT_NOP       1
                    470: #endif
                    471: #ifndef        IPOPT_RR
                    472: # define       IPOPT_RR        7
                    473: #endif
                    474: #ifndef        IPOPT_TS
                    475: # define       IPOPT_TS        68
                    476: #endif
                    477: #ifndef        IPOPT_SECURITY
                    478: # define       IPOPT_SECURITY  130
                    479: #endif
                    480: #ifndef        IPOPT_LSRR
                    481: # define       IPOPT_LSRR      131
                    482: #endif
                    483: #ifndef        IPOPT_SATID
                    484: # define       IPOPT_SATID     136
                    485: #endif
                    486: #ifndef        IPOPT_SSRR
                    487: # define       IPOPT_SSRR      137
                    488: #endif
                    489: #ifndef        IPOPT_SECUR_UNCLASS
                    490: # define       IPOPT_SECUR_UNCLASS     ((u_short)0x0000)
                    491: #endif
                    492: #ifndef        IPOPT_SECUR_CONFID
                    493: # define       IPOPT_SECUR_CONFID      ((u_short)0xf135)
                    494: #endif
                    495: #ifndef        IPOPT_SECUR_EFTO
                    496: # define       IPOPT_SECUR_EFTO        ((u_short)0x789a)
                    497: #endif
                    498: #ifndef        IPOPT_SECUR_MMMM
                    499: # define       IPOPT_SECUR_MMMM        ((u_short)0xbc4d)
                    500: #endif
                    501: #ifndef        IPOPT_SECUR_RESTR
                    502: # define       IPOPT_SECUR_RESTR       ((u_short)0xaf13)
                    503: #endif
                    504: #ifndef        IPOPT_SECUR_SECRET
                    505: # define       IPOPT_SECUR_SECRET      ((u_short)0xd788)
                    506: #endif
                    507: #ifndef IPOPT_SECUR_TOPSECRET
                    508: # define       IPOPT_SECUR_TOPSECRET   ((u_short)0x6bc5)
                    509: #endif
                    510: #ifndef IPOPT_OLEN
                    511: # define       IPOPT_OLEN      1
                    512: #endif
                    513: #endif /* linux || __sgi */
                    514: 
                    515: #ifdef linux
                    516: /*
                    517:  * TCP States
                    518:  */
                    519: #define        TCPS_CLOSED             0       /* closed */
                    520: #define        TCPS_LISTEN             1       /* listening for connection */
                    521: #define        TCPS_SYN_SENT           2       /* active, have sent syn */
                    522: #define        TCPS_SYN_RECEIVED       3       /* have send and received syn */
                    523: /* states < TCPS_ESTABLISHED are those where connections not established */
                    524: #define        TCPS_ESTABLISHED        4       /* established */
                    525: #define        TCPS_CLOSE_WAIT         5       /* rcvd fin, waiting for close */
                    526: /* states > TCPS_CLOSE_WAIT are those where user has closed */
                    527: #define        TCPS_FIN_WAIT_1         6       /* have closed, sent fin */
                    528: #define        TCPS_CLOSING            7       /* closed xchd FIN; await FIN ACK */
                    529: #define        TCPS_LAST_ACK           8       /* had fin and close; await FIN ACK */
                    530: /* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */
                    531: #define        TCPS_FIN_WAIT_2         9       /* have closed, fin is acked */
                    532: #define        TCPS_TIME_WAIT          10      /* in 2*msl quiet wait after close */
                    533: 
                    534: /*
                    535:  * file flags.
                    536:  */
                    537: #define        FWRITE  WRITE
                    538: #define        FREAD   READ
                    539: /*
                    540:  * mbuf related problems.
                    541:  */
                    542: #define        mtod(m,t)       (t)((m)->data)
                    543: #define        m_len           len
                    544: #define        m_next          next
                    545: 
                    546: #define        IP_DF           0x8000
                    547: 
                    548: typedef        struct  {
                    549:        __u16   th_sport;
                    550:        __u16   th_dport;
                    551:        __u32   th_seq;
                    552:        __u32   th_ack;
                    553: # if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\
                    554:     defined(vax)
                    555:        __u8    th_res:4;
                    556:        __u8    th_off:4;
                    557: #else
                    558:        __u8    th_off:4;
                    559:        __u8    th_res:4;
                    560: #endif
                    561:        __u8    th_flags;
                    562:        __u16   th_win;
                    563:        __u16   th_sum;
                    564:        __u16   th_urp;
                    565: } tcphdr_t;
                    566: 
                    567: typedef        struct  {
                    568:        __u16   uh_sport;
                    569:        __u16   uh_dport;
                    570:        __u16   uh_ulen;
                    571:        __u16   uh_sum;
                    572: } udphdr_t;
                    573: 
                    574: typedef        struct  {
                    575: # if defined(__i386__) || defined(__MIPSEL__) || defined(__alpha__) ||\
                    576:     defined(vax)
                    577:        __u8    ip_hl:4;
                    578:        __u8    ip_v:4;
                    579: # else
                    580:        __u8    ip_hl:4;
                    581:        __u8    ip_v:4;
                    582: # endif
                    583:        __u8    ip_tos;
                    584:        __u16   ip_len;
                    585:        __u16   ip_id;
                    586:        __u16   ip_off;
                    587:        __u8    ip_ttl;
                    588:        __u8    ip_p;
                    589:        __u16   ip_sum;
                    590:        struct  in_addr ip_src;
                    591:        struct  in_addr ip_dst;
                    592: } ip_t;
                    593: 
                    594: /*
                    595:  * Structure of an icmp header.
                    596:  */
                    597: typedef struct icmp {
                    598:        u_char  icmp_type;              /* type of message, see below */
                    599:        u_char  icmp_code;              /* type sub code */
                    600:        u_short icmp_cksum;             /* ones complement cksum of struct */
                    601:        union {
                    602:                u_char ih_pptr;                 /* ICMP_PARAMPROB */
                    603:                struct in_addr ih_gwaddr;       /* ICMP_REDIRECT */
                    604:                struct ih_idseq {
                    605:                        n_short icd_id;
                    606:                        n_short icd_seq;
                    607:                } ih_idseq;
                    608:                int ih_void;
                    609:        } icmp_hun;
                    610: # define       icmp_pptr       icmp_hun.ih_pptr
                    611: # define       icmp_gwaddr     icmp_hun.ih_gwaddr
                    612: # define       icmp_id         icmp_hun.ih_idseq.icd_id
                    613: # define       icmp_seq        icmp_hun.ih_idseq.icd_seq
                    614: # define       icmp_void       icmp_hun.ih_void
                    615:        union {
                    616:                struct id_ts {
                    617:                        n_time its_otime;
                    618:                        n_time its_rtime;
                    619:                        n_time its_ttime;
                    620:                } id_ts;
                    621:                struct id_ip  {
                    622:                        ip_t idi_ip;
                    623:                        /* options and then 64 bits of data */
                    624:                } id_ip;
                    625:                u_long  id_mask;
                    626:                char    id_data[1];
                    627:        } icmp_dun;
                    628: # define       icmp_otime      icmp_dun.id_ts.its_otime
                    629: # define       icmp_rtime      icmp_dun.id_ts.its_rtime
                    630: # define       icmp_ttime      icmp_dun.id_ts.its_ttime
                    631: # define       icmp_ip         icmp_dun.id_ip.idi_ip
                    632: # define       icmp_mask       icmp_dun.id_mask
                    633: # define       icmp_data       icmp_dun.id_data
                    634: } icmphdr_t;
                    635: 
                    636: # ifndef LINUX_IPOVLY
                    637: #  define LINUX_IPOVLY
                    638: struct ipovly {
                    639:        caddr_t ih_next, ih_prev;       /* for protocol sequence q's */
                    640:        u_char  ih_x1;                  /* (unused) */
                    641:        u_char  ih_pr;                  /* protocol */
                    642:        short   ih_len;                 /* protocol length */
                    643:        struct  in_addr ih_src;         /* source internet address */
                    644:        struct  in_addr ih_dst;         /* destination internet address */
                    645: };
                    646: # endif
                    647: 
                    648: typedef struct  {
                    649:        __u8    ether_dhost[6];
                    650:        __u8    ether_shost[6];
                    651:        __u16   ether_type;
                    652: } ether_header_t;
                    653: 
                    654: typedef        struct  uio     {
                    655:        int     uio_resid;
                    656:        int     uio_rw;
                    657:        caddr_t uio_buf;
                    658: } uio_t;
                    659: 
                    660: # define       UIO_READ        0
                    661: # define       UIO_WRITE       1
                    662: # define       UIOMOVE(a, b, c, d)     uiomove(a,b,c,d)
                    663: 
                    664: /*
                    665:  * For masking struct ifnet onto struct device
                    666:  */
                    667: # define       if_name name
                    668: 
                    669: # ifdef        KERNEL
                    670: #  define      GETUNIT(x)      dev_get(x)
                    671: #  define      FREE_MB_T(m)    kfree_skb(m, FREE_WRITE)
                    672: #  define      uniqtime        do_gettimeofday
                    673: #  undef INT_MAX
                    674: #  undef UINT_MAX
                    675: #  undef LONG_MAX
                    676: #  undef ULONG_MAX
                    677: #  include <linux/netdevice.h>
                    678: #  define      SPL_X(x)
                    679: #  define      SPL_NET(x)
                    680: #  define      SPL_IMP(x)
                    681:  
                    682: #  define      bcmp(a,b,c)     memcmp(a,b,c)
                    683: #  define      bcopy(a,b,c)    memcpy(b,a,c)
                    684: #  define      bzero(a,c)      memset(a,0,c)
                    685: 
                    686: #  define      UNITNAME(n)     dev_get((n))
                    687: 
                    688: #  define      KMALLOC(a,b,c)  (a) = (b)kmalloc((c), GFP_ATOMIC)
                    689: #  define      KFREE(x)        kfree_s((x), sizeof(*(x)))
                    690: #  define      KFREES(x,s)     kfree_s((x), (s))
                    691: #  define      IRCOPY(a,b,c)   { \
                    692:                                 error = verify_area(VERIFY_READ, (a) ,(c)); \
                    693:                                 if (!error) \
                    694:                                        memcpy_fromfs((b), (a), (c)); \
                    695:                                }
                    696: #  define      IWCOPY(a,b,c)   { \
                    697:                                 error = verify_area(VERIFY_WRITE, (b), (c)); \
                    698:                                 if (!error) \
                    699:                                        memcpy_tofs((b), (a), (c)); \
                    700:                                }
                    701: # else
                    702: #  define      __KERNEL__
                    703: #  undef INT_MAX
                    704: #  undef UINT_MAX
                    705: #  undef LONG_MAX
                    706: #  undef ULONG_MAX
                    707: #  define      s8 __s8
                    708: #  define      u8 __u8
                    709: #  define      s16 __s16
                    710: #  define      u16 __u16
                    711: #  define      s32 __s32
                    712: #  define      u32 __u32
                    713: #  include <linux/netdevice.h>
                    714: #  undef       __KERNEL__
                    715: # endif
                    716: # define       ifnet   device
                    717: #else
                    718: typedef        struct  tcphdr  tcphdr_t;
                    719: typedef        struct  udphdr  udphdr_t;
                    720: typedef        struct  icmp    icmphdr_t;
                    721: typedef        struct  ip      ip_t;
                    722: typedef        struct  ether_header    ether_header_t;
                    723: #endif /* linux */
                    724: typedef        struct  tcpiphdr        tcpiphdr_t;
                    725: 
                    726: #if defined(hpux) || defined(linux)
                    727: struct ether_addr      {
                    728:        char    ether_addr_octet[6];
                    729: };
                    730: #endif
                    731: 
                    732: /*
                    733:  * XXX - This is one of those *awful* hacks which nobody likes
                    734:  */
                    735: #ifdef ultrix
                    736: #define        A_A
                    737: #else
                    738: #define        A_A     &
                    739: #endif
                    740: 
                    741: #ifndef        ICMP_ROUTERADVERT
                    742: # define       ICMP_ROUTERADVERT       9
                    743: #endif
                    744: #ifndef        ICMP_ROUTERSOLICIT
                    745: # define       ICMP_ROUTERSOLICIT      10
                    746: #endif
                    747: 
                    748: #endif /* __IP_COMPAT_H__ */
                    749: 
                    750: #endif /* #if 0 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.