OverSim
I3 Class Reference

Main Omnet module for the implementation of Internet Indirection Infrastructure. More...

#include <I3.h>

Inheritance diagram for I3:
BaseApp BaseRpc BaseTcpSupport RpcListener I3TRTServer

Public Member Functions

I3TriggerTablegetTriggerTable ()
 Returns the table of inserted triggers.
const I3IdentifierfindClosestMatch (const I3Identifier &t) const
 Finds the closest match to t from the stored trigger identifiers.
void insertTrigger (I3Trigger &t)
 Inserts a trigger into I3.
void removeTrigger (I3Trigger &t)
 Removes a trigger from I3.
void sendPacket (I3SendPacketMessage *msg)
 Sends a packet through I3.
void sendToNode (I3SendPacketMessage *imsg)
 Sends packet to matching IP address (used by sendPacket)
- Public Member Functions inherited from BaseApp
 BaseApp ()
virtual ~BaseApp ()
 virtual destructor
- Public Member Functions inherited from BaseRpc
 BaseRpc ()
const NodeHandlegetThisNode ()
 Returns the NodeHandle of this node.
simtime_t getUdpTimeout ()
- Public Member Functions inherited from RpcListener
virtual ~RpcListener ()
 destructor
- Public Member Functions inherited from BaseTcpSupport
virtual void socketDataArrived (int connId, void *yourPtr, cPacket *msg, bool urgent)
virtual void socketEstablished (int connId, void *yourPtr)
virtual void socketPeerClosed (int connId, void *yourPtr)
virtual void socketFailure (int connId, void *yourPtr, int code)
virtual void socketStatusArrived (int connId, void *yourPtr, TCPStatusInfo *status)

Protected Member Functions

int numInitStages () const
 Returns number of required init stages.
virtual void initializeApp (int stage)
 Actual initialization function.
virtual void deliver (OverlayKey &key, cMessage *msg)
 Delivers a packet from the overlay.
virtual void handleUDPMessage (cMessage *msg)
 Handles a message from UDP.
virtual void handleTimerEvent (cMessage *msg)
 Handles timers.
void sendQueryReply (const I3Identifier &id, const I3IPAddress &add)
 Replies to a query of which server is responsible for the given identifier (this server)
virtual void forward (OverlayKey *key, cPacket **msg, NodeHandle *nextHopNode)
 Common API function: handles messages from overlay to be forwarded.
void updateTriggerTableString ()
 Updates TriggerTable's module display string.
virtual void finish ()
 collects statistical data
- Protected Member Functions inherited from BaseApp
void initialize (int stage)
 initializes base class-attributes
void handleMessage (cMessage *msg)
 checks for message type and calls corresponding method
virtual void receiveChangeNotification (int category, const cPolymorphic *details)
 callback-method for events at the NotificationBoard
virtual void handleTransportAddressChangedNotification ()
 This method gets call if the node has a new TransportAddress (IP address) because he changed his access network.
virtual void handleNodeLeaveNotification ()
 This method gets call **.gracefulLeaveDelay seconds before it is killed.
virtual void handleNodeGracefulLeaveNotification ()
 This method gets call **.gracefulLeaveDelay seconds before it is killed if this node is among the gracefulLeaveProbability nodes.
virtual void finishApp ()
 collects statistical data of derived app
void callRoute (const OverlayKey &key, cPacket *msg, const TransportAddress &hint=TransportAddress::UNSPECIFIED_NODE, RoutingType routingType=DEFAULT_ROUTING)
 Common API function: calls route-method in overlay.
void callRoute (const OverlayKey &key, cPacket *msg, const std::vector< TransportAddress > &sourceRoute, RoutingType routingType=DEFAULT_ROUTING)
virtual void update (const NodeHandle &node, bool joined)
 Common API function: informs application about neighbors and own nodeID.
NodeVectorcallLocalLookup (const OverlayKey &key, int num, bool safe)
 Common API function: produces a list of nodes that can be used as next hops towards key.
NodeVectorcallNeighborSet (int num)
 Common API function: produces a list of neighbor nodes.
