diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-12-10 13:53:12 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-12-10 13:53:12 +0000 |
commit | 97d68f4f7c1f9b37e92550ac74ba8fa4315a97c1 (patch) | |
tree | 687e14f942e69029950af94c8bc4be3a03618d9b /src/ats/gnunet-service-ats_addresses_simplistic.c | |
parent | b47a29da8ae8f63212ada0bf74c3baa0549a9971 (diff) | |
download | gnunet-97d68f4f7c1f9b37e92550ac74ba8fa4315a97c1.tar.gz gnunet-97d68f4f7c1f9b37e92550ac74ba8fa4315a97c1.zip |
mgmt
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses_simplistic.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses_simplistic.c | 95 |
1 files changed, 54 insertions, 41 deletions
diff --git a/src/ats/gnunet-service-ats_addresses_simplistic.c b/src/ats/gnunet-service-ats_addresses_simplistic.c index f92c29247..c9c9bd7af 100644 --- a/src/ats/gnunet-service-ats_addresses_simplistic.c +++ b/src/ats/gnunet-service-ats_addresses_simplistic.c | |||
@@ -36,35 +36,41 @@ | |||
36 | */ | 36 | */ |
37 | struct GAS_SIMPLISTIC_Handle | 37 | struct GAS_SIMPLISTIC_Handle |
38 | { | 38 | { |
39 | |||
40 | unsigned int active_addresses; | 39 | unsigned int active_addresses; |
41 | 40 | ||
41 | struct Network *network_entries; | ||
42 | |||
42 | unsigned int networks; | 43 | unsigned int networks; |
44 | }; | ||
43 | 45 | ||
46 | struct Network | ||
47 | { | ||
44 | /** | 48 | /** |
45 | * Network type array | 49 | * ATS network type |
46 | * | ||
47 | * quotas[GNUNET_ATS_NetworkTypeCount] = GNUNET_ATS_NetworkType; | ||
48 | * | ||
49 | */ | 50 | */ |
50 | int *quota_net; | 51 | unsigned int type; |
51 | 52 | ||
52 | /** | 53 | /** |
53 | * Array of inbound quotas | 54 | * Network description |
55 | */ | ||
56 | char *desc; | ||
57 | |||
58 | /** | ||
59 | * Total inbound quota | ||
54 | * | 60 | * |
55 | */ | 61 | */ |
56 | unsigned long long *total_quota_in; | 62 | unsigned long long total_quota_in; |
57 | 63 | ||
58 | /** | 64 | /** |
59 | * Array of outbound quotas | 65 | * Total outbound quota |
60 | * | 66 | * |
61 | */ | 67 | */ |
62 | unsigned long long *total_quota_out; | 68 | unsigned long long total_quota_out; |
63 | 69 | ||
64 | /** | 70 | /** |
65 | * Active addresses per network type | 71 | * Number of active addresses for this network |
66 | */ | 72 | */ |
67 | unsigned int *active_addresses_per_net; | 73 | unsigned int active_addresses; |
68 | }; | 74 | }; |
69 | 75 | ||
70 | /** | 76 | /** |
@@ -96,22 +102,23 @@ GAS_simplistic_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
96 | unsigned long long *in_quota, | 102 | unsigned long long *in_quota, |
97 | int dest_length) | 103 | int dest_length) |
98 | { | 104 | { |
99 | struct GAS_SIMPLISTIC_Handle *solver = GNUNET_malloc (sizeof (struct GAS_SIMPLISTIC_Handle)); | 105 | int c; |
100 | 106 | struct GAS_SIMPLISTIC_Handle *s = GNUNET_malloc (sizeof (struct GAS_SIMPLISTIC_Handle)); | |
101 | solver->networks = dest_length; | 107 | struct Network * cur; |
102 | 108 | char * net_str[GNUNET_ATS_NetworkTypeCount] = {"UNSPECIFIED", "LOOPBACK", "LAN", "WAN", "WLAN"}; | |
103 | solver->quota_net = GNUNET_malloc (dest_length * sizeof (int)); | ||
104 | memcpy (solver->quota_net, network, dest_length * sizeof (int)); | ||
105 | |||
106 | solver->total_quota_in = GNUNET_malloc (dest_length * sizeof (unsigned long long)); | ||
107 | memcpy (solver->total_quota_in, in_quota, dest_length * sizeof (int)); | ||
108 | |||
109 | solver->total_quota_out = GNUNET_malloc (dest_length * sizeof (unsigned long long)); | ||
110 | memcpy (solver->total_quota_out, out_quota, dest_length * sizeof (unsigned long long)); | ||
111 | 109 | ||
112 | solver->active_addresses_per_net = GNUNET_malloc (dest_length * sizeof (unsigned int)); | 110 | s->networks = dest_length; |
111 | s->network_entries = GNUNET_malloc (dest_length * sizeof (struct Network)); | ||
113 | 112 | ||
114 | return solver; | 113 | for (c = 0; c < dest_length; c++) |
114 | { | ||
115 | cur = &s->network_entries[c]; | ||
116 | cur->type = network[c]; | ||
117 | cur->total_quota_in = in_quota[c]; | ||
118 | cur->total_quota_out = out_quota[c]; | ||
119 | cur->desc = net_str[c]; | ||
120 | } | ||
121 | return s; | ||
115 | } | 122 | } |
116 | 123 | ||
117 | 124 | ||
@@ -125,25 +132,22 @@ GAS_simplistic_done (void *solver) | |||
125 | { | 132 | { |
126 | struct GAS_SIMPLISTIC_Handle *s = solver; | 133 | struct GAS_SIMPLISTIC_Handle *s = solver; |
127 | GNUNET_assert (s != NULL); | 134 | GNUNET_assert (s != NULL); |
128 | GNUNET_free (s->quota_net); | 135 | GNUNET_free (s->network_entries); |
129 | GNUNET_free (s->total_quota_in); | ||
130 | GNUNET_free (s->total_quota_out); | ||
131 | GNUNET_free (s->active_addresses_per_net); | ||
132 | GNUNET_free (s); | 136 | GNUNET_free (s); |
133 | } | 137 | } |
134 | 138 | ||
135 | static void | 139 | static void |
136 | update_quota (struct GAS_SIMPLISTIC_Handle *s, unsigned int net) | 140 | update_quota (struct GAS_SIMPLISTIC_Handle *s, struct Network *net) |
137 | { | 141 | { |
138 | unsigned long long quota_in; | 142 | unsigned long long quota_in; |
139 | unsigned long long quota_out; | 143 | unsigned long long quota_out; |
140 | 144 | ||
141 | quota_in = s->total_quota_in[net] / s->active_addresses_per_net[net]; | 145 | quota_in = net->total_quota_in / net->active_addresses; |
142 | quota_out = s->total_quota_out[net] / s->active_addresses_per_net[net]; | 146 | quota_out = net->total_quota_out / net->active_addresses; |
143 | 147 | ||
144 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 148 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
145 | "New quota for network type %u (in/out): %llu/%llu \n", | 149 | "New quota for network type `%s' (in/out): %llu/%llu \n", |
146 | net, quota_in, quota_out); | 150 | net->desc, quota_in, quota_out); |
147 | } | 151 | } |
148 | 152 | ||
149 | /** | 153 | /** |
@@ -157,23 +161,32 @@ void | |||
157 | GAS_simplistic_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) | 161 | GAS_simplistic_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) |
158 | { | 162 | { |
159 | struct GAS_SIMPLISTIC_Handle *s = solver; | 163 | struct GAS_SIMPLISTIC_Handle *s = solver; |
164 | struct Network *cur = NULL; | ||
160 | GNUNET_assert (NULL != s); | 165 | GNUNET_assert (NULL != s); |
161 | int c; | 166 | int c; |
162 | for (c = 0; c < s->networks; c++) | 167 | for (c = 0; c < s->networks; c++) |
163 | { | 168 | { |
164 | if (address->atsp_network_type == s->quota_net[c]) | 169 | cur = &s->network_entries[c]; |
170 | if (address->atsp_network_type == cur->type) | ||
165 | { | 171 | { |
166 | s->active_addresses_per_net[c] ++; | 172 | cur->active_addresses ++; |
167 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 173 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
168 | "Adding new address for network type %u (now %u total)\n", | 174 | "Adding new address for network type `%s' (now %u total)\n", |
169 | address->atsp_network_type, | 175 | cur->desc, |
170 | s->active_addresses_per_net[c]); | 176 | cur->active_addresses); |
171 | break; | 177 | break; |
172 | } | 178 | } |
173 | } | 179 | } |
180 | if (NULL == cur) | ||
181 | { | ||
182 | GNUNET_break (0); | ||
183 | return; | ||
184 | } | ||
174 | 185 | ||
175 | /* Update quota for this network type */ | 186 | /* Update quota for this network type */ |
176 | update_quota (s, c); | 187 | update_quota (s, cur); |
188 | |||
189 | |||
177 | } | 190 | } |
178 | 191 | ||
179 | 192 | ||