|
|
1.1 ! root 1: /* ! 2: * Mach Operating System ! 3: * Copyright (c) 1991,1990,1989 Carnegie Mellon University ! 4: * All Rights Reserved. ! 5: * ! 6: * Permission to use, copy, modify and distribute this software and its ! 7: * documentation is hereby granted, provided that both the copyright ! 8: * notice and this permission notice appear in all copies of the ! 9: * software, derivative works or modified versions, and any portions ! 10: * thereof, and that both notices appear in supporting documentation. ! 11: * ! 12: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ! 13: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ! 14: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ! 15: * ! 16: * Carnegie Mellon requests users of this software to return to ! 17: * ! 18: * Software Distribution Coordinator or [email protected] ! 19: * School of Computer Science ! 20: * Carnegie Mellon University ! 21: * Pittsburgh PA 15213-3890 ! 22: * ! 23: * any improvements or extensions that they make and grant Carnegie Mellon ! 24: * the rights to redistribute these changes. ! 25: */ ! 26: /* ! 27: * Taken from (bsd)net/if.h. Modified for MACH kernel. ! 28: */ ! 29: /* ! 30: * Copyright (c) 1982, 1986 Regents of the University of California. ! 31: * All rights reserved. ! 32: * ! 33: * Redistribution and use in source and binary forms, with or without ! 34: * modification, are permitted provided that the following conditions ! 35: * are met: ! 36: * 1. Redistributions of source code must retain the above copyright ! 37: * notice, this list of conditions and the following disclaimer. ! 38: * 2. Redistributions in binary form must reproduce the above copyright ! 39: * notice, this list of conditions and the following disclaimer in the ! 40: * documentation and/or other materials provided with the distribution. ! 41: * 4. The name of the Laboratory may not be used to endorse or promote ! 42: * products derived from this software without specific prior written ! 43: * permission. ! 44: * ! 45: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 46: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 47: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 48: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 49: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 50: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 51: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 52: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 53: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 54: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 55: * SUCH DAMAGE. ! 56: * ! 57: * @(#)if.h 7.3 (Berkeley) 6/27/88 ! 58: */ ! 59: ! 60: #ifndef _IF_HDR_ ! 61: #define _IF_HDR_ ! 62: ! 63: #include <kern/lock.h> ! 64: #include <kern/queue.h> ! 65: ! 66: /* ! 67: * Queue for network output and filter input. ! 68: */ ! 69: struct ifqueue { ! 70: queue_head_t ifq_head; /* queue of io_req_t */ ! 71: int ifq_len; /* length of queue */ ! 72: int ifq_maxlen; /* maximum length of queue */ ! 73: int ifq_drops; /* number of packets dropped ! 74: because queue full */ ! 75: decl_simple_lock_data(, ! 76: ifq_lock) /* lock for queue and counters */ ! 77: }; ! 78: ! 79: /* ! 80: * Header for network interface drivers. ! 81: */ ! 82: struct ifnet { ! 83: #if 0 ! 84: short if_unit; /* unit number */ ! 85: short if_flags; /* up/down, broadcast, etc. */ ! 86: short if_timer; /* time until if_watchdog called */ ! 87: short if_mtu; /* maximum transmission unit */ ! 88: short if_header_size; /* length of header */ ! 89: short if_header_format; /* format of hardware header */ ! 90: short if_address_size; /* length of hardware address */ ! 91: short if_alloc_size; /* size of read buffer to allocate */ ! 92: char *if_address; /* pointer to hardware address */ ! 93: struct ifqueue if_snd; /* output queue */ ! 94: #endif ! 95: queue_head_t if_rcv_port_list; /* input filter list */ ! 96: decl_simple_lock_data(, ! 97: if_rcv_port_list_lock) /* lock for filter list */ ! 98: /* statistics */ ! 99: int if_ipackets; /* packets received */ ! 100: int if_ierrors; /* input errors */ ! 101: int if_opackets; /* packets sent */ ! 102: int if_oerrors; /* output errors */ ! 103: int if_collisions; /* collisions on csma interfaces */ ! 104: int if_rcvdrops; /* packets received but dropped */ ! 105: }; ! 106: ! 107: #define IFF_UP 0x0001 /* interface is up */ ! 108: #define IFF_BROADCAST 0x0002 /* interface can broadcast */ ! 109: #define IFF_DEBUG 0x0004 /* turn on debugging */ ! 110: #define IFF_LOOPBACK 0x0008 /* is a loopback net */ ! 111: #define IFF_POINTOPOINT 0x0010 /* point-to-point link */ ! 112: #define IFF_RUNNING 0x0040 /* resources allocated */ ! 113: #define IFF_NOARP 0x0080 /* no address resolution protocol */ ! 114: #define IFF_PROMISC 0x0100 /* receive all packets */ ! 115: #define IFF_ALLMULTI 0x0200 /* receive all multicast packets */ ! 116: #define IFF_BRIDGE 0x0100 /* support token ring routing field */ ! 117: #define IFF_SNAP 0x0200 /* support extended sap header */ ! 118: ! 119: /* internal flags only: */ ! 120: #define IFF_CANTCHANGE (IFF_BROADCAST | IFF_POINTOPOINT | IFF_RUNNING) ! 121: ! 122: /* ! 123: * Output queues (ifp->if_snd) ! 124: * have queues of messages stored on ifqueue structures. Entries ! 125: * are added to and deleted from these structures by these macros, which ! 126: * should be called with ipl raised to splimp(). ! 127: * XXX locking XXX ! 128: */ ! 129: ! 130: #define IF_QFULL(ifq) ((ifq)->ifq_len >= (ifq)->ifq_maxlen) ! 131: #define IF_DROP(ifq) ((ifq)->ifq_drops++) ! 132: #define IF_ENQUEUE(ifq, ior) { \ ! 133: simple_lock(&(ifq)->ifq_lock); \ ! 134: enqueue_tail(&(ifq)->ifq_head, (queue_entry_t)ior); \ ! 135: (ifq)->ifq_len++; \ ! 136: simple_unlock(&(ifq)->ifq_lock); \ ! 137: } ! 138: #define IF_PREPEND(ifq, ior) { \ ! 139: simple_lock(&(ifq)->ifq_lock); \ ! 140: enqueue_head(&(ifq)->ifq_head, (queue_entry_t)ior); \ ! 141: (ifq)->ifq_len++; \ ! 142: simple_unlock(&(ifq)->ifq_lock); \ ! 143: } ! 144: ! 145: #define IF_DEQUEUE(ifq, ior) { \ ! 146: simple_lock(&(ifq)->ifq_lock); \ ! 147: if (((ior) = (io_req_t)dequeue_head(&(ifq)->ifq_head)) != 0) \ ! 148: (ifq)->ifq_len--; \ ! 149: simple_unlock(&(ifq)->ifq_lock); \ ! 150: } ! 151: ! 152: #define IFQ_MAXLEN 50 ! 153: ! 154: #define IFQ_INIT(ifq) { \ ! 155: queue_init(&(ifq)->ifq_head); \ ! 156: simple_lock_init(&(ifq)->ifq_lock); \ ! 157: (ifq)->ifq_len = 0; \ ! 158: (ifq)->ifq_maxlen = IFQ_MAXLEN; \ ! 159: (ifq)->ifq_drops = 0; \ ! 160: } ! 161: ! 162: #define IFNET_SLOWHZ 1 /* granularity is 1 second */ ! 163: ! 164: #endif /* _IF_HDR_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.