bool isSiblingFor (const NodeHandle &node, const OverlayKey &key, int numSiblings, bool *err)
 Query if a node is among the siblings for a given key.
virtual void handleLowerMessage (cMessage *msg)
 processes self-messages
virtual void handleUpperMessage (cMessage *msg)
 handleUpperMessage gets called of handleMessage(cMessage* msg) if msg arrivedOn from_upperTier (currently msg gets deleted in this function)
virtual void handleReadyMessage (CompReadyMessage *msg)
 method to handle ready messages from the overlay
virtual void bindToPort (int port)
 Tells UDP we want to get all packets arriving on the given port.
virtual void sendMessageToUDP (const TransportAddress &destAddr, cPacket *msg, simtime_t delay=SIMTIME_ZERO)
 Sends a packet over UDP.
virtual void handleTraceMessage (cMessage *msg)
 handleTraceMessage gets called of handleMessage(cMessage* msg) if a message arrives at trace_in.
void sendMessageToLowerTier (cPacket *msg)
 sends non-commonAPI message to the lower tier
bool internalHandleRpcCall (BaseCallMessage *msg)
 Handles internal rpc requests.
void internalHandleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt)
 Handles rpc responses internal in base classes

void internalSendRouteRpc (BaseRpcMessage *message, const OverlayKey &destKey, const std::vector< TransportAddress > &sourceRoute, RoutingType routingType)
virtual CompType getThisCompType ()
 Return the component type of this module.
void sendReadyMessage (bool ready=true, const OverlayKey &nodeId=OverlayKey::UNSPECIFIED_KEY)
- Protected Member Functions inherited from BaseRpc
virtual void internalHandleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey)
 Handles rpc timeouts internal in base classes

void initRpcs ()
 Initializes Remote-Procedure state.
void finishRpcs ()
 Deinitializes Remote-Procedure state.
virtual void internalHandleRpcMessage (BaseRpcMessage *msg)
 Handles incoming rpc messages and delegates them to the corresponding listeners or handlers.
