1*10465441SEvalZero #include "uip.h"
2*10465441SEvalZero #include "uip_arp.h"
3*10465441SEvalZero #include "network-device.h"
4*10465441SEvalZero #include "httpd.h"
5*10465441SEvalZero #include "timer.h"
6*10465441SEvalZero
7*10465441SEvalZero #define BUF ((struct uip_eth_hdr *)&uip_buf[0])
8*10465441SEvalZero
9*10465441SEvalZero /*---------------------------------------------------------------------------*/
10*10465441SEvalZero int
main(void)11*10465441SEvalZero main(void)
12*10465441SEvalZero {
13*10465441SEvalZero int i;
14*10465441SEvalZero uip_ipaddr_t ipaddr;
15*10465441SEvalZero struct timer periodic_timer, arp_timer;
16*10465441SEvalZero
17*10465441SEvalZero timer_set(&periodic_timer, CLOCK_SECOND / 2);
18*10465441SEvalZero timer_set(&arp_timer, CLOCK_SECOND * 10);
19*10465441SEvalZero
20*10465441SEvalZero network_device_init();
21*10465441SEvalZero uip_init();
22*10465441SEvalZero
23*10465441SEvalZero uip_ipaddr(ipaddr, 192,168,0,2);
24*10465441SEvalZero uip_sethostaddr(ipaddr);
25*10465441SEvalZero
26*10465441SEvalZero httpd_init();
27*10465441SEvalZero
28*10465441SEvalZero while(1) {
29*10465441SEvalZero uip_len = network_device_read();
30*10465441SEvalZero if(uip_len > 0) {
31*10465441SEvalZero if(BUF->type == htons(UIP_ETHTYPE_IP)) {
32*10465441SEvalZero uip_arp_ipin();
33*10465441SEvalZero uip_input();
34*10465441SEvalZero /* If the above function invocation resulted in data that
35*10465441SEvalZero should be sent out on the network, the global variable
36*10465441SEvalZero uip_len is set to a value > 0. */
37*10465441SEvalZero if(uip_len > 0) {
38*10465441SEvalZero uip_arp_out();
39*10465441SEvalZero network_device_send();
40*10465441SEvalZero }
41*10465441SEvalZero } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) {
42*10465441SEvalZero uip_arp_arpin();
43*10465441SEvalZero /* If the above function invocation resulted in data that
44*10465441SEvalZero should be sent out on the network, the global variable
45*10465441SEvalZero uip_len is set to a value > 0. */
46*10465441SEvalZero if(uip_len > 0) {
47*10465441SEvalZero network_device_send();
48*10465441SEvalZero }
49*10465441SEvalZero }
50*10465441SEvalZero
51*10465441SEvalZero } else if(timer_expired(&periodic_timer)) {
52*10465441SEvalZero timer_reset(&periodic_timer);
53*10465441SEvalZero for(i = 0; i < UIP_CONNS; i++) {
54*10465441SEvalZero uip_periodic(i);
55*10465441SEvalZero /* If the above function invocation resulted in data that
56*10465441SEvalZero should be sent out on the network, the global variable
57*10465441SEvalZero uip_len is set to a value > 0. */
58*10465441SEvalZero if(uip_len > 0) {
59*10465441SEvalZero uip_arp_out();
60*10465441SEvalZero network_device_send();
61*10465441SEvalZero }
62*10465441SEvalZero }
63*10465441SEvalZero
64*10465441SEvalZero #if UIP_UDP
65*10465441SEvalZero for(i = 0; i < UIP_UDP_CONNS; i++) {
66*10465441SEvalZero uip_udp_periodic(i);
67*10465441SEvalZero /* If the above function invocation resulted in data that
68*10465441SEvalZero should be sent out on the network, the global variable
69*10465441SEvalZero uip_len is set to a value > 0. */
70*10465441SEvalZero if(uip_len > 0) {
71*10465441SEvalZero uip_arp_out();
72*10465441SEvalZero network_device_send();
73*10465441SEvalZero }
74*10465441SEvalZero }
75*10465441SEvalZero #endif /* UIP_UDP */
76*10465441SEvalZero
77*10465441SEvalZero /* Call the ARP timer function every 10 seconds. */
78*10465441SEvalZero if(timer_expired(&arp_timer)) {
79*10465441SEvalZero timer_reset(&arp_timer);
80*10465441SEvalZero uip_arp_timer();
81*10465441SEvalZero }
82*10465441SEvalZero }
83*10465441SEvalZero }
84*10465441SEvalZero return 0;
85*10465441SEvalZero }
86*10465441SEvalZero /*---------------------------------------------------------------------------*/
87