Tom Soulanille / snet
Revision:
5:7ed0abcc02d1
Parent:
3:59f3c806f127
--- a/snet.cpp	Wed Apr 01 17:30:52 2015 +0000
+++ b/snet.cpp	Wed Apr 01 18:42:55 2015 +0000
@@ -66,10 +66,10 @@
 
 void Snet::handle_arp_request(uint8_t *buf, int len) {
 #if 0
-    printf("Arp from %02x:%02x:%02x:%02x:%02x:%02x ",
+    printf("Arp from %02x:%02x:%02x:%02x:%02x:%02x\r\n",
             buf[ENET_SMAC_O+0], buf[ENET_SMAC_O+1],
             buf[ENET_SMAC_O+2], buf[ENET_SMAC_O+3],
-            buf[ENET_SMAC_O+4], buf[ENET_SMAC_O+5]);*/
+            buf[ENET_SMAC_O+4], buf[ENET_SMAC_O+5]);
 #endif
     eth.read((char *) &buf[ENET_PAYLOAD_O], len-ENET_PAYLOAD_O);
     /*print_hex((uint8_t *) &buf[ENET_PAYLOAD_O], len-ENET_PAYLOAD_O);*/
@@ -85,8 +85,10 @@
         memcpy(&buf[ENET_ARP_TPA_O], &buf[ENET_ARP_SPA_O], 4);  // to IP address of request sender
         memcpy(&buf[ENET_ARP_SHA_O], my_mac, 6);  // from my hardware address
         memcpy(&buf[ENET_ARP_SPA_O], my_ip, 4);  // and my IP address
-        //printf("ARP replying\r\n");
-        //print_hex((uint8_t *) buf, len);
+#if 0
+        printf("ARP replying\r\n");
+        print_hex((uint8_t *) buf, len);
+#endif
         eth.write((char *) buf, len);
         eth.send();
     };
@@ -101,9 +103,6 @@
             buf[ENET_ETHERTYPE_O+0], buf[ENET_ETHERTYPE_O+1],
             enet_rx_int_cnt);
 #endif
-    // ARP request?
-    if (buf[ENET_ETHERTYPE_O+0] == 0x08 && buf[ENET_ETHERTYPE_O+1] == 0x06)
-        handle_arp_request(buf, len);
 };
 
 void Snet::got_unicast(uint8_t *buf, int len) {
@@ -129,7 +128,10 @@
     while ((len = eth.receive()) > 0) {
         eth.read((char *) buf, ENET_PAYLOAD_O);  // destination MAC, source MAC, EtherType, lengcode
         enet_rx_cnt++;
-        if (memcmp(&buf[ENET_DMAC_O], my_mac, 6) == 0) {
+        // ARP request?
+        if (buf[ENET_ETHERTYPE_O+0] == 0x08 && buf[ENET_ETHERTYPE_O+1] == 0x06)
+            handle_arp_request(buf, len);
+        else if (memcmp(&buf[ENET_DMAC_O], my_mac, 6) == 0) {
             got_unicast(buf, len);
         } else if (memcmp(&buf[ENET_DMAC_O], broadcast_mac, 6) == 0) {
             got_broadcast(buf, len);