[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r33906 - gnunet/src/dht
From: |
gnunet |
Subject: |
[GNUnet-SVN] r33906 - gnunet/src/dht |
Date: |
Thu, 3 Jul 2014 10:45:49 +0200 |
Author: supriti
Date: 2014-07-03 10:45:49 +0200 (Thu, 03 Jul 2014)
New Revision: 33906
Modified:
gnunet/src/dht/gnunet-service-xdht_neighbours.c
gnunet/src/dht/gnunet-service-xdht_routing.c
gnunet/src/dht/gnunet-service-xdht_routing.h
gnunet/src/dht/gnunet_dht_profiler.c
Log:
Xvine: fixes
Modified: gnunet/src/dht/gnunet-service-xdht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-07-02 19:30:52 UTC
(rev 33905)
+++ gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-07-03 08:45:49 UTC
(rev 33906)
@@ -57,31 +57,6 @@
/**
- * FIXME:
- * 1. check for memory leaks in all the functions, in all the functions
- * you should check that if you malloc a variable you should free it also.
- * 2. make sure you have gnunet_assert for all target friends
- * 3. pay attention to GNUNET_ntohll and endianess
- * 4. In trail setup, check that you are adding entry even if its a friend.
- * same for trail setup and add_trail.
- * 5. go through whole code
- * 6. make sure make check passes for minimal things i.e. without congestion,
- * trail threshold, without multiple trails.
- * 7. write test cases for checking trail congestion, trail threshold, multiple
- * trails.
- *
- * 8. while going through the code write the comments for malicious peer.
- * basic - drop packet, ignore message. Not going to check for behaviour
- * where a peer changes the value as we handle that case everywhere. s
- */
-/**
- 1. friend trails count in case it is finger, routing table trail
- 2. select_closest_peer in compare and update predecessor and successor,
- update_predecessor.
- */
-
-
-/**
* Maximum possible fingers (including predecessor) of a peer
*/
#define MAX_FINGERS 65
@@ -1075,7 +1050,7 @@
memset (&tsm->intermediate_trail_id, 0, sizeof
(tsm->intermediate_trail_id));
else
tsm->intermediate_trail_id = *intermediate_trail_id;
-
+
if (trail_length > 0)
{
peer_list = (struct GNUNET_PeerIdentity *) &tsm[1];
@@ -1188,7 +1163,7 @@
struct P2PPendingMessage *pending;
struct GNUNET_PeerIdentity *peer_list;
size_t msize;
-
+
msize = sizeof (struct PeerTrailRejectionMessage) +
(trail_length * sizeof (struct GNUNET_PeerIdentity));
@@ -2080,11 +2055,10 @@
* with finger if its closest. */
compare_finger_and_current_successor (current_closest_peer);
*local_best_known_destination = current_closest_peer->best_known_destination;
- new_intermediate_trail_id = current_closest_peer->trail_id;
+ if (current_closest_peer->trail_id != NULL)
+ *new_intermediate_trail_id = *current_closest_peer->trail_id;
next_hop = GNUNET_new (struct GNUNET_PeerIdentity);
*next_hop = current_closest_peer->next_hop;
-
-
return next_hop;
}
@@ -2611,6 +2585,7 @@
/* Send trail teardown message across the replaced trail. */
struct Trail *replace_trail =
&existing_finger->trail_list[largest_trail_index];
+ existing_finger->trail_list[largest_trail_index].is_present = GNUNET_NO;
GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail
(replace_trail->trail_id));
GDS_NEIGHBOURS_send_trail_teardown (replace_trail->trail_id,
GDS_ROUTING_SRC_TO_DEST,
@@ -2768,6 +2743,9 @@
GNUNET_assert (NULL !=
(next_hop = GDS_ROUTING_get_next_hop (trail->trail_id,
GDS_ROUTING_SRC_TO_DEST)));
+
+ GNUNET_assert (0 != GNUNET_CRYPTO_cmp_peer_identity
(&finger->finger_identity,
+ &my_identity));
if (trail->trail_length > 0)
GNUNET_assert (NULL != (friend =
GNUNET_CONTAINER_multipeermap_get (friend_peermap,
@@ -2803,6 +2781,7 @@
trail = &finger->trail_list[i];
GNUNET_assert (trail->is_present == GNUNET_YES);
send_trail_teardown (finger, trail);
+ trail->is_present = GNUNET_NO;
}
}
@@ -2850,8 +2829,8 @@
if (trail->trail_length > 0)
{
free_trail (trail);
- trail->is_present = GNUNET_NO;
}
+ trail->is_present = GNUNET_NO;
}
finger->is_present = GNUNET_NO;
@@ -3006,7 +2985,6 @@
/* Before you send a trail compression, get the routing entry
from you routing table. update the fields in routing table
to update your next hop to finger identity. */
- GDS_ROUTING_update_trail_next_hop (trail_id, finger_identity);
GDS_NEIGHBOURS_send_trail_compression (my_identity,
trail_id, finger_identity,
target_friend);
@@ -3306,11 +3284,6 @@
int updated_finger_trail_length;
unsigned int finger_table_index;
- //GDS_ROUTING_test_print();
- //test_friend_peermap_print();
- //test_finger_table_print();
-
-
/* Get the finger_table_index corresponding to finger_value we got from
network.*/
finger_table_index = get_finger_table_index (finger_value, is_predecessor);
@@ -3375,6 +3348,22 @@
add_new_finger (finger_identity, updated_trail,
updated_finger_trail_length,
finger_trail_id, finger_table_index);
}
+ else
+ {
+ /* Existing finger is the closest one. We need to send trail teardown
+ across the trail setup in routing table of all the peers. */
+ if (0 != GNUNET_CRYPTO_cmp_peer_identity (&finger_identity,
&my_identity))
+ {
+ if (updated_finger_trail_length > 0)
+ GDS_NEIGHBOURS_send_trail_teardown (finger_trail_id,
+ GDS_ROUTING_SRC_TO_DEST,
+ updated_trail[0]);
+ else
+ GDS_NEIGHBOURS_send_trail_teardown (finger_trail_id,
+ GDS_ROUTING_SRC_TO_DEST,
+ finger_identity);
+ }
+ }
}
else
{
@@ -3786,19 +3775,16 @@
struct GNUNET_PeerIdentity *current_dest)
{
struct GNUNET_PeerIdentity *next_hop_to_local_best_known_dest;
-
+
/* Choose a local best known hop among your fingers, friends and you. */
next_hop_to_local_best_known_dest = find_successor (final_dest_finger_value,
local_best_known_dest,
new_intermediate_trail_id,
is_predecessor);
- //GDS_ROUTING_test_print();
+
/* Are we just a part of a trail towards a finger (current_destination)? */
if (0 != (GNUNET_CRYPTO_cmp_peer_identity (&my_identity, current_dest)))
{
- struct GNUNET_PeerIdentity print_peer;
- memcpy(&print_peer, current_dest, sizeof (struct GNUNET_PeerIdentity));
-
struct GNUNET_PeerIdentity *closest_peer;
/* Select best successor among one found locally and current_destination
@@ -3830,7 +3816,7 @@
}
}
}
-
+
GNUNET_assert (NULL != next_hop_to_local_best_known_dest);
return next_hop_to_local_best_known_dest;
}
@@ -3887,13 +3873,13 @@
source = trail_setup->source_peer;
is_predecessor = ntohl (trail_setup->is_predecessor);
intermediate_trail_id = trail_setup->intermediate_trail_id;
- new_intermediate_trail_id = GNUNET_new (struct GNUNET_HashCode);
/* Is my routing table full? */
if (GNUNET_YES == GDS_ROUTING_threshold_reached())
{
/* As my routing table is full, I can no longer handle any more trail
* through me */
+
GNUNET_assert (NULL !=
(target_friend =
GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer)));
@@ -3904,6 +3890,8 @@
CONGESTION_TIMEOUT);
return GNUNET_OK;
}
+
+ new_intermediate_trail_id = GNUNET_new (struct GNUNET_HashCode);
local_best_known_dest = GNUNET_new (struct GNUNET_PeerIdentity);
@@ -3952,7 +3940,7 @@
GNUNET_CONTAINER_multipeermap_get (friend_peermap,
next_hop_towards_local_best_known_dest)));
/* FIXME; CHECK IF INTERMEDIATE TRAIL ID is 0 thne pas null. */
-
+ /* URGENT TODO. */
GDS_NEIGHBOURS_send_trail_setup (source,
final_dest_finger_val,
*local_best_known_dest,
@@ -4884,7 +4872,7 @@
GNUNET_break_op (0);
return GNUNET_YES;
}
-
+
trail_rejection = (const struct PeerTrailRejectionMessage *) message;
trail_length = (msize - sizeof (struct PeerTrailRejectionMessage))/
sizeof (struct GNUNET_PeerIdentity);
@@ -5053,8 +5041,8 @@
return GNUNET_OK;
}
- //GDS_ROUTING_test_print();
/* Pass the message to next hop to finally reach to new_first_friend. */
+ /* FIXME THIS FAILS.*/
next_hop = GDS_ROUTING_get_next_hop (trail_id, GDS_ROUTING_SRC_TO_DEST);
if (NULL == next_hop)
{
@@ -5067,6 +5055,7 @@
GNUNET_CONTAINER_multipeermap_get (friend_peermap,
next_hop)));
GDS_ROUTING_remove_trail (trail_id);
+
GDS_NEIGHBOURS_send_trail_compression (trail_compression->source_peer,
trail_id,
trail_compression->new_first_friend,
@@ -5281,6 +5270,14 @@
disconnected_friend)));
remove_friend->trails_count--;
next_hop = GDS_ROUTING_get_next_hop (trail->trail_id,
GDS_ROUTING_SRC_TO_DEST);
+
+ /* Here it may happen that as all the peers got disconnected, the entry
in
+ routing table for that particular trail has been removed, because the
+ previously disconnected peer was either a next hop or prev hop of that
+ peer. */
+ if (NULL == next_hop)
+ continue;
+
GNUNET_assert (0 == (GNUNET_CRYPTO_cmp_peer_identity
(disconnected_friend,
next_hop)));
matching_trails_count++;
@@ -5313,7 +5310,9 @@
struct FriendInfo *remove_friend;
int removed_trails_count;
int i;
-
+
+ //test_finger_table_print();
+
/* Iterate over finger table entries. */
for (i = 0; i < MAX_FINGERS; i++)
{
@@ -5335,26 +5334,33 @@
struct GNUNET_PeerIdentity *next_hop;
struct GNUNET_HashCode trail_id;
+
GNUNET_assert (GNUNET_YES == (remove_finger->trail_list[0].is_present));
/* FIXME: I am adding this check just to ensure that for a finger which
is also a friend, we are storing only one trail and not more. REMOVE
IT AFTERWARDS. */
GNUNET_assert (1 == remove_finger->trails_count);
trail_id = remove_finger->trail_list[0].trail_id;
+
+ /* FIXME: This assertion fails. Check why. */
- GNUNET_assert (NULL !=
- (next_hop =
- GDS_ROUTING_get_next_hop (trail_id,
GDS_ROUTING_SRC_TO_DEST)));
- /* As finger is a friend, you have no trail as such but you have entry
in routing
- * table of source and dest, so next_hop will be same as finger
identity. */
- GNUNET_assert (0 ==
- (GNUNET_CRYPTO_cmp_peer_identity (next_hop,
-
&remove_finger->finger_identity)));
- GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (trail_id));
- GNUNET_assert (NULL !=
- (remove_friend =
- GNUNET_CONTAINER_multipeermap_get (friend_peermap,
- disconnected_peer)));
+ if(NULL !=
+ (next_hop =
+ GDS_ROUTING_get_next_hop (trail_id, GDS_ROUTING_SRC_TO_DEST)))
+ {
+ /* As finger is a friend, you have no trail as such but you have entry
in routing
+ * table of source and dest, so next_hop will be same as finger
identity. */
+ GNUNET_assert (0 ==
+ (GNUNET_CRYPTO_cmp_peer_identity (next_hop,
+
&remove_finger->finger_identity)));
+ GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (trail_id));
+ GNUNET_assert (NULL !=
+ (remove_friend =
+ GNUNET_CONTAINER_multipeermap_get (friend_peermap,
+
disconnected_peer)));
+ }
+
+ remove_finger->trail_list[0].is_present = GNUNET_NO;
remove_friend->trails_count--;
remove_finger->is_present = GNUNET_NO;
memset ((void *)&finger_table[i], 0, sizeof (finger_table[i]));
@@ -5409,7 +5415,7 @@
* disconnected peer is not part of. */
GNUNET_assert (GNUNET_SYSERR != GDS_ROUTING_remove_trail_by_peer (peer));
- GNUNET_assert (0 == remove_friend->trails_count);
+ //GNUNET_assert (0 == remove_friend->trails_count);
/* Remove peer from friend_peermap. */
GNUNET_assert (GNUNET_YES ==
@@ -5585,3 +5591,5 @@
{
return my_identity;
}
+
+/* end of gnunet-service-xdht_neighbours.c */
\ No newline at end of file
Modified: gnunet/src/dht/gnunet-service-xdht_routing.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_routing.c 2014-07-02 19:30:52 UTC
(rev 33905)
+++ gnunet/src/dht/gnunet-service-xdht_routing.c 2014-07-03 08:45:49 UTC
(rev 33906)
@@ -114,6 +114,7 @@
trail = GNUNET_CONTAINER_multihashmap_get (routing_table, &trail_id);
if (NULL == trail)
+
return GNUNET_SYSERR;
trail->next_hop = next_hop;
@@ -135,8 +136,13 @@
trail = GNUNET_CONTAINER_multihashmap_get (routing_table, &trail_id);
if (NULL == trail)
+ {
+ /* If a friend got disconnected and we removed all the entry from the
+ routing table, then trail will be deleted and my identity will not know
+ and when it tries to reach to that finger it fails. thats why
+ assertion always fails in*/
return NULL;
-
+ }
switch (trail_direction)
{
case GDS_ROUTING_SRC_TO_DEST:
@@ -163,7 +169,7 @@
if (NULL == remove_entry)
return GNUNET_NO;
-
+
if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (routing_table,
&remove_trail_id,
remove_entry))
@@ -222,7 +228,7 @@
remove_trail->next_hop);
}
}
-
+
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_remove (routing_table,
&trail_id,
@@ -275,6 +281,8 @@
GDS_ROUTING_remove_trail_by_peer (const struct GNUNET_PeerIdentity *peer)
{
int ret;
+
+
/* No entries in my routing table. */
if (0 == GNUNET_CONTAINER_multihashmap_size(routing_table))
return GNUNET_YES;
Modified: gnunet/src/dht/gnunet-service-xdht_routing.h
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_routing.h 2014-07-02 19:30:52 UTC
(rev 33905)
+++ gnunet/src/dht/gnunet-service-xdht_routing.h 2014-07-03 08:45:49 UTC
(rev 33906)
@@ -123,6 +123,7 @@
GDS_ROUTING_test_print (void);
#endif
+
/**
* Initialize routing subsystem.
*/
Modified: gnunet/src/dht/gnunet_dht_profiler.c
===================================================================
--- gnunet/src/dht/gnunet_dht_profiler.c 2014-07-02 19:30:52 UTC (rev
33905)
+++ gnunet/src/dht/gnunet_dht_profiler.c 2014-07-03 08:45:49 UTC (rev
33906)
@@ -307,18 +307,21 @@
struct ActiveContext *ac = cls;
struct ActiveContext *get_ac = ac->get_ac;
- /* FIXME: check the keys of put and get match or not. */
- if (get_ac->put_data_size != size)
+ /* Check the keys of put and get match or not. */
+ if (0 == memcmp (key, &get_ac->hash, sizeof (struct GNUNET_HashCode)))
{
- DEBUG ("Found a GET with incorrect data length (this may happen, but very
unlikely)\n");
- return;
+ if (get_ac->put_data_size != size)
+ {
+ DEBUG ("Found a GET with incorrect data length (this may happen, but
very unlikely)\n");
+ return;
+ }
+ if (0 != memcmp (data, get_ac->put_data, size))
+ {
+ DEBUG ("Found a GET with incorrect data (this may happen, but very
unlikely)\n");
+ return;
+ }
}
- if (0 != memcmp (data, get_ac->put_data, size))
- {
- DEBUG ("Found a GET with incorrect data (this may happen, but very
unlikely)\n");
- return;
- }
-
+
/* we found the data we are looking for */
DEBUG ("We found a GET request; %u remaining\n", n_gets - (n_gets_fail +
n_gets_ok));
n_gets_ok++;
@@ -553,7 +556,7 @@
{
unsigned int cnt;
unsigned int ac_cnt;
-
+
if (NULL == peers)
{
/* exit */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33906 - gnunet/src/dht,
gnunet <=