Fixed arp request to gateway

git-svn-id: svn://kolibrios.org@511 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
heavyiron 2007-05-19 08:43:48 +00:00
parent d2b6b389e4
commit d018bf5849
2 changed files with 17 additions and 16 deletions

View File

@ -345,23 +345,7 @@ proc arp_table_manager stdcall uses ebx esi edi ecx edx,\
je .ip_to_mac_send_request ;if ARP-table not contain an entries, we have to request IP. je .ip_to_mac_send_request ;if ARP-table not contain an entries, we have to request IP.
;EAX will be containing a zero, it's equal to ARP_NO_ENTRY ;EAX will be containing a zero, it's equal to ARP_NO_ENTRY
; first, check destination IP to see if it is on 'this' network.
; The test is:
; if ( destIP & subnet_mask == stack_ip & subnet_mask )
; destination is local
; else
; destination is remote, so pass to gateway
mov eax, [Index] ;eax=required IP mov eax, [Index] ;eax=required IP
mov esi, eax
and esi, [subnet_mask]
mov ecx, [stack_ip]
and ecx, [subnet_mask]
cmp esi, ecx
je @f ;if we and target IP are located in the same network
mov eax, [gateway_ip]
@@:
mov ecx, dword[NumARP] mov ecx, dword[NumARP]
imul esi, ecx, ARP_ENTRY_SIZE ;esi=current ARP-table size imul esi, ecx, ARP_ENTRY_SIZE ;esi=current ARP-table size

View File

@ -279,6 +279,23 @@ local MACAddress dp ? ;allocate 6 bytes in the stack
cmp edx, 0xffffffff cmp edx, 0xffffffff
je .send ; If it is broadcast, just send je .send ; If it is broadcast, just send
; first, check destination IP to see if it is on 'this' network.
; The test is:
; if ( destIP & subnet_mask == stack_ip & subnet_mask )
; destination is local
; else
; destination is remote, so pass to gateway
mov eax, edx
and eax, [subnet_mask]
mov ecx, [stack_ip]
and ecx, [subnet_mask]
cmp eax, ecx
je .local
mov edx, [gateway_ip]
.local:
lea eax, [MACAddress] ;cause this is local variable lea eax, [MACAddress] ;cause this is local variable
stdcall arp_table_manager, ARP_TABLE_IP_TO_MAC, edx, eax ;opcode,IP,MAC_ptr - Get the MAC address. stdcall arp_table_manager, ARP_TABLE_IP_TO_MAC, edx, eax ;opcode,IP,MAC_ptr - Get the MAC address.