verinec.netsim.processors
Class ARPProcessor

java.lang.Object
  extended by verinec.netsim.processors.EventProcessor
      extended by verinec.netsim.processors.ARPProcessor

public class ARPProcessor
extends EventProcessor

The ARP Processor ins the instance that does the Address Resolution between Layer 3 and Layer 2 Addresses. The Processor has a ARP Cache. The Processor has a cache where assocations between layer 2 and layer 3 addresses are made. On a ARPLookUp, if there is no entry in the Cache, or the Cache Entry is too old, the Processor send a broadcast message and asks everyone if he has the requested address. There are two possible resolutions: from Layer 3 to a Layer 2 Address (normal Resolution) or from Layer 2 to a Layer 3 Address (reverse Lookup). Incoming ARP requests are treated automatically.

Version:
$Revision:835 $
Author:
Dominik Jungo

Field Summary
private  Logger jlogger
           
private  Hashtable waitingpackets
           
 
Constructor Summary
ARPProcessor()
          Creates a new ARP Processor
ARPProcessor(abstractNetworkLayer layer)
          Createa a new ARP Processor
 
Method Summary
private  void arpLookupBroadcast(Packet packet, ILogger logger, IAddress src)
           
private  void arpLookupBroadcastForward(Packet packet, ILogger logger, IAddress src)
           
 IAddress arpLookUpLocal(IAddress address, ILogger logger, IAddress src)
          performs a arp lookup in the local cache
private  IAddress arpLookupLocalReverse(IAddress address)
          Does a reverse ARP Lookup (Resolves the Layer 3 address form a Layer 2 address)
private  boolean canSendDirectly(IPAddress src, IPAddress dst)
           
 void processDown(PacketArrivedEventDown event)
          processes events for a packet that was send down to this layer
 void processUp(PacketArrivedEventUp event)
          processes events for a packet that was send up to this layer
private  void processUpReply(ARPPacket packet, ILogger logger)
           
private  void processUpRequest(ARPPacket packet, ILogger logger)
           
 void resolveAndSend(Packet packet, ILogger logger)
           
 void resolveAndSendForward(Packet packet, Event logger)
           
private  void sendArpLookUpBroadcast(IAddress address, ILogger logger, IAddress src, IAddress src1)
          performs a arp lookup.
private  void sendIP(Packet packet, IAddress src, IAddress dst, ILogger logger)
           
 
Methods inherited from class verinec.netsim.processors.EventProcessor
getLayer, getName, setLayer, setName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

jlogger

private Logger jlogger

waitingpackets

private Hashtable waitingpackets
Constructor Detail

ARPProcessor

public ARPProcessor()
Creates a new ARP Processor


ARPProcessor

public ARPProcessor(abstractNetworkLayer layer)
Createa a new ARP Processor

Parameters:
layer - the layer in which one the processor is active
Method Detail

processUpRequest

private void processUpRequest(ARPPacket packet,
                              ILogger logger)

processUpReply

private void processUpReply(ARPPacket packet,
                            ILogger logger)

processUp

public void processUp(PacketArrivedEventUp event)
Description copied from class: EventProcessor
processes events for a packet that was send up to this layer

Specified by:
processUp in class EventProcessor
Parameters:
event - a event for a packet that was send up to this layer
See Also:
EventProcessor.processUp(verinec.netsim.events.PacketArrivedEventUp)

processDown

public void processDown(PacketArrivedEventDown event)
Description copied from class: EventProcessor
processes events for a packet that was send down to this layer

Specified by:
processDown in class EventProcessor
Parameters:
event - a event for a packet that was send down to this layer
See Also:
This should never happen.

sendArpLookUpBroadcast

private void sendArpLookUpBroadcast(IAddress address,
                                    ILogger logger,
                                    IAddress src,
                                    IAddress src1)
performs a arp lookup. first it looks in the cache. if no valid entry is found it broadcasts an arp message to resolve the address.

Parameters:
address - address to resolve
logger - the logger that loggs
src - a Layer 2 address of this host. Use the address of the nic over which one you ant to broadcast the arp request if it isn't found in the local cache.
Throws:
NetSimException - if the arp lookup fails. This means there is no valid entry in the cache and no one answers in time to the broadcasted address.

arpLookUpLocal

public IAddress arpLookUpLocal(IAddress address,
                               ILogger logger,
                               IAddress src)
performs a arp lookup in the local cache

Parameters:
address - the layer 3 that needs to be resolved
logger - the logger that loggs the lookup
src - a layer 2 address of this host
Returns:
the resolved layer 2 address associated to the layer 3 address

arpLookupLocalReverse

private IAddress arpLookupLocalReverse(IAddress address)
Does a reverse ARP Lookup (Resolves the Layer 3 address form a Layer 2 address)

Parameters:
address - a layer 2 address that should be resolved
Returns:
the layer 3 address associated with the layer 2 address

canSendDirectly

private boolean canSendDirectly(IPAddress src,
                                IPAddress dst)

resolveAndSend

public void resolveAndSend(Packet packet,
                           ILogger logger)

resolveAndSendForward

public void resolveAndSendForward(Packet packet,
                                  Event logger)

arpLookupBroadcast

private void arpLookupBroadcast(Packet packet,
                                ILogger logger,
                                IAddress src)

arpLookupBroadcastForward

private void arpLookupBroadcastForward(Packet packet,
                                       ILogger logger,
                                       IAddress src)

sendIP

private void sendIP(Packet packet,
                    IAddress src,
                    IAddress dst,
                    ILogger logger)

Copyright © 2005 Verinec, DIUF