diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-02-05 21:41:58 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-02-05 21:41:58 +0000 |
commit | b8d5c4c9220576e85b4eec4c7ffa0390ba887fb5 (patch) | |
tree | f93ff7c7d94c81f5182e1c4bc7fd829f4fc9a609 /src/ats/gnunet-ats-solver-eval.c | |
parent | d4cb0035c1248e050d906e9018d36a9f5d19eb73 (diff) | |
download | gnunet-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.c | 65 |
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 | ||
111 | struct AddressLookupCtx | ||
112 | { | ||
113 | struct ATS_Address *res; | ||
114 | char *plugin; | ||
115 | char *addr; | ||
116 | }; | ||
117 | |||
118 | |||
119 | int 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 | ||
135 | static struct TestPeer * | 112 | static struct TestPeer * |
136 | find_peer_by_id (int id) | 113 | find_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 | |||
3146 | static void | 3127 | static void |
3147 | done () | 3128 | done () |
3148 | { | 3129 | { |