57778a3527eb6240fa314db591207313774d6fac
[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
31 /**
32  * Message for mesh path management
33  */
34 struct GNUNET_MESH_ManipulatePath
35 {
36     /**
37      * Type: GNUNET_MESSAGE_TYPE_MESH_PATH_[CREATE|CHANGE|ADD]
38      */
39     struct GNUNET_MessageHeader header;
40
41     /**
42      * Id of the tunnel this path belongs to
43      */
44     uint32_t tid;
45
46     /**
47      * Information about speed requirements
48      */
49     uint32_t speed_min;
50     uint32_t speed_max;
51
52     /**
53      * Number of hops in the path given below
54      */
55     uint16_t path_length;
56
57     /**
58      * path_length structs defining the *whole* path
59      */
60     struct GNUNET_PeerIdentity peers[];
61 };
62
63 /**
64  * Message for mesh data traffic
65  */
66 struct GNUNET_MESH_Data
67 {
68     /**
69      * Type: GNUNET_MESSAGE_TYPE_DATA_[GO|BACK]
70      */
71     struct GNUNET_MessageHeader header;
72
73     /**
74      * OID of the tunnel
75      */
76     struct GNUNET_PeerIdentity oid;
77
78     /**
79      * TID of the tunnel
80      */
81     uint32_t tid;
82
83     /**
84      * Size of payload
85      * FIXME uint16 enough?
86      */
87     uint16_t size;
88
89     /**
90      * Payload
91      */
92     uint8_t data[];
93 };
94
95 /**
96  * Message for mesh flow control
97  */
98 struct GNUNET_MESH_SpeedNotify
99 {
100     /**
101      * Type: GNUNET_MESSAGE_TYPE_DATA_SPEED_NOTIFY
102      */
103     struct GNUNET_MessageHeader header;
104
105     /**
106      * OID of the tunnel
107      */
108     struct GNUNET_PeerIdentity oid;
109
110     /**
111      * TID of the tunnel
112      */
113     uint32_t tid;
114
115     /**
116      * Slowest link down the path
117      */
118     uint32_t speed_min;
119
120     /**
121      * Fastest link down the path
122      */
123     uint32_t speed_max;
124 };
125
126 #endif