From a6163888f3c56123b1db313743c6147ba498732c Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 8 Aug 2014 14:42:07 +0300 Subject: Add third_party libs --- .../uip-1.0/doc/example-mainloop-with-arp.c | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 third_party/uip-1.0/doc/example-mainloop-with-arp.c (limited to 'third_party/uip-1.0/doc/example-mainloop-with-arp.c') diff --git a/third_party/uip-1.0/doc/example-mainloop-with-arp.c b/third_party/uip-1.0/doc/example-mainloop-with-arp.c new file mode 100644 index 0000000..03df5fb --- /dev/null +++ b/third_party/uip-1.0/doc/example-mainloop-with-arp.c @@ -0,0 +1,86 @@ +#include "uip.h" +#include "uip_arp.h" +#include "network-device.h" +#include "httpd.h" +#include "timer.h" + +#define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + +/*---------------------------------------------------------------------------*/ +int +main(void) +{ + int i; + uip_ipaddr_t ipaddr; + struct timer periodic_timer, arp_timer; + + timer_set(&periodic_timer, CLOCK_SECOND / 2); + timer_set(&arp_timer, CLOCK_SECOND * 10); + + network_device_init(); + uip_init(); + + uip_ipaddr(ipaddr, 192,168,0,2); + uip_sethostaddr(ipaddr); + + httpd_init(); + + while(1) { + uip_len = network_device_read(); + if(uip_len > 0) { + if(BUF->type == htons(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + network_device_send(); + } + } + + } else if(timer_expired(&periodic_timer)) { + timer_reset(&periodic_timer); + for(i = 0; i < UIP_CONNS; i++) { + uip_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } + +#if UIP_UDP + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + /* If the above function invocation resulted in data that + should be sent out on the network, the global variable + uip_len is set to a value > 0. */ + if(uip_len > 0) { + uip_arp_out(); + network_device_send(); + } + } +#endif /* UIP_UDP */ + + /* Call the ARP timer function every 10 seconds. */ + if(timer_expired(&arp_timer)) { + timer_reset(&arp_timer); + uip_arp_timer(); + } + } + } + return 0; +} +/*---------------------------------------------------------------------------*/ -- cgit v1.3.1