aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorxrs <xrs@mail36.net>2018-06-26 12:31:04 +0200
committerxrs <xrs@mail36.net>2018-06-26 12:31:04 +0200
commit0759e1e79accb055a4d175729b631d42486b08dc (patch)
tree64ca521f4c7327ccb0eab6e38c48eaa50bf183df /src
parentfb3a42054245e0ae84a73a7e71b4973beb229108 (diff)
parent2bdcb4fa971e582b516286c983469234bedeabde (diff)
downloadgnunet-0759e1e79accb055a4d175729b631d42486b08dc.tar.gz
gnunet-0759e1e79accb055a4d175729b631d42486b08dc.zip
Merge branch 'master' of ssh://gnunet.org/gnunet
Diffstat (limited to 'src')
-rw-r--r--src/cadet/cadet.h10
-rw-r--r--src/cadet/cadet_api.c22
-rw-r--r--src/cadet/gnunet-cadet.c52
-rw-r--r--src/cadet/gnunet-service-cadet.c64
-rw-r--r--src/cadet/gnunet-service-cadet_paths.c2
-rw-r--r--src/cadet/gnunet-service-cadet_peer.c35
-rw-r--r--src/cadet/gnunet-service-cadet_peer.h13
-rw-r--r--src/include/gnunet_cadet_service.h4
-rw-r--r--src/topology/Makefile.am1
-rw-r--r--src/topology/test_gnunet_daemon_topology.c32
-rw-r--r--src/util/tun.c4
11 files changed, 179 insertions, 60 deletions
diff --git a/src/cadet/cadet.h b/src/cadet/cadet.h
index 69be4e537..bac4bc49d 100644
--- a/src/cadet/cadet.h
+++ b/src/cadet/cadet.h
@@ -258,6 +258,11 @@ struct GNUNET_CADET_LocalInfoPeer
258 * #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS 258 * #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS
259 */ 259 */
260 struct GNUNET_MessageHeader header; 260 struct GNUNET_MessageHeader header;
261
262 /**
263 * Offset the peer has in the path this message is about.
264 */
265 uint16_t offset GNUNET_PACKED;
261 266
262 /** 267 /**
263 * Number of paths. 268 * Number of paths.
@@ -268,6 +273,11 @@ struct GNUNET_CADET_LocalInfoPeer
268 * Do we have a tunnel toward this peer? 273 * Do we have a tunnel toward this peer?
269 */ 274 */
270 int16_t tunnel GNUNET_PACKED; 275 int16_t tunnel GNUNET_PACKED;
276
277 /**
278 * We are finished with the paths.
279 */
280 uint16_t finished_with_paths;
271 281
272 /** 282 /**
273 * ID of the peer (can be local peer). 283 * ID of the peer (can be local peer).
diff --git a/src/cadet/cadet_api.c b/src/cadet/cadet_api.c
index 91054cd4f..b019424f9 100644
--- a/src/cadet/cadet_api.c
+++ b/src/cadet/cadet_api.c
@@ -898,7 +898,6 @@ check_get_peer (void *cls,
898 const struct GNUNET_PeerIdentity *paths_array; 898 const struct GNUNET_PeerIdentity *paths_array;
899 size_t esize; 899 size_t esize;
900 unsigned int epaths; 900 unsigned int epaths;
901 unsigned int paths;
902 unsigned int peers; 901 unsigned int peers;
903 902
904 esize = ntohs (message->header.size); 903 esize = ntohs (message->header.size);
@@ -915,17 +914,7 @@ check_get_peer (void *cls,
915 peers = (esize - msize) / sizeof (struct GNUNET_PeerIdentity); 914 peers = (esize - msize) / sizeof (struct GNUNET_PeerIdentity);
916 epaths = ntohs (message->paths); 915 epaths = ntohs (message->paths);
917 paths_array = (const struct GNUNET_PeerIdentity *) &message[1]; 916 paths_array = (const struct GNUNET_PeerIdentity *) &message[1];
918 paths = 0; 917
919 for (unsigned int i = 0; i < peers; i++)
920 if (0 == memcmp (&paths_array[i],
921 &message->destination,
922 sizeof (struct GNUNET_PeerIdentity)))
923 paths++;
924 if (paths != epaths)
925 {
926 GNUNET_break (0);
927 return GNUNET_SYSERR;
928 }
929 return GNUNET_OK; 918 return GNUNET_OK;
930} 919}
931 920
@@ -949,6 +938,11 @@ handle_get_peer (void *cls,
949 938
950 if (NULL == h->info_cb.peer_cb) 939 if (NULL == h->info_cb.peer_cb)
951 return; 940 return;
941
942 LOG (GNUNET_ERROR_TYPE_DEBUG,
943 "number of paths %u\n",
944 ntohs (message->paths));
945
952 paths = ntohs (message->paths); 946 paths = ntohs (message->paths);
953 paths_array = (const struct GNUNET_PeerIdentity *) &message[1]; 947 paths_array = (const struct GNUNET_PeerIdentity *) &message[1];
954 peers = (ntohs (message->header.size) - sizeof (*message)) 948 peers = (ntohs (message->header.size) - sizeof (*message))
@@ -978,7 +972,9 @@ handle_get_peer (void *cls,
978 (int) ntohs (message->tunnel), 972 (int) ntohs (message->tunnel),
979 neighbor, 973 neighbor,
980 paths, 974 paths,
981 paths_array); 975 paths_array,
976 (int) ntohs (message->offset),
977 (int) ntohs (message->finished_with_paths));
982} 978}
983 979
984 980
diff --git a/src/cadet/gnunet-cadet.c b/src/cadet/gnunet-cadet.c
index ed297196e..67cebf02b 100644
--- a/src/cadet/gnunet-cadet.c
+++ b/src/cadet/gnunet-cadet.c
@@ -530,34 +530,48 @@ peer_callback (void *cls,
530 int tunnel, 530 int tunnel,
531 int neighbor, 531 int neighbor,
532 unsigned int n_paths, 532 unsigned int n_paths,
533 const struct GNUNET_PeerIdentity *paths) 533 const struct GNUNET_PeerIdentity *paths,
534 int offset,
535 int finished_with_paths)
534{ 536{
535 unsigned int i; 537 unsigned int i;
536 const struct GNUNET_PeerIdentity *p; 538 const struct GNUNET_PeerIdentity *p;
537 539
538 FPRINTF (stdout, 540
539 "%s [TUNNEL: %s, NEIGHBOR: %s, PATHS: %u]\n", 541 if (GNUNET_YES == finished_with_paths)
540 GNUNET_i2s_full (peer),
541 tunnel ? "Y" : "N",
542 neighbor ? "Y" : "N",
543 n_paths);
544 p = paths;
545 for (i = 0; i < n_paths && NULL != p;)
546 { 542 {
543 GNUNET_SCHEDULER_shutdown();
544 return;
545 }
546
547 if (offset == 0){
548 FPRINTF (stdout,
549 "%s [TUNNEL: %s, NEIGHBOR: %s, PATHS: %u]\n",
550 GNUNET_i2s_full (peer),
551 tunnel ? "Y" : "N",
552 neighbor ? "Y" : "N",
553 n_paths);
554 }else{
555 p = paths;
547 FPRINTF (stdout, 556 FPRINTF (stdout,
548 "%s ", 557 "Path with offset %u: ",
549 GNUNET_i2s (p)); 558 offset);
550 if (0 == memcmp (p, 559 for (i = 0; i < offset && NULL != p;)
551 peer,
552 sizeof (*p)))
553 { 560 {
554 FPRINTF (stdout, "\n"); 561 FPRINTF (stdout,
555 i++; 562 "%s ",
563 GNUNET_i2s (p));
564 i++;
565 p++;
556 } 566 }
557 p++; 567
568 FPRINTF (stdout,
569 "\n");
570
558 } 571 }
572
559 573
560 GNUNET_SCHEDULER_shutdown(); 574
561} 575}
562 576
563 577
diff --git a/src/cadet/gnunet-service-cadet.c b/src/cadet/gnunet-service-cadet.c
index 38037e92f..dd693731f 100644
--- a/src/cadet/gnunet-service-cadet.c
+++ b/src/cadet/gnunet-service-cadet.c
@@ -822,7 +822,7 @@ get_all_peers_iterator (void *cls,
822 struct GNUNET_CADET_LocalInfoPeer *msg; 822 struct GNUNET_CADET_LocalInfoPeer *msg;
823 823
824 env = GNUNET_MQ_msg (msg, 824 env = GNUNET_MQ_msg (msg,
825 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS); 825 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS);
826 msg->destination = *peer; 826 msg->destination = *peer;
827 msg->paths = htons (GCP_count_paths (p)); 827 msg->paths = htons (GCP_count_paths (p));
828 msg->tunnel = htons (NULL != GCP_get_tunnel (p, 828 msg->tunnel = htons (NULL != GCP_get_tunnel (p,
@@ -892,6 +892,11 @@ path_info_iterator (void *cls,
892 env = GNUNET_MQ_msg_extra (resp, 892 env = GNUNET_MQ_msg_extra (resp,
893 path_size, 893 path_size,
894 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER); 894 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
895
896
897 resp->offset = htons(off);
898 resp->finished_with_paths = htons(0);
899
895 id = (struct GNUNET_PeerIdentity *) &resp[1]; 900 id = (struct GNUNET_PeerIdentity *) &resp[1];
896 901
897 /* Don't copy first peer. First peer is always the local one. Last 902 /* Don't copy first peer. First peer is always the local one. Last
@@ -905,6 +910,45 @@ path_info_iterator (void *cls,
905 return GNUNET_YES; 910 return GNUNET_YES;
906} 911}
907 912
913/**
914 * Getting summary information about the number of paths and if a tunnel exists,
915 * and the indirect paths to a peer, if there are ones.
916 *
917 * @param cls Closure ().
918 * @param peer Peer ID (tunnel remote peer).
919 * @param value Peer info.
920 * @return #GNUNET_YES, to keep iterating.
921 */
922static void
923get_peer_info (void *cls,
924 const struct GNUNET_PeerIdentity *peer,
925 struct CadetPeer *p)
926{
927 struct CadetClient *c = cls;
928 struct GNUNET_MQ_Envelope *env;
929 struct GNUNET_CADET_LocalInfoPeer *msg;
930
931
932 env = GNUNET_MQ_msg (msg,
933 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
934
935 msg->offset = htons(0);
936 msg->destination = *peer;
937 msg->paths = htons (GCP_count_paths (p));
938 msg->tunnel = htons (NULL != GCP_get_tunnel (p,
939 GNUNET_NO));
940 msg->finished_with_paths = htons(0);
941
942 GNUNET_MQ_send (c->mq,
943 env);
944
945 GCP_iterate_indirect_paths(p,
946 &path_info_iterator,
947 c->mq);
948
949}
950
951
908 952
909/** 953/**
910 * Handler for client's SHOW_PEER request. 954 * Handler for client's SHOW_PEER request.
@@ -919,19 +963,23 @@ handle_show_peer (void *cls,
919 struct CadetClient *c = cls; 963 struct CadetClient *c = cls;
920 struct CadetPeer *p; 964 struct CadetPeer *p;
921 struct GNUNET_MQ_Envelope *env; 965 struct GNUNET_MQ_Envelope *env;
922 struct GNUNET_MessageHeader *resp; 966 struct GNUNET_CADET_LocalInfoPeer *resp;
923 967
924 p = GCP_get (&msg->peer, 968 p = GCP_get (&msg->peer,
925 GNUNET_NO); 969 GNUNET_NO);
926 if (NULL != p) 970 if (NULL != p){
927 GCP_iterate_paths (p, 971 get_peer_info(c, &(msg->peer), p);
928 &path_info_iterator, 972 }
929 c->mq); 973
930 /* Send message with 0/0 to indicate the end */ 974
931 env = GNUNET_MQ_msg (resp, 975 env = GNUNET_MQ_msg (resp,
932 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER_END); 976 GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEER);
977 resp->finished_with_paths = htons(1);
978 resp->destination = msg->peer;
979
933 GNUNET_MQ_send (c->mq, 980 GNUNET_MQ_send (c->mq,
934 env); 981 env);
982
935 GNUNET_SERVICE_client_continue (c->client); 983 GNUNET_SERVICE_client_continue (c->client);
936} 984}
937 985
diff --git a/src/cadet/gnunet-service-cadet_paths.c b/src/cadet/gnunet-service-cadet_paths.c
index e77d54e55..593617ff6 100644
--- a/src/cadet/gnunet-service-cadet_paths.c
+++ b/src/cadet/gnunet-service-cadet_paths.c
@@ -17,7 +17,7 @@
17*/ 17*/
18/** 18/**
19 * @file cadet/gnunet-service-cadet_paths.c 19 * @file cadet/gnunet-service-cadet_paths.c
20 * @brief Information we track per path. 20 * @brief Information we track per path.
21 * @author Bartlomiej Polot 21 * @author Bartlomiej Polot
22 * @author Christian Grothoff 22 * @author Christian Grothoff
23 */ 23 */
diff --git a/src/cadet/gnunet-service-cadet_peer.c b/src/cadet/gnunet-service-cadet_peer.c
index 9cd1f5229..8e536e376 100644
--- a/src/cadet/gnunet-service-cadet_peer.c
+++ b/src/cadet/gnunet-service-cadet_peer.c
@@ -1235,6 +1235,41 @@ GCP_iterate_paths (struct CadetPeer *cp,
1235 return ret; 1235 return ret;
1236} 1236}
1237 1237
1238/**
1239 * Iterate over the paths to a peer without direct link.
1240 *
1241 * @param cp Peer to get path info.
1242 * @param callback Function to call for every path.
1243 * @param callback_cls Closure for @a callback.
1244 * @return Number of iterated paths.
1245 */
1246unsigned int
1247GCP_iterate_indirect_paths (struct CadetPeer *cp,
1248 GCP_PathIterator callback,
1249 void *callback_cls)
1250{
1251 unsigned int ret = 0;
1252
1253 LOG (GNUNET_ERROR_TYPE_DEBUG,
1254 "Iterating over paths to peer %s without direct link\n",
1255 GCP_2s (cp));
1256 for (unsigned int i=1;i<cp->path_dll_length;i++)
1257 {
1258 for (struct CadetPeerPathEntry *pe = cp->path_heads[i];
1259 NULL != pe;
1260 pe = pe->next)
1261 {
1262 ret++;
1263 if (GNUNET_NO ==
1264 callback (callback_cls,
1265 pe->path,
1266 i))
1267 return ret;
1268 }
1269 }
1270 return ret;
1271}
1272
1238 1273
1239/** 1274/**
1240 * Iterate over the paths to @a cp where 1275 * Iterate over the paths to @a cp where
diff --git a/src/cadet/gnunet-service-cadet_peer.h b/src/cadet/gnunet-service-cadet_peer.h
index 2357a293d..3b8b31b9a 100644
--- a/src/cadet/gnunet-service-cadet_peer.h
+++ b/src/cadet/gnunet-service-cadet_peer.h
@@ -139,6 +139,19 @@ GCP_iterate_paths (struct CadetPeer *cp,
139 GCP_PathIterator callback, 139 GCP_PathIterator callback,
140 void *callback_cls); 140 void *callback_cls);
141 141
142/**
143 * Iterate over the paths to a peer without direct link.
144 *
145 * @param cp Peer to get path info.
146 * @param callback Function to call for every path.
147 * @param callback_cls Closure for @a callback.
148 * @return Number of iterated paths.
149 */
150unsigned int
151GCP_iterate_indirect_paths (struct CadetPeer *cp,
152 GCP_PathIterator callback,
153 void *callback_cls);
154
142 155
143/** 156/**
144 * Iterate over the paths to @a peer where 157 * Iterate over the paths to @a peer where
diff --git a/src/include/gnunet_cadet_service.h b/src/include/gnunet_cadet_service.h
index 4f35a3f1f..552763055 100644
--- a/src/include/gnunet_cadet_service.h
+++ b/src/include/gnunet_cadet_service.h
@@ -425,7 +425,9 @@ typedef void
425 int tunnel, 425 int tunnel,
426 int neighbor, 426 int neighbor,
427 unsigned int n_paths, 427 unsigned int n_paths,
428 const struct GNUNET_PeerIdentity *paths); 428 const struct GNUNET_PeerIdentity *paths,
429 int offset,
430 int finished_with_paths);
429 431
430 432
431/** 433/**
diff --git a/src/topology/Makefile.am b/src/topology/Makefile.am
index 97e4652d0..ae69ee8bc 100644
--- a/src/topology/Makefile.am
+++ b/src/topology/Makefile.am
@@ -56,6 +56,7 @@ test_gnunet_daemon_topology_SOURCES = \
56 test_gnunet_daemon_topology.c 56 test_gnunet_daemon_topology.c
57test_gnunet_daemon_topology_LDADD = \ 57test_gnunet_daemon_topology_LDADD = \
58 $(top_builddir)/src/testbed/libgnunettestbed.la \ 58 $(top_builddir)/src/testbed/libgnunettestbed.la \
59 $(top_builddir)/src/statistics/libgnunetstatistics.la \
59 $(top_builddir)/src/util/libgnunetutil.la 60 $(top_builddir)/src/util/libgnunetutil.la
60 61
61EXTRA_DIST = \ 62EXTRA_DIST = \
diff --git a/src/topology/test_gnunet_daemon_topology.c b/src/topology/test_gnunet_daemon_topology.c
index bf9121eb0..5359c280e 100644
--- a/src/topology/test_gnunet_daemon_topology.c
+++ b/src/topology/test_gnunet_daemon_topology.c
@@ -11,7 +11,7 @@
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU Affero General Public License 15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/ 17*/
@@ -28,7 +28,7 @@
28 28
29#define NUM_PEERS 8 29#define NUM_PEERS 8
30 30
31/* 31/*
32 * The threshold defines the number of connection that are needed 32 * The threshold defines the number of connection that are needed
33 * for one peer to pass the test. Be aware that setting NUM_PEERS 33 * for one peer to pass the test. Be aware that setting NUM_PEERS
34 * too high can cause bandwidth problems for the testing peers. 34 * too high can cause bandwidth problems for the testing peers.
@@ -69,7 +69,7 @@ static struct GNUNET_SCHEDULER_Task *timeout_tid;
69/* 69/*
70 * Peer context for every testbed peer. 70 * Peer context for every testbed peer.
71 */ 71 */
72struct peerctx 72struct peerctx
73{ 73{
74 int index; 74 int index;
75 struct GNUNET_STATISTICS_Handle *statistics; 75 struct GNUNET_STATISTICS_Handle *statistics;
@@ -108,7 +108,7 @@ timeout_task (void *cls)
108 108
109/* 109/*
110 * The function is called every time the topology of connected 110 * The function is called every time the topology of connected
111 * peers to a peer changes. 111 * peers to a peer changes.
112 */ 112 */
113int 113int
114statistics_iterator (void *cls, 114statistics_iterator (void *cls,
@@ -120,10 +120,10 @@ statistics_iterator (void *cls,
120 struct peerctx *p_ctx = (struct peerctx*) cls; 120 struct peerctx *p_ctx = (struct peerctx*) cls;
121 121
122 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 122 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
123 "Peer %d: %s = %d\n", 123 "Peer %d: %s = %llu\n",
124 p_ctx->index, 124 p_ctx->index,
125 name, 125 name,
126 value); 126 (unsigned long long) value);
127 127
128 if (p_ctx->connections < value) 128 if (p_ctx->connections < value)
129 p_ctx->connections = value; 129 p_ctx->connections = value;
@@ -152,7 +152,7 @@ static void *
152ca_statistics (void *cls, 152ca_statistics (void *cls,
153 const struct GNUNET_CONFIGURATION_Handle *cfg) 153 const struct GNUNET_CONFIGURATION_Handle *cfg)
154{ 154{
155 return GNUNET_STATISTICS_create ("topology", cfg); 155 return GNUNET_STATISTICS_create ("topology", cfg);
156} 156}
157 157
158 158
@@ -161,7 +161,7 @@ da_statistics (void *cls,
161 void *op_result) 161 void *op_result)
162{ 162{
163 struct peerctx *p_ctx = (struct peerctx *) cls; 163 struct peerctx *p_ctx = (struct peerctx *) cls;
164 164
165 GNUNET_break (GNUNET_OK == GNUNET_STATISTICS_watch_cancel 165 GNUNET_break (GNUNET_OK == GNUNET_STATISTICS_watch_cancel
166 (p_ctx->statistics, "topology", "# peers connected", 166 (p_ctx->statistics, "topology", "# peers connected",
167 statistics_iterator, p_ctx)); 167 statistics_iterator, p_ctx));
@@ -172,8 +172,8 @@ da_statistics (void *cls,
172 GNUNET_free (p_ctx); 172 GNUNET_free (p_ctx);
173} 173}
174 174
175 175
176static void 176static void
177service_connect_complete (void *cls, 177service_connect_complete (void *cls,
178 struct GNUNET_TESTBED_Operation *op, 178 struct GNUNET_TESTBED_Operation *op,
179 void *ca_result, 179 void *ca_result,
@@ -182,7 +182,7 @@ service_connect_complete (void *cls,
182 int ret; 182 int ret;
183 struct peerctx *p_ctx = (struct peerctx*) cls; 183 struct peerctx *p_ctx = (struct peerctx*) cls;
184 184
185 if (NULL == ca_result) 185 if (NULL == ca_result)
186 GNUNET_SCHEDULER_shutdown(); 186 GNUNET_SCHEDULER_shutdown();
187 187
188 p_ctx->statistics = ca_result; 188 p_ctx->statistics = ca_result;
@@ -245,20 +245,20 @@ do_connect (void *cls,
245 peers[i], peers[i+1]); 245 peers[i], peers[i+1]);
246 } 246 }
247 247
248 op[i] = 248 op[i] =
249 GNUNET_TESTBED_service_connect (cls, 249 GNUNET_TESTBED_service_connect (cls,
250 peers[i], 250 peers[i],
251 "statistics", 251 "statistics",
252 service_connect_complete, 252 service_connect_complete,
253 p_ctx, /* cls of completion cb */ 253 p_ctx, /* cls of completion cb */
254 ca_statistics, /* connect adapter */ 254 ca_statistics, /* connect adapter */
255 da_statistics, /* disconnect adapter */ 255 da_statistics, /* disconnect adapter */
256 p_ctx); 256 p_ctx);
257 257
258 } 258 }
259 259
260 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); 260 GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
261 timeout_tid = 261 timeout_tid =
262 GNUNET_SCHEDULER_add_delayed (TIMEOUT, 262 GNUNET_SCHEDULER_add_delayed (TIMEOUT,
263 &timeout_task, 263 &timeout_task,
264 NULL); 264 NULL);
diff --git a/src/util/tun.c b/src/util/tun.c
index f85f72209..25e729e58 100644
--- a/src/util/tun.c
+++ b/src/util/tun.c
@@ -11,7 +11,7 @@
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU Affero General Public License 15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/ 17*/
@@ -23,7 +23,7 @@
23 * @author Christian Grothoff 23 * @author Christian Grothoff
24 */ 24 */
25#include "platform.h" 25#include "platform.h"
26#include "gnunet_tun_lib.h" 26#include "gnunet_util_lib.h"
27 27
28/** 28/**
29 * IP TTL we use for packets that we assemble (8 bit unsigned integer) 29 * IP TTL we use for packets that we assemble (8 bit unsigned integer)