Contiki 3.x
stunicast.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2006, 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  */
32 
33 /**
34  * \file
35  * Stubborn unicast header file
36  * \author
37  * Adam Dunkels <adam@sics.se>
38  */
39 
40 /**
41  * \addtogroup rime
42  * @{
43  */
44 
45 /**
46  * \defgroup rimestunicast Stubborn unicast
47  * @{
48  *
49  * The stubborn single-hop unicast primitive (stunicast) repeatedly
50  * sends a packet to a single-hop neighbor using the unicast
51  * primitive. The stunicast primitive sends and resends the packet
52  * until an upper layer primitive or protocol cancels the
53  * transmission. While it is possible for applications and protocols
54  * that use Rime to use the stubborn single-hop unicast primitive
55  * directly, the stunicast primitive is primarily used by the reliable
56  * single-hop unicast (runicast) primitive.
57  *
58  * Before the stunicast primitive sends a packet, it allocates a queue
59  * buffer, to which the application data and packet attributes is
60  * copied, and sets a timer. When the timer expires, the stunicast
61  * primitive copies the queue buffer to the Rime buffer and sends the
62  * packet using the unicast primitive. The stunicast primitive sets the
63  * number of retransmissions for a packet as a packet attribute on
64  * outgoing packets.
65  *
66  * \section channels Channels
67  *
68  * The stunicast module uses 1 channel.
69  *
70  */
71 
72 #ifndef STUNICAST_H_
73 #define STUNICAST_H_
74 
75 #include "sys/ctimer.h"
76 #include "net/rime/unicast.h"
77 #include "net/queuebuf.h"
78 
79 struct stunicast_conn;
80 
81 #define STUNICAST_ATTRIBUTES UNICAST_ATTRIBUTES
82 
83 struct stunicast_callbacks {
84  void (* recv)(struct stunicast_conn *c, const linkaddr_t *from);
85  void (* sent)(struct stunicast_conn *c, int status, int num_tx);
86 };
87 
88 struct stunicast_conn {
89  struct unicast_conn c;
90  struct ctimer t;
91  struct queuebuf *buf;
92  const struct stunicast_callbacks *u;
93  linkaddr_t receiver;
94 };
95 
96 void stunicast_open(struct stunicast_conn *c, uint16_t channel,
97  const struct stunicast_callbacks *u);
98 void stunicast_close(struct stunicast_conn *c);
99 
100 int stunicast_send_stubborn(struct stunicast_conn *c, const linkaddr_t *receiver,
101  clock_time_t rxmittime);
102 void stunicast_cancel(struct stunicast_conn *c);
103 
104 int stunicast_send(struct stunicast_conn *c, const linkaddr_t *receiver);
105 
106 void stunicast_set_timer(struct stunicast_conn *c, clock_time_t t);
107 
108 linkaddr_t *stunicast_receiver(struct stunicast_conn *c);
109 
110 #endif /* STUNICAST_H_ */
111 /** @} */
112 /** @} */
Header file for Rime&#39;s single-hop unicast
Header file for the Rime queue buffer management
Header file for the callback timer