home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / net / if_atm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  5.8 KB  |  168 lines

  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. /*      $NetBSD: if_atm.h,v 1.7 1996/11/09 23:02:27 chuck Exp $       */
  23.  
  24. /*
  25.  *
  26.  * Copyright (c) 1996 Charles D. Cranor and Washington University.
  27.  * All rights reserved.
  28.  *
  29.  * Redistribution and use in source and binary forms, with or without
  30.  * modification, are permitted provided that the following conditions
  31.  * are met:
  32.  * 1. Redistributions of source code must retain the above copyright
  33.  *    notice, this list of conditions and the following disclaimer.
  34.  * 2. Redistributions in binary form must reproduce the above copyright
  35.  *    notice, this list of conditions and the following disclaimer in the
  36.  *    documentation and/or other materials provided with the distribution.
  37.  * 3. All advertising materials mentioning features or use of this software
  38.  *    must display the following acknowledgement:
  39.  *      This product includes software developed by Charles D. Cranor and
  40.  *    Washington University.
  41.  * 4. The name of the author may not be used to endorse or promote products
  42.  *    derived from this software without specific prior written permission.
  43.  *
  44.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  45.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  46.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  47.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  48.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  49.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  50.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  51.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  52.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  53.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  54.  */
  55.  
  56. /*
  57.  * net/if_atm.h
  58.  */
  59.  
  60.  
  61. #ifndef NO_ATM_PVCEXT
  62. /*
  63.  * ATM_PVCEXT enables PVC extention: VP/VC shaping
  64.  * and PVC shadow interfaces.
  65.  */
  66. #define ATM_PVCEXT    /* enable pvc extention */
  67. #endif
  68.  
  69. #if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
  70. #define RTALLOC1(A,B)        rtalloc1((A),(B))
  71. #elif defined(__FreeBSD__)
  72. #define RTALLOC1(A,B)        rtalloc1((A),(B),0UL)
  73. #endif
  74.  
  75. /*
  76.  * pseudo header for packet transmission
  77.  */
  78. struct atm_pseudohdr {
  79.   u_int8_t atm_ph[4];    /* flags+VPI+VCI1(msb)+VCI2(lsb) */
  80. };
  81.  
  82. #define ATM_PH_FLAGS(X)    ((X)->atm_ph[0])
  83. #define ATM_PH_VPI(X)    ((X)->atm_ph[1])
  84. #define ATM_PH_VCI(X)    ((((X)->atm_ph[2]) << 8) | ((X)->atm_ph[3]))
  85. #define ATM_PH_SETVCI(X,V) { \
  86.     (X)->atm_ph[2] = ((V) >> 8) & 0xff; \
  87.     (X)->atm_ph[3] = ((V) & 0xff); \
  88. }
  89.  
  90. #define ATM_PH_AAL5    0x01    /* use AAL5? (0 == aal0) */
  91. #define ATM_PH_LLCSNAP 0x02    /* use the LLC SNAP encoding (iff aal5) */
  92.  
  93. #if ATM_PVCEXT
  94. #define ATM_PH_INERNAL  0x20    /* reserve for kernel internal use */
  95. #endif
  96. #define ATM_PH_DRIVER7  0x40    /* reserve for driver's use */
  97. #define ATM_PH_DRIVER8  0x80    /* reserve for driver's use */
  98.  
  99. #define ATMMTU        9180    /* ATM MTU size for IP */
  100.                 /* XXX: could be 9188 with LLC/SNAP according
  101.                     to comer */
  102.  
  103. /* user's ioctl hook for raw atm mode */
  104. #define SIOCRAWATM    _IOWR('a', 122, int)    /* set driver's raw mode */
  105.  
  106. /* atm_pseudoioctl: turns on and off RX VCIs  [for internal use only!] */
  107. struct atm_pseudoioctl {
  108.   struct atm_pseudohdr aph;
  109.   void *rxhand;
  110. };
  111. #define SIOCATMENA    _IOWR('a', 123, struct atm_pseudoioctl) /* enable */
  112. #define SIOCATMDIS    _IOWR('a', 124, struct atm_pseudoioctl) /* disable */
  113.  
  114. #if ATM_PVCEXT
  115.  
  116. /* structure to control PVC transmitter */
  117. struct pvctxreq {
  118.     /* first entry must be compatible with struct ifreq */
  119.     char pvc_ifname[IFNAMSIZ];        /* if name, e.g. "en0" */
  120.     struct atm_pseudohdr pvc_aph;    /* (flags) + vpi:vci */
  121.     struct atm_pseudohdr pvc_joint;    /* for vp shaping: another vc
  122.                        to share the shaper */
  123.     int pvc_pcr;            /* peak cell rate (shaper value) */
  124. };
  125.  
  126. /* use ifioctl for now */
  127. #define SIOCSPVCTX    _IOWR('i', 95, struct pvctxreq)
  128. #define SIOCGPVCTX    _IOWR('i', 96, struct pvctxreq)
  129. #define SIOCSPVCSIF    _IOWR('i', 97, struct ifreq)
  130. #define SIOCGPVCSIF    _IOWR('i', 98, struct ifreq)
  131.  
  132. #ifdef KERNEL
  133. #define ATM_PH_PVCSIF    ATM_PH_INERNAL    /* pvc shadow interface */
  134. #endif
  135. #endif /* ATM_PVCEXT */
  136.  
  137. /*
  138.  * XXX forget all the garbage in if_llc.h and do it the easy way
  139.  */
  140.  
  141. #define ATMLLC_HDR "\252\252\3\0\0\0"
  142. struct atmllc {
  143.   u_int8_t llchdr[6];    /* aa.aa.03.00.00.00 */
  144.   u_int8_t type[2];    /* "ethernet" type */
  145. };
  146.  
  147. /* ATM_LLC macros: note type code in host byte order */
  148. #define ATM_LLC_TYPE(X) (((X)->type[0] << 8) | ((X)->type[1]))
  149. #define ATM_LLC_SETTYPE(X,V) { \
  150.     (X)->type[1] = ((V) >> 8) & 0xff; \
  151.     (X)->type[0] = ((V) & 0xff); \
  152. }
  153.  
  154. #ifdef KERNEL
  155. void    atm_ifattach __P((struct ifnet *));
  156. void    atm_input __P((struct ifnet *, struct atm_pseudohdr *,
  157.         struct mbuf *, void *));
  158. int    atm_output __P((struct ifnet *, struct mbuf *, struct sockaddr *, 
  159.         struct rtentry *));
  160. #endif
  161. #if ATM_PVCEXT
  162. char *shadow2if __P((char *));
  163. #ifdef KERNEL
  164. struct ifnet *pvc_attach __P((struct ifnet *));
  165. int pvc_setaph __P((struct ifnet *, struct atm_pseudohdr *));
  166. #endif
  167. #endif
  168.