aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Oehlmann <oehlmann@in.tum.de>2013-10-08 20:56:51 +0000
committerFabian Oehlmann <oehlmann@in.tum.de>2013-10-08 20:56:51 +0000
commit9a2788bae8470a70e6a307b3f56849435ed76f1b (patch)
treea96351446e9f0bf2edf3c454e16320204377f800
parent44185ad408c3a1197ff7468b23e116e0bc70a876 (diff)
downloadgnunet-9a2788bae8470a70e6a307b3f56849435ed76f1b.tar.gz
gnunet-9a2788bae8470a70e6a307b3f56849435ed76f1b.zip
ats_ril: made compatible to plugin change
-rw-r--r--src/ats/Makefile.am15
-rwxr-xr-xsrc/ats/libgnunet_plugin_ats_ril.c (renamed from src/ats/gnunet-service-ats-solver_ril.c)153
-rwxr-xr-xsrc/ats/libgnunet_plugin_ats_ril.h (renamed from src/ats/gnunet-service-ats-solver_ril.h)59
3 files changed, 70 insertions, 157 deletions
diff --git a/src/ats/Makefile.am b/src/ats/Makefile.am
index fd2156213..1cd5e7f34 100644
--- a/src/ats/Makefile.am
+++ b/src/ats/Makefile.am
@@ -35,7 +35,8 @@ lib_LTLIBRARIES = libgnunetats.la
35 35
36plugin_LTLIBRARIES = \ 36plugin_LTLIBRARIES = \
37 libgnunet_plugin_ats_proportional.la \ 37 libgnunet_plugin_ats_proportional.la \
38 $(GN_MLP_LIB) 38 $(GN_MLP_LIB) \
39 libgnunet_plugin_ats_ril.la
39 40
40libgnunetats_la_SOURCES = \ 41libgnunetats_la_SOURCES = \
41 ats_api_scheduling.c \ 42 ats_api_scheduling.c \
@@ -96,12 +97,12 @@ TESTING_TESTS = \
96 $(GN_MLP_ADD_REQUEST_ADDRESS) \ 97 $(GN_MLP_ADD_REQUEST_ADDRESS) \
97 $(GN_MLP_REQUEST_ADD_ADDRESS) \ 98 $(GN_MLP_REQUEST_ADD_ADDRESS) \
98 $(GN_MLP_REQUEST_DELETE_ADDRESS) \ 99 $(GN_MLP_REQUEST_DELETE_ADDRESS) \
99 $(GN_MLP_ALTERNATIVE_DELETE_ADDRESS) 100 $(GN_MLP_ALTERNATIVE_DELETE_ADDRESS) \
100# test_ats_solver_add_address_ril 101 test_ats_solver_add_address_ril \
101# test_ats_solver_add_address_and_request_ril 102 test_ats_solver_add_address_and_request_ril \
102# test_ats_solver_request_and_add_address_ril 103 test_ats_solver_request_and_add_address_ril \
103# test_ats_solver_request_and_delete_address_ril 104 test_ats_solver_request_and_delete_address_ril \
104# test_ats_solver_alternative_after_delete_address_ril 105 test_ats_solver_alternative_after_delete_address_ril
105 106
106# test_ats_api_scheduling_min_bw 107# test_ats_api_scheduling_min_bw
107# test_ats_api_scheduling_check_min_bw_alt 108# test_ats_api_scheduling_check_min_bw_alt
diff --git a/src/ats/gnunet-service-ats-solver_ril.c b/src/ats/libgnunet_plugin_ats_ril.c
index e0ba317bb..b829f3357 100755
--- a/src/ats/gnunet-service-ats-solver_ril.c
+++ b/src/ats/libgnunet_plugin_ats_ril.c
@@ -19,16 +19,12 @@
19 */ 19 */
20 20
21/** 21/**
22 * @file ats/gnunet-service-ats-solver_ril.c 22 * @file ats/libgnunet_plugin_ats_ril.c
23 * @brief ATS reinforcement learning solver 23 * @brief ATS reinforcement learning solver
24 * @author Fabian Oehlmann 24 * @author Fabian Oehlmann
25 * @author Matthias Wachs 25 * @author Matthias Wachs
26 */ 26 */
27#include "platform.h" 27#include "libgnunet_plugin_ats_ril.h"
28#include "float.h"
29#include "gnunet_util_lib.h"
30#include "gnunet-service-ats_addresses.h"
31#include "gnunet_statistics_service.h"
32 28
33#define LOG(kind,...) GNUNET_log_from (kind, "ats-ril",__VA_ARGS__) 29#define LOG(kind,...) GNUNET_log_from (kind, "ats-ril",__VA_ARGS__)
34 30
@@ -285,6 +281,11 @@ struct RIL_Callbacks
285struct GAS_RIL_Handle 281struct GAS_RIL_Handle
286{ 282{
287 /** 283 /**
284 *
285 */
286 struct GNUNET_ATS_PluginEnvironment *plugin_envi;
287
288 /**
288 * Statistics handle 289 * Statistics handle
289 */ 290 */
290 struct GNUNET_STATISTICS_Handle *stats; 291 struct GNUNET_STATISTICS_Handle *stats;
@@ -300,16 +301,6 @@ struct GAS_RIL_Handle
300 struct RIL_Callbacks *callbacks; 301 struct RIL_Callbacks *callbacks;
301 302
302 /** 303 /**
303 * Bulk lock
304 */
305 int bulk_lock;
306
307 /**
308 * Number of changes while solver was locked
309 */
310 int bulk_requests;
311
312 /**
313 * Number of performed time-steps 304 * Number of performed time-steps
314 */ 305 */
315 unsigned long long step_count; 306 unsigned long long step_count;
@@ -1253,71 +1244,32 @@ GAS_ril_address_change_preference (void *s,
1253 */ 1244 */
1254} 1245}
1255 1246
1256/** 1247//TODO doxygen
1257 * Init the reinforcement learning problem solver
1258 *
1259 * Quotas:
1260 * network[i] contains the network type as type GNUNET_ATS_NetworkType[i]
1261 * out_quota[i] contains outbound quota for network type i
1262 * in_quota[i] contains inbound quota for network type i
1263 *
1264 * Example
1265 * network = {GNUNET_ATS_NET_UNSPECIFIED, GNUNET_ATS_NET_LOOPBACK, GNUNET_ATS_NET_LAN, GNUNET_ATS_NET_WAN, GNUNET_ATS_NET_WLAN}
1266 * network[2] == GNUNET_ATS_NET_LAN
1267 * out_quota[2] == 65353
1268 * in_quota[2] == 65353
1269 *
1270 * @param cfg configuration handle
1271 * @param stats the GNUNET_STATISTICS handle
1272 * @param network array of GNUNET_ATS_NetworkType with length dest_length
1273 * @param addresses hashmap containing all addresses
1274 * @param out_quota array of outbound quotas
1275 * @param in_quota array of outbound quota
1276 * @param dest_length array length for quota arrays
1277 * @param bw_changed_cb callback for changed bandwidth amounts
1278 * @param bw_changed_cb_cls cls for callback
1279 * @param get_preference callback to get relative preferences for a peer
1280 * @param get_preference_cls cls for callback to get relative preferences
1281 * @param get_properties_cls for callback to get relative properties
1282 * @param get_properties_cls cls for callback to get relative properties
1283 * @return handle for the solver on success, NULL on fail
1284 */
1285void * 1248void *
1286GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg, 1249libgnunet_plugin_ats_ril_init (void *cls)
1287 const struct GNUNET_STATISTICS_Handle *stats,
1288 const struct GNUNET_CONTAINER_MultiPeerMap *addresses,
1289 int *network,
1290 unsigned long long *out_quota,
1291 unsigned long long *in_quota,
1292 int dest_length,
1293 GAS_bandwidth_changed_cb bw_changed_cb,
1294 void *bw_changed_cb_cls,
1295 GAS_get_preferences get_preference,
1296 void *get_preference_cls,
1297 GAS_get_properties get_properties,
1298 void *get_properties_cls)
1299{ 1250{
1251 struct GNUNET_ATS_PluginEnvironment *env = cls;
1252 struct GAS_RIL_Handle *solver = GNUNET_new (struct GAS_RIL_Handle);;
1253 struct RIL_Network * cur;
1300 int c; 1254 int c;
1301 unsigned long long tmp; 1255 unsigned long long tmp;
1302 char *string; 1256 char *string;
1303 struct RIL_Network * cur;
1304 struct GAS_RIL_Handle *solver = GNUNET_new (struct GAS_RIL_Handle);
1305 1257
1306 LOG(GNUNET_ERROR_TYPE_DEBUG, "API_init() Initializing RIL solver\n"); 1258 LOG(GNUNET_ERROR_TYPE_DEBUG, "API_init() Initializing RIL solver\n");
1307 1259
1308 GNUNET_assert(NULL != cfg); 1260 GNUNET_assert(NULL != env);
1309 GNUNET_assert(NULL != stats); 1261 GNUNET_assert(NULL != env->cfg);
1310 GNUNET_assert(NULL != network); 1262 GNUNET_assert(NULL != env->stats);
1311 GNUNET_assert(NULL != bw_changed_cb); 1263 GNUNET_assert(NULL != env->bandwidth_changed_cb);
1312 GNUNET_assert(NULL != get_preference); 1264 GNUNET_assert(NULL != env->get_preferences_cb);
1313 GNUNET_assert(NULL != get_properties); 1265 GNUNET_assert(NULL != env->get_property_cb);
1314 1266
1315 if (GNUNET_OK 1267 if (GNUNET_OK
1316 != GNUNET_CONFIGURATION_get_value_time (cfg, "ats", "RIL_STEP_TIME", &solver->step_time)) 1268 != GNUNET_CONFIGURATION_get_value_time (env->cfg, "ats", "RIL_STEP_TIME", &solver->step_time))
1317 { 1269 {
1318 solver->step_time = RIL_DEFAULT_STEP_TIME; 1270 solver->step_time = RIL_DEFAULT_STEP_TIME;
1319 } 1271 }
1320 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, "ats", "RIL_ALGORITHM", &string) 1272 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (env->cfg, "ats", "RIL_ALGORITHM", &string)
1321 && NULL != string && 0 == strcmp (string, "SARSA")) 1273 && NULL != string && 0 == strcmp (string, "SARSA"))
1322 { 1274 {
1323 solver->parameters.algorithm = RIL_ALGO_SARSA; 1275 solver->parameters.algorithm = RIL_ALGO_SARSA;
@@ -1326,7 +1278,7 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1326 { 1278 {
1327 solver->parameters.algorithm = RIL_DEFAULT_ALGORITHM; 1279 solver->parameters.algorithm = RIL_DEFAULT_ALGORITHM;
1328 } 1280 }
1329 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (cfg, "ats", "RIL_DISCOUNT_FACTOR", &tmp)) 1281 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats", "RIL_DISCOUNT_FACTOR", &tmp))
1330 { 1282 {
1331 solver->parameters.gamma = (double) tmp / 100; 1283 solver->parameters.gamma = (double) tmp / 100;
1332 } 1284 }
@@ -1334,7 +1286,7 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1334 { 1286 {
1335 solver->parameters.gamma = RIL_DEFAULT_DISCOUNT_FACTOR; 1287 solver->parameters.gamma = RIL_DEFAULT_DISCOUNT_FACTOR;
1336 } 1288 }
1337 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (cfg, "ats", "RIL_GRADIENT_STEP_SIZE", &tmp)) 1289 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats", "RIL_GRADIENT_STEP_SIZE", &tmp))
1338 { 1290 {
1339 solver->parameters.alpha = (double) tmp / 100; 1291 solver->parameters.alpha = (double) tmp / 100;
1340 } 1292 }
@@ -1342,7 +1294,7 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1342 { 1294 {
1343 solver->parameters.alpha = RIL_DEFAULT_GRADIENT_STEP_SIZE; 1295 solver->parameters.alpha = RIL_DEFAULT_GRADIENT_STEP_SIZE;
1344 } 1296 }
1345 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (cfg, "ats", "RIL_TRACE_DECAY", &tmp)) 1297 if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats", "RIL_TRACE_DECAY", &tmp))
1346 { 1298 {
1347 solver->parameters.lambda = (double) tmp / 100; 1299 solver->parameters.lambda = (double) tmp / 100;
1348 } 1300 }
@@ -1351,27 +1303,40 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1351 solver->parameters.lambda = RIL_DEFAULT_TRACE_DECAY; 1303 solver->parameters.lambda = RIL_DEFAULT_TRACE_DECAY;
1352 } 1304 }
1353 1305
1354 solver->stats = (struct GNUNET_STATISTICS_Handle *) stats; 1306 env->sf.s_add = &GAS_ril_address_add;
1307 env->sf.s_address_update_property = &GAS_ril_address_property_changed;
1308 env->sf.s_address_update_session = &GAS_ril_address_session_changed;
1309 env->sf.s_address_update_inuse = &GAS_ril_address_inuse_changed;
1310 env->sf.s_address_update_network = &GAS_ril_address_change_network;
1311 env->sf.s_get = &GAS_ril_get_preferred_address;
1312 env->sf.s_get_stop = &GAS_ril_stop_get_preferred_address;
1313 env->sf.s_pref = &GAS_ril_address_change_preference;
1314 env->sf.s_feedback = &GAS_ril_address_preference_feedback;
1315 env->sf.s_del = &GAS_ril_address_delete;
1316 env->sf.s_bulk_start = &GAS_ril_bulk_start;
1317 env->sf.s_bulk_stop = &GAS_ril_bulk_stop;
1318
1319 solver->plugin_envi = env;
1320 solver->stats = (struct GNUNET_STATISTICS_Handle *) env->stats;
1355 solver->callbacks = GNUNET_malloc (sizeof (struct RIL_Callbacks)); 1321 solver->callbacks = GNUNET_malloc (sizeof (struct RIL_Callbacks));
1356 solver->callbacks->bw_changed = bw_changed_cb; 1322 solver->callbacks->bw_changed = env->bandwidth_changed_cb;
1357 solver->callbacks->bw_changed_cls = bw_changed_cb_cls; 1323 solver->callbacks->bw_changed_cls = env->bw_changed_cb_cls;
1358 solver->callbacks->get_preferences = get_preference; 1324 solver->callbacks->get_preferences = env->get_preferences_cb;
1359 solver->callbacks->get_preferences_cls = get_preference_cls; 1325 solver->callbacks->get_preferences_cls = env->get_preference_cls;
1360 solver->callbacks->get_properties = get_properties; 1326 solver->callbacks->get_properties = env->get_property_cb;
1361 solver->callbacks->get_properties_cls = get_properties_cls; 1327 solver->callbacks->get_properties_cls = env->get_property_cls;
1362 solver->networks_count = dest_length; 1328 solver->networks_count = env->network_count;
1363 solver->network_entries = GNUNET_malloc (dest_length * sizeof (struct RIL_Network)); 1329 solver->network_entries = GNUNET_malloc (env->network_count * sizeof (struct RIL_Network));
1364 solver->bulk_lock = GNUNET_NO; 1330 solver->addresses = env->addresses;
1365 solver->addresses = addresses;
1366 solver->step_count = 0; 1331 solver->step_count = 0;
1367 1332
1368 for (c = 0; c < dest_length; c++) 1333 for (c = 0; c < env->network_count; c++)
1369 { 1334 {
1370 cur = &solver->network_entries[c]; 1335 cur = &solver->network_entries[c];
1371 cur->type = network[c]; 1336 cur->type = env->networks[c];
1372 cur->bw_in_available = in_quota[c]; 1337 cur->bw_in_available = env->in_quota[c];
1373 cur->bw_in_assigned = 0; 1338 cur->bw_in_assigned = 0;
1374 cur->bw_out_available = out_quota[c]; 1339 cur->bw_out_available = env->out_quota[c];
1375 cur->bw_out_assigned = 0; 1340 cur->bw_out_assigned = 0;
1376 } 1341 }
1377 1342
@@ -1382,15 +1347,11 @@ GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
1382 return solver; 1347 return solver;
1383} 1348}
1384 1349
1385/** 1350//TODO doxygen
1386 * Shutdown the reinforcement learning problem solver 1351void *
1387 * 1352libgnunet_plugin_ats_ril_done (void *cls)
1388 * @param solver the respective handle to shutdown
1389 */
1390void
1391GAS_ril_done (void * solver)
1392{ 1353{
1393 struct GAS_RIL_Handle *s = solver; 1354 struct GAS_RIL_Handle *s = cls;
1394 struct RIL_Peer_Agent *cur_agent; 1355 struct RIL_Peer_Agent *cur_agent;
1395 struct RIL_Peer_Agent *next_agent; 1356 struct RIL_Peer_Agent *next_agent;
1396 1357
@@ -1409,6 +1370,8 @@ GAS_ril_done (void * solver)
1409 GNUNET_free(s->callbacks); 1370 GNUNET_free(s->callbacks);
1410 GNUNET_free(s->network_entries); 1371 GNUNET_free(s->network_entries);
1411 GNUNET_free(s); 1372 GNUNET_free(s);
1373
1374 return NULL;
1412} 1375}
1413 1376
1414/** 1377/**
@@ -1834,4 +1797,4 @@ GAS_ril_stop_get_preferred_address (void *solver, const struct GNUNET_PeerIdenti
1834 GNUNET_i2s (peer), agent->address_inuse->plugin); 1797 GNUNET_i2s (peer), agent->address_inuse->plugin);
1835} 1798}
1836 1799
1837/* end of gnunet-service-ats-solver_ril.c */ 1800/* end of libgnunet_plugin_ats_ril.c */
diff --git a/src/ats/gnunet-service-ats-solver_ril.h b/src/ats/libgnunet_plugin_ats_ril.h
index 16f1fee5f..6f60af52b 100755
--- a/src/ats/gnunet-service-ats-solver_ril.h
+++ b/src/ats/libgnunet_plugin_ats_ril.h
@@ -19,13 +19,14 @@
19 */ 19 */
20 20
21/** 21/**
22 * @file ats/gnunet-service-ats-solver_ril.h 22 * @file ats/libgnunet_plugin_ats_ril.h
23 * @brief ATS reinforcement learning solver 23 * @brief ATS reinforcement learning solver
24 * @author Fabian Oehlmann 24 * @author Fabian Oehlmann
25 * @author Matthias Wachs 25 * @author Matthias Wachs
26 */ 26 */
27#include "platform.h" 27#include "platform.h"
28#include "gnunet_statistics_service.h" 28#include "float.h"
29#include "gnunet_ats_plugin.h"
29#include "gnunet-service-ats_addresses.h" 30#include "gnunet-service-ats_addresses.h"
30 31
31/** 32/**
@@ -49,58 +50,6 @@ GAS_ril_address_change_preference (void *solver,
49 double pref_rel); 50 double pref_rel);
50 51
51/** 52/**
52 * Init the reinforcement learning problem solver
53 *
54 * Quotas:
55 * network[i] contains the network type as type GNUNET_ATS_NetworkType[i]
56 * out_quota[i] contains outbound quota for network type i
57 * in_quota[i] contains inbound quota for network type i
58 *
59 * Example
60 * network = {GNUNET_ATS_NET_UNSPECIFIED, GNUNET_ATS_NET_LOOPBACK, GNUNET_ATS_NET_LAN, GNUNET_ATS_NET_WAN, GNUNET_ATS_NET_WLAN}
61 * network[2] == GNUNET_ATS_NET_LAN
62 * out_quota[2] == 65353
63 * in_quota[2] == 65353
64 *
65 * @param cfg configuration handle
66 * @param stats the GNUNET_STATISTICS handle
67 * @param network array of GNUNET_ATS_NetworkType with length dest_length
68 * @param addresses hashmap containing all addresses
69 * @param out_quota array of outbound quotas
70 * @param in_quota array of outbound quota
71 * @param dest_length array length for quota arrays
72 * @param bw_changed_cb callback for changed bandwidth amounts
73 * @param bw_changed_cb_cls cls for callback
74 * @param get_preference callback to get relative preferences for a peer
75 * @param get_preference_cls cls for callback to get relative preferences
76 * @param get_properties_cls for callback to get relative properties
77 * @param get_properties_cls cls for callback to get relative properties
78 * @return handle for the solver on success, NULL on fail
79 */
80void *
81GAS_ril_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
82 const struct GNUNET_STATISTICS_Handle *stats,
83 const struct GNUNET_CONTAINER_MultiPeerMap *addresses,
84 int *network,
85 unsigned long long *out_quota,
86 unsigned long long *in_quota,
87 int dest_length,
88 GAS_bandwidth_changed_cb bw_changed_cb,
89 void *bw_changed_cb_cls,
90 GAS_get_preferences get_preference,
91 void *get_preference_cls,
92 GAS_get_properties get_properties,
93 void *get_properties_cls);
94
95/**
96 * Shutdown the reinforcement learning problem solver
97 *
98 * @param solver the respective handle to shutdown
99 */
100void
101GAS_ril_done (void * solver);
102
103/**
104 * Add a single address within a network to the solver 53 * Add a single address within a network to the solver
105 * 54 *
106 * @param solver the solver Handle 55 * @param solver the solver Handle
@@ -238,4 +187,4 @@ const struct ATS_Address *
238GAS_ril_get_preferred_address (void *solver, 187GAS_ril_get_preferred_address (void *solver,
239 const struct GNUNET_PeerIdentity *peer); 188 const struct GNUNET_PeerIdentity *peer);
240 189
241/* end of gnunet-service-ats-solver_ril.h */ 190/* end of libgnunet_plugin_ats_ril.h */