|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: /* ! 25: * netbuf.m - netbuf stub for testing NetDriver objects. ! 26: * ! 27: * HISTORY ! 28: * 24-Jul-91 Doug Mitchell at NeXT ! 29: * Created. ! 30: */ ! 31: ! 32: /* ! 33: * Hmmm...we need KERNEL defined to get netif.h... ! 34: */ ! 35: #import <bsd/sys/socket.h> ! 36: #define KERNEL 1 ! 37: #import <net/netif.h> ! 38: #undef KERNEL ! 39: #import <driverkit/generalFuncs.h> ! 40: #import <libc.h> ! 41: ! 42: /* ! 43: * Our private mbuf equivalent. ! 44: */ ! 45: typedef struct { ! 46: void *start_data; // starting DMA data at ! 47: // nb_alloc time ! 48: int start_length; // starting size at ! 49: // nb_alloc time ! 50: void *data; // current DMA data ! 51: int length; // amount of data in *data ! 52: void (*free_fcn)(void *); // "free" function ! 53: void *free_arg; // "free argument ! 54: } stub_netbuf_t; ! 55: ! 56: /* ! 57: * Private functions. ! 58: */ ! 59: static stub_netbuf_t *stub_netbuf_alloc(); ! 60: static void stub_netbuf_free(stub_netbuf_t *snb); ! 61: ! 62: ! 63: char *nb_map(netbuf_t nb) ! 64: { ! 65: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 66: ! 67: return (char *)snb->data; ! 68: } ! 69: ! 70: /* ! 71: * Alloc some data as well as a stub_netbuf_t. ! 72: */ ! 73: netbuf_t nb_alloc(unsigned size) ! 74: { ! 75: char *data; ! 76: stub_netbuf_t *snb; ! 77: ! 78: data = IOMalloc(size); ! 79: snb = stub_netbuf_alloc(); ! 80: snb->data = snb->start_data = data; ! 81: snb->length = snb->start_length = size; ! 82: snb->free_fcn = NULL; ! 83: return (netbuf_t)snb; ! 84: } ! 85: ! 86: netbuf_t nb_alloc_wrapper(void *data, ! 87: unsigned size, ! 88: void freefunc(void *), void *freefunc_arg) ! 89: { ! 90: stub_netbuf_t *snb; ! 91: ! 92: snb = stub_netbuf_alloc(); ! 93: snb->data = snb->start_data = data; ! 94: snb->length = snb->start_length = size; ! 95: snb->free_fcn = freefunc; ! 96: snb->free_arg = freefunc_arg; ! 97: return (netbuf_t)snb; ! 98: } ! 99: ! 100: void nb_free(netbuf_t nb) ! 101: { ! 102: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 103: ! 104: /* ! 105: * First free the data, whether we allocated it or the driver did. ! 106: */ ! 107: if(snb->free_fcn) { ! 108: (*snb->free_fcn)(snb->free_arg); ! 109: } ! 110: else { ! 111: IOFree(snb->data, snb->length); ! 112: } ! 113: ! 114: /* ! 115: * now free the wrapper. ! 116: */ ! 117: stub_netbuf_free(snb); ! 118: } ! 119: ! 120: void nb_free_wrapper(netbuf_t nb) ! 121: { ! 122: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 123: ! 124: stub_netbuf_free(snb); ! 125: } ! 126: ! 127: unsigned nb_size(netbuf_t nb) ! 128: { ! 129: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 130: ! 131: return (unsigned)snb->length; ! 132: } ! 133: ! 134: int nb_shrink_top(netbuf_t nb, unsigned size) ! 135: { ! 136: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 137: ! 138: if((snb->length - (int)size) < 0) { ! 139: IOLog("Illegal nb_shrink_top\n"); ! 140: return -1; ! 141: } ! 142: snb->length -= size; ! 143: snb->data += size; ! 144: return 0; ! 145: } ! 146: ! 147: int ! 148: nb_grow_top(netbuf_t nb, unsigned size) ! 149: { ! 150: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 151: ! 152: if(((char *)snb->data - size) < (char *)snb->start_data) { ! 153: IOLog("Illegal nb_grow_top (buf underflow)\n"); ! 154: return -1; ! 155: } ! 156: if((snb->length + size) > snb->start_length) { ! 157: IOLog("Illegal nb_grow_top (buf overflow)\n"); ! 158: return -1; ! 159: } ! 160: snb->length += size; ! 161: snb->data -= size; ! 162: return 0; ! 163: } ! 164: ! 165: int ! 166: nb_shrink_bot(netbuf_t nb, unsigned size) ! 167: { ! 168: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 169: ! 170: if((snb->length - (int)size) < 0) { ! 171: IOLog("Illegal nb_shrink_bot\n"); ! 172: return -1; ! 173: } ! 174: snb->length -= size; ! 175: return 0; ! 176: } ! 177: ! 178: ! 179: int ! 180: nb_grow_bot(netbuf_t nb, unsigned size) ! 181: { ! 182: stub_netbuf_t *snb = (stub_netbuf_t *)nb; ! 183: ! 184: if((snb->length + size) > snb->start_length) { ! 185: IOLog("Illegal nb_grow_bot (buf overflow)\n"); ! 186: return -1; ! 187: } ! 188: snb->length += size; ! 189: return 0; ! 190: } ! 191: ! 192: /* ! 193: * Private functions. ! 194: */ ! 195: static stub_netbuf_t *stub_netbuf_alloc() ! 196: { ! 197: stub_netbuf_t *snb; ! 198: ! 199: snb = (stub_netbuf_t *)IOMalloc(sizeof(*snb)); ! 200: bzero(snb, sizeof(*snb)); ! 201: return snb; ! 202: } ! 203: ! 204: static void stub_netbuf_free(stub_netbuf_t *snb) ! 205: { ! 206: IOFree(snb, sizeof(*snb)); ! 207: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.