11#include <kernel.h>
22
3- arp_table_entry_t arp_table [512 ];
3+ static arp_table_entry_t arp_table [512 ] = {} ;
44static uint8_t zero_hardware_addr [6 ] = {0 , 0 , 0 , 0 , 0 , 0 };
5- int arp_table_size = 0 ;
6- int arp_table_curr = 0 ;
5+ static int arp_table_size = 0 ;
6+ static int arp_table_curr = 0 ;
77
88arp_table_entry_t * get_arp_entry (size_t index ) {
99 if (index > 512 ) {
@@ -30,6 +30,7 @@ void arp_handle_packet(arp_packet_t* arp_packet, [[maybe_unused]] int len) {
3030 memcpy (dst_hardware_addr , arp_packet -> src_hardware_addr , 6 );
3131 memcpy (dst_protocol_addr , arp_packet -> src_protocol_addr , 4 );
3232 if (ntohs (arp_packet -> opcode ) == ARP_REQUEST ) {
33+ dprintf ("arp request\n" );
3334 unsigned char addr [4 ];
3435 uint32_t my_ip = 0 ;
3536 if (gethostaddr (addr )) {
@@ -39,6 +40,7 @@ void arp_handle_packet(arp_packet_t* arp_packet, [[maybe_unused]] int len) {
3940
4041 netdev_t * dev = get_active_network_device ();
4142 if (!dev ) {
43+ dprintf ("No active net dev (arp handle packet)\n" );
4244 return ;
4345 }
4446
@@ -60,12 +62,16 @@ void arp_handle_packet(arp_packet_t* arp_packet, [[maybe_unused]] int len) {
6062 arp_packet -> protocol = htons (ETHERNET_TYPE_IP );
6163
6264 ethernet_send_packet (dst_hardware_addr , (uint8_t * )arp_packet , sizeof (arp_packet_t ), ETHERNET_TYPE_ARP );
65+ } else {
66+ dprintf ("Invalid addr %08x\n" , my_ip );
6367 }
6468 } else if (ntohs (arp_packet -> opcode ) == ARP_REPLY ) {
69+ dprintf ("ARP_REPLY from: %08x hw %02x:%02x:%02x:%02x:%02x:%02x\n" , * (uint32_t * )& dst_protocol_addr , dst_hardware_addr [0 ], dst_hardware_addr [1 ], dst_hardware_addr [2 ], dst_hardware_addr [3 ], dst_hardware_addr [4 ], dst_hardware_addr [5 ]);
6570 }
6671
6772 uint8_t dummy [6 ];
6873 if (!arp_lookup (dummy , dst_protocol_addr )) {
74+ dprintf ("not in arp table, storing at %d\n" , arp_table_size );
6975 memcpy (& arp_table [arp_table_curr ].ip_addr , dst_protocol_addr , 4 );
7076 memcpy (& arp_table [arp_table_curr ++ ].mac_addr , dst_hardware_addr , 6 );
7177 if (arp_table_size < 512 ) {
@@ -81,6 +87,7 @@ void arp_handle_packet(arp_packet_t* arp_packet, [[maybe_unused]] int len) {
8187void arp_send_packet (uint8_t * dst_hardware_addr , uint8_t * dst_protocol_addr ) {
8288 netdev_t * dev = get_active_network_device ();
8389 if (!dev ) {
90+ dprintf ("arp send packet: no active net dev\n" );
8491 return ;
8592 }
8693 static arp_packet_t * arp_packet = NULL ;
@@ -103,6 +110,7 @@ void arp_send_packet(uint8_t* dst_hardware_addr, uint8_t* dst_protocol_addr) {
103110 arp_packet -> hardware_type = htons (HARDWARE_TYPE_ETHERNET );
104111 arp_packet -> protocol = htons (ETHERNET_TYPE_IP );
105112
113+ dprintf ("arp send (broadcast) for %08x\n" , * (uint32_t * )& dst_protocol_addr );
106114 ethernet_send_packet (broadcast_mac_address , (uint8_t * )arp_packet , sizeof (arp_packet_t ), ETHERNET_TYPE_ARP );
107115}
108116
0 commit comments