2 This file is part of GNUnet.
3 (C) 2012 Christian Grothoff (and other contributing authors)
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.
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.
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.
22 * @file mesh/mesh_common.c
23 * @brief MESH helper functions
24 * @author Bartlomiej Polot
31 GMC_is_pid_bigger (uint32_t bigger, uint32_t smaller)
33 return (GNUNET_YES == PID_OVERFLOW(smaller, bigger) ||
34 (bigger > smaller && GNUNET_NO == PID_OVERFLOW(bigger, smaller)));
39 GMC_max_pid (uint32_t a, uint32_t b)
41 if (GMC_is_pid_bigger(a, b))
48 GMC_min_pid (uint32_t a, uint32_t b)
50 if (GMC_is_pid_bigger(a, b))
56 GMC_hash32 (uint32_t i, struct GNUNET_HashCode *h)
58 memset (h, 0, sizeof(struct GNUNET_HashCode));
59 *(unsigned int *) h = i;
63 #if !defined(GNUNET_CULL_LOGGING)
65 GNUNET_MESH_DEBUG_M2S (uint16_t m)
71 * Request the creation of a path
73 case 256: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CREATE";
76 * Request the modification of an existing path
78 case 257: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGE";
81 * Notify that a connection of a path is no longer valid
83 case 258: return "GNUNET_MESSAGE_TYPE_MESH_PATH_BROKEN";
86 * At some point, the route will spontaneously change
88 case 259: return "GNUNET_MESSAGE_TYPE_MESH_PATH_CHANGED";
91 * Transport data in the mesh (origin->end) unicast
93 case 260: return "GNUNET_MESSAGE_TYPE_MESH_UNICAST";
96 * Transport data to all peers in a tunnel
98 case 261: return "GNUNET_MESSAGE_TYPE_MESH_MULTICAST";
101 * Transport data back in the mesh (end->origin)
103 case 262: return "GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN";
106 * Send origin an ACK that the path is complete
108 case 263: return "GNUNET_MESSAGE_TYPE_MESH_PATH_ACK";
111 * Avoid path timeouts
113 case 264: return "GNUNET_MESSAGE_TYPE_MESH_PATH_KEEPALIVE";
116 * Request the destuction of a path
118 case 265: return "GNUNET_MESSAGE_TYPE_MESH_PATH_DESTROY";
121 * Request the destruction of a whole tunnel
123 case 266: return "GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY";
126 * ACK for a data packet.
128 case 267: return "GNUNET_MESSAGE_TYPE_MESH_ACK";
133 case 268: return "GNUNET_MESSAGE_TYPE_MESH_POLL";
136 * Connect to the mesh service, specifying subscriptions
138 case 272: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT";
141 * Ask the mesh service to create a new tunnel
143 case 273: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE";
146 * Ask the mesh service to destroy a tunnel
148 case 274: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY";
151 * Ask the mesh service to add a peer to an existing tunnel
153 case 275: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD";
156 * Ask the mesh service to remove a peer from a tunnel
158 case 276: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_DEL";
161 * Ask the mesh service to add a peer offering a service to an existing tunnel
163 case 277: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_TYPE";
166 * Ask the mesh service to add a peer described by a service string
168 case 278: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ANNOUNCE_REGEX";
171 * Ask the mesh service to add a peer described by a service string
173 case 279: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_ADD_BY_STRING";
176 * Ask the mesh service to add a peer to the blacklist of an existing tunnel
178 case 280: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_BLACKLIST";
181 * Ask the mesh service to remove a peer from the blacklist of a tunnel
183 case 281: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_UNBLACKLIST";
186 * Set tunnel speed to slowest peer
188 case 282: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MIN";
191 * Set tunnel speed to fastest peer
193 case 283: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_MAX";
196 * Set tunnel buffering on.
198 case 284: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_BUFFER";
201 * Set tunnel buffering off.
203 case 285: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOBUFFER";
206 * Local ACK for data.
208 case 286: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK";
211 * Local monitoring of service.
213 case 287: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR";
216 * Local monitoring of service of a specific tunnel.
218 case 288: return "GNUNET_MESSAGE_TYPE_MESH_LOCAL_MONITOR_TUNNEL";
221 * 640kb should be enough for everybody
223 case 299: return "GNUNET_MESSAGE_TYPE_MESH_RESERVE_END";
225 sprintf(buf, "%u (UNKNOWN TYPE)", m);
230 GNUNET_MESH_DEBUG_M2S (uint16_t m)