Contiki 2.5
ethernode-uip.c
1 /*
2  * Copyright (c) 2004, Swedish Institute of Computer Science.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the Institute nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * This file is part of the Contiki operating system.
30  *
31  * Author: Adam Dunkels <adam@sics.se>
32  *
33  * $Id: ethernode-uip.c,v 1.6 2008/01/04 21:59:13 oliverschmidt Exp $
34  */
35 
36 #include "contiki.h"
37 
38 #include "ethernode.h"
39 
40 #include "net/uip-fw.h"
41 #include "net/hc.h"
42 #ifdef __CYGWIN__
43 #include "net/wpcap.h"
44 #else /* __CYGWIN__ */
45 #include "net/tapdev.h"
46 #endif /* __CYGWIN__ */
47 
48 #include "node-id.h"
49 
50 PROCESS(ethernode_uip_process, "Ethernode driver");
51 
52 enum { NULLEVENT };
53 /*---------------------------------------------------------------------------*/
54 u8_t
55 ethernode_uip_send(void)
56 {
57  /* printf("%d: ethernode_uip_send\n", node_id);*/
58  uip_len = hc_compress(&uip_buf[UIP_LLH_LEN], uip_len);
59 
60  return ethernode_send();
61 }
62 /*---------------------------------------------------------------------------*/
63 PROCESS_THREAD(ethernode_uip_process, ev, data)
64 {
65  PROCESS_BEGIN();
66 
67  while(1) {
68  process_poll(&ethernode_uip_process);
70 
71  /* Poll Ethernet device to see if there is a frame avaliable. */
72  uip_len = ethernode_read(uip_buf, UIP_BUFSIZE);
73 
74  if(uip_len > 0) {
75  /* printf("%d: new packet len %d\n", node_id, uip_len);*/
76 
77  /* if((random_rand() % drop) <= drop / 2) {
78  printf("Bropp\n");
79  } else*/ {
80 
81  uip_len = hc_inflate(&uip_buf[UIP_LLH_LEN], uip_len);
82 
83 #ifdef __CYGWIN__
84  wpcap_send();
85 #else /* __CYGWIN__ */
86  tapdev_send();
87 #endif /* __CYGWIN__ */
88  /* if(uip_fw_forward() == UIP_FW_LOCAL)*/ {
89  /* A frame was avaliable (and is now read into the uip_buf), so
90  we process it. */
91  tcpip_input();
92  }
93  }
94  }
95  }
96  PROCESS_END();
97 
98 }
99 /*---------------------------------------------------------------------------*/