[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r29229 - gnunet/src/testbed
From: |
gnunet |
Subject: |
[GNUnet-SVN] r29229 - gnunet/src/testbed |
Date: |
Thu, 12 Sep 2013 12:09:21 +0200 |
Author: harsha
Date: 2013-09-12 12:09:21 +0200 (Thu, 12 Sep 2013)
New Revision: 29229
Modified:
gnunet/src/testbed/testbed_api_topology.c
Log:
- capping node degree in scale free topology
Modified: gnunet/src/testbed/testbed_api_topology.c
===================================================================
--- gnunet/src/testbed/testbed_api_topology.c 2013-09-12 10:03:41 UTC (rev
29228)
+++ gnunet/src/testbed/testbed_api_topology.c 2013-09-12 10:09:21 UTC (rev
29229)
@@ -599,6 +599,8 @@
unsigned int cnt;
unsigned int cnt2;
unsigned int peer;
+ unsigned int random_peer;
+ unsigned int *deg;
unsigned int *etab;
unsigned int *used;
unsigned int links;
@@ -609,35 +611,44 @@
tc->link_array = GNUNET_malloc_large (sizeof (struct OverlayLink) *
tc->link_array_size);
etab = GNUNET_malloc_large (sizeof (unsigned int) * 2 * tc->link_array_size);
-
+ deg = GNUNET_malloc (sizeof (unsigned int) * tc->num_peers);
used = GNUNET_malloc (sizeof (unsigned int) * m);
-
- make_link (&tc->link_array[0], 0, 1, tc); /* Initially connect peer 1 to
peer 0 */
+ /* start by connecting peer 1 to peer 0 */
+ make_link (&tc->link_array[0], 0, 1, tc);
+ deg[0]++;
+ deg[1]++;
etab[2 * links] = 0;
etab[(2 * links) + 1] = 1;
links = 1;
for (peer = 2; peer < tc->num_peers; peer++)
{
+ if (cap < deg[peer])
+ continue;
for (cnt = 0; cnt < GNUNET_MIN (peer, m); cnt++)
{
redo:
- random = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, (2 *
links)
- + cnt);
+ random = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, (2 *
links));
+ random_peer = etab[random];
+ if (cap < deg[random_peer])
+ goto redo;
for (cnt2 = 0; cnt2 < cnt; cnt2++)
- if (etab[random] == used[cnt2])
+ if (random_peer == used[cnt2])
goto redo;
make_link (&tc->link_array[links + cnt], etab[random], peer, tc);
- etab[(2 * links) + cnt] = etab[random];
- used[cnt] = etab[random];
+ deg[random_peer]++;
+ deg[peer]++;
+ used[cnt] = random_peer;
}
for (cnt = 0; cnt < GNUNET_MIN (peer, m); cnt++)
{
+ etab[(2 * links) + cnt] = used[cnt];
etab[(2 * links) + cnt + 1] = peer;
}
links += GNUNET_MIN (peer, m);
}
GNUNET_free (etab);
GNUNET_free (used);
+ GNUNET_free (deg);
GNUNET_assert (links <= tc->link_array_size);
tc->link_array_size = links;
tc->link_array =
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r29229 - gnunet/src/testbed,
gnunet <=