IOFWEthernetShim.h [plain text]
#ifndef _IOKIT_IOFWETHERNETSHIM_H
#define _IOKIT_IOFWETHERNETSHIM_H
#include <IOKit/IOService.h>
#include "IOFireWireIP.h"
#include "ip_firewire.h"
#define BROADCAST_ADDRESS 0xFFFFFFFFFFFF
#define MIN_ETH_FRAME 60
#define MULTICAST_HEADER_LEN 3
#define ETH_ADDR_LEN 6
#define IP_ADDR_LEN 4
#define HANDLE_LEN 4
#define IP_DUM_HDR 12
typedef struct
{
UInt8 header[IP_DUM_HDR];
UInt32 ip_src, ip_dst;
} ipshimhdr;
typedef struct
{
UInt16 ar_hrd;
UInt16 ar_pro;
UInt8 ar_hln;
UInt8 ar_pln;
UInt16 ar_op;
UInt8 arp_sha[ETH_ADDR_LEN];
UInt8 arp_spa[IP_ADDR_LEN];
UInt8 arp_tha[ETH_ADDR_LEN];
UInt8 arp_tpa[IP_ADDR_LEN];
} arpshimpkt;
typedef struct
{
UInt8 dstaddr[ETH_ADDR_LEN];
UInt8 srcaddr[ETH_ADDR_LEN];
UInt16 frametype;
} ethshimheader;
#define MAX_FW_HANDLE_INDEX 512
typedef struct {
TNF_HANDLE *handle;
} FW_INDEX;
typedef struct {
UInt8 vendor[3];
UInt8 inst;
UInt16 idx;
} V_MACADDR;
class IOFireWireIP;
class IOFWEthernetShim : public OSObject
{
OSDeclareDefaultStructors(IOFWEthernetShim)
private :
IOFireWireIP *fwIpObj;
LCB *fLcb;
TNF_HANDLE *broadcastHandle;
UInt8 *fwMemHandles;
UInt32 fMemIndex;
protected:
struct ExpansionData { };
ExpansionData *reserved;
virtual void free();
UInt32 getNextFwIndex (UInt32 *idx);
UInt32 getFwIndex (UInt32 idx);
void recvIPPacket (UInt32 *ethBuffer, UInt32 ethBufferLength);
void recvArpPacket (UInt32 *ethBuffer, UInt32 ethBufferLength);
IOReturn txArpRequest (struct mbuf *m);
void txArpResponse (UInt32 *ethBuffer, UInt32 ethBufferLength);
IOReturn sendArpPacket (struct mbuf *m);
IOReturn sendIPPacket (struct mbuf *m);
IOReturn sendUnicastPacket (struct mbuf *m);
IOReturn sendMulticastPacket (struct mbuf *m);
public:
bool initAll (IOFireWireIP *provider, LCB *lcb);
void *fwIndexExists (TNF_HANDLE *handle, UInt32 *index);
IOReturn sendPacket (struct mbuf *m, void *reserved);
void recvPacket (UInt32 *ethBuffer, UInt32 ethBufferLength);
void arpCallback (void *pFrame, void *param2, void *param3, void *param4);
private:
OSMetaClassDeclareReservedUnused(IOFWEthernetShim, 0);
OSMetaClassDeclareReservedUnused(IOFWEthernetShim, 1);
};
#endif // _IOKIT_IOFWETHERNETSHIM_H