|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1998-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: * AppleBPF.cpp - BPF driver class implementation. ! 24: * ! 25: */ ! 26: ! 27: // Need to check with Simon on User/Client interface and how to do ! 28: // PostLoad, and check on IOBSD (IONeededResource) ! 29: ! 30: #include <assert.h> ! 31: #include <IOKit/IOLib.h> ! 32: #include "AppleBPF.h" ! 33: ! 34: extern "C" { ! 35: #include <sys/time.h> ! 36: #include <net/bpf.h> ! 37: #include <net/bpfdesc.h> ! 38: #include <sys/malloc.h> ! 39: } ! 40: ! 41: //------------------------------------------------------------------------ ! 42: ! 43: #define super IOService ! 44: OSDefineMetaClassAndStructors(AppleBPF, IOService); ! 45: ! 46: //------------------------------------------------------------------------ ! 47: ! 48: ! 49: // ----------------------------------------------------------------------- ! 50: // ! 51: // This is the first method to be called when an object of this class is ! 52: // instantiated. ! 53: // ! 54: bool AppleBPF::init(OSDictionary * properties) ! 55: { ! 56: if (!super::init(properties)) ! 57: { IOLog("BPF: super init failed\n"); ! 58: return false; ! 59: } ! 60: ! 61: // Do class specific initialization here. Probably not necessary for ! 62: // this driver. ! 63: ! 64: // IOLog("BPF: super init succeeded\n"); ! 65: return true; // return 'true' for success, 'false' for failure. ! 66: } ! 67: ! 68: // ----------------------------------------------------------------------- ! 69: // ! 70: // The driver has been matched, start it up. Do most initialization and ! 71: // resource allocation here. ! 72: // ! 73: bool AppleBPF::start(IOService * provider) ! 74: { int i; ! 75: OSNumber *val; ! 76: extern struct bpf_d *bpf_dtab; ! 77: extern int nbpfilter; ! 78: ! 79: if (!super::start(provider)) ! 80: { IOLog("BPF: super start failed\n"); ! 81: return false; ! 82: } ! 83: ! 84: val = OSDynamicCast(OSNumber, getObject("IODevCount")); ! 85: if (val == 0) ! 86: nbpfilter = DEFAULT_BPF_DEV_COUNT; ! 87: else ! 88: nbpfilter = val->unsigned32BitValue(); ! 89: ! 90: // bpfops.bpf_tap = bpf_tap; ! 91: // bpfops.bpf_mtap = bpf_mtap; ! 92: ! 93: bpf_dtab = (struct bpf_d *)IOMalloc(sizeof (struct bpf_d) * nbpfilter); ! 94: if (bpf_dtab == NULL) ! 95: { IOLog("%s: couldn't get memory for descriptor table\n", ! 96: getName()); ! 97: return false; ! 98: } ! 99: ! 100: /* ! 101: * Mark all the descriptors free ! 102: */ ! 103: for (i = 0; i < nbpfilter; ++i) ! 104: D_MARKFREE(&bpf_dtab[i]); ! 105: ! 106: // IOLog("AppleBPF::start() called\n"); ! 107: ! 108: return true; // return 'true' for success, 'false' for failure. ! 109: } ! 110: ! 111: // ----------------------------------------------------------------------- ! 112: // ! 113: // Release all resources before the driver goes away. ! 114: // ! 115: void AppleBPF::stop(IOService * provider) ! 116: { extern struct bpf_d *bpf_dtab; ! 117: extern int nbpfilter; ! 118: ! 119: IOFree((void *)bpf_dtab, sizeof (struct bpf_d) * nbpfilter); ! 120: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.