[BACK]Return to natm.h CVS log [TXT][DIR] Up to [local] / sys / netnatm

Annotation of sys/netnatm/natm.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: natm.h,v 1.6 2002/03/14 01:27:12 millert Exp $        */
                      2:
                      3: /*
                      4:  *
                      5:  * Copyright (c) 1996 Charles D. Cranor and Washington University.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *      This product includes software developed by Charles D. Cranor and
                     19:  *      Washington University.
                     20:  * 4. The name of the author may not be used to endorse or promote products
                     21:  *    derived from this software without specific prior written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     24:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     25:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     26:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     27:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     28:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     29:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     30:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     31:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     32:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     33:  */
                     34:
                     35: /*
                     36:  * natm.h: native mode atm
                     37:  */
                     38:
                     39:
                     40: /*
                     41:  * supported protocols
                     42:  */
                     43:
                     44: #define PROTO_NATMAAL0         1
                     45: #define PROTO_NATMAAL5         2
                     46:
                     47: /*
                     48:  * sockaddr_natm
                     49:  */
                     50:
                     51: struct sockaddr_natm {
                     52:   u_int8_t     snatm_len;              /* length */
                     53:   u_int8_t     snatm_family;           /* AF_NATM */
                     54:   char         snatm_if[IFNAMSIZ];     /* interface name */
                     55:   u_int16_t    snatm_vci;              /* vci */
                     56:   u_int8_t     snatm_vpi;              /* vpi */
                     57: };
                     58:
                     59:
                     60: #if defined(__FreeBSD__) && defined(KERNEL)
                     61:
                     62: #ifndef _KERNEL
                     63: #define _KERNEL
                     64: #endif
                     65:
                     66: #define SPLSOFTNET() splnet()
                     67:
                     68: #elif defined(__NetBSD__) || defined(__OpenBSD__)
                     69:
                     70: #define SPLSOFTNET() splsoftnet()
                     71:
                     72: #endif
                     73:
                     74: #ifdef _KERNEL
                     75:
                     76: /*
                     77:  * natm protocol control block
                     78:  */
                     79:
                     80: struct natmpcb {
                     81:   LIST_ENTRY(natmpcb) pcblist;         /* list pointers */
                     82:   u_int        npcb_inq;                       /* # of our pkts in proto q */
                     83:   struct socket        *npcb_socket;           /* backpointer to socket */
                     84:   struct ifnet *npcb_ifp;              /* pointer to hardware */
                     85:   struct in_addr ipaddr;               /* remote IP address, if NPCB_IP */
                     86:   u_int16_t npcb_vci;                  /* VCI */
                     87:   u_int8_t npcb_vpi;                   /* VPI */
                     88:   u_int8_t npcb_flags;                 /* flags */
                     89: };
                     90:
                     91: /* flags */
                     92: #define NPCB_FREE      0x01            /* free (not on any list) */
                     93: #define NPCB_CONNECTED 0x02            /* connected */
                     94: #define NPCB_IP                0x04            /* used by IP */
                     95: #define NPCB_DRAIN     0x08            /* destory as soon as inq == 0 */
                     96: #define NPCB_RAW       0x10            /* in 'raw' mode? */
                     97:
                     98: /* flag arg to npcb_free */
                     99: #define NPCB_REMOVE    0               /* remove from global list */
                    100: #define NPCB_DESTROY   1               /* destroy and be free */
                    101:
                    102: /*
                    103:  * NPCB_RAWCC is a hack which applies to connections in 'raw' mode.   it
                    104:  * is used to override the sbspace() macro when you *really* don't want
                    105:  * to drop rcv data.   the recv socket buffer size is raised to this value.
                    106:  *
                    107:  * XXX: socket buffering needs to be looked at.
                    108:  */
                    109:
                    110: #define NPCB_RAWCC (1024*1024)         /* 1MB */
                    111:
                    112: LIST_HEAD(npcblist, natmpcb);
                    113:
                    114: /* global data structures */
                    115:
                    116: struct npcblist natm_pcbs;             /* global list of pcbs */
                    117: extern struct ifqueue natmintrq;       /* natm packet input queue */
                    118: #define        NATM_STAT
                    119: #ifdef NATM_STAT
                    120: extern u_int natm_sodropcnt,
                    121:                natm_sodropbytes;       /* account of droppage */
                    122: extern u_int natm_sookcnt,
                    123:                natm_sookbytes;         /* account of ok */
                    124: #endif
                    125:
                    126: /* atm_rawioctl: kernel's version of SIOCRAWATM [for internal use only!] */
                    127: struct atm_rawioctl {
                    128:   struct natmpcb *npcb;
                    129:   int rawvalue;
                    130: };
                    131: #define SIOCXRAWATM     _IOWR('a', 125, struct atm_rawioctl)
                    132:
                    133: /* external functions */
                    134:
                    135: /* natm_pcb.c */
                    136: struct natmpcb *npcb_alloc(int);
                    137: void   npcb_free(struct natmpcb *, int);
                    138: struct natmpcb *npcb_add(struct natmpcb *, struct ifnet *, int, int);
                    139:
                    140: /* natm.c */
                    141: #if defined(__NetBSD__)
                    142: int    natm_usrreq(struct socket *, int, struct mbuf *,
                    143:                              struct mbuf *, struct mbuf *, struct proc *);
                    144: #elif defined(__OpenBSD__) || defined(FreeBSD)
                    145: int    natm_usrreq(struct socket *, int, struct mbuf *,
                    146:                              struct mbuf *, struct mbuf *);
                    147: #endif
                    148: int    natm0_sysctl(int *, u_int, void *, size_t *, void *, size_t);
                    149: int    natm5_sysctl(int *, u_int, void *, size_t *, void *, size_t);
                    150: void   natmintr(void);
                    151:
                    152: #endif

CVSweb