sorry, I can't help you. The only ARP handling in the TINA driver is this:
Code
Procedure BuildARPHeader(TargetIP : tIPaddr);
Begin
OSI_ARP.HardwareType := SWAP(1);
OSI_ARP.ProtocolType := SWAP(2048);
OSI_ARP.HardwareAdrLen := 6;
OSI_ARP.ProtocolAdrLen := 4;
OSI_ARP.Operation := SWAP(1);
OSI_ARP.SenderHardwareAdr := iLocalMacAdr;
OSI_ARP.SenderIPAdr := iLocalIPAdr;
OSI_ARP.TargetHardwareAdr[0]:= $FF; //Alles $FF da Broadcast
OSI_ARP.TargetHardwareAdr[1]:= $FF;
OSI_ARP.TargetHardwareAdr[2]:= $FF;
OSI_ARP.TargetHardwareAdr[3]:= $FF;
OSI_ARP.TargetHardwareAdr[4]:= $FF;
OSI_ARP.TargetHardwareAdr[5]:= $FF;
OSI_ARP.TargetIPAdr := TargetIP;
end;
function RequestARP(QuestIP : tIPaddr; Var ReturnMAC : TMacAddr) : Boolean;
Var
DEA : TMacAddr;
TempIP : tIPaddr;
i : Byte;
Mask : tIPaddr;
Begin
Mask[0]:= 255;
Mask[1]:= 255;
Mask[2]:= 255;
Mask[3]:= 0;
FillBlock(@DEA, 6, $FF); //Broadcast generieren
for i:= 1 to ARP_Retry do
//Vergleiche Netze und Suche dann Im ARP-Cache, ob MAC zur IP passt !
if CompareNet( QuestIP, iLocalIPAdr, Mask) then //Meine und die Zieladresse liegen im gleichen Netz
if CompareARPCache(QuestIP, ReturnMAC) then
Return(TRUE);
endif;
BuildARPHeader(QuestIP);
BuildEthernetHeader($806, DEA, Sizeof(TOSI_ARP));
TempIP:= QuestIP;
Else
//Meine und die Zieladresse liegen NICHT! im gleichen Netz; also frage hier das DefaultGateway !
if CompareARPCache(DefaultGateway, ReturnMAC) then
Return(TRUE);
endif;
BuildARPHeader(DefaultGateway);
BuildEthernetHeader($806, DEA, Sizeof(TOSI_ARP));
TempIP:= DefaultGateway;
endif;
if SendOutPacket(@OSI_ARP, Sizeof(TOSI_ARP)) then
SetSystimer(ReqTOTimer, ARP_Timeout);
Repeat
if TINA_DRV_PacketReceived then
if TINA_DRV_ReceivePacket(@iNetBuf, Sizeof(iNetBuf)) = 0 then
break;
endif;
if ((SWAP(OSI_ARP.Operation) = $02) and (OSI_ARP.TargetIPAdr = iLocalIPAdr)) then
ARPCacheAdd(OSI_ARP.SenderIPAdr, OSI_ARP.SenderHardwareAdr);
ReturnMAC:= OSI_ARP.SenderHardwareAdr;
Return(TRUE);
Else
break;
endif;
endif;
Until isSystimerZero(ReqTOTimer);
endif;
endfor;
Return(False);
end;