DRCL JavaSim API

drcl.inet.protocol.dvmrp
Class DVMRP

java.lang.Object
  |
  +--drcl.DrclObj
        |
        +--drcl.comp.Component
              |
              +--drcl.net.Module
                    |
                    +--drcl.inet.Protocol
                          |
                          +--drcl.inet.protocol.Routing
                                |
                                +--drcl.inet.protocol.dvmrp.DVMRP
All Implemented Interfaces:
java.lang.Cloneable, InetConstants, McastRouting, ObjectDuplicable, java.io.Serializable

public class DVMRP
extends Routing
implements McastRouting

This component implements the distance vector multicast routing protocol (DVMRP).

The implementation almost complies with the DVMRPv3 Internet Draft except that:

As for (1), we provide our own solutions to those situations which can be seen as augments to the internet draft in our opinion. Due to (2), a couple of things in this implementation are quite different from what would be in a real implementation. For example, the "probe" messages for discovering and maintaining neighboring information are replaced by the neighbor up/down events provided by the core service layer. Moreover, this implementation does not handle IGMP directly. Handling of IGMP is separated from this implementation and should be provided by another component (probably the core service layer). This implementation expects the multicast host events from a predefined event port. The events summarize the IGMP activities that are only interested in by a multicast routing protocol such as DVMRP.

This component treats the tunnel (virtual) interfaces equally with the normal ones. The tunnel interfaces are configured in the core service layer. One may configure this component to operate on a specific set of interfaces (setIfset(...)).

See Also:
Serialized Form

Inner classes inherited from class drcl.comp.Component
Component.LockPack
 
Field Summary
static int DEBUG_DEPENDENT
           
static int DEBUG_GRAFT
           
static int DEBUG_IO
           
static int DEBUG_MCAST_QUERY
           
static int DEBUG_PRUNE
           
static int DEBUG_ROUTE
           
static int DEBUG_SEND_UPDATE
           
static int DEBUG_SYNC_FC
           
static int DEBUG_TIMEOUT
           
static int INFINITY
          Metric of infinity.
 
Fields inherited from class drcl.inet.protocol.Routing
queryPort, rtconfigPort
 
Fields inherited from class drcl.net.Module
address, downPort, PortGroup_DOWN, PortGroup_UP, timerPort, upPort
 
Fields inherited from class drcl.comp.Component
FLAG_COMPONENT_NOTIFICATION, FLAG_DEBUG_ENABLED, FLAG_DIRECT_OUTPUT_ENABLED, FLAG_ENABLED, FLAG_ERROR_ENABLED, FLAG_EVENT_ENABLED, FLAG_GARBAGE_DISPLAY_ENABLED, FLAG_GARBAGE_ENABLED, FLAG_PORT_NOTIFICATION, FLAG_STARTED, FLAG_STOPPED, FLAG_TRACE_ENABLED, FLAG_UNDEFINED_START, id, infoPort, lockHead, name, parent, PortGroup_DEFAULT_GROUP, PortGroup_EVENT, PortGroup_SERVICE, Root, Trace_DATA, Trace_SEND
 
Fields inherited from interface drcl.inet.InetConstants
BYTE_MODE, DEFAULT_BANDWIDTH, DEFAULT_BUFFER_SIZE, DEFAULT_MTU, EVENT_ID_CHANGED_PORT_ID, EVENT_IDENTITY_ADDED, EVENT_IDENTITY_REMOVED, EVENT_IF_NEIGHBOR_DOWN, EVENT_IF_NEIGHBOR_UP, EVENT_IF_PORT_ID, EVENT_MCAST_HOST_PORT_ID, EVENT_PKT_ARRIVAL, EVENT_PKT_ARRIVAL_PORT_ID, EVENT_RT_ENTRY_ADDED, EVENT_RT_ENTRY_MODIFIED, EVENT_RT_ENTRY_REMOVED, EVENT_RT_MCAST_CHANGED_PORT_ID, EVENT_RT_UCAST_CHANGED_PORT_ID, EVENT_VIF_NEIGHBOR_DOWN, EVENT_VIF_NEIGHBOR_UP, EVENT_VIF_PORT_ID, HOST_ENTRY_EXT, ID_CSL, MCAST_QUERY_PORT_ID, PACKET_MODE, PID_DV, PID_DVMRP, PID_HELLO, PID_IGMP, PID_OSPF, PID_RSVP, PID_TCP, PID_UDP, SERVICE_CONFIGSW_PORT_ID, SERVICE_ID_PORT_ID, SERVICE_IF_PORT_ID, SERVICE_MCAST_PORT_ID, SERVICE_RT_PORT_ID, UCAST_QUERY_PORT_ID
 
