Your local Ethernet network must provide Internet access. Connect the RS232 port of the Ethernut with a free COM port of your PC and run a terminal emulator at 115200 Baud.
If your local network does not support DHCP, it may be required to modify the MY_IP, MY_MASK and MY_GATE below.
This sample demonstrates DNS query and default route usage.
00001 00085 #define DNSSERVERIP "192.168.192.2" 00086 #define INETSERVER "www.kornet.net" 00087 #define INETSERVERPORT 80 00088 #define INETURL "/" 00089 #define MY_MAC {0x00,0x06,0x98,0x20,0x00,0x00} 00090 #define MY_IP "192.168.192.100" 00091 #define MY_MASK "255.255.255.0" 00092 #define MY_GATE "192.168.192.3" 00093 00094 #include <string.h> 00095 #include <stdio.h> 00096 #include <io.h> 00097 00098 #include <dev/board.h> 00099 00100 #include <sys/heap.h> 00101 #include <sys/thread.h> 00102 #include <sys/timer.h> 00103 #include <sys/socket.h> 00104 #include <sys/confnet.h> 00105 00106 #include <arpa/inet.h> 00107 #include <net/route.h> 00108 #include <netdb.h> 00109 00110 #include <pro/dhcp.h> 00111 00112 static char buff[1024]; 00113 static u_char my_mac[] = MY_MAC; 00114 00115 /* 00116 * Main application routine. 00117 * 00118 */ 00119 int main(void) 00120 { 00121 u_long baud = 115200; 00122 TCPSOCKET *sock; 00123 FILE *stream; 00124 u_long rip; 00125 u_long ip_addr; 00126 int bite; 00127 size_t rc; 00128 size_t len; 00129 u_long start_time; 00130 u_long total_bytes; 00131 00132 /* 00133 * Initialize the uart device. 00134 */ 00135 NutRegisterDevice(&DEV_DEBUG, 0, 0); 00136 freopen(DEV_DEBUG_NAME, "w", stdout); 00137 _ioctl(_fileno(stdout), UART_SETSPEED, &baud); 00138 puts("\nInetQuery 1.0"); 00139 00140 /* 00141 * Register Realtek controller at address 8300 hex and interrupt 5. 00142 */ 00143 puts("Configuring Ethernet interface"); 00144 NutRegisterDevice(&DEV_ETHER, 0, 0); 00145 00146 /* 00147 * Try DHCP. First use MAC from EEPROM. 00148 */ 00149 if (NutDhcpIfConfig("eth0", 0, 60000) && NutDhcpIfConfig("eth0", my_mac, 60000)) { 00150 /* 00151 * No DHCP server available. Use hard coded values. 00152 */ 00153 ip_addr = inet_addr(MY_IP); 00154 NutNetIfConfig("eth0", my_mac, ip_addr, inet_addr(MY_MASK)); 00155 NutIpRouteAdd(0, 0, inet_addr(MY_GATE), &DEV_ETHER); 00156 NutDnsConfig(0, 0, inet_addr(DNSSERVERIP)); 00157 } else 00158 ip_addr = confnet.cdn_ip_addr; 00159 printf("%s ready\n", inet_ntoa(ip_addr)); 00160 00161 00162 /* 00163 * Resolve hostname using DNS. 00164 */ 00165 if ((rip = NutDnsGetHostByName(INETSERVER)) != 0) { 00166 00167 /* 00168 * Let's try a stdio stream first. 00169 */ 00170 if ((sock = NutTcpCreateSocket()) != 0) { 00171 00172 /* 00173 * Connect a HTTP server in the Internet. 00174 */ 00175 printf("Connecting %s:%u\r\n", inet_ntoa(rip), INETSERVERPORT); 00176 if (NutTcpConnect(sock, rip, INETSERVERPORT) == 0) { 00177 00178 /* 00179 * Assign a stream to our connected socket. 00180 */ 00181 if ((stream = _fdopen((int) sock, "r+b")) != 0) { 00182 /* 00183 * Send HTTP request to the server. 00184 */ 00185 fprintf(stream, "GET %s HTTP/1.0\r\n", INETURL); 00186 fputs("User-Agent: Ethernut [en] (NutOS)\r\n", stream); 00187 fputs("\r\n", stream); 00188 fflush(stream); 00189 00190 /* 00191 * Init measure values. 00192 */ 00193 start_time = NutGetTickCount(); 00194 total_bytes = 0; 00195 00196 /* 00197 * Read server response and send it to the UART. 00198 */ 00199 while (fgets(buff, sizeof(buff), stream)) { 00200 puts(buff); 00201 total_bytes += strlen(buff); 00202 } 00203 printf("Transfered %lu bytes in %lu seconds\n", total_bytes, (NutGetTickCount() - start_time) / 16UL); 00204 fclose(stream); 00205 } else 00206 puts("Creating stream device failed"); 00207 00208 } else { 00209 printf("Bad news, %s refuses the connection.\n", INETSERVER); 00210 } 00211 printf("Disconnecting %s:%u\n", inet_ntoa(rip), INETSERVERPORT); 00212 NutTcpCloseSocket(sock); 00213 } 00214 00215 NutSleep(5000); 00216 00217 /* 00218 * Now let's use native calls. 00219 */ 00220 if ((sock = NutTcpCreateSocket()) != 0) { 00221 00222 /* 00223 * Connect a HTTP server in the Internet. 00224 */ 00225 printf("Connecting %s:%u\r\n", inet_ntoa(rip), INETSERVERPORT); 00226 if (NutTcpConnect(sock, rip, INETSERVERPORT) == 0) { 00227 00228 /* 00229 * Send HTTP request to the server. NutTcpSend() doesn't 00230 * guarantee to send out all bytes, thus the loop. 00231 */ 00232 strcpy(buff, "GET " INETURL " HTTP/1.0\r\nUser-Agent: Ethernut [en] (NutOS)\r\n\r\n"); 00233 len = (int) strlen(buff); 00234 for (rc = 0; rc < len; rc += bite) 00235 if ((bite = NutTcpSend(sock, buff + rc, len - rc)) <= 0) 00236 break; 00237 00238 /* 00239 * Init measure values. 00240 */ 00241 start_time = NutGetTickCount(); 00242 total_bytes = 0; 00243 00244 /* 00245 * Read server response and send it to the UART. 00246 */ 00247 while ((bite = NutTcpReceive(sock, buff, sizeof(buff) - 1)) > 0) { 00248 total_bytes += bite; 00249 buff[bite] = 0; 00250 puts(buff); 00251 } 00252 printf("Transfered %lu bytes in %lu seconds\n", total_bytes, (NutGetTickCount() - start_time) / 16UL); 00253 } else { 00254 printf("Bad news, %s refuses the connection.\n", INETSERVER); 00255 } 00256 printf("Disconnecting %s:%u\n", inet_ntoa(rip), INETSERVERPORT); 00257 NutTcpCloseSocket(sock); 00258 } 00259 } else 00260 printf("Great news, %s has been removed!\n", INETSERVER); 00261 00262 for (;;) 00263 NutSleep(1000); 00264 }