aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-ats-solver-eval.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-02-05 21:41:58 +0000
committerChristian Grothoff <christian@grothoff.org>2015-02-05 21:41:58 +0000
commitb8d5c4c9220576e85b4eec4c7ffa0390ba887fb5 (patch)
treef93ff7c7d94c81f5182e1c4bc7fd829f4fc9a609 /src/ats/gnunet-ats-solver-eval.c
parentd4cb0035c1248e050d906e9018d36a9f5d19eb73 (diff)
downloadgnunet-b8d5c4c9220576e85b4eec4c7ffa0390ba887fb5.tar.gz
gnunet-b8d5c4c9220576e85b4eec4c7ffa0390ba887fb5.zip
first pass at cleaning up ATS plugin API
Diffstat (limited to 'src/ats/gnunet-ats-solver-eval.c')
-rw-r--r--src/ats/gnunet-ats-solver-eval.c65
1 files changed, 23 insertions, 42 deletions
diff --git a/src/ats/gnunet-ats-solver-eval.c b/src/ats/gnunet-ats-solver-eval.c
index 6bf640f21..bfb1c84ab 100644
--- a/src/ats/gnunet-ats-solver-eval.c
+++ b/src/ats/gnunet-ats-solver-eval.c
@@ -108,29 +108,6 @@ print_generator_type (enum GeneratorType g)
108 } 108 }
109} 109}
110 110
111struct AddressLookupCtx
112{
113 struct ATS_Address *res;
114 char *plugin;
115 char *addr;
116};
117
118
119int find_address_it (void *cls,
120 const struct GNUNET_PeerIdentity *key,
121 void *value)
122{
123 struct AddressLookupCtx *ctx = cls;
124 struct ATS_Address *addr = value;
125
126 if ( (0 == strcmp (ctx->plugin, addr->plugin)) &&
127 (0 == strcmp (ctx->addr, addr->addr)) )
128 {
129 ctx->res = addr;
130 return GNUNET_NO;
131 }
132 return GNUNET_YES;
133}
134 111
135static struct TestPeer * 112static struct TestPeer *
136find_peer_by_id (int id) 113find_peer_by_id (int id)
@@ -670,17 +647,17 @@ set_prop_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
670 atsi.value = htonl ((uint32_t) prop_value); 647 atsi.value = htonl ((uint32_t) prop_value);
671 648
672 /* set performance here! */ 649 /* set performance here! */
673 sh->env.sf.s_bulk_start (sh->solver); 650 sh->sf->s_bulk_start (sh->sf->cls);
674 if (GNUNET_YES == opt_disable_normalization) 651 if (GNUNET_YES == opt_disable_normalization)
675 { 652 {
676 a->prop_abs[pg->ats_property] = prop_value; 653 a->prop_abs[pg->ats_property] = prop_value;
677 a->prop_norm[pg->ats_property] = prop_value; 654 a->prop_norm[pg->ats_property] = prop_value;
678 sh->env.sf.s_address_update_property (sh->solver, a->ats_addr, 655 sh->sf->s_address_update_property (sh->sf->cls, a->ats_addr,
679 pg->ats_property, prop_value, prop_value); 656 pg->ats_property, prop_value, prop_value);
680 } 657 }
681 else 658 else
682 GAS_normalization_normalize_property (pg->test_address->ats_addr, &atsi, 1); 659 GAS_normalization_normalize_property (pg->test_address->ats_addr, &atsi, 1);
683 sh->env.sf.s_bulk_stop (sh->solver); 660 sh->sf->s_bulk_stop (sh->sf->cls);
684 661
685 pg->set_task = GNUNET_SCHEDULER_add_delayed (pg->frequency, 662 pg->set_task = GNUNET_SCHEDULER_add_delayed (pg->frequency,
686 &set_prop_task, pg); 663 &set_prop_task, pg);
@@ -949,7 +926,7 @@ set_feedback_task (void *cls,
949 GNUNET_ATS_print_preference_type (pg->kind), 926 GNUNET_ATS_print_preference_type (pg->kind),
950 feedback); 927 feedback);
951 928
952 sh->env.sf.s_feedback (sh->solver, NULL + (pg->client_id), &p->peer_id, 929 sh->sf->s_feedback (sh->sf->cls, NULL + (pg->client_id), &p->peer_id,
953 pg->feedback_frequency, pg->kind, feedback); 930 pg->feedback_frequency, pg->kind, feedback);
954 pg->feedback_last = GNUNET_TIME_absolute_get(); 931 pg->feedback_last = GNUNET_TIME_absolute_get();
955 932
@@ -1003,17 +980,17 @@ set_pref_task (void *cls,
1003 pg->peer, NULL + (pg->client_id), 980 pg->peer, NULL + (pg->client_id),
1004 GNUNET_ATS_print_preference_type (pg->kind), pref_value); 981 GNUNET_ATS_print_preference_type (pg->kind), pref_value);
1005 982
1006 sh->env.sf.s_bulk_start (sh->solver); 983 sh->sf->s_bulk_start (sh->sf->cls);
1007 if (GNUNET_YES == opt_disable_normalization) 984 if (GNUNET_YES == opt_disable_normalization)
1008 { 985 {
1009 p->pref_abs[pg->kind] = pref_value; 986 p->pref_abs[pg->kind] = pref_value;
1010 p->pref_norm[pg->kind] = pref_value; 987 p->pref_norm[pg->kind] = pref_value;
1011 sh->env.sf.s_pref (sh->solver, &p->peer_id, pg->kind, pref_value); 988 sh->sf->s_pref (sh->sf->cls, &p->peer_id, pg->kind, pref_value);
1012 } 989 }
1013 else 990 else
1014 GAS_normalization_normalize_preference (NULL + (pg->client_id), 991 GAS_normalization_normalize_preference (NULL + (pg->client_id),
1015 &p->peer_id, pg->kind, pref_value); 992 &p->peer_id, pg->kind, pref_value);
1016 sh->env.sf.s_bulk_stop (sh->solver); 993 sh->sf->s_bulk_stop (sh->sf->cls);
1017 994
1018 pg->set_task = GNUNET_SCHEDULER_add_delayed (pg->frequency, 995 pg->set_task = GNUNET_SCHEDULER_add_delayed (pg->frequency,
1019 set_pref_task, pg); 996 set_pref_task, pg);
@@ -2250,7 +2227,7 @@ enforce_add_address (struct GNUNET_ATS_TEST_Operation *op)
2250 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u in network `%s'\n", 2227 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Adding address %u for peer %u in network `%s'\n",
2251 op->address_id, op->peer_id, GNUNET_ATS_print_network_type(a->network)); 2228 op->address_id, op->peer_id, GNUNET_ATS_print_network_type(a->network));
2252 2229
2253 sh->env.sf.s_add (sh->solver, a->ats_addr, op->address_network); 2230 sh->sf->s_add (sh->sf->cls, a->ats_addr, op->address_network);
2254 2231
2255} 2232}
2256 2233
@@ -2292,7 +2269,7 @@ enforce_del_address (struct GNUNET_ATS_TEST_Operation *op)
2292 op->address_id, 2269 op->address_id,
2293 op->peer_id); 2270 op->peer_id);
2294 2271
2295 sh->env.sf.s_del (sh->solver, a->ats_addr, GNUNET_NO); 2272 sh->sf->s_del (sh->sf->cls, a->ats_addr, GNUNET_NO);
2296 2273
2297 if (NULL != l) 2274 if (NULL != l)
2298 { 2275 {
@@ -2437,7 +2414,7 @@ enforce_start_request (struct GNUNET_ATS_TEST_Operation *op)
2437 op->peer_id); 2414 op->peer_id);
2438 p->is_requested = GNUNET_YES; 2415 p->is_requested = GNUNET_YES;
2439 2416
2440 res = sh->env.sf.s_get (sh->solver, &p->peer_id); 2417 res = sh->sf->s_get (sh->sf->cls, &p->peer_id);
2441 if (NULL != res) 2418 if (NULL != res)
2442 { 2419 {
2443 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Suggested address for peer %u: %llu %llu\n", 2420 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Suggested address for peer %u: %llu %llu\n",
@@ -2469,7 +2446,7 @@ enforce_stop_request (struct GNUNET_ATS_TEST_Operation *op)
2469 p->is_requested = GNUNET_NO; 2446 p->is_requested = GNUNET_NO;
2470 p->assigned_bw_in = 0; 2447 p->assigned_bw_in = 0;
2471 p->assigned_bw_out = 0; 2448 p->assigned_bw_out = 0;
2472 sh->env.sf.s_get_stop (sh->solver, &p->peer_id); 2449 sh->sf->s_get_stop (sh->sf->cls, &p->peer_id);
2473 2450
2474 if (NULL != l) 2451 if (NULL != l)
2475 { 2452 {
@@ -2755,16 +2732,19 @@ GNUNET_ATS_solvers_solver_stop (struct SolverHandle *sh)
2755{ 2732{
2756 GNUNET_STATISTICS_destroy ((struct GNUNET_STATISTICS_Handle *) sh->env.stats, 2733 GNUNET_STATISTICS_destroy ((struct GNUNET_STATISTICS_Handle *) sh->env.stats,
2757 GNUNET_NO); 2734 GNUNET_NO);
2758 GNUNET_PLUGIN_unload (sh->plugin, sh->solver); 2735 GNUNET_PLUGIN_unload (sh->plugin, sh->sf);
2759 2736 sh->sf = NULL;
2760 GAS_normalization_stop(); 2737 GAS_normalization_stop();
2761 2738
2762 GNUNET_CONTAINER_multipeermap_iterate (sh->addresses, &free_all_it, NULL); 2739 GNUNET_CONTAINER_multipeermap_iterate (sh->addresses,
2740 &free_all_it,
2741 NULL);
2763 GNUNET_CONTAINER_multipeermap_destroy(sh->addresses); 2742 GNUNET_CONTAINER_multipeermap_destroy(sh->addresses);
2764 GNUNET_free (sh->plugin); 2743 GNUNET_free (sh->plugin);
2765 GNUNET_free (sh); 2744 GNUNET_free (sh);
2766} 2745}
2767 2746
2747
2768/** 2748/**
2769 * Load quotas for networks from configuration 2749 * Load quotas for networks from configuration
2770 * 2750 *
@@ -3096,8 +3076,9 @@ GNUNET_ATS_solvers_solver_start (enum GNUNET_ATS_Solvers type)
3096 } 3076 }
3097 3077
3098 sh = GNUNET_new (struct SolverHandle); 3078 sh = GNUNET_new (struct SolverHandle);
3099 GNUNET_asprintf (&sh->plugin, "libgnunet_plugin_ats_%s", solver_str); 3079 GNUNET_asprintf (&sh->plugin,
3100 3080 "libgnunet_plugin_ats_%s",
3081 solver_str);
3101 sh->addresses = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_NO); 3082 sh->addresses = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_NO);
3102 3083
3103 /* setup environment */ 3084 /* setup environment */
@@ -3109,7 +3090,6 @@ GNUNET_ATS_solvers_solver_start (enum GNUNET_ATS_Solvers type)
3109 sh->env.get_property = &get_property_cb; 3090 sh->env.get_property = &get_property_cb;
3110 sh->env.network_count = GNUNET_ATS_NetworkTypeCount; 3091 sh->env.network_count = GNUNET_ATS_NetworkTypeCount;
3111 sh->env.info_cb = &solver_info_cb; 3092 sh->env.info_cb = &solver_info_cb;
3112 sh->env.info_cb_cls = NULL;
3113 sh->env.network_count = GNUNET_ATS_NetworkTypeCount; 3093 sh->env.network_count = GNUNET_ATS_NetworkTypeCount;
3114 int networks[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkType; 3094 int networks[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkType;
3115 for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++) 3095 for (c = 0; c < GNUNET_ATS_NetworkTypeCount; c++)
@@ -3130,8 +3110,8 @@ GNUNET_ATS_solvers_solver_start (enum GNUNET_ATS_Solvers type)
3130 return NULL; 3110 return NULL;
3131 } 3111 }
3132 3112
3133 sh->solver = GNUNET_PLUGIN_load (sh->plugin, &sh->env); 3113 sh->sf = GNUNET_PLUGIN_load (sh->plugin, &sh->env);
3134 if (NULL == sh->solver) 3114 if (NULL == sh->sf)
3135 { 3115 {
3136 fprintf (stderr, "Failed to load solver `%s'\n", sh->plugin); 3116 fprintf (stderr, "Failed to load solver `%s'\n", sh->plugin);
3137 GNUNET_break(0); 3117 GNUNET_break(0);
@@ -3143,6 +3123,7 @@ GNUNET_ATS_solvers_solver_start (enum GNUNET_ATS_Solvers type)
3143 return sh; 3123 return sh;
3144} 3124}
3145 3125
3126
3146static void 3127static void
3147done () 3128done ()
3148{ 3129{