DRCL J-Sim API

drcl.inet.protocol.aodv
Class AODV

java.lang.Object
  extended bydrcl.DrclObj
      extended bydrcl.comp.Component
          extended bydrcl.net.Module
              extended bydrcl.inet.Protocol
                  extended bydrcl.inet.protocol.Routing
                      extended bydrcl.inet.protocol.aodv.AODV
All Implemented Interfaces:
ActiveComponent, java.lang.Cloneable, InetConstants, ObjectCloneable, ObjectDuplicable, java.io.Serializable, UnicastRouting

public class AODV
extends Routing
implements UnicastRouting, ActiveComponent

AODV.java: the main part of AODV protocols. The software is refered to: 1. AODV Draft (version. 11) 2. AODV class in ns-2. In ns-2, the AODV code developed by the CMU/MONARCH group was optimized and tuned by Samir Das and Mahesh Marina, University of Cincinnati. The work was partially done in Sun Microsystems.

Author:
Wei-peng Chen
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class drcl.comp.Component
Component.Locks
 
Field Summary
static boolean debug
           
static int DEBUG_AODV
           
static int DEBUG_DATA
           
static int DEBUG_HELLO
           
static int DEBUG_RERR
          Debug level of showing all RERR packets.
static int DEBUG_ROUTE
           
static int DEBUG_RREP
          Debug level of showing all RREP packets.
static int DEBUG_RREQ
          Debug level of showing all RREQ packets.
static int DEBUG_SAMPLE
           
static int DEBUG_SEND
          Debug level of sending AODV packets.
static int DEBUG_TIMEOUT
           
static boolean debug2
           
 
Fields inherited from class drcl.net.Module
downPort, PortGroup_DOWN, PortGroup_UP, 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, locks, 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_LINK_BROKEN, EVENT_LINK_BROKEN_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, ID_TRACE_RT, MCAST_QUERY_PORT_ID, PACKET_MODE, PID_AODV, PID_DV, PID_DVMRP, PID_HELLO, PID_IGMP, PID_OSPF, PID_RSVP, PID_TCP, PID_TRACE_RT, 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
AODV()
          Constructor.
 
Method Summary
 void aodv_addRTEntry(long dst_, long nexthop_, double timeout_)
          add a routing entry with specification of distance, nect hop and the timeout value
 void aodv_addRTEntry(long dst_, long nexthop_, double timeout_, int interface_)
          add a routing entry with specification of distance, nect hop ,the timeout value and the interface id
 java.lang.Object aodv_removeRTEntry(long dst)
          each rt_down is associated with an aodv_removeRTEntry, rt_down is called when: (1) local repair timeout which then call nb_delete (2) recvError (3) handle_link_failure (which is called by nb_delete) (4) rt_purge
 void dataArriveAtDownPort(java.lang.Object data_, Port downPort_)
          Handle data arriving at the down port.
 void disable_link_detection()
           
 void duplicate(java.lang.Object source_)
          Duplicates the content of source_, including ID, name, child components and connections among them, to this component.
 void enable_link_detection()
          If calling this function in the script, that means the underlying link layer provides the ability of detecting link broken, and then hello timer and neighbor timer will be never used.
 java.lang.String[] getDebugLevelNames()
          Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
 java.lang.String getName()
          Returns the (informational) name of the component.
 java.lang.String info()
          Returns information regarding this component.
 void LinkBrokenEventHandler(InetPacket p, Port inPort_)
          This routine is invoked when the link-layer reports a route failed.
 void nb_delete(long id)
          Called when we receive *explicit* notification that a Neighbor is no longer reachable.
 void recvError(AODV_RERR re, InetPacket ipkt_)
          receive a packet with RERR type, indicating the information of a broken link
 void recvHello(AODV_RREP rp, InetPacket ipkt_)
          receive a hello packet to maintain the neighbor relationship, Hello packet is only used when the link layer does not provide the link broken detection function
 void reset()
          Resets the component for being used anew.
 int[] routeQueryHandler(InetPacket req_, int incomingIf_, Port inPort_)
           
 void setSeed(long seed)
          Sets the seed of the random number generator.
 
Methods inherited from class drcl.inet.protocol.Routing
addRTEntry, addRTEntry, graftRTEntry, graftRTEntry, graftRTEntry, pruneRTEntry, pruneRTEntry, pruneRTEntry, removeAllRTEntries, removeRTEntry, removeRTEntry, retrieveAllRTEntries, retrieveBestRTEntryDest, retrieveRTEntry, retrieveRTEntryDest, retrieveRTEntrySrc
 
Methods inherited from class drcl.inet.Protocol
broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, createConfigSwitchPort, createIDChangedEventPort, createIDServicePort, createIFEventPort, createIFQueryPort, createLinkBrokenEventPort, createMcastHostEventPort, createMcastQueryPort, createMulticastRTChangedEventPort, createPktArrivalEventPort, createRTServicePort, createUcastQueryPort, createUnicastRTChangedEventPort, createVIFEventPort, forward, forward, forward, forward, forward, forward
 
Methods inherited from class drcl.net.Module
cancelTimeout, setTimeout, setTimeoutAt
 
