// Ping a remote server, also uses DHCP and DNS. // 2011-06-12 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php #include <EtherCard.h> // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; #define STATIC 1 // set to 1 to disable DHCP (adjust myip/gwip values below) #if STATIC // ethernet interface ip address static byte myip[] = { 192,168,1,200 }; // gateway ip address static byte gwip[] = { 192,168,1,1 }; #endif byte Ethernet::buffer[700]; static uint32_t timer; // called when a ping comes in (replies to it are automatic) static void gotPinged (byte* ptr) { ether.printIp(">>> ping from: ", ptr); } void setup () { Serial.begin(57600); Serial.println("\n[pings]"); #if STATIC ether.staticSetup(myip, gwip); #else if (!ether.dhcpSetup()) Serial.println("DHCP failed"); #endif ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); ether.parseIp(ether.hisip, "192.168.1.1"); ether.printIp("SRV: ", ether.hisip); // call this to report others pinging us ether.registerPingCallback(gotPinged); timer = -9999999; // start timing out right away Serial.println(); } void loop () { word len = ether.packetReceive(); // go receive new packets word pos = ether.packetLoop(len); // respond to incoming pings // report whenever a reply to our outgoing ping comes back if (len > 0 && ether.packetLoopIcmpCheckReply(ether.hisip)) { Serial.print(" "); Serial.print((micros() - timer) * 0.001, 3); Serial.println(" ms"); } // ping a remote server once every few seconds if (micros() - timer >= 5000000) { ether.printIp("Pinging: ", ether.hisip); timer = micros(); ether.clientIcmpRequest(ether.hisip); } }