aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_addresses.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-11-18 11:39:27 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-11-18 11:39:27 +0000
commit2989ff509e9e9e3a938057ae477b073e32983e09 (patch)
tree169533cb893062e50de8d0985ec99648322ef0b0 /src/ats/gnunet-service-ats_addresses.c
parentd2a1cac67958ef35af711fce48a90674c148b6b9 (diff)
downloadgnunet-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.c78
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
1130GAS_addresses_request_address_cancel (struct GAS_Addresses_Handle *handle, 1135GAS_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
1168GAS_addresses_request_address (struct GAS_Addresses_Handle *handle, 1173GAS_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
1274static int
1275eval_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 */
1279void 1294void
1280GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) 1295GAS_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