02.03.2014 Views

BSP Developer's Guide

BSP Developer's Guide

BSP Developer's Guide

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

H<br />

Implementing a MUX-Based Network Interface Driver<br />

typedef struct net_funcs<br />

{<br />

STATUS (*start) (void*); /* driver’s start func */<br />

STATUS (*stop) (void*); /* driver’s stop func */<br />

STATUS (*unload) (void*); /* Driver’s unload func */<br />

int (*ioctl) (void*, int, caddr_t); /* driver’s ioctl func */<br />

STATUS (*send) (void* , M_BLK_ID); /* driver’s send func */<br />

STATUS (*mCastAddrAdd) (void*, char*); /* driver’s mcast add func */<br />

STATUS (*mCastAddrDel) (void*, char*); /* driver’s mcast delete func */<br />

STATUS (*mCastAddrGet) (void*, MULTI_TABLE*);<br />

/* driver’s mcast get fun. */<br />

STATUS (*pollSend) (void*, M_BLK_ID); /* driver’s poll send func */<br />

STATUS (*pollRcv) (void*, M_BLK_ID); /* driver’s poll receive func */<br />

STATUS (*addressForm) (M_BLK_ID, M_BLK_ID, M_BLK_ID);<br />

/* driver’s addr formation func */<br />

STATUS (*packetDataGet) (M_BLK_ID, M_BLK_ID);<br />

/* driver’s pkt data get func */<br />

STATUS (*addrGet) (M_BLK_ID, M_BLK_ID, M_BLK_ID, M_BLK_ID, M_BLK_ID);<br />

/* driver’s pkt addr get func */<br />

} NET_FUNCS;<br />

Within your endLoad( ), initialize these members to point to the appropriate<br />

driver entry points. Thus, start should contain a pointer to your endStart( ), stop<br />

to your endStop( ), unload to your endUnload( ), and so on.<br />

Tracking Link-Level Information: LL_HDR_INFO<br />

The MUX uses LL_HDR_INFO structures to keep track of link-level header<br />

information associated with packets passed from an END to the MUX and from<br />

there up to a protocol. An LL_HDR_INFO structure is passed as an argument to all<br />

stack receive routines (see, Passing a Packet Up to the Protocol: stackRcvRtn( ), p.307).<br />

H<br />

typedef struct llHdrInfo<br />

{<br />

int destAddrOffset; /* destination addr offset in mBlk */<br />

int destSize; /* destination address size */<br />

int srcAddrOffset; /* source address offset in mBlk */<br />

int srcSize; /* source address size */<br />

int ctrlAddrOffset; /* control info offset in mBlk */<br />

int ctrlSize; /* control info size */<br />

int pktType; /* type of the packet */<br />

int dataOffset; /* data offset in the mBlk */<br />

} LL_HDR_INFO;<br />

destAddrOffset<br />

Offset into mBlk structure at which the destination address starts.<br />

destSize<br />

Size of destination address.<br />

287

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!