diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2014-02-11 11:50:56 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2014-02-11 11:50:56 +0000 |
commit | 7daab7b7f8478178fe230a816ac590e4f46fc83a (patch) | |
tree | 0f0b9e2b6b84af12612e350d5b6c561fbb8784c6 /src | |
parent | 57562efaac37da015040ba5ade24afb549c67023 (diff) | |
download | gnunet-7daab7b7f8478178fe230a816ac590e4f46fc83a.tar.gz gnunet-7daab7b7f8478178fe230a816ac590e4f46fc83a.zip |
property enforcement
Diffstat (limited to 'src')
-rw-r--r-- | src/ats/experiments/example.exp | 34 | ||||
-rw-r--r-- | src/ats/gnunet-ats-solver-eval.c | 88 | ||||
-rw-r--r-- | src/ats/gnunet-ats-solver-eval.h | 15 |
3 files changed, 86 insertions, 51 deletions
diff --git a/src/ats/experiments/example.exp b/src/ats/experiments/example.exp index 1edd83cfd..bfedcf262 100644 --- a/src/ats/experiments/example.exp +++ b/src/ats/experiments/example.exp | |||
@@ -29,20 +29,22 @@ op-0-plugin = udp | |||
29 | # BANDWIDTH, LATENCY | 29 | # BANDWIDTH, LATENCY |
30 | #op-1-pref = BANDWIDTH | 30 | #op-1-pref = BANDWIDTH |
31 | 31 | ||
32 | #op-1-operation = start_set_property | 32 | op-1-operation = start_request |
33 | #op-1-address-id = 0 | 33 | op-1-peer-id = 0 |
34 | #op-1-peer-id = 0 | 34 | |
35 | |||
36 | op-2-operation = start_set_property | ||
37 | op-2-address-id = 0 | ||
38 | op-2-peer-id = 0 | ||
35 | # constant, linear, sinus, random | 39 | # constant, linear, sinus, random |
36 | #op-1-gen-type = random | 40 | op-2-gen-type = constant |
37 | #op-1-base-rate= 10000 | 41 | op-2-base-rate= 10000 |
38 | #op-1-max-rate = 100000 | 42 | op-2-max-rate = 100000 |
39 | #op-1-frequency = 100 ms | 43 | op-2-frequency = 500 ms |
40 | # bandwidth, latency | 44 | # bandwidth, latency |
41 | # "TERMINATOR", "UTILIZATION_UP", "UTILIZATION_DOWN", "UTILIZATION_PAYLOAD_UP", "UTILIZATION_PAYLOAD_DOWN", "NETWORK_TYPE", "DELAY", "DISTANCE", "COST_WAN", "COST_LAN", "COST_WLAN" | 45 | # "TERMINATOR", "UTILIZATION_UP", "UTILIZATION_DOWN", "UTILIZATION_PAYLOAD_UP", "UTILIZATION_PAYLOAD_DOWN", "NETWORK_TYPE", "DELAY", "DISTANCE", "COST_WAN", "COST_LAN", "COST_WLAN" |
42 | #op-1-property = UTILIZATION_UP | 46 | op-2-property = UTILIZATION_UP |
43 | 47 | ||
44 | op-1-operation = start_request | ||
45 | op-1-peer-id = 0 | ||
46 | 48 | ||
47 | [episode-1] | 49 | [episode-1] |
48 | duration = 2 s | 50 | duration = 2 s |
@@ -60,10 +62,10 @@ op-1-address-id = 1 | |||
60 | op-1-peer-id = 1 | 62 | op-1-peer-id = 1 |
61 | op-1-pref = BANDWIDTH | 63 | op-1-pref = BANDWIDTH |
62 | 64 | ||
63 | #op-2-operation = stop_set_property | 65 | op-2-operation = stop_set_property |
64 | #op-2-address-id = 0 | 66 | op-2-address-id = 0 |
65 | #op-2-peer-id = 0 | 67 | op-2-peer-id = 0 |
66 | #op-2-property = UTILIZATION_UP | 68 | op-2-property = UTILIZATION_UP |
67 | 69 | ||
68 | op-2-operation = stop_request | 70 | op-3-operation = stop_request |
69 | op-2-peer-id = 0 \ No newline at end of file | 71 | op-3-peer-id = 0 \ No newline at end of file |
diff --git a/src/ats/gnunet-ats-solver-eval.c b/src/ats/gnunet-ats-solver-eval.c index aea4f7495..0e0c5bb9f 100644 --- a/src/ats/gnunet-ats-solver-eval.c +++ b/src/ats/gnunet-ats-solver-eval.c | |||
@@ -88,9 +88,9 @@ struct AddressLookupCtx | |||
88 | struct ATS_Address *res; | 88 | struct ATS_Address *res; |
89 | char *plugin; | 89 | char *plugin; |
90 | char *addr; | 90 | char *addr; |
91 | unsigned int address_id; | ||
92 | }; | 91 | }; |
93 | 92 | ||
93 | |||
94 | int find_address_it (void *cls, | 94 | int find_address_it (void *cls, |
95 | const struct GNUNET_PeerIdentity *key, | 95 | const struct GNUNET_PeerIdentity *key, |
96 | void *value) | 96 | void *value) |
@@ -117,6 +117,17 @@ find_peer_by_id (int id) | |||
117 | return NULL; | 117 | return NULL; |
118 | } | 118 | } |
119 | 119 | ||
120 | static struct TestAddress * | ||
121 | find_address_by_id (struct TestPeer *peer, int aid) | ||
122 | { | ||
123 | struct TestAddress *cur; | ||
124 | for (cur = peer->addr_head; NULL != cur; cur = cur->next) | ||
125 | if (cur->aid == aid) | ||
126 | return cur; | ||
127 | return NULL; | ||
128 | } | ||
129 | |||
130 | |||
120 | 131 | ||
121 | /** | 132 | /** |
122 | * Logging | 133 | * Logging |
@@ -253,22 +264,13 @@ static void | |||
253 | set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 264 | set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
254 | { | 265 | { |
255 | struct PropertyGenerator *pg = cls; | 266 | struct PropertyGenerator *pg = cls; |
256 | struct TestPeer *p; | ||
257 | double pref_value; | 267 | double pref_value; |
258 | struct GNUNET_ATS_Information atsi; | 268 | struct GNUNET_ATS_Information atsi; |
259 | 269 | ||
260 | pg->set_task = GNUNET_SCHEDULER_NO_TASK; | 270 | pg->set_task = GNUNET_SCHEDULER_NO_TASK; |
261 | 271 | ||
262 | if (NULL == (p = find_peer_by_id (pg->peer))) | ||
263 | { | ||
264 | GNUNET_break (0); | ||
265 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
266 | "Setting property generation for unknown peer %u\n", pg->peer); | ||
267 | return; | ||
268 | } | ||
269 | |||
270 | if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains_value (sh->addresses, | 272 | if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains_value (sh->addresses, |
271 | &p->peer_id, pg->address)) | 273 | &pg->test_peer->peer_id, pg->test_address->ats_addr)) |
272 | { | 274 | { |
273 | GNUNET_break (0); | 275 | GNUNET_break (0); |
274 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 276 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -289,7 +291,8 @@ set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
289 | 291 | ||
290 | /* set performance here! */ | 292 | /* set performance here! */ |
291 | sh->env.sf.s_bulk_start (sh->solver); | 293 | sh->env.sf.s_bulk_start (sh->solver); |
292 | GAS_normalization_normalize_property (sh->addresses, pg->address, &atsi, 1); | 294 | GAS_normalization_normalize_property (sh->addresses, |
295 | pg->test_address->ats_addr, &atsi, 1); | ||
293 | sh->env.sf.s_bulk_stop (sh->solver); | 296 | sh->env.sf.s_bulk_stop (sh->solver); |
294 | 297 | ||
295 | 298 | ||
@@ -356,7 +359,8 @@ GNUNET_ATS_solver_generate_property_stop (struct PropertyGenerator *pg) | |||
356 | struct PropertyGenerator * | 359 | struct PropertyGenerator * |
357 | GNUNET_ATS_solver_generate_property_start (unsigned int peer, | 360 | GNUNET_ATS_solver_generate_property_start (unsigned int peer, |
358 | unsigned int address_id, | 361 | unsigned int address_id, |
359 | struct ATS_Address *ats_address, | 362 | struct TestPeer *test_peer, |
363 | struct TestAddress *test_address, | ||
360 | enum GeneratorType type, | 364 | enum GeneratorType type, |
361 | long int base_value, | 365 | long int base_value, |
362 | long int value_rate, | 366 | long int value_rate, |
@@ -370,7 +374,8 @@ GNUNET_ATS_solver_generate_property_start (unsigned int peer, | |||
370 | GNUNET_CONTAINER_DLL_insert (prop_gen_head, prop_gen_tail, pg); | 374 | GNUNET_CONTAINER_DLL_insert (prop_gen_head, prop_gen_tail, pg); |
371 | pg->type = type; | 375 | pg->type = type; |
372 | pg->peer = peer; | 376 | pg->peer = peer; |
373 | pg->address = ats_address; | 377 | pg->test_address = test_address; |
378 | pg->test_peer = test_peer; | ||
374 | pg->address_id = address_id; | 379 | pg->address_id = address_id; |
375 | pg->ats_property = ats_property; | 380 | pg->ats_property = ats_property; |
376 | pg->base_value = base_value; | 381 | pg->base_value = base_value; |
@@ -1616,30 +1621,42 @@ create_ats_address (const struct GNUNET_PeerIdentity *peer, | |||
1616 | return aa; | 1621 | return aa; |
1617 | } | 1622 | } |
1618 | 1623 | ||
1624 | |||
1625 | |||
1619 | static void | 1626 | static void |
1620 | enforce_add_address (struct GNUNET_ATS_TEST_Operation *op) | 1627 | enforce_add_address (struct GNUNET_ATS_TEST_Operation *op) |
1621 | { | 1628 | { |
1622 | struct ATS_Address *addr; | ||
1623 | struct TestPeer *p; | 1629 | struct TestPeer *p; |
1630 | struct TestAddress *a; | ||
1624 | 1631 | ||
1625 | if (NULL == (p = find_peer_by_id (op->peer_id))) | 1632 | if (NULL == (p = find_peer_by_id (op->peer_id))) |
1626 | { | 1633 | { |
1627 | p = GNUNET_new (struct TestPeer); | 1634 | p = GNUNET_new (struct TestPeer); |
1628 | p->id = op->peer_id; | 1635 | p->id = op->peer_id; |
1629 | memset (&p->peer_id, '0', sizeof (p->peer_id)); | 1636 | memset (&p->peer_id, op->peer_id, sizeof (p->peer_id)); |
1630 | GNUNET_CONTAINER_DLL_insert (peer_head, peer_tail, p); | 1637 | GNUNET_CONTAINER_DLL_insert (peer_head, peer_tail, p); |
1631 | } | 1638 | } |
1632 | 1639 | ||
1633 | addr = create_ats_address (&p->peer_id, op->plugin, op->address, | 1640 | if (NULL != (a = find_address_by_id (p, op->address_id))) |
1641 | { | ||
1642 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Duplicate address %u for peer %u\n", | ||
1643 | op->address_id, op->peer_id); | ||
1644 | } | ||
1645 | |||
1646 | a = GNUNET_new (struct TestAddress); | ||
1647 | a->aid = op->address_id; | ||
1648 | a->ats_addr = create_ats_address (&p->peer_id, op->plugin, op->address, | ||
1634 | strlen (op->address) + 1, op->address_session); | 1649 | strlen (op->address) + 1, op->address_session); |
1650 | memset (&p->peer_id, op->peer_id, sizeof (p->peer_id)); | ||
1651 | GNUNET_CONTAINER_DLL_insert (p->addr_head, p->addr_tail, a); | ||
1635 | 1652 | ||
1636 | GNUNET_CONTAINER_multipeermap_put (sh->addresses, &p->peer_id, addr, | 1653 | GNUNET_CONTAINER_multipeermap_put (sh->addresses, &p->peer_id, a->ats_addr, |
1637 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1654 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1638 | 1655 | ||
1639 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u\n", | 1656 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u\n", |
1640 | op->address_id, op->peer_id); | 1657 | op->address_id, op->peer_id); |
1641 | 1658 | ||
1642 | sh->env.sf.s_add (sh->solver, addr, op->address_network); | 1659 | sh->env.sf.s_add (sh->solver, a->ats_addr, op->address_network); |
1643 | 1660 | ||
1644 | } | 1661 | } |
1645 | 1662 | ||
@@ -1648,6 +1665,7 @@ static void | |||
1648 | enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) | 1665 | enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) |
1649 | { | 1666 | { |
1650 | struct TestPeer *p; | 1667 | struct TestPeer *p; |
1668 | struct TestAddress *a; | ||
1651 | struct AddressLookupCtx ctx; | 1669 | struct AddressLookupCtx ctx; |
1652 | 1670 | ||
1653 | if (NULL == (p = find_peer_by_id (op->peer_id))) | 1671 | if (NULL == (p = find_peer_by_id (op->peer_id))) |
@@ -1671,6 +1689,15 @@ enforce_del_address (struct GNUNET_ATS_TEST_Operation *op) | |||
1671 | return; | 1689 | return; |
1672 | } | 1690 | } |
1673 | 1691 | ||
1692 | if (NULL == (a = find_address_by_id (p, op->address_id))) | ||
1693 | { | ||
1694 | GNUNET_break (0); | ||
1695 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
1696 | "Deleting address for unknown peer %u\n", op->peer_id); | ||
1697 | return; | ||
1698 | } | ||
1699 | GNUNET_CONTAINER_DLL_remove (p->addr_head, p->addr_tail, a); | ||
1700 | |||
1674 | GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res); | 1701 | GNUNET_CONTAINER_multipeermap_remove (sh->addresses, &p->peer_id, ctx.res); |
1675 | 1702 | ||
1676 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Removing address %u for peer %u\n", | 1703 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Removing address %u for peer %u\n", |
@@ -1685,15 +1712,15 @@ static void | |||
1685 | enforce_start_property (struct GNUNET_ATS_TEST_Operation *op) | 1712 | enforce_start_property (struct GNUNET_ATS_TEST_Operation *op) |
1686 | { | 1713 | { |
1687 | struct PropertyGenerator *pg; | 1714 | struct PropertyGenerator *pg; |
1715 | struct TestPeer *p; | ||
1716 | struct TestAddress *a; | ||
1717 | |||
1688 | if (NULL != (pg = find_prop_gen (op->peer_id, op->address_id, op->prop_type))) | 1718 | if (NULL != (pg = find_prop_gen (op->peer_id, op->address_id, op->prop_type))) |
1689 | { | 1719 | { |
1690 | GNUNET_ATS_solver_generate_property_stop (pg); | 1720 | GNUNET_ATS_solver_generate_property_stop (pg); |
1691 | GNUNET_free (pg); | 1721 | GNUNET_free (pg); |
1692 | } | 1722 | } |
1693 | 1723 | ||
1694 | struct TestPeer *p; | ||
1695 | struct AddressLookupCtx ctx; | ||
1696 | |||
1697 | if (NULL == (p = find_peer_by_id (op->peer_id))) | 1724 | if (NULL == (p = find_peer_by_id (op->peer_id))) |
1698 | { | 1725 | { |
1699 | GNUNET_break (0); | 1726 | GNUNET_break (0); |
@@ -1702,23 +1729,17 @@ enforce_start_property (struct GNUNET_ATS_TEST_Operation *op) | |||
1702 | return; | 1729 | return; |
1703 | } | 1730 | } |
1704 | 1731 | ||
1705 | ctx.plugin = op->plugin; | 1732 | if (NULL == (a = find_address_by_id (p, op->address_id))) |
1706 | ctx.addr = op->address; | ||
1707 | ctx.res = NULL; | ||
1708 | GNUNET_CONTAINER_multipeermap_get_multiple (sh->addresses, &p->peer_id, | ||
1709 | find_address_it, &ctx); | ||
1710 | if (NULL == ctx.res) | ||
1711 | { | 1733 | { |
1712 | GNUNET_break (0); | 1734 | GNUNET_break (0); |
1713 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1735 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1714 | "Starting property generation for unknown address for peer %u\n", | 1736 | "Setting proprterty for unknown address %u\n", op->peer_id); |
1715 | op->peer_id); | ||
1716 | return; | 1737 | return; |
1717 | } | 1738 | } |
1718 | 1739 | ||
1719 | GNUNET_ATS_solver_generate_property_start (op->peer_id, | 1740 | GNUNET_ATS_solver_generate_property_start (op->peer_id, |
1720 | op->address_id, | 1741 | op->address_id, |
1721 | ctx.res, | 1742 | p, a, |
1722 | op->gen_type, | 1743 | op->gen_type, |
1723 | op->base_rate, | 1744 | op->base_rate, |
1724 | op->max_rate, | 1745 | op->max_rate, |
@@ -2419,7 +2440,6 @@ done () | |||
2419 | { | 2440 | { |
2420 | next = cur->next; | 2441 | next = cur->next; |
2421 | GNUNET_CONTAINER_DLL_remove (peer_head, peer_tail, cur); | 2442 | GNUNET_CONTAINER_DLL_remove (peer_head, peer_tail, cur); |
2422 | GNUNET_break (0); | ||
2423 | GNUNET_CONTAINER_multipeermap_iterate (sh->env.addresses, &free_all_it, NULL); | 2443 | GNUNET_CONTAINER_multipeermap_iterate (sh->env.addresses, &free_all_it, NULL); |
2424 | 2444 | ||
2425 | GNUNET_free (cur); | 2445 | GNUNET_free (cur); |
diff --git a/src/ats/gnunet-ats-solver-eval.h b/src/ats/gnunet-ats-solver-eval.h index 4fa69e59d..57cca782d 100644 --- a/src/ats/gnunet-ats-solver-eval.h +++ b/src/ats/gnunet-ats-solver-eval.h | |||
@@ -90,9 +90,21 @@ struct TestPeer | |||
90 | 90 | ||
91 | int id; | 91 | int id; |
92 | struct GNUNET_PeerIdentity peer_id; | 92 | struct GNUNET_PeerIdentity peer_id; |
93 | |||
94 | struct TestAddress *addr_head; | ||
95 | struct TestAddress *addr_tail; | ||
93 | }; | 96 | }; |
94 | 97 | ||
95 | 98 | ||
99 | struct TestAddress | ||
100 | { | ||
101 | struct TestAddress *next; | ||
102 | struct TestAddress *prev; | ||
103 | |||
104 | int aid; | ||
105 | struct ATS_Address *ats_addr; | ||
106 | }; | ||
107 | |||
96 | struct Episode; | 108 | struct Episode; |
97 | 109 | ||
98 | struct Experiment; | 110 | struct Experiment; |
@@ -202,7 +214,8 @@ struct PropertyGenerator | |||
202 | unsigned int peer; | 214 | unsigned int peer; |
203 | unsigned int address_id; | 215 | unsigned int address_id; |
204 | 216 | ||
205 | struct ATS_Address *address; | 217 | struct TestPeer *test_peer; |
218 | struct TestAddress *test_address; | ||
206 | uint32_t ats_property; | 219 | uint32_t ats_property; |
207 | 220 | ||
208 | long int base_value; | 221 | long int base_value; |