Constructor Summary
DVMRP()
           
DVMRP(java.lang.String id_)
           
 
Method Summary
protected  void dataArriveAtDownPort(java.lang.Object msg_, Port downPort_)
          The handler invoked when a packet arrives at a "down" port.
 void duplicate(java.lang.Object source_)
          Duplicates the content of source_, including ID, name, child components and connections among them, to this component.
 java.lang.String[] getDebugLevelNames()
          Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
 BitSet getIfset()
          Returns the set of the interfaces that this protocol is operated on.
 int[] getMetrics()
          Returns the metrics on the interfaces that this protocol is operated on.
 java.lang.String getName()
          Returns the (informational) name of the component.
 DVMRPTimingPack getTimingPack()
           
 java.lang.String info()
          Returns information regarding this component.
protected  void mcastHostJoinEventHandler(long src_, long srcmask_, long group_, int ifindex_, Port inPort_)
          Called back when a multicast host join event is received.
protected  void mcastHostLeaveEventHandler(long src_, long srcmask_, long group_, int ifindex_, Port inPort_)
          Called back when a multicast host leave event is received.
protected  int[] mcastQueryHandler(RTKey request_, Port inPort_)
          Called back when a unicast query event is received.
protected  void neighborDownEventHandler(int ifindex_, NetAddress neighbor_, Port inPort_)
          Called back when a neighbor down event is received.
protected  void neighborUpEventHandler(int ifindex_, NetAddress neighbor_, Port inPort_)
          Called back when a neighbor up event is received.
protected  void process(java.lang.Object data_, Port inPort_)
          This method classifies inPort_ and delegates process of data to the appropriate handler.
 void reset()
          Resets the component for being used anew.
 void setIfset(BitSet ifset_)
          Sets the set of the interfaces that this protocol is operated on.
 void setMetrics(int[] metrics_)
          Sets the metrics on the interfaces that this protocol is operated on.
 void setPruneLifetime(int pruneLifetime_)
           
 void setTimingPack(DVMRPTimingPack timing_)
           
protected  void timeout(java.lang.Object data_)
          The handler invoked when a timeout event occurs.
 java.lang.String timingInfo()
           
protected  void vNeighborDownEventHandler(int ifindex_, NetAddress neighbor_, Port inPort_)
          Called back when a (virtual) neighbor down event is received.
protected  void vNeighborUpEventHandler(int ifindex_, NetAddress neighbor_, Port inPort_)
          Called back when a (virtual) neighbor up event is received.
 
Methods inherited from class drcl.inet.protocol.Routing
addRTEntry, addRTEntry, addRTEntry, addRTEntry, addRTEntry, addRTEntry, addRTEntry, graftRTEntry, graftRTEntry, graftRTEntry, pruneRTEntry, pruneRTEntry, pruneRTEntry, removeAllRTEntries, removeRTEntry, removeRTEntry, replaceRTEntry, replaceRTEntry, retrieveAllRTEntries, retrieveRTEntry, retrieveRTEntryDest, retrieveRTEntrySrc
 
Methods inherited from class drcl.inet.Protocol
broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, createConfigSwitchPort, createIDChangedEventPort, createIDServicePort, createIFEventPort, createIFQueryPort, createMcastHostEventPort, createMcastQueryPort, createMulticastRTChangedEventPort, createPktArrivalEventPort, createRTServicePort, createUcastQueryPort, createUnicastRTChangedEventPort, createVIFEventPort, forward, forward, forward, forward, forward, forward, idAddedEventHandler, idRemovedEventHandler, pktArrivalHandler, processOther, rtAddedEventHandler, rtModifiedEventHandler, rtRemovedEventHandler, ucastQueryHandler
 
Methods inherited from class drcl.net.Module
cancelTimeout, dataArriveAtUpPort, deliver, getAddress, removeDefaultDownPort, removeDefaultUpPort, removeTimerPort, setAddress, setTimeout, setTimeoutAt
 
