aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_addresses_simplistic.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-12-10 13:53:12 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-12-10 13:53:12 +0000
commit97d68f4f7c1f9b37e92550ac74ba8fa4315a97c1 (patch)
tree687e14f942e69029950af94c8bc4be3a03618d9b /src/ats/gnunet-service-ats_addresses_simplistic.c
parentb47a29da8ae8f63212ada0bf74c3baa0549a9971 (diff)
downloadgnunet-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.c95
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 */
37struct GAS_SIMPLISTIC_Handle 37struct 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
46struct 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
135static void 139static void
136update_quota (struct GAS_SIMPLISTIC_Handle *s, unsigned int net) 140update_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
157GAS_simplistic_address_add (void *solver, struct GNUNET_CONTAINER_MultiHashMap * addresses, struct ATS_Address *address) 161GAS_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