diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-11-18 11:39:27 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-11-18 11:39:27 +0000 |
commit | 2989ff509e9e9e3a938057ae477b073e32983e09 (patch) | |
tree | 169533cb893062e50de8d0985ec99648322ef0b0 /src/ats/gnunet-service-ats_addresses.c | |
parent | d2a1cac67958ef35af711fce48a90674c148b6b9 (diff) | |
download | gnunet-2989ff509e9e9e3a938057ae477b073e32983e09.tar.gz gnunet-2989ff509e9e9e3a938057ae477b073e32983e09.zip |
allocation evaluation
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 78 |
1 files changed, 58 insertions, 20 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 2962f2dcf..26b7bc90b 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -292,16 +292,21 @@ struct GAS_Addresses_Handle | |||
292 | /** | 292 | /** |
293 | * Address suggestion requests DLL head | 293 | * Address suggestion requests DLL head |
294 | */ | 294 | */ |
295 | struct GAS_Addresses_Suggestion_Requests *r_head; | 295 | struct GAS_Addresses_Suggestion_Requests *pending_requests_head; |
296 | 296 | ||
297 | /** | 297 | /** |
298 | * Address suggestion requests DLL tail | 298 | * Address suggestion requests DLL tail |
299 | */ | 299 | */ |
300 | struct GAS_Addresses_Suggestion_Requests *r_tail; | 300 | struct GAS_Addresses_Suggestion_Requests *pending_requests_tail; |
301 | 301 | ||
302 | /* Solver functions */ | 302 | /** |
303 | * Solver functions | ||
304 | */ | ||
303 | struct GNUNET_ATS_PluginEnvironment env; | 305 | struct GNUNET_ATS_PluginEnvironment env; |
304 | 306 | ||
307 | /** | ||
308 | * Solver plugin name as string | ||
309 | */ | ||
305 | char *plugin; | 310 | char *plugin; |
306 | }; | 311 | }; |
307 | 312 | ||
@@ -1130,7 +1135,7 @@ void | |||
1130 | GAS_addresses_request_address_cancel (struct GAS_Addresses_Handle *handle, | 1135 | GAS_addresses_request_address_cancel (struct GAS_Addresses_Handle *handle, |
1131 | const struct GNUNET_PeerIdentity *peer) | 1136 | const struct GNUNET_PeerIdentity *peer) |
1132 | { | 1137 | { |
1133 | struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head; | 1138 | struct GAS_Addresses_Suggestion_Requests *cur = handle->pending_requests_head; |
1134 | 1139 | ||
1135 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Received request: `%s' for peer %s\n", | 1140 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Received request: `%s' for peer %s\n", |
1136 | "request_address_cancel", GNUNET_i2s (peer)); | 1141 | "request_address_cancel", GNUNET_i2s (peer)); |
@@ -1153,7 +1158,7 @@ GAS_addresses_request_address_cancel (struct GAS_Addresses_Handle *handle, | |||
1153 | GAS_addresses_handle_backoff_reset (handle, peer); | 1158 | GAS_addresses_handle_backoff_reset (handle, peer); |
1154 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Removed request pending for peer `%s\n", | 1159 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Removed request pending for peer `%s\n", |
1155 | GNUNET_i2s (peer)); | 1160 | GNUNET_i2s (peer)); |
1156 | GNUNET_CONTAINER_DLL_remove(handle->r_head, handle->r_tail, cur); | 1161 | GNUNET_CONTAINER_DLL_remove(handle->pending_requests_head, handle->pending_requests_tail, cur); |
1157 | GNUNET_free(cur); | 1162 | GNUNET_free(cur); |
1158 | } | 1163 | } |
1159 | 1164 | ||
@@ -1168,7 +1173,7 @@ void | |||
1168 | GAS_addresses_request_address (struct GAS_Addresses_Handle *handle, | 1173 | GAS_addresses_request_address (struct GAS_Addresses_Handle *handle, |
1169 | const struct GNUNET_PeerIdentity *peer) | 1174 | const struct GNUNET_PeerIdentity *peer) |
1170 | { | 1175 | { |
1171 | struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head; | 1176 | struct GAS_Addresses_Suggestion_Requests *cur = handle->pending_requests_head; |
1172 | struct ATS_Address *aa; | 1177 | struct ATS_Address *aa; |
1173 | 1178 | ||
1174 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received `%s' for peer `%s'\n", | 1179 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received `%s' for peer `%s'\n", |
@@ -1189,16 +1194,9 @@ GAS_addresses_request_address (struct GAS_Addresses_Handle *handle, | |||
1189 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1194 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
1190 | "Adding new address suggestion request for `%s'\n", | 1195 | "Adding new address suggestion request for `%s'\n", |
1191 | GNUNET_i2s (peer)); | 1196 | GNUNET_i2s (peer)); |
1192 | GNUNET_CONTAINER_DLL_insert(handle->r_head, handle->r_tail, cur); | 1197 | GNUNET_CONTAINER_DLL_insert(handle->pending_requests_head, handle->pending_requests_tail, cur); |
1193 | } | 1198 | } |
1194 | 1199 | ||
1195 | /* | ||
1196 | * Debuging information about addresses | ||
1197 | * | ||
1198 | * GNUNET_CONTAINER_multihashmap_get_multiple(handle->addresses, | ||
1199 | * &peer->hashPubKey, &addrinfo_it, (void *) peer); | ||
1200 | */ | ||
1201 | |||
1202 | /* Get prefered address from solver */ | 1200 | /* Get prefered address from solver */ |
1203 | aa = (struct ATS_Address *) handle->env.sf.s_get (handle->solver, peer); | 1201 | aa = (struct ATS_Address *) handle->env.sf.s_get (handle->solver, peer); |
1204 | if (NULL == aa) | 1202 | if (NULL == aa) |
@@ -1273,15 +1271,55 @@ GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle, | |||
1273 | &reset_address_it, NULL)); | 1271 | &reset_address_it, NULL)); |
1274 | } | 1272 | } |
1275 | 1273 | ||
1274 | static int | ||
1275 | eval_count_active_it (void *cls, const struct GNUNET_PeerIdentity *id, void *obj) | ||
1276 | { | ||
1277 | int *request_fulfilled = cls; | ||
1278 | struct ATS_Address *addr = obj; | ||
1279 | |||
1280 | if (GNUNET_YES == addr->active) | ||
1281 | (*request_fulfilled) = GNUNET_YES; | ||
1282 | |||
1283 | if (*request_fulfilled == GNUNET_YES) | ||
1284 | return GNUNET_NO; | ||
1285 | else | ||
1286 | return GNUNET_YES; | ||
1287 | } | ||
1288 | |||
1276 | /** | 1289 | /** |
1277 | * Evaluathe current bandwidth assignment | 1290 | * Evaluate current bandwidth assignment |
1291 | * | ||
1292 | * @param ah address handle | ||
1278 | */ | 1293 | */ |
1279 | void | 1294 | void |
1280 | GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) | 1295 | GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) |
1281 | { | 1296 | { |
1297 | struct GAS_Addresses_Suggestion_Requests *cur; | ||
1298 | unsigned int requests_pending; | ||
1299 | unsigned int requests_fulfilled; | ||
1300 | |||
1282 | GNUNET_assert (NULL != ah); | 1301 | GNUNET_assert (NULL != ah); |
1283 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Current assignment has quality: Not implemented!\n"); | 1302 | GNUNET_assert (NULL != ah->addresses); |
1303 | |||
1304 | requests_pending = 0; | ||
1305 | requests_fulfilled = 0; | ||
1306 | /* 1) How many requests could be fulfilled? */ | ||
1307 | for (cur = ah->pending_requests_head; NULL != cur; cur = cur->next) | ||
1308 | { | ||
1309 | |||
1310 | GNUNET_CONTAINER_multipeermap_get_multiple (ah->addresses, | ||
1311 | &cur->id, &eval_count_active_it, &requests_fulfilled); | ||
1312 | if (GNUNET_YES == requests_fulfilled) | ||
1313 | requests_fulfilled ++; | ||
1314 | requests_pending ++; | ||
1315 | } | ||
1316 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u pending requests, %u requests fullfilled\n", | ||
1317 | requests_pending, requests_fulfilled); | ||
1318 | |||
1319 | |||
1320 | /* 2) How well is bandwidth utilized? */ | ||
1284 | 1321 | ||
1322 | /* 3) How well does selection match application requirements */ | ||
1285 | } | 1323 | } |
1286 | 1324 | ||
1287 | /** | 1325 | /** |
@@ -1677,7 +1715,7 @@ bandwidth_changed_cb (void *cls, struct ATS_Address *address) | |||
1677 | GAS_performance_notify_all_clients (&address->peer, address->plugin, | 1715 | GAS_performance_notify_all_clients (&address->peer, address->plugin, |
1678 | address->addr, address->addr_len, address->session_id, address->atsi, | 1716 | address->addr, address->addr_len, address->session_id, address->atsi, |
1679 | address->atsi_count, address->assigned_bw_out, address->assigned_bw_in); | 1717 | address->atsi_count, address->assigned_bw_out, address->assigned_bw_in); |
1680 | cur = handle->r_head; | 1718 | cur = handle->pending_requests_head; |
1681 | while (NULL != cur) | 1719 | while (NULL != cur) |
1682 | { | 1720 | { |
1683 | if (0 == memcmp (&address->peer, &cur->id, sizeof(cur->id))) | 1721 | if (0 == memcmp (&address->peer, &cur->id, sizeof(cur->id))) |
@@ -1789,7 +1827,7 @@ GAS_addresses_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
1789 | 1827 | ||
1790 | load_quotas (cfg, quotas_in, quotas_out, GNUNET_ATS_NetworkTypeCount); | 1828 | load_quotas (cfg, quotas_in, quotas_out, GNUNET_ATS_NetworkTypeCount); |
1791 | ah->env.info_cb = &solver_info_cb; | 1829 | ah->env.info_cb = &solver_info_cb; |
1792 | ah->env.info_cb_cls = &ah; | 1830 | ah->env.info_cb_cls = ah; |
1793 | ah->env.bandwidth_changed_cb = &bandwidth_changed_cb; | 1831 | ah->env.bandwidth_changed_cb = &bandwidth_changed_cb; |
1794 | ah->env.bw_changed_cb_cls = ah; | 1832 | ah->env.bw_changed_cb_cls = ah; |
1795 | ah->env.get_preferences = &get_preferences_cb; | 1833 | ah->env.get_preferences = &get_preferences_cb; |
@@ -1914,9 +1952,9 @@ GAS_addresses_done (struct GAS_Addresses_Handle *handle) | |||
1914 | handle->running = GNUNET_NO; | 1952 | handle->running = GNUNET_NO; |
1915 | GNUNET_CONTAINER_multipeermap_destroy (handle->addresses); | 1953 | GNUNET_CONTAINER_multipeermap_destroy (handle->addresses); |
1916 | handle->addresses = NULL; | 1954 | handle->addresses = NULL; |
1917 | while (NULL != (cur = handle->r_head)) | 1955 | while (NULL != (cur = handle->pending_requests_head)) |
1918 | { | 1956 | { |
1919 | GNUNET_CONTAINER_DLL_remove(handle->r_head, handle->r_tail, cur); | 1957 | GNUNET_CONTAINER_DLL_remove(handle->pending_requests_head, handle->pending_requests_tail, cur); |
1920 | GNUNET_free(cur); | 1958 | GNUNET_free(cur); |
1921 | } | 1959 | } |
1922 | 1960 | ||