085f3ef4d63c6f5f0ff4308148e89117ba8a5a1c
[oweals/gnunet.git] / src / mesh / mesh.h
1 /*
2      This file is part of GNUnet.
3      (C) 2001 - 2011 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @author Bartlomiej Polot
23  * @file mesh/mesh.h
24  */
25
26
27 #ifndef MESH_H_
28 #define MESH_H_
29 #include <stdint.h>
30 #include "gnunet_common.h"
31
32 /**
33  * Message for mesh path management
34  */
35 struct GNUNET_MESH_ManipulatePath
36 {
37     /**
38      * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_[CREATE|CHANGE|ADD]
39      */
40     struct GNUNET_MessageHeader header;
41
42     /**
43      * Id of the tunnel this path belongs to
44      */
45     uint32_t tid;
46
47     /**
48      * Information about speed requirements
49      */
50     uint32_t speed_min;
51     uint32_t speed_max;
52
53     /**
54      * Number of hops in the path given below
55      */
56     uint16_t path_length;
57
58     /**
59      * path_length structs defining the *whole* path
60      */
61     struct GNUNET_PeerIdentity peers[];
62 };
63
64 /**
65  * Message for mesh data traffic
66  */
67 struct GNUNET_MESH_Data
68 {
69     /**
70      * Type: GNUNET_MESSAGE_TYPE_DATA_[GO|BACK]
71      */
72     struct GNUNET_MessageHeader header;
73
74     /**
75      * OID of the tunnel
76      */
77     struct GNUNET_PeerIdentity oid;
78
79     /**
80      * TID of the tunnel
81      */
82     uint32_t tid;
83
84     /**
85      * FIXME Some form of authentication
86      */
87     uint32_t token;
88
89     /**
90      * Size of payload
91      * FIXME uint16 enough?
92      */
93     uint16_t size;
94
95     /**
96      * Payload
97      */
98     uint8_t data[];
99 };
100
101 /**
102  * Message for mesh flow control
103  */
104 struct GNUNET_MESH_SpeedNotify
105 {
106     /**
107      * Type: GNUNET_MESSAGE_TYPE_DATA_SPEED_NOTIFY
108      */
109     struct GNUNET_MessageHeader header;
110
111     /**
112      * OID of the tunnel
113      */
114     struct GNUNET_PeerIdentity oid;
115
116     /**
117      * TID of the tunnel
118      */
119     uint32_t tid;
120
121     /**
122      * Slowest link down the path
123      */
124     uint32_t speed_min;
125
126     /**
127      * Fastest link down the path
128      */
129     uint32_t speed_max;
130 };
131
132 #endif