[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r32300 - in gnunet/src/ats: . experiments
From: |
gnunet |
Subject: |
[GNUnet-SVN] r32300 - in gnunet/src/ats: . experiments |
Date: |
Tue, 11 Feb 2014 12:50:56 +0100 |
Author: wachs
Date: 2014-02-11 12:50:56 +0100 (Tue, 11 Feb 2014)
New Revision: 32300
Modified:
gnunet/src/ats/experiments/example.exp
gnunet/src/ats/gnunet-ats-solver-eval.c
gnunet/src/ats/gnunet-ats-solver-eval.h
Log:
property enforcement
Modified: gnunet/src/ats/experiments/example.exp
===================================================================
--- gnunet/src/ats/experiments/example.exp 2014-02-11 11:22:07 UTC (rev
32299)
+++ gnunet/src/ats/experiments/example.exp 2014-02-11 11:50:56 UTC (rev
32300)
@@ -29,20 +29,22 @@
# BANDWIDTH, LATENCY
#op-1-pref = BANDWIDTH
-#op-1-operation = start_set_property
-#op-1-address-id = 0
-#op-1-peer-id = 0
+op-1-operation = start_request
+op-1-peer-id = 0
+
+
+op-2-operation = start_set_property
+op-2-address-id = 0
+op-2-peer-id = 0
# constant, linear, sinus, random
-#op-1-gen-type = random
-#op-1-base-rate= 10000
-#op-1-max-rate = 100000
-#op-1-frequency = 100 ms
+op-2-gen-type = constant
+op-2-base-rate= 10000
+op-2-max-rate = 100000
+op-2-frequency = 500 ms
# bandwidth, latency
# "TERMINATOR", "UTILIZATION_UP", "UTILIZATION_DOWN",
"UTILIZATION_PAYLOAD_UP", "UTILIZATION_PAYLOAD_DOWN", "NETWORK_TYPE", "DELAY",
"DISTANCE", "COST_WAN", "COST_LAN", "COST_WLAN"
-#op-1-property = UTILIZATION_UP
+op-2-property = UTILIZATION_UP
-op-1-operation = start_request
-op-1-peer-id = 0
[episode-1]
duration = 2 s
@@ -60,10 +62,10 @@
op-1-peer-id = 1
op-1-pref = BANDWIDTH
-#op-2-operation = stop_set_property
-#op-2-address-id = 0
-#op-2-peer-id = 0
-#op-2-property = UTILIZATION_UP
+op-2-operation = stop_set_property
+op-2-address-id = 0
+op-2-peer-id = 0
+op-2-property = UTILIZATION_UP
-op-2-operation = stop_request
-op-2-peer-id = 0
\ No newline at end of file
+op-3-operation = stop_request
+op-3-peer-id = 0
\ No newline at end of file
Modified: gnunet/src/ats/gnunet-ats-solver-eval.c
===================================================================
--- gnunet/src/ats/gnunet-ats-solver-eval.c 2014-02-11 11:22:07 UTC (rev
32299)
+++ gnunet/src/ats/gnunet-ats-solver-eval.c 2014-02-11 11:50:56 UTC (rev
32300)
@@ -88,9 +88,9 @@
struct ATS_Address *res;
char *plugin;
char *addr;
- unsigned int address_id;
};
+
int find_address_it (void *cls,
const struct GNUNET_PeerIdentity *key,
void *value)
@@ -117,7 +117,18 @@
return NULL;
}
+static struct TestAddress *
+find_address_by_id (struct TestPeer *peer, int aid)
+{
+ struct TestAddress *cur;
+ for (cur = peer->addr_head; NULL != cur; cur = cur->next)
+ if (cur->aid == aid)
+ return cur;
+ return NULL;
+}
+
+
/**
* Logging
*/
@@ -253,22 +264,13 @@
set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct PropertyGenerator *pg = cls;
- struct TestPeer *p;
double pref_value;
struct GNUNET_ATS_Information atsi;
pg->set_task = GNUNET_SCHEDULER_NO_TASK;
- if (NULL == (p = find_peer_by_id (pg->peer)))
- {
- GNUNET_break (0);
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Setting property generation for unknown peer %u\n", pg->peer);
- return;
- }
-
if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains_value (sh->addresses,
- &p->peer_id, pg->address))
+ &pg->test_peer->peer_id, pg->test_address->ats_addr))
{
GNUNET_break (0);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -289,7 +291,8 @@
/* set performance here! */
sh->env.sf.s_bulk_start (sh->solver);
- GAS_normalization_normalize_property (sh->addresses, pg->address, &atsi, 1);
+ GAS_normalization_normalize_property (sh->addresses,
+ pg->test_address->ats_addr, &atsi, 1);
sh->env.sf.s_bulk_stop (sh->solver);
@@ -356,7 +359,8 @@
struct PropertyGenerator *
GNUNET_ATS_solver_generate_property_start (unsigned int peer,
unsigned int address_id,
- struct ATS_Address *ats_address,
+ struct TestPeer *test_peer,
+ struct TestAddress *test_address,
enum GeneratorType type,
long int base_value,
long int value_rate,
@@ -370,7 +374,8 @@
GNUNET_CONTAINER_DLL_insert (prop_gen_head, prop_gen_tail, pg);
pg->type = type;
pg->peer = peer;
- pg->address = ats_address;
+ pg->test_address = test_address;
+ pg->test_peer = test_peer;
pg->address_id = address_id;
pg->ats_property = ats_property;
pg->base_value = base_value;
@@ -1616,30 +1621,42 @@
return aa;
}
+
+
static void
enforce_add_address (struct GNUNET_ATS_TEST_Operation *op)
{
- struct ATS_Address *addr;
struct TestPeer *p;
+ struct TestAddress *a;
if (NULL == (p = find_peer_by_id (op->peer_id)))
{
p = GNUNET_new (struct TestPeer);
p->id = op->peer_id;
- memset (&p->peer_id, '0', sizeof (p->peer_id));
+ memset (&p->peer_id, op->peer_id, sizeof (p->peer_id));
GNUNET_CONTAINER_DLL_insert (peer_head, peer_tail, p);
}
- addr = create_ats_address (&p->peer_id, op->plugin, op->address,
+ if (NULL != (a = find_address_by_id (p, op->address_id)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Duplicate address %u for peer %u\n",
+ op->address_id, op->peer_id);
+ }
+
+ a = GNUNET_new (struct TestAddress);
+ a->aid = op->address_id;
+ a->ats_addr = create_ats_address (&p->peer_id, op->plugin, op->address,
strlen (op->address) + 1, op->address_session);
+ memset (&p->peer_id, op->peer_id, sizeof (p->peer_id));
+ GNUNET_CONTAINER_DLL_insert (p->addr_head, p->addr_tail, a);
- GNUNET_CONTAINER_multipeermap_put (sh->addresses, &p->peer_id, addr,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+ GNUNET_CONTAINER_multipeermap_put (sh->addresses, &p->peer_id, a->ats_addr,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u\n",
- op->address_id, op->peer_id);
+ op->address_id, op->peer_id);
- sh->env.sf.s_add (sh->solver, addr, op->address_network);
+ sh->env.sf.s_add (sh->solver, a->ats_addr, op->address_network);
}
@@ -1648,6 +1665,7 @@
enforce_del_address (struct GNUNET_ATS_TEST_Operation *op)
{
struct TestPeer *p;
+ struct TestAddress *a;
struct AddressLookupCtx ctx;
if (NULL == (p = find_peer_by_id (op->peer_id)))
@@ -1671,6 +1689,15 @@
return;
}
+ if (NULL == (a = find_address_by_id (p, op->address_id)))
+ {
+ GNUNET_break (0);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Deleting address for unknown peer %u\n", op->peer_id);
+ return;
+ }
+ GNUNET_CONTAINER_DLL_remove (p->addr_head, p->addr_tail, a);
+
GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Removing address %u for peer %u\n",
@@ -1685,15 +1712,15 @@
enforce_start_property (struct GNUNET_ATS_TEST_Operation *op)
{
struct PropertyGenerator *pg;
+ struct TestPeer *p;
+ struct TestAddress *a;
+
if (NULL != (pg = find_prop_gen (op->peer_id, op->address_id,
op->prop_type)))
{
GNUNET_ATS_solver_generate_property_stop (pg);
GNUNET_free (pg);
}
- struct TestPeer *p;
- struct AddressLookupCtx ctx;
-
if (NULL == (p = find_peer_by_id (op->peer_id)))
{
GNUNET_break (0);
@@ -1702,23 +1729,17 @@
return;
}
- ctx.plugin = op->plugin;
- ctx.addr = op->address;
- ctx.res = NULL;
- GNUNET_CONTAINER_multipeermap_get_multiple (sh->addresses, &p->peer_id,
- find_address_it, &ctx);
- if (NULL == ctx.res)
+ if (NULL == (a = find_address_by_id (p, op->address_id)))
{
GNUNET_break (0);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Starting property generation for unknown address for peer %u\n",
- op->peer_id);
+ "Setting proprterty for unknown address %u\n", op->peer_id);
return;
}
GNUNET_ATS_solver_generate_property_start (op->peer_id,
op->address_id,
- ctx.res,
+ p, a,
op->gen_type,
op->base_rate,
op->max_rate,
@@ -2419,7 +2440,6 @@
{
next = cur->next;
GNUNET_CONTAINER_DLL_remove (peer_head, peer_tail, cur);
- GNUNET_break (0);
GNUNET_CONTAINER_multipeermap_iterate (sh->env.addresses, &free_all_it,
NULL);
GNUNET_free (cur);
Modified: gnunet/src/ats/gnunet-ats-solver-eval.h
===================================================================
--- gnunet/src/ats/gnunet-ats-solver-eval.h 2014-02-11 11:22:07 UTC (rev
32299)
+++ gnunet/src/ats/gnunet-ats-solver-eval.h 2014-02-11 11:50:56 UTC (rev
32300)
@@ -90,9 +90,21 @@
int id;
struct GNUNET_PeerIdentity peer_id;
+
+ struct TestAddress *addr_head;
+ struct TestAddress *addr_tail;
};
+struct TestAddress
+{
+ struct TestAddress *next;
+ struct TestAddress *prev;
+
+ int aid;
+ struct ATS_Address *ats_addr;
+};
+
struct Episode;
struct Experiment;
@@ -202,7 +214,8 @@
unsigned int peer;
unsigned int address_id;
- struct ATS_Address *address;
+ struct TestPeer *test_peer;
+ struct TestAddress *test_address;
uint32_t ats_property;
long int base_value;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r32300 - in gnunet/src/ats: . experiments,
gnunet <=