Methods inherited from class drcl.comp.Component
_resume, _start, _stop, addComponent, addComponent, addEventPort, addEventPort, addForkPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addServerPort, addServerPort, cancelFork, componentAdded, componentRemoved, connect, containsComponent, containsComponent, containsPort, debug, disconnectAll, disconnectAllPeers, disconnectAllPorts, drop, drop, error, error, expose, exposeEventPorts, exposePort, exposePort, exposePort, exposePort, exposePort, findAvailable, findAvailable, findAvailable, finishing, fork, forkAt, getAllComponents, getAllPorts, getAllPorts, getAllWiresInside, getAllWiresInsideOut, getAllWiresOut, getComponent, getComponentFlag, getComponentFlag, getContract, getContractHT, getContractHT, getDebugFlagsInBinary, getForkManager, getID, getParent, getPort, getPort, getRoot, getRuntime, getTime, iduplicate, isAncestorOf, isComponentNotificationEnabled, isContainer, isDebugEnabled, isDebugEnabledAt, isDirectOutputEnabled, isEnabled, isErrorNoticeEnabled, isEventExportEnabled, isGarbageDisplayEnabled, isGarbageEnabled, isPortNotificationEnabled, isPortRemovable, isStarted, isStopped, isTraceEnabled, lock, notify, notifyAll, operate, portAdded, portRemoved, reboot, removeAll, removeAllComponents, removeAllPorts, removeAllPorts, removeComponent, removeComponent, removePort, removePort, removePort, resume, run, sduplicate, send, sendAt, setComponentFlag, setComponentFlag, setComponentNotificationEnabled, setContract, setDebugEnabled, setDebugEnabled, setDebugEnabledAt, setDebugEnabledAt, setDebugEnabledAt, setDirectOutputEnabled, setDirectOutputEnabled, setEnabled, setErrorNoticeEnabled, setErrorNoticeEnabled, setEventExportEnabled, setEventExportEnabled, setExecutionBoundary, setGarbageDisplayEnabled, setGarbageDisplayEnabled, setGarbageEnabled, setGarbageEnabled, setID, setID, setName, setPort, setPort, setPortNotificationEnabled, setPortRemovable, setRuntime, setTraceEnabled, setTraceEnabled, sleepFor, sleepUntil, stop, toString, unexpose, unlock, useLocalForkManager, useLocalForkManager, wait
 
Methods inherited from class drcl.DrclObj
clone
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

INFINITY

public static final int INFINITY
Metric of infinity. Recommended in the DVMRPv3 Internet Draft.

DEBUG_IO

public static final int DEBUG_IO

DEBUG_TIMEOUT

public static final int DEBUG_TIMEOUT

DEBUG_ROUTE

public static final int DEBUG_ROUTE

DEBUG_SEND_UPDATE

public static final int DEBUG_SEND_UPDATE

DEBUG_MCAST_QUERY

public static final int DEBUG_MCAST_QUERY

DEBUG_PRUNE

public static final int DEBUG_PRUNE

DEBUG_GRAFT

public static final int DEBUG_GRAFT

DEBUG_DEPENDENT

public static final int DEBUG_DEPENDENT

DEBUG_SYNC_FC

public static final int DEBUG_SYNC_FC
Constructor Detail

DVMRP

public DVMRP()

DVMRP

public DVMRP(java.lang.String id_)
Method Detail

getName

public java.lang.String getName()
Description copied from class: Component
Returns the (informational) name of the component.
Overrides:
getName in class Component

getDebugLevelNames

public java.lang.String[] getDebugLevelNames()
Description copied from class: Component
Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
Overrides:
getDebugLevelNames in class Component

duplicate

public void duplicate(java.lang.Object source_)
Description copied from class: Component
Duplicates the content of source_, including ID, name, child components and connections among them, to this component. Subclasses need to override this method to copy its own variables.
Overrides:
duplicate in class Protocol

info

public java.lang.String info()
Description copied from class: Component
Returns information regarding this component. Subclasses should override this method to provide useful information at run-time.
Overrides:
info in class Component

reset

public void reset()
Description copied from class: Component
Resets the component for being used anew. All the internal variables must be set to the initial state. All the ports and child components are reset as well.
Overrides:
reset in class Component

neighborUpEventHandler

protected void neighborUpEventHandler(int ifindex_,
                                      NetAddress neighbor_,
                                      Port inPort_)
Description copied from class: Protocol
Called back when a neighbor up event is received.
Overrides:
neighborUpEventHandler in class Protocol
Following copied from class: drcl.inet.Protocol
Parameters:
ifindex_ - index of the interface.
See Also:
Protocol.createIFEventPort()

vNeighborUpEventHandler

protected void vNeighborUpEventHandler(int ifindex_,
                                       NetAddress neighbor_,
                                       Port inPort_)
Description copied from class: Protocol
Called back when a (virtual) neighbor up event is received.
Overrides:
vNeighborUpEventHandler in class Protocol
Following copied from class: drcl.inet.Protocol
Parameters:
ifindex_ - index of the virtual interface.
See Also:
Protocol.createVIFEventPort()

neighborDownEventHandler

protected void neighborDownEventHandler(int ifindex_,
                                        NetAddress neighbor_,
                                        Port inPort_)
