eth_interface development
This commit is contained in:
parent
586a9ba733
commit
c14d3b192a
@ -6,10 +6,22 @@
|
|||||||
#include "dynmem.h"
|
#include "dynmem.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
EthInterface *ethintf_new() {
|
static int ethintf_llrecv(EthIODef * io, const RawPckt * pckt) {
|
||||||
|
ethinf_receive((EthInterface *) io->tag, pckt);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ethintf_register(EthInterface * intf) {
|
||||||
|
intf->ioDef->tag = intf;
|
||||||
|
intf->ioDef->llRxDone = ethintf_llrecv;
|
||||||
|
}
|
||||||
|
|
||||||
|
EthInterface *ethintf_new(EthIODef * io) {
|
||||||
EthInterface * ethIntf = (EthInterface *)dynmem_alloc(sizeof(EthInterface));
|
EthInterface * ethIntf = (EthInterface *)dynmem_alloc(sizeof(EthInterface));
|
||||||
ASSERT_NULL(ethIntf);
|
ASSERT_NULL(ethIntf);
|
||||||
memset(ðIntf->sieve.layer0, 0, sizeof(PcktSieveLayer));
|
memset(ðIntf->sieve.layer0, 0, sizeof(PcktSieveLayer));
|
||||||
|
ethIntf->ioDef = io;
|
||||||
|
ethintf_register(ethIntf);
|
||||||
return ethIntf;
|
return ethIntf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,5 +30,5 @@ void ethinf_receive(EthInterface *intf, const RawPckt *rawPckt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ethinf_transmit(EthInterface *intf, const RawPckt *rawPckt) {
|
void ethinf_transmit(EthInterface *intf, const RawPckt *rawPckt) {
|
||||||
intf->ioDef.llTx(rawPckt);
|
intf->ioDef->llTx(&(intf->ioDef), rawPckt);
|
||||||
}
|
}
|
||||||
|
@ -4,24 +4,27 @@
|
|||||||
#include "packet_sieve.h"
|
#include "packet_sieve.h"
|
||||||
#include "prefab/packet_parsers/packet_parsers.h"
|
#include "prefab/packet_parsers/packet_parsers.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct EthIODef_ {
|
||||||
int (*llTx)(const RawPckt * rawPckt); ///< Function pointer to low-level transmit function
|
int (*llTx)(struct EthIODef_ * io, const RawPckt * rawPckt); ///< Function pointer to low-level transmit function
|
||||||
int (*llTxDone)(const RawPckt * rawPckt); ///< Transmission done (interrupt) callback
|
int (*llTxDone)(struct EthIODef_ * io, const RawPckt * rawPckt); ///< Transmission done (interrupt) callback
|
||||||
int (*llLinkChg)(int linkState); ///< Link change interrupt
|
int (*llLinkChg)(struct EthIODef_ * io, int linkState); ///< Link change interrupt
|
||||||
int (*llError)(int error); ///< Low-level error interrupt
|
int (*llRxDone)(struct EthIODef_ * io, const RawPckt * rawPckt); ///< Receive done callback
|
||||||
|
int (*llError)(struct EthIODef_ * io, int error); ///< Low-level error interrupt
|
||||||
|
void * tag; ///< Some arbitrary tagging
|
||||||
} EthIODef;
|
} EthIODef;
|
||||||
|
|
||||||
typedef struct EthInterface_ {
|
typedef struct EthInterface_ {
|
||||||
PcktSieve sieve; ///< Packet sieve
|
PcktSieve sieve; ///< Packet sieve
|
||||||
EthIODef ioDef; ///< Low-level IO definitions
|
EthIODef * ioDef; ///< Low-level IO definitions
|
||||||
EthernetAddress mac; ///< Ethernet address
|
EthernetAddress mac; ///< Ethernet address
|
||||||
} EthInterface;
|
} EthInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate a new Ethernet interface
|
* Allocate a new Ethernet interface
|
||||||
|
* @param io Low-level IO definitions
|
||||||
* @return new interface instance
|
* @return new interface instance
|
||||||
*/
|
*/
|
||||||
EthInterface * ethintf_new();
|
EthInterface *ethintf_new(EthIODef * io);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receive uncooked packet.
|
* Receive uncooked packet.
|
||||||
|
@ -36,5 +36,5 @@ void ethlib_init() {
|
|||||||
E.pcktReg = packreg_new(); // create new packet registry
|
E.pcktReg = packreg_new(); // create new packet registry
|
||||||
register_packet_parsers(); // register packet parsers
|
register_packet_parsers(); // register packet parsers
|
||||||
|
|
||||||
E.ethIntf = ethintf_new(); // create new Ethernet interface
|
//E.ethIntf = ethintf_new(); // create new Ethernet interface
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user