uint32_t sendRouteRpcCall (CompType destComp, const TransportAddress &dest, const OverlayKey &destKey, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Routes a Remote-Procedure-Call message to an OverlayKey.
uint32_t sendRouteRpcCall (CompType destComp, const OverlayKey &destKey, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Routes a Remote-Procedure-Call message to an OverlayKey.
uint32_t sendRouteRpcCall (CompType destComp, const TransportAddress &dest, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Sends a Remote-Procedure-Call message using the overlay's UDP port
This replaces ROUTE_DIRECT calls!
uint32_t sendUdpRpcCall (const TransportAddress &dest, BaseCallMessage *msg, cPolymorphic *context=NULL, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Sends a Remote-Procedure-Call message to the underlay

uint32_t sendInternalRpcCall (CompType destComp, BaseCallMessage *msg, cPolymorphic *context=NULL, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL)
 Sends an internal Remote-Procedure-Call between two tiers

void cancelRpcMessage (uint32_t nonce)
 Cancels a Remote-Procedure-Call.
void cancelAllRpcs ()
 Cancels all RPCs.
void sendRpcResponse (TransportType transportType, CompType destComp, const TransportAddress &dest, const OverlayKey &destKey, BaseCallMessage *call, BaseResponseMessage *response)
 Send Remote-Procedure response message and deletes call message.
void sendRpcResponse (BaseCallMessage *call, BaseResponseMessage *response)
 Send Remote-Procedure response message to UDP and deletes call message.
int pingNode (const TransportAddress &dest, simtime_t timeout=-1, int retries=0, cPolymorphic *context=NULL, const char *caption="PING", RpcListener *rpcListener=NULL, int rpcId=-1, TransportType transportType=INVALID_TRANSPORT)
 ping a node by its TransportAddress
virtual bool handleRpcCall (BaseCallMessage *msg)
 Processes Remote-Procedure-Call invocation messages.
virtual void pingResponse (PingResponse *pingResponse, cPolymorphic *context, int rpcId, simtime_t rtt)
virtual void pingTimeout (PingCall *pingCall, const TransportAddress &dest, cPolymorphic *context, int rpcId)
bool internalHandleMessage (cMessage *msg)
- Protected Member Functions inherited from RpcListener
virtual void handleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt)
 This method is called if an RPC response has been received.
virtual void handleRpcResponse (BaseResponseMessage *msg, const RpcState &rpcState, simtime_t rtt)
 This method is called if an RPC response has been received.
virtual void handleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey)
 This method is called if an RPC timeout has been reached.
virtual void handleRpcTimeout (const RpcState &rpcState)
 This method is called if an RPC timeout has been reached.
- Protected Member Functions inherited from BaseTcpSupport
void handleTCPMessage (cMessage *msg)
 Member function to handle incoming TCP messages.
void bindAndListenTcp (int port)
 Member function to bind service to the specified port and listen afterwards.
bool isAlreadyConnected (TransportAddress address)
 Member function to check if the service is already connected.
void establishTcpConnection (TransportAddress address)
 Member function to establish a connection to the specified node.
void sendTcpData (cPacket *msg, TransportAddress address)
 Member function to send TCP data to the specified node.
virtual void handleConnectionEvent (EvCode code, TransportAddress address)
 Member function to handle passive connection events.
virtual void handleDataReceived (TransportAddress address, cPacket *msg, bool urgent)
 Member function to handle incoming data.
virtual void handleIncomingConnection (TransportAddress address)
 Member function to handle newly opened connections.
void closeTcpConnection (TransportAddress address)
 Member function to close an established connection.
void setTcpOut (cGate *gate)
 Member function to set local gate towards the TCP module during init phase.
cGate * getTcpOut ()
 Member function to get local gate towards the TCP module.

Protected Attributes

int numDroppedPackets
 Number of dropped packets.
int byteDroppedPackets
int numForwardedPackets
int numForwardedBytes
int triggerTimeToLive
 Time before inserted triggers expire.
I3TriggerTable triggerTable
 Table containing inserted triggers.
cMessage * expirationTimer
 Timer to check for trigger expiration.
- Protected Attributes inherited from BaseApp
UnderlayConfiguratorunderlayConfigurator
 pointer to UnderlayConfigurator in this node
GlobalNodeListglobalNodeList
 pointer to GlobalNodeList in this node
GlobalStatisticsglobalStatistics
 pointer to GlobalStatistics module in this node
NotificationBoard * notificationBoard
 pointer to NotificationBoard in this node
bool debugOutput
 debug output yes/no?
int numOverlaySent
 number of sent packets to overlay
int bytesOverlaySent
 number of sent bytes to overlay
int numOverlayReceived
 number of received packets from overlay
int bytesOverlayReceived
 number of received bytes from overlay
int numUdpSent
 number of sent packets to UDP
int bytesUdpSent
 number of sent bytes to UDP
int numUdpReceived
 number of received packets from UDP
int bytesUdpReceived
 number of received bytes from UDP
simtime_t creationTime
 simTime when the App has been created
- Protected Attributes inherited from BaseRpc
NodeHandle thisNode
 NodeHandle to this node.
BaseOverlayoverlay
bool debugOutput
 debug output ?
GlobalStatisticsglobalStatistics
 pointer to GlobalStatistics module in this node
CompType thisCompType
NeighborCacheneighborCache
 pointer to the neighbor cache
CryptoModulecryptoModule
 pointer to CryptoModule
int numPingSent
int bytesPingSent
int numPingResponseSent
int bytesPingResponseSent

Additional Inherited Members

- Public Types inherited from BaseTcpSupport
enum  EvCode {
  NO_EST_CONNECTION, PEER_CLOSED, PEER_TIMEDOUT, PEER_REFUSED,
  CONNECTION_RESET, CONNECTION_SUCC_ClOSED
}

Detailed Description

Main Omnet module for the implementation of Internet Indirection Infrastructure.

Definition at line 46 of file I3.h.

Member Function Documentation

void I3::deliver ( OverlayKey key,
cMessage *  msg 
)
protectedvirtual

Delivers a packet from the overlay.

Parameters
keyKey from the overlay
msgMessage to deliver

Reimplemented from BaseApp.

Definition at line 314 of file I3.cc.

Referenced by I3TRTServer::deliver().

{
I3Message *i3msg;
i3msg = dynamic_cast<I3Message*>(msg);
if (!i3msg) {
cout << "Delivered non I3 Message!" << endl;
delete msg;
return;
}
switch (i3msg->getType()) {
imsg = check_and_cast<I3InsertTriggerMessage*>(i3msg);
if (imsg->getSendReply()) {
}
delete msg;
break;
rmsg = check_and_cast<I3RemoveTriggerMessage*>(i3msg);
delete msg;
break;
smsg = check_and_cast<I3SendPacketMessage*>(i3msg);
sendPacket(smsg);
break;
default:
delete msg;
break;
}
}
const I3Identifier * I3::findClosestMatch ( const I3Identifier t) const

Finds the closest match to t from the stored trigger identifiers.

Note that, in the case that there are many biggest prefix matches, it will only return the first one (bug! - couldn't find efficient way to do)

Parameters
tIdentifier to be matchesd
Returns
Pointer to the biggest prefix match, or NULL if none was found

Definition at line 63 of file I3.cc.

{
int prevDist = 0, nextDist = 0;
if (triggerTable.size() == 0) return 0;
/* find the closest identifier to t */
/* if no match exists, it gets the next identifier with a bigger key */
I3TriggerTable::const_iterator it = triggerTable.lower_bound(t);
if (it == triggerTable.end()) {
it--; // if at the end, check last
}
if (it->first == t) return &it->first; // if we found an exact match, no need to bother
if (it != triggerTable.begin()) { // if no smaller keys, begin() is the candidate itself
/* no exact match, check which is closer: */
/* either where the iterator points to (the next biggest) or the previous one. */
/* see I3Identifier::distanceTo for distance definition */
nextDist = it->first.distanceTo(t);
it--;
prevDist = it->first.distanceTo(t);
// if the next one is closest, put iterator back in place
if (nextDist < prevDist) {
it++;
}
}
/* now check if they match in the I3 sense (first prefixLength bits) */
return (it->first.isMatch(t)) ? &it->first : 0;
}
void I3::finish ( )
protectedvirtual

collects statistical data

Reimplemented from BaseApp.

Definition at line 431 of file I3.cc.

{
recordScalar("I3 Packets dropped", numDroppedPackets);
recordScalar("I3 Bytes dropped", byteDroppedPackets);
}
void I3::forward ( OverlayKey key,
cPacket **  msg,
NodeHandle nextHopNode 
)
protectedvirtual

Common API function: handles messages from overlay to be forwarded.

method to handle decapsulated KBRdeliver messages from overlay module, should be overwritten in derived application if needed

Parameters
keydestination key
msgmessage to forward
nextHopNodenext hop

Reimplemented from BaseApp.

Definition at line 231 of file I3.cc.

{
numForwardedBytes += (*msg)->getByteLength();
BaseApp::forward(key, msg, hint);
}
I3TriggerTable & I3::getTriggerTable ( )

Returns the table of inserted triggers.

Definition at line 426 of file I3.cc.

Referenced by TriggerTable::initialize().

{
return triggerTable;
}
void I3::handleTimerEvent ( cMessage *  msg)
protectedvirtual

Handles timers.

Parameters
msgTimer

Reimplemented from BaseRpc.

Definition at line 392 of file I3.cc.

{
bool updateString = false;
if (msg == expirationTimer) {
scheduleAt(simTime() + triggerTimeToLive, expirationTimer);
for (I3TriggerTable::iterator it = triggerTable.begin(); it != triggerTable.end(); it++) {
set<I3Trigger> &triggerSet = it->second;
for (set<I3Trigger>::const_iterator sit = triggerSet.begin(); sit != triggerSet.end(); sit++) {
//cout << "Trigger " << *sit << " has
if (simTime() - sit->getInsertionTime() > triggerTimeToLive) {
//if ((bool)par("debugOutput")) {
// cout << "Erasing trigger " << *sit << " in " <<
// thisNode.getIp()<< ", insertion time is " << sit->getInsertionTime()<< endl;
//}
triggerSet.erase(sit);
updateString = true;
}
}
if (it->second.size() == 0) {
triggerTable.erase(it);
}
}
if (updateString) updateTriggerTableString();
} else delete msg;
}
void I3::handleUDPMessage ( cMessage *  msg)
protectedvirtual

Handles a message from UDP.

Parameters
msgIncoming message

Reimplemented from BaseApp.

Definition at line 240 of file I3.cc.

{
I3Message *i3msg;
i3msg = dynamic_cast<I3Message*>(msg);
if (!i3msg) {
delete msg;
return;
}
msg->removeControlInfo();
switch (i3msg->getType()) {
imsg = check_and_cast<I3InsertTriggerMessage*>(i3msg);
callRoute(key, imsg);
/* if ((imsg->getSource().address.d[0] & 0xff) == 56) {
cout << "UDP Server " << thisNode.getIp()<< " trigger " << imsg->getTrigger() << " key " << key << endl;
}*/
break;
rmsg = check_and_cast<I3RemoveTriggerMessage*>(i3msg);
callRoute(key, rmsg);
break;
{
smsg = check_and_cast<I3SendPacketMessage*>(i3msg);
if (smsg->getIdentifierStack().size() == 0) {
/* got an empty identifier stack - nothing to do */
delete msg;
return;
}
/* why didn't they send it directly?! */
sendToNode(smsg);
} else {
key = subId.getIdentifier().asOverlayKey();
callRoute(key, smsg);
}
break;
}
default:
/* should't happen */
delete msg;
break;
}
}
void I3::initializeApp ( int  stage)
protectedvirtual

Actual initialization function.

Parameters
stageActual stage

Reimplemented from BaseApp.

Definition at line 363 of file I3.cc.

Referenced by I3TRTServer::initializeApp().

{
if (stage != MIN_STAGE_APP)
return;
triggerTimeToLive = par("triggerTimeToLive");
expirationTimer = new cMessage("expiration timer");
scheduleAt(simTime() + triggerTimeToLive, expirationTimer);
getDisplayString() = "i=i3";
thisNode.setPort(par("serverPort"));
}
void I3::insertTrigger ( I3Trigger t)

Inserts a trigger into I3.

Parameters
tTrigger to be inserted

Definition at line 100 of file I3.cc.

{
if (t.getIdentifierStack().size() == 0) {
/* don't bother */
cout << "Warning: Got trigger " << t << " with size 0 in " << thisNode.getIp()<< endl;
return;
}
t.setInsertionTime(simTime());
/* insert packet in triggerTable; */
/* if it was already there, remove and insert updated copy */
triggerTable[t.getIdentifier()].erase(t);
triggerTable[t.getIdentifier()].insert(t);
}
int I3::numInitStages ( ) const
protected

Returns number of required init stages.

Reimplemented from BaseApp.

Definition at line 358 of file I3.cc.

{
return MIN_STAGE_APP + 1;
}
void I3::removeTrigger ( I3Trigger t)

Removes a trigger from I3.

Parameters
tTrigger to be removed

Definition at line 120 of file I3.cc.

{
//cout << "Removing trigger at " << getId() << endl;
//getParentModule()->getParentModule()->bubble("Removing trigger");
if (triggerTable.count(t.getIdentifier()) == 0) return;
set<I3Trigger> &s = triggerTable[t.getIdentifier()];
s.erase(t);
if (s.size() == 0) triggerTable.erase(t.getIdentifier());
}
void I3::sendPacket ( I3SendPacketMessage msg)

Sends a packet through I3.

It checks the trigger table for triggers matching the message's first I3SubIdentifier from the stack. If none are found, the subidentifier is dropped and the packet is routed based on the next remaining one (if no subidentifiers remain, the packet itself is dropped). The matching trigger's own subidentifier stack is then appended to the message stack, and then routed to the first subidentifier of the resulting stack (or sent through UDP if it's an IP address).

Parameters
msgMessage to be sent

Definition at line 146 of file I3.cc.

{
if (idStack.size() == 0) {
/* no identifiers left! drop packet */
/* shouldn't happen (how'd it get here anyway?) */
byteDroppedPackets += msg->getBitLength();
delete msg;
return;
}
I3SubIdentifier id = idStack.peek();
if (id.getType() == I3SubIdentifier::IPAddress) {
/* shouldn't happen (how'd they find us anyway?) but just in case */
sendToNode(msg);
} else {
/* if we were asked to reply, send it now */
if (msg->getSendReply()) {
sendQueryReply(id.getIdentifier(), msg->getSource());
}
const I3Identifier *i3id = findClosestMatch(id.getIdentifier());
/* eliminate top of the stack */
idStack.pop();
if (!i3id) {
/* no matching ids found in this server, re-route to next id */
if (idStack.size() == 0) {
/* no identifiers left! drop packet */
byteDroppedPackets += msg->getBitLength();
cout << "Dropped packet at" << thisNode.getIp()<< " to unknown id " << id.getIdentifier() << endl;
delete msg;
return;
} else {
msg->setBitLength(SEND_PACKET_L(msg)); /* stack size changed, recalculate */
if (idStack.peek().getType() == I3SubIdentifier::IPAddress) {
msg->getMatchedTrigger().clear(); // not trigger, but direct IP match
sendToNode(msg);
} else {
callRoute(key, msg);
}
}
} else {
/* some id found, send to all friends */
set<I3Trigger> &s = triggerTable[*i3id];
set<I3Trigger>::iterator it;
for (it = s.begin(); it != s.end(); it++) {
cPacket *dupMsg;
newMsg = new I3SendPacketMessage();
newMsg->setIdentifierStack(idStack); /* create copy */
newMsg->getIdentifierStack().push(it->getIdentifierStack()); /* append our stuff to the top of the stack */
dupMsg = check_and_cast<cPacket*>(msg->getEncapsulatedPacket()->dup()); /* dup msg */
newMsg->setBitLength(SEND_PACKET_L(newMsg)); /* stack size changed, recalculate */
newMsg->encapsulate(dupMsg);
newMsg->setMatchedTrigger(*it);
sendToNode(newMsg);
} else {
callRoute(key, newMsg);
}
}
/* copies sent, erase original */
delete msg;
}
}
}
void I3::sendQueryReply ( const I3Identifier id,
const I3IPAddress add 
)
protected

Replies to a query of which server is responsible for the given identifier (this server)

Parameters
idI3 identifier of the query
addIP address of requester

Definition at line 302 of file I3.cc.

{
I3IPAddress myAddress(thisNode.getIp(), par("serverPort"));
pmsg = new I3QueryReplyMessage();
pmsg->setSource(myAddress);
pmsg->setSendingTime(simTime());
pmsg->setIdentifier(id);
pmsg->setBitLength(QUERY_REPLY_L(pmsg));
sendMessageToUDP(add, pmsg);
}
void I3::sendToNode ( I3SendPacketMessage imsg)

Sends packet to matching IP address (used by sendPacket)

Parameters
imsgMessage to be sent

Definition at line 137 of file I3.cc.

{
I3IPAddress address;
/* re-route message to a client node */
address = imsg->getIdentifierStack().peek().getIPAddress();
imsg->getIdentifierStack().pop(); // pop ip address
sendMessageToUDP(address, imsg);
}
void I3::updateTriggerTableString ( )
protected

Updates TriggerTable's module display string.

Definition at line 420 of file I3.cc.

{
TriggerTable *table = check_and_cast<TriggerTable*>(getParentModule()->getSubmodule("triggerTable"));
}

Member Data Documentation

int I3::byteDroppedPackets
protected

Definition at line 51 of file I3.h.

cMessage* I3::expirationTimer
protected

Timer to check for trigger expiration.

Definition at line 63 of file I3.h.

int I3::numDroppedPackets
protected

Number of dropped packets.

Definition at line 50 of file I3.h.

int I3::numForwardedBytes
protected

Definition at line 54 of file I3.h.

int I3::numForwardedPackets
protected

Definition at line 53 of file I3.h.

I3TriggerTable I3::triggerTable
protected

Table containing inserted triggers.

Definition at line 60 of file I3.h.

int I3::triggerTimeToLive
protected

Time before inserted triggers expire.

Definition at line 57 of file I3.h.


The documentation for this class was generated from the following files: