Unit ARP
From Ultibo.org
								
												
				Return to Unit Reference
Contents
Description
Ultibo ARP (Address Resolution Protocol) unit
To be documented
Constants
ARP specific constants 
 ARP_TRANSPORT_*, RARP_TRANSPORT_* | ARP_TRANSPORT_NAME = 'ARP'; | |
| RARP_TRANSPORT_NAME = 'RARP'; | 
  
ARP and RARP constants 
 MIN_*, MAX_*, ARP_*, RARP_* | MIN_ARP_PACKET = 46; | Not Counting Adapter Header | 
| MAX_ARP_PACKET = 46; | Not Counting Adapter Header | 
| ARP_TIMEOUT = 1000; | We wait for 1 second approx for reply | 
| ARP_RETRIES = 4; | We try the request 4 times | 
| RARP_TIMEOUT = 4000; | We wait for 4 seconds for a RARP reply | 
| RARP_RETRIES = 4; | We try the request 4 times | 
| ARP_HEADER_SIZE  = 46; | SizeOf(TARPHeader); | 
| RARP_HEADER_SIZE = 46; | SizeOf(TRARPHeader); | 
 
ARP and RARP messages 
 ARP_*, RARP_*, INARP_* | ARP_REQUEST = $0001; | ARP/RARP op codes, Request | 
| ARP_REPLY = $0002; | ARP/RARP op codes, Reply | 
| RARP_REQUEST = $0003; | |
| RARP_REPLY = $0004; | |
| INARP_REQUEST = $0008; | Inverse ARP see RFC 1293 | 
| INARP_REPLY = $0009; | 
 
Type definitions
ARP specific types
PARPHeader = ^TARPHeader;
TARPHeader = packed record
| Note: 46 Bytes | |
| HardwareType:Word; | Hardware address space (Network Order) | 
| ProtocolType:Word; | Protocol address space (Network Order) | 
| HardwareLength:Byte; | Byte length of hardware address | 
| ProtocolLength:Byte; | Byte length of each protocol address | 
| Opcode:Word; | Op code (eg ARP_REQUEST or ARP_REPLY) (Network Order) | 
| SourceHardware:THardwareAddress; | Source hardware address (of sender) | 
| SourceIP:TInAddr; | Source protocol address (of sender) (Network Order) | 
| TargetHardware:THardwareAddress; | Target hardware address (if known) | 
| TargetIP:TInAddr; | Target protocol address (Network Order) | 
| Reserved:array[0..17] of Word; | |
RARP specific types
PRARPHeader = ^TRARPHeader;
TRARPHeader = TARPHeader;
| Note: 46 Bytes | |
Class definitions
ARP transport adapter
TARPTransportAdapter = class(TTransportAdapter)
| constructor Create; | |
| private | |
| UseCount:Integer; | |
ARP transport
 TARPTransport = class(TNetworkTransport)
| constructor Create(AManager:TTransportManager; const AName:String); | |
| destructor Destroy; override; | |
| private | |
| FAddresses:TNetworkList; | |
| FAddressAdd:TEventHandle; | |
| FAddressRemove:TEventHandle; | |
| function PacketHandler(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean; | |
| function SendARPRequest(AAdapter:TARPTransportAdapter; ASource:TARPAddressEntry; const ATarget:TInAddr):Boolean; | |
| function SendARPReply(AAdapter:TARPTransportAdapter; ASource,ATarget:TARPAddressEntry):Boolean; | |
| function SendINARPRequest(AAdapter:TARPTransportAdapter; ASource:TARPAddressEntry; const ATarget:THardwareAddress):Boolean; | |
| function SendINARPReply(AAdapter:TARPTransportAdapter; ASource,ATarget:TARPAddressEntry):Boolean; | |
| protected | |
| public | |
| function AddAdapter(AAdapter:TNetworkAdapter; AConfigType:Word; AAddress,ANetmask,AGateway,AServer:Pointer):Boolean; override; | |
| function RemoveAdapter(AAdapter:TNetworkAdapter):Boolean; override; | |
| function StartTransport:Boolean; override; | |
| function StopTransport:Boolean; override; | |
| function ProcessTransport:Boolean; override; | |
| function BindTransport(AAdapter:TNetworkAdapter):Boolean; override; | |
| function UnbindTransport(AAdapter:TNetworkAdapter):Boolean; override; | |
| function GetAddressByAddress(const AAddress:TInAddr; AAdapter:TNetworkAdapter; ALock:Boolean; AState:LongWord):TARPAddressEntry; | |
| function GetAddressByHardware(const AHardware:THardwareAddress; AAdapter:TNetworkAdapter; ALock:Boolean; AState:LongWord):TARPAddressEntry; | |
| function GetAddressByNext(APrevious:TARPAddressEntry; ALock,AUnlock:Boolean; AState:LongWord):TARPAddressEntry; | |
| function AddAddress(const AAddress:TInAddr; const AHardware:THardwareAddress; AAdapter:TNetworkAdapter; AType:Word; ALock:Boolean; AState:LongWord):TARPAddressEntry; | |
| function RemoveAddress(const AAddress:TInAddr; AAdapter:TNetworkAdapter):Boolean; | |
| procedure FlushAddresses(All:Boolean); | |
| function LoadAddress(AAdapter:TNetworkAdapter; const AAddress:TInAddr; const AHardware:THardwareAddress; AType:Word):Boolean; | |
| function UnloadAddress(AAdapter:TNetworkAdapter; const AAddress:TInAddr):Boolean; | |
| function ResolveAddress(AAdapter:TNetworkAdapter; const ASource,AAddress:TInAddr; var AHardware:THardwareAddress):Boolean; | |
| function ResolveHardware(AAdapter:TNetworkAdapter; const ASource:TInAddr; const AHardware:THardwareAddress; var AAddress:TInAddr):Boolean; | |
| function ConfirmAddress(AAdapter:TNetworkAdapter; const ASource,AAddress:TInAddr):Boolean; | |
| function AdvertiseAddress(AAdapter:TNetworkAdapter; const ASource:TInAddr):Boolean; | |
| function CompareDefault(const AAddress:TInAddr):Boolean; | |
| function CompareAddress(const AAddress1,AAddress2:TInAddr):Boolean; | |
ARP address entry
TARPAddressEntry = class(TAddressEntry)
| constructor Create; | |
| private | |
| FAddress:TInAddr; | |
| FProtocolType:Word; | |
| FHardware:THardwareAddress; | |
| procedure SetAddress(const AAddress:TInAddr); | |
| procedure SetProtocolType(AProtocolType:Word); | |
| procedure SetHardware(const AHardware:THardwareAddress); | |
| public | |
| property Address:TInAddr read FAddress write SetAddress; | |
| property ProtocolType:Word read FProtocolType write SetProtocolType; | |
| property Hardware:THardwareAddress read FHardware write SetHardware; | |
RARP transport adapter
TRARPTransportAdapter = class(TTransportAdapter)
| constructor Create; | |
| private | |
| UseCount:Integer; | |
RARP transport
TRARPTransport = class(TNetworkTransport)
| constructor Create(AManager:TTransportManager; const AName:String); | |
| destructor Destroy; override; | |
| private | |
| FAddresses:TNetworkList; | |
| FAddressAdd:TEventHandle; | |
| FAddressRemove:TEventHandle; | |
| function PacketHandler(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean; | |
| function SendRARPRequest(AAdapter:TRARPTransportAdapter):Boolean; | |
| function SendRARPReply(AAdapter:TRARPTransportAdapter; ASource,ATarget:TRARPAddressEntry):Boolean; | |
| protected | |
| public | |
| function AddAdapter(AAdapter:TNetworkAdapter; AConfigType:Word; AAddress,ANetmask,AGateway,AServer:Pointer):Boolean; override; | |
| function RemoveAdapter(AAdapter:TNetworkAdapter):Boolean; override; | |
| function StartTransport:Boolean; override; | |
| function StopTransport:Boolean; override; | |
| function ProcessTransport:Boolean; override; | |
| function BindTransport(AAdapter:TNetworkAdapter):Boolean; override; | |
| function UnbindTransport(AAdapter:TNetworkAdapter):Boolean; override; | |
| function GetAddressByAddress(const AAddress:TInAddr; AAdapter:TNetworkAdapter; ALock:Boolean; AState:LongWord):TRARPAddressEntry;  | |
| function GetAddressByHardware(const AHardware:THardwareAddress; AAdapter:TNetworkAdapter; ALock:Boolean; AState:LongWord):TRARPAddressEntry; | |
| function GetAddressByNext(APrevious:TRARPAddressEntry; ALock,AUnlock:Boolean; AState:LongWord):TRARPAddressEntry; | |
| function AddAddress(const AAddress:TInAddr; const AHardware:THardwareAddress; AAdapter:TNetworkAdapter; AType:Word; ALock:Boolean; AState:LongWord):TRARPAddressEntry; | |
| function RemoveAddress(const AAddress:TInAddr; AAdapter:TNetworkAdapter):Boolean; | |
| procedure FlushAddresses(All:Boolean); | |
| function LoadAddress(AAdapter:TNetworkAdapter; const AAddress:TInAddr; const AHardware:THardwareAddress; AType:Word):Boolean; | |
| function UnloadAddress(AAdapter:TNetworkAdapter; const AAddress:TInAddr):Boolean; | |
| function ResolveHardware(AAdapter:TNetworkAdapter; var AAddress:TInAddr):Boolean; | |
| function CompareDefault(const AAddress:TInAddr):Boolean; | |
| function CompareAddress(const AAddress1,AAddress2:TInAddr):Boolean; | |
RARP address entry
TRARPAddressEntry = class(TAddressEntry)
| constructor Create; | |
| private | |
| FAddress:TInAddr; | |
| FProtocolType:Word; | |
| FHardware:THardwareAddress; | |
| procedure SetAddress(const AAddress:TInAddr); | |
| procedure SetProtocolType(AProtocolType:Word); | |
| procedure SetHardware(const AHardware:THardwareAddress); | |
| public | |
| property Address:TInAddr read FAddress write SetAddress; | |
| property ProtocolType:Word read FProtocolType write SetProtocolType; | |
| property Hardware:THardwareAddress read FHardware write SetHardware; | |
Public variables
None defined
Function declarations
Initialization functions
procedure ARPInit;
Description: To be documented
| Note | None documented | 
|---|
ARP functions
function CheckARP(ABuffer:Pointer):Boolean;
Description: Verify that the packet is a valid ARP packet
| Buffer | Buffer points to the complete packet without Adapter header | 
|---|
function CheckRARP(ABuffer:Pointer):Boolean;
Description: Verify that the packet is a valid RARP packet
| Buffer | Buffer points to the complete packet without Adapter header | 
|---|
Return to Unit Reference

