00001 #include "uip.h"
00002 #include "uip_arp.h"
00003 #include "network-device.h"
00004 #include "httpd.h"
00005 #include "timer.h"
00006
00007 #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
00008
00009
00010 int
00011 main(void)
00012 {
00013 int i;
00014 uip_ipaddr_t ipaddr;
00015 struct timer periodic_timer, arp_timer;
00016
00017 timer_set(&periodic_timer, CLOCK_SECOND / 2);
00018 timer_set(&arp_timer, CLOCK_SECOND * 10);
00019
00020 network_device_init();
00021 uip_init();
00022
00023 uip_ipaddr(ipaddr, 192,168,0,2);
00024 uip_sethostaddr(ipaddr);
00025
00026 httpd_init();
00027
00028 while(1) {
00029 uip_len = network_device_read();
00030 if(uip_len > 0) {
00031 if(BUF->type == htons(UIP_ETHTYPE_IP)) {
00032 uip_arp_ipin();
00033 uip_input();
00034
00035
00036
00037 if(uip_len > 0) {
00038 uip_arp_out();
00039 network_device_send();
00040 }
00041 } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) {
00042 uip_arp_arpin();
00043
00044
00045
00046 if(uip_len > 0) {
00047 network_device_send();
00048 }
00049 }
00050
00051 } else if(timer_expired(&periodic_timer)) {
00052 timer_reset(&periodic_timer);
00053 for(i = 0; i < UIP_CONNS; i++) {
00054 uip_periodic(i);
00055
00056
00057
00058 if(uip_len > 0) {
00059 uip_arp_out();
00060 network_device_send();
00061 }
00062 }
00063
00064 #if UIP_UDP
00065 for(i = 0; i < UIP_UDP_CONNS; i++) {
00066 uip_udp_periodic(i);
00067
00068
00069
00070 if(uip_len > 0) {
00071 uip_arp_out();
00072 network_device_send();
00073 }
00074 }
00075 #endif
00076
00077
00078 if(timer_expired(&arp_timer)) {
00079 timer_reset(&arp_timer);
00080 uip_arp_timer();
00081 }
00082 }
00083 }
00084 return 0;
00085 }
00086