Description copied from class: Protocol
Called back when a neighbor down event is received.
Overrides:
neighborDownEventHandler in class Protocol
Following copied from class: drcl.inet.Protocol
Parameters:
ifindex_ - index of the interface.
See Also:
Protocol.createIFEventPort()

vNeighborDownEventHandler

protected void vNeighborDownEventHandler(int ifindex_,
                                         NetAddress neighbor_,
                                         Port inPort_)
Description copied from class: Protocol
Called back when a (virtual) neighbor down event is received.
Overrides:
vNeighborDownEventHandler in class Protocol
Following copied from class: drcl.inet.Protocol
Parameters:
ifindex_ - index of the interface.
See Also:
Protocol.createVIFEventPort()

process

protected void process(java.lang.Object data_,
                       Port inPort_)
Description copied from class: Module
This method classifies inPort_ and delegates process of data to the appropriate handler. If a subclass decides to override this method, then it should call super.process(data_, inPort_) to make those handlers effective.
Overrides:
process in class Module
Following copied from class: drcl.net.Module
See Also:
Module.dataArriveAtUpPort(Object, drcl.comp.Port), Module.dataArriveAtDownPort(Object, drcl.comp.Port), Module.processOther(Object, drcl.comp.Port)

timeout

protected void timeout(java.lang.Object data_)
Description copied from class: Module
The handler invoked when a timeout event occurs. Subclasses should override it to handle such an event.
Overrides:
timeout in class Module
Following copied from class: drcl.net.Module
See Also:
Module.setTimeout(Object, double), Module.setTimeoutAt(Object, double)

dataArriveAtDownPort

protected void dataArriveAtDownPort(java.lang.Object msg_,
                                    Port downPort_)
Description copied from class: Module
The handler invoked when a packet arrives at a "down" port. Subclasses should override it to handle such an event.
Overrides:
dataArriveAtDownPort in class Module

mcastQueryHandler

protected int[] mcastQueryHandler(RTKey request_,
                                  Port inPort_)
Description copied from class: Protocol
Called back when a unicast query event is received.
Overrides:
mcastQueryHandler in class Protocol
Following copied from class: drcl.inet.Protocol
See Also:
RTLookup, Protocol.createMcastQueryPort()

setIfset

public void setIfset(BitSet ifset_)
Sets the set of the interfaces that this protocol is operated on.

getIfset

public BitSet getIfset()
Returns the set of the interfaces that this protocol is operated on.

setMetrics

public void setMetrics(int[] metrics_)
Sets the metrics on the interfaces that this protocol is operated on. The indices to the metrics array are the indices to the interfaces. The values in the array that correspond to the interfaces that this protocol is not operated on are ignored.
See Also:
setIfset(drcl.data.BitSet)

getMetrics

public int[] getMetrics()
Returns the metrics on the interfaces that this protocol is operated on. The indices to the returned metrics array are the indices to the interfaces. The values in the array that correspond to the interfaces that this protocol is not operated on are arbitrary.
Returns:
null if all the interfaces have default metric of zero.
See Also:
setIfset(drcl.data.BitSet)

setTimingPack

public void setTimingPack(DVMRPTimingPack timing_)

getTimingPack

public DVMRPTimingPack getTimingPack()

timingInfo

public java.lang.String timingInfo()

setPruneLifetime

public void setPruneLifetime(int pruneLifetime_)

mcastHostJoinEventHandler

protected void mcastHostJoinEventHandler(long src_,
                                         long srcmask_,
                                         long group_,
                                         int ifindex_,
                                         Port inPort_)
Description copied from class: Protocol
Called back when a multicast host join event is received.
Overrides:
mcastHostJoinEventHandler in class Protocol
Following copied from class: drcl.inet.Protocol
Parameters:
group_ - the multicast group the host network joins.
ifindex_ - index of the interface where the host network is connected. Could be -1 if it is a local join (multihomed router).
See Also:
Protocol.createMcastHostEventPort()

mcastHostLeaveEventHandler

protected void mcastHostLeaveEventHandler(long src_,
                                          long srcmask_,
                                          long group_,
                                          int ifindex_,
                                          Port inPort_)
Description copied from class: Protocol
Called back when a multicast host leave event is received.
Overrides:
mcastHostLeaveEventHandler in class Protocol
Following copied from class: drcl.inet.Protocol
Parameters:
group_ - the multicast group the host network leaves.
ifindex_ - index of the interface where the host network is connected. Could be -1 if it is a local leave (multihomed router).
See Also:
Protocol.createMcastHostEventPort()

DRCL JavaSim API

Copyright © 2001 - DRCL, OSU     ~ Back to JavaSim Home ~