4.6.6. Behavioral NIC Model Helper (nicbm)#
4.6.6.1. NIC Behavioral Model#
-
namespace nicbm#
Variables
-
static const size_t kMaxDmaLen = 2048#
-
class Runner#
- #include <nicbm.h>
The Runner drives the main simulation loop. It’s initialized with a reference to a device it should manage, and then once
runMainis called, it will start interacting with the PCI and Ethernet queue and forwarding calls to the device as needed.Subclassed by nicbm::MultiNicRunner::CompRunner
Public Functions
-
virtual ~Runner()#
-
int ParseArgs(int argc, char *argv[])#
Parse command line arguments.
-
int RunMain()#
Run the simulation
-
void MsiIssue(uint8_t vec)#
-
void MsiXIssue(uint8_t vec)#
-
void IntXIssue(bool level)#
-
void EthSend(const void *data, size_t len)#
-
void EventSchedule(TimedEvent &evt)#
-
void EventCancel(TimedEvent &evt)#
-
uint64_t TimePs() const#
-
uint64_t GetMacAddr() const#
-
void PrintBaseIfInfo(void)#
Print baseif info
Protected Functions
-
volatile union SimbricksProtoPcieD2H *D2HAlloc()#
-
volatile union SimbricksProtoNetMsg *D2NAlloc()#
-
void H2DRead(volatile struct SimbricksProtoPcieH2DRead *read)#
-
void H2DWrite(volatile struct SimbricksProtoPcieH2DWrite *write, bool posted)#
-
void H2DReadcomp(volatile struct SimbricksProtoPcieH2DReadcomp *rc)#
-
void H2DWritecomp(volatile struct SimbricksProtoPcieH2DWritecomp *wc)#
-
void H2DDevctrl(volatile struct SimbricksProtoPcieH2DDevctrl *dc)#
-
void PollH2D()#
-
void EthRecv(volatile struct SimbricksProtoNetMsgPacket *packetl)#
-
void PollN2D()#
-
bool EventNext(uint64_t &retval)#
-
void EventTrigger()#
-
void DmaTrigger()#
-
virtual void YieldPoll()#
-
virtual int NicIfInit()#
Protected Attributes
-
uint64_t main_time_#
-
std::multiset<TimedEvent*, EventCmp> events_#
-
size_t dma_pending_#
-
uint64_t mac_addr_#
-
struct SimbricksBaseIfParams pcieParams_#
-
struct SimbricksBaseIfParams netParams_#
-
const char *shmPath_#
-
struct SimbricksNicIf nicif_#
-
struct SimbricksProtoPcieDevIntro dintro_#
-
struct SimbricksAdapterParams *pcieAdapterParams_#
-
struct SimbricksAdapterParams *netAdapterParams_#
-
sim_log::LogPtT log_ = sim_log::Log::createLog()#
-
class Device#
Subclassed by nicbm::SimpleDevice< TReg >
Public Functions
-
virtual void SetupIntro(struct SimbricksProtoPcieDevIntro &di) = 0#
Initialize device specific parameters (pci dev/vendor id, BARs etc. in intro struct.
-
virtual void RegRead(uint8_t bar, uint64_t addr, void *dest, size_t len) = 0#
execute a register read from
bar:addrof lengthlen. Should store result indest.
-
virtual void RegWrite(uint8_t bar, uint64_t addr, const void *src, size_t len) = 0#
execute a register write to
bar:addrof lengthlen, with the data insrc.
-
virtual void EthRx(uint8_t port, const void *data, size_t len) = 0#
A packet has arrived on the wire, of length
lenwith payloaddata.
-
virtual void Timed(TimedEvent &te)#
A timed event is due.
-
virtual void DevctrlUpdate(struct SimbricksProtoPcieH2DDevctrl &devctrl)#
Device control update
-
virtual void SetupIntro(struct SimbricksProtoPcieDevIntro &di) = 0#
-
struct EventCmp#
Public Functions
-
inline bool operator()(TimedEvent *a, TimedEvent *b) const#
-
inline bool operator()(TimedEvent *a, TimedEvent *b) const#
-
virtual ~Runner()#
-
template<class TReg = uint32_t>
class SimpleDevice : public nicbm::Runner::Device# - #include <nicbm.h>
Very simple device that just has one register size.
Public Functions
-
inline virtual void RegRead(uint8_t bar, uint64_t addr, void *dest, size_t len) override#
execute a register read from
bar:addrof lengthlen. Should store result indest.
-
inline virtual void RegWrite(uint8_t bar, uint64_t addr, const void *src, size_t len) override#
execute a register write to
bar:addrof lengthlen, with the data insrc.
-
inline virtual void RegRead(uint8_t bar, uint64_t addr, void *dest, size_t len) override#
-
class TimedEvent#
-
static const size_t kMaxDmaLen = 2048#
4.6.6.2. Multi-NIC Support#
-
namespace nicbm
-
class MultiNicRunner#
Public Functions
-
explicit MultiNicRunner(DeviceFactory &factory)#
-
int RunMain(int argc, char *argv[])#
Run the simulation
Protected Attributes
-
DeviceFactory &factory_#
-
class DeviceFactory#
-
explicit MultiNicRunner(DeviceFactory &factory)#
-
class MultiNicRunner#