Contiki-Inga 3.x
stunicast.h
Go to the documentation of this file.
1 /**
2  * \addtogroup rime
3  * @{
4  */
5 
6 /**
7  * \defgroup rimestunicast Stubborn unicast
8  * @{
9  *
10  * The stubborn single-hop unicast primitive (stunicast) repeatedly
11  * sends a packet to a single-hop neighbor using the unicast
12  * primitive. The stunicast primitive sends and resends the packet
13  * until an upper layer primitive or protocol cancels the
14  * transmission. While it is possible for applications and protocols
15  * that use Rime to use the stubborn single-hop unicast primitive
16  * directly, the stunicast primitive is primarily used by the reliable
17  * single-hop unicast (runicast) primitive.
18  *
19  * Before the stunicast primitive sends a packet, it allocates a queue
20  * buffer, to which the application data and packet attributes is
21  * copied, and sets a timer. When the timer expires, the stunicast
22  * primitive copies the queue buffer to the Rime buffer and sends the
23  * packet using the unicast primitive. The stunicast primitive sets the
24  * number of retransmissions for a packet as a packet attribute on
25  * outgoing packets.
26  *
27  * \section channels Channels
28  *
29  * The stunicast module uses 1 channel.
30  *
31  */
32 
33 /*
34  * Copyright (c) 2006, Swedish Institute of Computer Science.
35  * All rights reserved.
36  *
37  * Redistribution and use in source and binary forms, with or without
38  * modification, are permitted provided that the following conditions
39  * are met:
40  * 1. Redistributions of source code must retain the above copyright
41  * notice, this list of conditions and the following disclaimer.
42  * 2. Redistributions in binary form must reproduce the above copyright
43  * notice, this list of conditions and the following disclaimer in the
44  * documentation and/or other materials provided with the distribution.
45  * 3. Neither the name of the Institute nor the names of its contributors
46  * may be used to endorse or promote products derived from this software
47  * without specific prior written permission.
48  *
49  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
50  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
51  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
52  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
53  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
54  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
55  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
56  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
57  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
58  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59  * SUCH DAMAGE.
60  *
61  * This file is part of the Contiki operating system.
62  *
63  */
64 
65 /**
66  * \file
67  * Stubborn unicast header file
68  * \author
69  * Adam Dunkels <adam@sics.se>
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 /** @} */