Methods inherited from class drcl.comp.Component
addComponent, addComponent, addEventPort, addEventPort, addForkPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addServerPort, addServerPort, cancelFork, connect, containsComponent, containsComponent, containsPort, debug, disconnectAll, disconnectAllPeers, disconnectAllPorts, drop, drop, error, error, expose, exposeEventPorts, exposePort, exposePort, exposePort, exposePort, exposePort, findAvailable, findAvailable, findAvailable, fork, forkAt, getAllComponents, getAllPorts, getAllPorts, getAllWiresInside, getAllWiresInsideOut, getAllWiresOut, getComponent, getComponentFlag, getComponentFlag, getContract, getContractHT, getContractHT, getDebugFlagsInBinary, getID, getParent, getPort, getPort, getRoot, getTime, iduplicate, isAncestorOf, isContainer, isDebugEnabled, isDebugEnabledAt, isDirectlyRelatedTo, isDirectOutputEnabled, isEnabled, isErrorNoticeEnabled, isEventExportEnabled, isGarbageDisplayEnabled, isGarbageEnabled, isPortRemovable, isStarted, isStopped, isTraceEnabled, lock, notify, notifyAll, operate, reboot, removeAll, removeAllComponents, removeAllPorts, removeAllPorts, removeComponent, removeComponent, removePort, removePort, removePort, resume, run, sduplicate, send, sendAt, setComponentFlag, setComponentFlag, setDebugEnabled, setDebugEnabled, setDebugEnabledAt, setDebugEnabledAt, setDebugEnabledAt, setDirectOutputEnabled, setDirectOutputEnabled, setEnabled, setErrorNoticeEnabled, setErrorNoticeEnabled, setEventExportEnabled, setEventExportEnabled, setExecutionBoundary, setGarbageDisplayEnabled, setGarbageDisplayEnabled, setGarbageEnabled, setGarbageEnabled, setID, setID, setName, setPort, setPort, 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, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

debug

public static boolean debug

debug2

public static boolean debug2

DEBUG_SAMPLE

public static final int DEBUG_SAMPLE
See Also:
Constant Field Values

DEBUG_AODV

public static final int DEBUG_AODV
See Also:
Constant Field Values

DEBUG_SEND

public static final int DEBUG_SEND
Debug level of sending AODV packets.

See Also:
Constant Field Values

DEBUG_RREQ

public static final int DEBUG_RREQ
Debug level of showing all RREQ packets.

See Also:
Constant Field Values

DEBUG_RREP

public static final int DEBUG_RREP
Debug level of showing all RREP packets.

See Also:
Constant Field Values

DEBUG_RERR

public static final int DEBUG_RERR
Debug level of showing all RERR packets.

See Also:
Constant Field Values

DEBUG_HELLO

public static final int DEBUG_HELLO
See Also:
Constant Field Values

DEBUG_TIMEOUT

public static final int DEBUG_TIMEOUT
See Also:
Constant Field Values

DEBUG_DATA

public static final int DEBUG_DATA
See Also:
Constant Field Values

DEBUG_ROUTE

public static final int DEBUG_ROUTE
See Also:
Constant Field Values
Constructor Detail

AODV

public AODV()
Constructor.

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

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

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.

Specified by:
duplicate in interface ObjectDuplicable
Overrides:
duplicate in class Protocol

enable_link_detection

public void enable_link_detection()
If calling this function in the script, that means the underlying link layer provides the ability of detecting link broken, and then hello timer and neighbor timer will be never used.


disable_link_detection

public void disable_link_detection()

LinkBrokenEventHandler

public void LinkBrokenEventHandler(InetPacket p,
                                   Port inPort_)
This routine is invoked when the link-layer reports a route failed. When this function is called, there are two cases: (1) local repair => send RREQ and not send RERR => wait for reply => if not recv RREP, send RERR and call rt_down (2) no local repair => nb_delete => handle_link_failure => rt_down & send RERR

Overrides:
LinkBrokenEventHandler in class Protocol
See Also:
Protocol.createLinkBrokenEventPort()

routeQueryHandler

public int[] routeQueryHandler(InetPacket req_,
                               int incomingIf_,
                               Port inPort_)
See Also:
RTLookup, Protocol.createUcastQueryPort(), Protocol.createMcastQueryPort()

dataArriveAtDownPort

public void dataArriveAtDownPort(java.lang.Object data_,
                                 Port downPort_)
Handle data arriving at the down port. According to the different packet types ( AODV Hello pkt, Database descricption pkt,Link State update pkt, LS request pkt, or LS ack pkt), different corresponding methods can handle the packet. Note for AODV_Hello pkt will be received only once. The other hello maintaince is done by drcl.inet.core.Hello

Parameters:
downPort_ - down port at which messages arrive.

recvError

public void recvError(AODV_RERR re,
                      InetPacket ipkt_)
receive a packet with RERR type, indicating the information of a broken link


recvHello

public void recvHello(AODV_RREP rp,
                      InetPacket ipkt_)
receive a hello packet to maintain the neighbor relationship, Hello packet is only used when the link layer does not provide the link broken detection function


nb_delete

public void nb_delete(long id)
Called when we receive *explicit* notification that a Neighbor is no longer reachable. nb_delete is called by : (1) LinkBrokenEventHandler (@ no local repair) (2) nb_purge (@nbr.expire <= now) `


aodv_addRTEntry

public void aodv_addRTEntry(long dst_,
                            long nexthop_,
                            double timeout_)
add a routing entry with specification of distance, nect hop and the timeout value


aodv_addRTEntry

public void aodv_addRTEntry(long dst_,
                            long nexthop_,
                            double timeout_,
                            int interface_)
add a routing entry with specification of distance, nect hop ,the timeout value and the interface id


aodv_removeRTEntry

public java.lang.Object aodv_removeRTEntry(long dst)
each rt_down is associated with an aodv_removeRTEntry, rt_down is called when: (1) local repair timeout which then call nb_delete (2) recvError (3) handle_link_failure (which is called by nb_delete) (4) rt_purge


setSeed

public void setSeed(long seed)
Sets the seed of the random number generator.


DRCL J-Sim API

Copyright © 1998-2003 Distributed Real-time Computing Lab (DRCL). All Rights Reserved.     ~ To J-Sim Home ~