diff options
author | Alejandra Morales <alejandra.mr88@gmail.com> | 2013-12-05 09:56:07 +0000 |
---|---|---|
committer | Alejandra Morales <alejandra.mr88@gmail.com> | 2013-12-05 09:56:07 +0000 |
commit | c2d261bbee6077e65e51b41b4f37d42e87472806 (patch) | |
tree | 740bb9f3424adaaa366bea6b5be7f21ee1df6112 /src | |
parent | 0dfd38c3f60c23c97a2d348a0bac916e089b1e72 (diff) | |
download | gnunet-c2d261bbee6077e65e51b41b4f37d42e87472806.tar.gz gnunet-c2d261bbee6077e65e51b41b4f37d42e87472806.zip |
Cryogenic stuff
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/plugin_transport_udp_broadcasting.c | 126 |
1 files changed, 109 insertions, 17 deletions
diff --git a/src/transport/plugin_transport_udp_broadcasting.c b/src/transport/plugin_transport_udp_broadcasting.c index c53665f10..493b98898 100644 --- a/src/transport/plugin_transport_udp_broadcasting.c +++ b/src/transport/plugin_transport_udp_broadcasting.c | |||
@@ -41,6 +41,24 @@ | |||
41 | 41 | ||
42 | #define LOG(kind,...) GNUNET_log_from (kind, "transport-udp", __VA_ARGS__) | 42 | #define LOG(kind,...) GNUNET_log_from (kind, "transport-udp", __VA_ARGS__) |
43 | 43 | ||
44 | /* *********** Cryogenic ********** */ | ||
45 | |||
46 | #include <sys/stat.h> | ||
47 | #include <fcntl.h> | ||
48 | |||
49 | #include <sys/ioctl.h> | ||
50 | #include <sys/select.h> | ||
51 | #include <sys/time.h> | ||
52 | |||
53 | #define PM_MAGIC 'k' | ||
54 | #define PM_SET_DELAY_AND_TIMEOUT _IOW(PM_MAGIC, 1, struct pm_times) | ||
55 | |||
56 | struct pm_times { | ||
57 | unsigned long delay_msecs; | ||
58 | unsigned long timeout_msecs; | ||
59 | }; | ||
60 | /************************************/ | ||
61 | |||
44 | 62 | ||
45 | struct UDP_Beacon_Message | 63 | struct UDP_Beacon_Message |
46 | { | 64 | { |
@@ -72,6 +90,13 @@ struct BroadcastAddress | |||
72 | void *addr; | 90 | void *addr; |
73 | 91 | ||
74 | socklen_t addrlen; | 92 | socklen_t addrlen; |
93 | |||
94 | /* | ||
95 | * Cryogenic fields | ||
96 | */ | ||
97 | struct GNUNET_DISK_FileHandle cryogenic_fd; | ||
98 | |||
99 | struct pm_times cryogenic_times; | ||
75 | }; | 100 | }; |
76 | 101 | ||
77 | 102 | ||
@@ -315,13 +340,33 @@ udp_ipv4_broadcast_send (void *cls, | |||
315 | GNUNET_a2s (baddr->addr, baddr->addrlen)); | 340 | GNUNET_a2s (baddr->addr, baddr->addrlen)); |
316 | } | 341 | } |
317 | } | 342 | } |
318 | // if (-1 != baddr->cryogenic_fd) { | 343 | |
319 | // ioctl (baddr->cryogenic_fd, broadcast_interval +/- X) | 344 | /* |
320 | // GNUNET_SCHEDULER_add_write_file (baddr->cryogenic_fd, &udp_ipv4_broadcast_send, baddr); | 345 | * Cryogenic |
321 | // } else | 346 | */ |
322 | baddr->broadcast_task = | 347 | if (baddr->cryogenic_fd.fd > 0) |
323 | GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval, | 348 | { |
324 | &udp_ipv4_broadcast_send, baddr); | 349 | baddr->cryogenic_times.delay_msecs = (plugin->broadcast_interval/1000.0)*0.5; |
350 | baddr->cryogenic_times.timeout_msecs = (plugin->broadcast_interval/1000.0)*1.5; | ||
351 | |||
352 | if (ioctl(baddr->cryogenic_fd.fd, | ||
353 | PM_SET_DELAY_AND_TIMEOUT, | ||
354 | &baddr->cryogenic_times) < 0) | ||
355 | { | ||
356 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "ioctl"); | ||
357 | baddr->broadcast_task = | ||
358 | GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval, | ||
359 | &udp_ipv4_broadcast_send, baddr); | ||
360 | } | ||
361 | else | ||
362 | GNUNET_SCHEDULER_add_write_file (&baddr->cryogenic_fd, | ||
363 | &udp_ipv4_broadcast_send, baddr); | ||
364 | |||
365 | } | ||
366 | else | ||
367 | baddr->broadcast_task = | ||
368 | GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval, | ||
369 | &udp_ipv4_broadcast_send, baddr); | ||
325 | } | 370 | } |
326 | 371 | ||
327 | 372 | ||
@@ -376,10 +421,31 @@ udp_ipv6_broadcast_send (void *cls, | |||
376 | GNUNET_a2s ((const struct sockaddr *) &plugin->ipv6_multicast_address, | 421 | GNUNET_a2s ((const struct sockaddr *) &plugin->ipv6_multicast_address, |
377 | sizeof (struct sockaddr_in6))); | 422 | sizeof (struct sockaddr_in6))); |
378 | } | 423 | } |
379 | // cryogenic... | 424 | /* |
380 | baddr->broadcast_task = | 425 | * Cryogenic |
381 | GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval, | 426 | */ |
382 | &udp_ipv6_broadcast_send, baddr); | 427 | if (baddr->cryogenic_fd.fd > 0) |
428 | { | ||
429 | baddr->cryogenic_times.delay_msecs = (plugin->broadcast_interval/1000.0)*0.5; | ||
430 | baddr->cryogenic_times.timeout_msecs = (plugin->broadcast_interval/1000.0)*1.5; | ||
431 | |||
432 | if (ioctl(baddr->cryogenic_fd.fd, | ||
433 | PM_SET_DELAY_AND_TIMEOUT, | ||
434 | &baddr->cryogenic_times) < 0) | ||
435 | { | ||
436 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "ioctl"); | ||
437 | baddr->broadcast_task = | ||
438 | GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval, | ||
439 | &udp_ipv6_broadcast_send, baddr); | ||
440 | } | ||
441 | else | ||
442 | GNUNET_SCHEDULER_add_write_file (&baddr->cryogenic_fd, | ||
443 | &udp_ipv4_broadcast_send, baddr); | ||
444 | } | ||
445 | else | ||
446 | baddr->broadcast_task = | ||
447 | GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval, | ||
448 | &udp_ipv6_broadcast_send, baddr); | ||
383 | } | 449 | } |
384 | 450 | ||
385 | 451 | ||
@@ -428,15 +494,22 @@ iface_proc (void *cls, | |||
428 | (NULL != plugin->sockv4) && | 494 | (NULL != plugin->sockv4) && |
429 | (addrlen == sizeof (struct sockaddr_in)) ) | 495 | (addrlen == sizeof (struct sockaddr_in)) ) |
430 | { | 496 | { |
497 | |||
498 | /* | ||
499 | * setup Cryogenic FD for ipv4 broadcasting | ||
500 | */ | ||
431 | char *filename; | 501 | char *filename; |
432 | |||
433 | GNUNET_asprintf (&filename, | 502 | GNUNET_asprintf (&filename, |
434 | "/dev/power/net-%s", | 503 | "/dev/power/%s", |
435 | name); | 504 | name); |
436 | // ba->cryogenic_fd = GNUNET_DISK_file_open (filename, ...); | 505 | ba->cryogenic_fd = |
506 | GNUNET_DISK_file_open (filename, | ||
507 | GNUNET_DISK_OPEN_WRITE, | ||
508 | GNUNET_DISK_PERM_NONE); | ||
437 | GNUNET_free (filename); | 509 | GNUNET_free (filename); |
510 | |||
438 | ba->broadcast_task = | 511 | ba->broadcast_task = |
439 | GNUNET_SCHEDULER_add_now (&udp_ipv4_broadcast_send, ba); | 512 | GNUNET_SCHEDULER_add_now (&udp_ipv4_broadcast_send, ba); |
440 | } | 513 | } |
441 | if ((GNUNET_YES == plugin->enable_ipv6) && | 514 | if ((GNUNET_YES == plugin->enable_ipv6) && |
442 | (NULL != plugin->sockv6) && | 515 | (NULL != plugin->sockv6) && |
@@ -474,7 +547,21 @@ iface_proc (void *cls, | |||
474 | { | 547 | { |
475 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 548 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
476 | "IPv6 multicasting running\n"); | 549 | "IPv6 multicasting running\n"); |
477 | // setup cryogenic FD... | 550 | |
551 | /* | ||
552 | * setup Cryogenic FD for ipv6 broadcasting | ||
553 | */ | ||
554 | char *filename; | ||
555 | GNUNET_asprintf (&filename, | ||
556 | "/dev/power/%s", | ||
557 | name); | ||
558 | ba->cryogenic_fd = | ||
559 | GNUNET_DISK_file_open (filename, | ||
560 | GNUNET_DISK_OPEN_WRITE, | ||
561 | GNUNET_DISK_PERM_NONE); | ||
562 | GNUNET_free (filename); | ||
563 | |||
564 | |||
478 | ba->broadcast_task = | 565 | ba->broadcast_task = |
479 | GNUNET_SCHEDULER_add_now (&udp_ipv6_broadcast_send, ba); | 566 | GNUNET_SCHEDULER_add_now (&udp_ipv6_broadcast_send, ba); |
480 | } | 567 | } |
@@ -572,7 +659,12 @@ stop_broadcast (struct Plugin *plugin) | |||
572 | LOG (GNUNET_ERROR_TYPE_DEBUG, "IPv6 multicasting stopped\n"); | 659 | LOG (GNUNET_ERROR_TYPE_DEBUG, "IPv6 multicasting stopped\n"); |
573 | } | 660 | } |
574 | } | 661 | } |
575 | // close cryogenic FD... | 662 | |
663 | /* | ||
664 | * Close Cryogenic FD | ||
665 | */ | ||
666 | GNUNET_DISK_file_cose(p->cryogenic_fd); | ||
667 | |||
576 | GNUNET_CONTAINER_DLL_remove (plugin->broadcast_head, | 668 | GNUNET_CONTAINER_DLL_remove (plugin->broadcast_head, |
577 | plugin->broadcast_tail, p); | 669 | plugin->broadcast_tail, p); |
578 | GNUNET_free (p->addr); | 670 | GNUNET_free (p->addr); |