diff --git a/kernel/branches/net/drivers/RTL8029.asm b/kernel/branches/net/drivers/RTL8029.asm index 0f38e7cf46..82fb17b9b4 100644 --- a/kernel/branches/net/drivers/RTL8029.asm +++ b/kernel/branches/net/drivers/RTL8029.asm @@ -965,7 +965,7 @@ int_handler: cmp [eth_tmp_len], bx jbe .nsp_005 - DEBUGF 2,"tadaa!\n" + DEBUGF 2,"WRAP!\n" mov al , [ebp + device.flags] test al , FLAG_PIO @@ -989,10 +989,7 @@ int_handler: mov [pktoff], ax add [eth_rx_data_ptr], ebx - - mov ax, [eth_tmp_len] - sub ax, bx - mov [eth_tmp_len], ax + sub [eth_tmp_len], bx .nsp_005: test [ebp + device.flags], FLAG_PIO diff --git a/kernel/branches/net/network/ARP.inc b/kernel/branches/net/network/ARP.inc index d0458a9467..5249654040 100644 --- a/kernel/branches/net/network/ARP.inc +++ b/kernel/branches/net/network/ARP.inc @@ -111,11 +111,7 @@ ARP_init: ;*************************************************************************** ;Opcode's constants ARP_TABLE_ADD equ 1 -ARP_TABLE_DEL equ 2 -ARP_TABLE_GET equ 3 -ARP_TABLE_GET_ENTRIES_NUMBER equ 4 ARP_TABLE_IP_TO_MAC equ 5 -ARP_TABLE_TIMER equ 6 ;Index's constants EXTRA_IS_ARP_PACKET_PTR equ 0 ;if Extra contain pointer to ARP_Packet @@ -129,76 +125,18 @@ proc arp_table_manager stdcall uses ebx esi edi ecx edx, Opcode:DWORD,Index:DWOR mov eax, dword[Opcode] - cmp eax, ARP_TABLE_TIMER - je .timer DEBUGF 1,"ARP table manager opcode:%u numARP:%u\n",eax,ecx cmp eax, ARP_TABLE_ADD je .add - cmp eax, ARP_TABLE_DEL - je .del - cmp eax, ARP_TABLE_GET - je .get + cmp eax, ARP_TABLE_IP_TO_MAC je .ip_to_mac - cmp eax, ARP_TABLE_GET_ENTRIES_NUMBER - je .get_entries_number + jmp .exit ;if unknown opcode -;;BEGIN TIMER -;;Description: it must be callback every second. It is responsible for removing expired routes. -;;IN: Operation: ARP_TABLE_TIMER -;; Index: must be zero -;; Extra: must be zero -;;OUT: -;; EAX=not defined -;; -.timer: - test ecx, ecx - jz .exit ;if NumARP=0 nothing to do -; sub ecx, ARP_TABLE_ENTRIES ;ecx=dynamic entries number -; jz .exit ;if NumARP=number of static entries then exit - -; add ebx, ARP_TABLE_ENTRIES*ARP_ENTRY_SIZE ;ebx=dynamic entries base - - .timer_loop: - movsx esi, word [ebx + ARP_ENTRY.TTL] - cmp esi, 0xFFFFFFFF - je .timer_loop_end ;if TTL==0xFFFF then it's static entry - - test esi, esi - jnz .timer_loop_end_with_dec ;if TTL!=0 - - ; Ok, TTL is 0 - ;if Status==AWAITING_RESPONSE and TTL==0 - ;then we have to change it to ARP_RESPONSE_TIMEOUT - cmp word [ebx + ARP_ENTRY.Status], ARP_AWAITING_RESPONSE - jne @f - - mov word [ebx + ARP_ENTRY.Status], ARP_RESPONSE_TIMEOUT - mov word [ebx + ARP_ENTRY.TTL], word 0x000A ;10 sec - jmp .timer_loop_end - - @@: - ;if TTL==0 and Status==VALID_MAPPING, we have to delete it - ;if TTL==0 and Status==RESPONSE_TIMEOUT, delete too - mov esi, dword[NumARP] - sub esi, ecx ;esi=index of entry, will be deleted - stdcall arp_table_manager,ARP_TABLE_DEL,esi,0 ;opcode,index,extra - jmp .timer_loop_end - - - .timer_loop_end_with_dec: - dec word [ebx + ARP_ENTRY.TTL] ;decrease TTL - .timer_loop_end: - add ebx, ARP_ENTRY.size - loop .timer_loop - - jmp .exit -;;END TIMER - ;;BEGIN ADD ;;Description: it adds an entry in the table. If ARP-table already ;; contains same IP, it will be updated. @@ -294,49 +232,7 @@ proc arp_table_manager stdcall uses ebx esi edi ecx edx, Opcode:DWORD,Index:DWOR jmp .exit ;;END ADD -;;BEGIN DEL -;;Description: it deletes an entry in the table. -;;IN: Operation: ARP_TABLE_DEL -;; Index: index of entry, that should be deleted -;; Extra: must be zero -;;OUT: -;; EAX=not defined -;; -.del: - mov esi, [Index] - imul esi, ARP_ENTRY.size - mov ecx, (ARP_TABLE_SIZE - 1) * ARP_ENTRY.size - sub ecx, esi - - lea edi, [ebx + esi] ;edi=ptr to entry that should be deleted - lea esi, [edi + ARP_ENTRY.size] ;esi=ptr to next entry - - shr ecx,1 ;ecx/2 => ARP_ENTRY_SIZE MUST BE EVEN NUMBER! - cld - rep movsw - - dec dword[NumARP] ;decrease arp-entries counter - jmp .exit -;;END DEL - -;;BEGIN GET -;;Description: it reads an entry of table into buffer. -;;IN: Operation: ARP_TABLE_GET -;; Index: index of entry, that should be read -;; Extra: pointer to buffer for reading(size must be equal to ARP_ENTRY_SIZE) -;;OUT: -;; EAX=not defined -;; -.get: - mov esi, [Index] - imul esi, ARP_ENTRY.size ;esi=ptr to required ARP_ENTRY - mov edi, [Extra] ;edi=buffer for reading - mov ecx, ARP_ENTRY.size/2 ; must be even number!!! - cld - rep movsw - jmp .exit -;;END GET ;;BEGIN IP_TO_MAC ;;Description: it gets an IP from Index, scans each entry in the table and writes @@ -429,18 +325,6 @@ proc arp_table_manager stdcall uses ebx esi edi ecx edx, Opcode:DWORD,Index:DWOR ;;END IP_TO_MAC -;;BEGIN GET_ENTRIES_NUMBER -;;Description: returns an ARP-entries number in the ARPTable -;;IN: Operation: ARP_TABLE_GET_ENTRIES_NUMBER -;; Index: must be zero -;; Extra: must be zero -;;OUT: -;; EAX=ARP-entries number in the ARPTable - .get_entries_number: - mov eax, dword[NumARP] - jmp .exit -;;END GET_ENTRIES_NUMBER - .exit: ret endp diff --git a/kernel/branches/net/network/stack.inc b/kernel/branches/net/network/stack.inc index 56debe666c..725957aa80 100644 --- a/kernel/branches/net/network/stack.inc +++ b/kernel/branches/net/network/stack.inc @@ -55,8 +55,8 @@ SOCKET_PASSIVE equ 0 SOCKET_ACTIVE equ 1 include "queue.inc" -include "arp.inc" -include "ipv4.inc" +include "ARP.inc" +include "IPv4.inc" include "ethernet.inc" include "socket.inc" ;include "tcp.inc" @@ -132,7 +132,7 @@ stack_handler: mov [last_1sTick], al -; call ARP_decrease_entry_ttls + call ARP_decrease_entry_ttls call IPv4_decrease_fragment_ttls ; call tcp_tcb_handler