diff options
-rw-r--r-- | src/testbed/gnunet_testbed_mpi_spawn.c | 63 | ||||
-rw-r--r-- | src/testbed/testbed_api_hosts.c | 3 |
2 files changed, 17 insertions, 49 deletions
diff --git a/src/testbed/gnunet_testbed_mpi_spawn.c b/src/testbed/gnunet_testbed_mpi_spawn.c index 54b1fdf72..01cbd6576 100644 --- a/src/testbed/gnunet_testbed_mpi_spawn.c +++ b/src/testbed/gnunet_testbed_mpi_spawn.c | |||
@@ -171,37 +171,6 @@ child_death_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
171 | } | 171 | } |
172 | 172 | ||
173 | 173 | ||
174 | /** | ||
175 | * Callback function invoked for each interface found. | ||
176 | * | ||
177 | * @param cls NULL | ||
178 | * @param name name of the interface (can be NULL for unknown) | ||
179 | * @param isDefault is this presumably the default interface | ||
180 | * @param addr address of this interface (can be NULL for unknown or unassigned) | ||
181 | * @param broadcast_addr the broadcast address (can be NULL for unknown or unassigned) | ||
182 | * @param netmask the network mask (can be NULL for unknown or unassigned)) | ||
183 | * @param addrlen length of the address | ||
184 | * @return GNUNET_OK to continue iteration, GNUNET_SYSERR to abort | ||
185 | */ | ||
186 | static int | ||
187 | addr_proc (void *cls, const char *name, int isDefault, | ||
188 | const struct sockaddr *addr, | ||
189 | const struct sockaddr *broadcast_addr, | ||
190 | const struct sockaddr *netmask, socklen_t addrlen) | ||
191 | { | ||
192 | const struct sockaddr_in *in_addr; | ||
193 | char *ipaddr; | ||
194 | |||
195 | if (sizeof (struct sockaddr_in) != addrlen) | ||
196 | return GNUNET_OK; | ||
197 | in_addr = (const struct sockaddr_in *) addr; | ||
198 | if (NULL == (ipaddr = inet_ntoa (in_addr->sin_addr))) | ||
199 | return GNUNET_OK; | ||
200 | GNUNET_array_append (our_addrs, num_addrs, GNUNET_strdup (ipaddr)); | ||
201 | return GNUNET_OK; | ||
202 | } | ||
203 | |||
204 | |||
205 | static void | 174 | static void |
206 | destroy_hosts(struct GNUNET_TESTBED_Host **hosts, unsigned int nhosts) | 175 | destroy_hosts(struct GNUNET_TESTBED_Host **hosts, unsigned int nhosts) |
207 | { | 176 | { |
@@ -229,11 +198,10 @@ run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
229 | const struct GNUNET_CONFIGURATION_Handle *null_cfg; | 198 | const struct GNUNET_CONFIGURATION_Handle *null_cfg; |
230 | const char *host_ip; | 199 | const char *host_ip; |
231 | char *tmpdir; | 200 | char *tmpdir; |
201 | char *hostname; | ||
202 | size_t hostname_len; | ||
232 | unsigned int nhosts; | 203 | unsigned int nhosts; |
233 | unsigned int host_cnt; | 204 | |
234 | unsigned int addr_cnt; | ||
235 | |||
236 | GNUNET_OS_network_interfaces_list (&addr_proc, NULL); | ||
237 | if (0 == num_addrs) | 205 | if (0 == num_addrs) |
238 | { | 206 | { |
239 | GNUNET_break (0); | 207 | GNUNET_break (0); |
@@ -248,26 +216,25 @@ run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
248 | ret = GNUNET_SYSERR; | 216 | ret = GNUNET_SYSERR; |
249 | return; | 217 | return; |
250 | } | 218 | } |
251 | for (host_cnt = 0; host_cnt < nhosts; host_cnt++) | 219 | hostname_len = GNUNET_OS_get_hostname_max_length (); |
220 | hostname = GNUNET_malloc (hostname_len); | ||
221 | if (0 != gethostname (hostname, hostname_len)) | ||
252 | { | 222 | { |
253 | host_ip = GNUNET_TESTBED_host_get_hostname (hosts[host_cnt]); | 223 | LOG (GNUNET_ERROR_TYPE_ERROR, "Cannot get hostname. Exiting\n"); |
254 | for (addr_cnt = 0; addr_cnt < num_addrs; addr_cnt++) | 224 | GNUNET_free (hostname); |
255 | if (0 == strcmp (host_ip, our_addrs[addr_cnt])) | 225 | destroy_hosts (hosts, nhosts); |
256 | goto proceed; | 226 | ret = GNUNET_SYSERR; |
227 | return; | ||
257 | } | 228 | } |
258 | GNUNET_break (0); | 229 | if (NULL == strstr (GNUNET_TESTBED_host_get_hostname (hosts[0]), hostname)) |
259 | ret = GNUNET_SYSERR; | ||
260 | destroy_hosts (hosts, nhosts); | ||
261 | return; | ||
262 | |||
263 | proceed: | ||
264 | destroy_hosts (hosts, nhosts); | ||
265 | if (0 != host_cnt) | ||
266 | { | 230 | { |
267 | LOG_DEBUG ("Exiting as we are not the lowest host\n"); | 231 | LOG_DEBUG ("Exiting as we are not the lowest host\n"); |
232 | GNUNET_free (hostname); | ||
268 | ret = GNUNET_OK; | 233 | ret = GNUNET_OK; |
269 | return; | 234 | return; |
270 | } | 235 | } |
236 | GNUNET_free (hostname); | ||
237 | destroy_hosts (hosts, nhosts); | ||
271 | tmpdir = getenv ("TMPDIR"); | 238 | tmpdir = getenv ("TMPDIR"); |
272 | if (NULL == tmpdir) | 239 | if (NULL == tmpdir) |
273 | tmpdir = getenv ("TMP"); | 240 | tmpdir = getenv ("TMP"); |
diff --git a/src/testbed/testbed_api_hosts.c b/src/testbed/testbed_api_hosts.c index f68fd19f3..f93a140c5 100644 --- a/src/testbed/testbed_api_hosts.c +++ b/src/testbed/testbed_api_hosts.c | |||
@@ -589,7 +589,7 @@ GNUNET_TESTBED_hosts_load_from_loadleveler (const struct | |||
589 | char *buf; | 589 | char *buf; |
590 | char *hostname; | 590 | char *hostname; |
591 | char **hostnames; | 591 | char **hostnames; |
592 | struct GNUNET_TESTBED_Host **host_list; | 592 | struct GNUNET_TESTBED_Host **host_list; |
593 | ssize_t rsize; | 593 | ssize_t rsize; |
594 | uint64_t size; | 594 | uint64_t size; |
595 | uint64_t offset; | 595 | uint64_t offset; |
@@ -689,6 +689,7 @@ GNUNET_TESTBED_hosts_load_from_loadleveler (const struct | |||
689 | return 0; | 689 | return 0; |
690 | if (NULL == hosts) | 690 | if (NULL == hosts) |
691 | goto cleanup; | 691 | goto cleanup; |
692 | qsort (hostnames, nhosts, sizeof (hostnames[0]), &strcmp); | ||
692 | host_list = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Host *) * nhosts); | 693 | host_list = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Host *) * nhosts); |
693 | for (host = 0; host < nhosts; host++) | 694 | for (host = 0; host < nhosts; host++) |
694 | host_list[host] = GNUNET_TESTBED_host_create (hostnames[host], NULL, cfg, 0); | 695 | host_list[host] = GNUNET_TESTBED_host_create (hostnames[host], NULL, cfg, 0); |