|
|
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: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
24: *
25: * IOEthernetInterface.h
26: *
27: * HISTORY
28: * 8-Jan-1999 Joe Liu (jliu) created.
29: */
30:
31: #ifndef _IOETHERNETINTERFACE_H
32: #define _IOETHERNETINTERFACE_H
33:
34: #include <IOKit/network/IONetworkInterface.h>
35: #include <IOKit/network/IOEthernetController.h>
36: #include <IOKit/network/IOEthernetStats.h>
37:
38: // IOEthernetInterface properties.
39: //
40: #define kIOPacketFilters "IOPacketFilters" // OSNumber:32
41: #define kIOMulticastAddresses "IOMulticastAddresses" // OSData (6 bytes/addr)
42:
43: /*! @class IOEthernetInterface
44: @abstract The Ethernet interface object. An Ethernet controller driver
45: will instantiate this object to manage its connection to the network
46: stack. */
47:
48: class IOEthernetInterface : public IONetworkInterface
49: {
50: OSDeclareDefaultStructors(IOEthernetInterface)
51:
52: private:
53: struct arpcom * _arpcom; // arpcom struct allocated
54: UInt _mcAddrCount; // # of multicast addresses
55: UInt32 _features; // cached controller features
56: UInt32 _availableFilters; // what is available?
57: UInt32 _activeFilters; // which should be active?
58: enet_addr_t _macAddr; // controller's MAC address
59: bool _controllerEnabled; // Is controller enabled?
60:
61: IOReturn _enableController(IONetworkController * ctlr);
62: IOReturn _loadMulticastList(IOEthernetController * ctlr);
63: bool _setActiveFilters(UInt32 newFilters);
64:
65: int syncSIOCSIFFLAGS(IOEthernetController * ctlr);
66: int syncSIOCSIFADDR(IOEthernetController * ctlr);
67: int syncSIOCADDMULTI(IOEthernetController * ctlr);
68: int syncSIOCDELMULTI(IOEthernetController * ctlr);
69:
70: public:
71:
72: /*! @function init
73: @abstract Initialize an IOEthernetInterface instance.
74: @discussion Instance variables are initialized, and an arpcom
75: structure is allocated.
76: @param properties A property dictionary.
77: @result true if initialized successfully, false otherwise. */
78:
79: virtual bool init(OSDictionary * properties = 0);
80:
81: /*! @function getNamePrefix
82: @abstract Get a name prefix for the interface.
83: @discussion The name of the interface advertised to the network layer
84: is generated by concatenating the string returned by this method,
85: and an unit number.
86: @result A pointer to a constant string "en". Thus Ethernet interfaces
87: will be registered as en0, en1, etc. */
88:
89: virtual const char * getNamePrefix() const;
90:
91: protected:
92:
93: /*! @function free
94: @abstract Frees the IOEthernetInterface instance.
95: @discussion The memory allocated for the arpcom structure is released. */
96:
97: virtual void free();
98:
99: /*! @function performCommand
100: @abstract Handle commands from the network layer.
101: @discussion The handler for ioctl commands sent from the network layer.
102: Commands not handled by this method are passed to our superclass.
103: The ioctl commands handled are SIOCSIFADDR, SIOCSIFFLAGS, SIOCADDMULTI,
104: and SIOCDELMULTI.
105: @param controller The controller object that the interface is attached to.
106: @param cmd The command code.
107: @param arg0 Command argument. Generally a pointer to an ifnet structure.
108: @param arg1 Command argument.
109: @result An error code defined in errno.h (BSD). */
110:
111: virtual SInt performCommand(IONetworkController * controller,
112: UInt32 cmd,
113: void * arg0,
114: void * arg1);
115:
116: /*! @function controllerDidOpen
117: @abstract Prepare the controller after it has been opened.
118: @discussion This method will be called by our superclass after a
119: network controller has accepted an open from this interface.
120: IOEthernetInterface uses this method to inspect the controller
121: and to cache certain controller properties, such as its hardware
122: address, and its set of supported packet filters.
123: @param controller The controller object that was opened.
124: @result true if the controller was accepted, false otherwise
125: (which will cause the controller to be closed). */
126:
127: virtual bool controllerDidOpen(IONetworkController * controller);
128:
129: /*! @function controllerWillClose
130: @abstract Quiesce the controller before it is closed.
131: @discussion When the last close from our client is received, the
132: interface object will close its controller. But before the controller
133: is closed, this method will be called by our superclass to perform any
134: final cleanup. IOEthernetInterface will ensure that the controller
135: is disabled before it is closed.
136: @param controller The currently opened controller object. */
137:
138: virtual void controllerWillClose(IONetworkController * controller);
139:
140: /*! @function initIfnet
141: @abstract Initialize the ifnet structure.
142: @discussion The argument is
143: a pointer to an ifnet structure obtained through getIfnet().
144: IOEthernetInterface will initialize this structure in a manner that
145: is appropriate for Ethernet interfaces, then call super::initIfnet()
146: to allow the superclass to perform family independent initialization.
147: @param ifp Pointer to the ifnet structure to be initialized.
148: @result true if successful, false otherwise. */
149:
150: virtual bool initIfnet(struct ifnet * ifp);
151:
152: /*! @function getIfnet
153: @abstract Get the ifnet structure allocated by the interface object.
154: @discussion This method returns a pointer to an ifnet structure
155: maintained by the family specific interface. IOEthernetInterface
156: allocates an arpcom structure during initialization, and returns
157: a pointer to this structure when this method is called.
158: @result Pointer to an ifnet structure. */
159:
160: virtual struct ifnet * getIfnet() const;
161: };
162:
163: #endif /* !_IOETHERNETINTERFACE_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.