summaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_udp_broadcasting.c
diff options
context:
space:
mode:
authorng0 <ng0@n0.is>2019-09-08 12:33:09 +0000
committerng0 <ng0@n0.is>2019-09-08 12:33:09 +0000
commitd41ed82a4ea0cc8e1674b6d5d2c49fd6462610bb (patch)
tree9efd18ea7d425652085ed0bd5e8e45604bc5f6b9 /src/transport/plugin_transport_udp_broadcasting.c
parenta0fce305c565c0937d917a92712f15e9c5736260 (diff)
uncrustify as demanded.
Diffstat (limited to 'src/transport/plugin_transport_udp_broadcasting.c')
-rw-r--r--src/transport/plugin_transport_udp_broadcasting.c643
1 files changed, 320 insertions, 323 deletions
diff --git a/src/transport/plugin_transport_udp_broadcasting.c b/src/transport/plugin_transport_udp_broadcasting.c
index 0c26aa624..8ef73e3ae 100644
--- a/src/transport/plugin_transport_udp_broadcasting.c
+++ b/src/transport/plugin_transport_udp_broadcasting.c
@@ -11,12 +11,12 @@
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Affero General Public License for more details.
-
+
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
SPDX-License-Identifier: AGPL3.0-or-later
-*/
+ */
/**
* @file transport/plugin_transport_udp_broadcasting.c
@@ -38,7 +38,7 @@
#include "gnunet_transport_plugin.h"
#include "transport.h"
-#define LOG(kind,...) GNUNET_log_from (kind, "transport-udp", __VA_ARGS__)
+#define LOG(kind, ...) GNUNET_log_from(kind, "transport-udp", __VA_ARGS__)
/* *********** Cryogenic ********** */
#if LINUX
@@ -53,29 +53,27 @@
#define PM_SET_DELAY_AND_TIMEOUT _IOW(PM_MAGIC, 1, struct pm_times)
struct pm_times {
- unsigned long delay_msecs;
- unsigned long timeout_msecs;
+ unsigned long delay_msecs;
+ unsigned long timeout_msecs;
};
#endif
/************************************/
-struct UDP_Beacon_Message
-{
- /**
- * Message header.
- */
+struct UDP_Beacon_Message {
+ /**
+ * Message header.
+ */
struct GNUNET_MessageHeader header;
- /**
- * What is the identity of the sender
- */
+ /**
+ * What is the identity of the sender
+ */
struct GNUNET_PeerIdentity sender;
};
-struct BroadcastAddress
-{
+struct BroadcastAddress {
struct BroadcastAddress *next;
struct BroadcastAddress *prev;
@@ -108,8 +106,7 @@ struct BroadcastAddress
/**
* Client-specific context for #broadcast_mst_cb().
*/
-struct MstContext
-{
+struct MstContext {
struct Plugin *plugin;
const union UdpAddress *udp_addr;
@@ -132,8 +129,8 @@ struct MstContext
* @return #GNUNET_OK (always)
*/
static int
-broadcast_mst_cb (void *cls,
- const struct GNUNET_MessageHeader *message)
+broadcast_mst_cb(void *cls,
+ const struct GNUNET_MessageHeader *message)
{
struct MstContext *mc = cls;
struct Plugin *plugin = mc->plugin;
@@ -141,32 +138,32 @@ broadcast_mst_cb (void *cls,
const struct GNUNET_MessageHeader *hello;
const struct UDP_Beacon_Message *msg;
- msg = (const struct UDP_Beacon_Message *) message;
+ msg = (const struct UDP_Beacon_Message *)message;
if (GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON !=
- ntohs (msg->header.type))
+ ntohs(msg->header.type))
return GNUNET_OK;
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Received beacon with %u bytes from peer `%s' via address `%s'\n",
- ntohs (msg->header.size),
- GNUNET_i2s (&msg->sender),
- udp_address_to_string (NULL,
- mc->udp_addr,
- mc->udp_addr_len));
- hello = (struct GNUNET_MessageHeader *) &msg[1];
- address = GNUNET_HELLO_address_allocate (&msg->sender,
- PLUGIN_NAME,
- mc->udp_addr,
- mc->udp_addr_len,
- GNUNET_HELLO_ADDRESS_INFO_NONE);
- plugin->env->receive (plugin->env->cls,
- address,
- NULL,
- hello);
- GNUNET_HELLO_address_free (address);
- GNUNET_STATISTICS_update (plugin->env->stats,
- _("# Multicast HELLO beacons received via UDP"),
- 1, GNUNET_NO);
+ LOG(GNUNET_ERROR_TYPE_DEBUG,
+ "Received beacon with %u bytes from peer `%s' via address `%s'\n",
+ ntohs(msg->header.size),
+ GNUNET_i2s(&msg->sender),
+ udp_address_to_string(NULL,
+ mc->udp_addr,
+ mc->udp_addr_len));
+ hello = (struct GNUNET_MessageHeader *)&msg[1];
+ address = GNUNET_HELLO_address_allocate(&msg->sender,
+ PLUGIN_NAME,
+ mc->udp_addr,
+ mc->udp_addr_len,
+ GNUNET_HELLO_ADDRESS_INFO_NONE);
+ plugin->env->receive(plugin->env->cls,
+ address,
+ NULL,
+ hello);
+ GNUNET_HELLO_address_free(address);
+ GNUNET_STATISTICS_update(plugin->env->stats,
+ _("# Multicast HELLO beacons received via UDP"),
+ 1, GNUNET_NO);
return GNUNET_OK;
}
@@ -183,58 +180,59 @@ broadcast_mst_cb (void *cls,
* @param network_type network type of the sender's address
*/
void
-udp_broadcast_receive (struct Plugin *plugin,
- const char *buf,
- ssize_t size,
- const union UdpAddress *udp_addr,
- size_t udp_addr_len,
- enum GNUNET_NetworkType network_type)
+udp_broadcast_receive(struct Plugin *plugin,
+ const char *buf,
+ ssize_t size,
+ const union UdpAddress *udp_addr,
+ size_t udp_addr_len,
+ enum GNUNET_NetworkType network_type)
{
struct GNUNET_MessageStreamTokenizer *broadcast_mst;
struct MstContext mc;
- broadcast_mst = GNUNET_MST_create (&broadcast_mst_cb,
- &mc);
+ broadcast_mst = GNUNET_MST_create(&broadcast_mst_cb,
+ &mc);
mc.plugin = plugin;
mc.udp_addr = udp_addr;
mc.udp_addr_len = udp_addr_len;
mc.ats_address_network_type = network_type;
- GNUNET_MST_from_buffer (broadcast_mst,
- buf, size,
- GNUNET_NO,
- GNUNET_NO);
- GNUNET_MST_destroy (broadcast_mst);
+ GNUNET_MST_from_buffer(broadcast_mst,
+ buf, size,
+ GNUNET_NO,
+ GNUNET_NO);
+ GNUNET_MST_destroy(broadcast_mst);
}
static unsigned int
-prepare_beacon (struct Plugin *plugin,
- struct UDP_Beacon_Message *msg)
+prepare_beacon(struct Plugin *plugin,
+ struct UDP_Beacon_Message *msg)
{
uint16_t hello_size;
uint16_t msg_size;
const struct GNUNET_MessageHeader *hello;
- hello = plugin->env->get_our_hello ();
+
+ hello = plugin->env->get_our_hello();
if (NULL == hello)
return 0;
- hello_size = GNUNET_HELLO_size ((struct GNUNET_HELLO_Message *) hello);
- msg_size = hello_size + sizeof (struct UDP_Beacon_Message);
+ hello_size = GNUNET_HELLO_size((struct GNUNET_HELLO_Message *)hello);
+ msg_size = hello_size + sizeof(struct UDP_Beacon_Message);
- if (hello_size < (sizeof (struct GNUNET_MessageHeader)) ||
+ if (hello_size < (sizeof(struct GNUNET_MessageHeader)) ||
(msg_size > (UDP_MTU)))
return 0;
msg->sender = *(plugin->env->my_identity);
- msg->header.size = htons (msg_size);
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON);
- GNUNET_memcpy (&msg[1], hello, hello_size);
+ msg->header.size = htons(msg_size);
+ msg->header.type = htons(GNUNET_MESSAGE_TYPE_TRANSPORT_BROADCAST_BEACON);
+ GNUNET_memcpy(&msg[1], hello, hello_size);
return msg_size;
}
static void
-udp_ipv4_broadcast_send (void *cls)
+udp_ipv4_broadcast_send(void *cls)
{
struct BroadcastAddress *baddr = cls;
struct Plugin *plugin = baddr->plugin;
@@ -244,83 +242,82 @@ udp_ipv4_broadcast_send (void *cls)
baddr->broadcast_task = NULL;
- msg_size = prepare_beacon(plugin, (struct UDP_Beacon_Message *) &buf);
+ msg_size = prepare_beacon(plugin, (struct UDP_Beacon_Message *)&buf);
if (0 != msg_size)
- {
- struct sockaddr_in *addr = (struct sockaddr_in *) baddr->addr;
-
- addr->sin_port = htons (plugin->port);
- sent = GNUNET_NETWORK_socket_sendto (plugin->sockv4, &buf, msg_size,
- (const struct sockaddr *) addr,
- baddr->addrlen);
- if (sent == GNUNET_SYSERR)
{
- if ((ENETUNREACH == errno) || (ENETDOWN == errno))
- {
- /* "Network unreachable" or "Network down"
- *
- * This indicates that we just do not have network connectivity
- */
- GNUNET_log (GNUNET_ERROR_TYPE_BULK | GNUNET_ERROR_TYPE_WARNING,
- "Network connectivity is down, cannot send beacon!\n");
- }
+ struct sockaddr_in *addr = (struct sockaddr_in *)baddr->addr;
+
+ addr->sin_port = htons(plugin->port);
+ sent = GNUNET_NETWORK_socket_sendto(plugin->sockv4, &buf, msg_size,
+ (const struct sockaddr *)addr,
+ baddr->addrlen);
+ if (sent == GNUNET_SYSERR)
+ {
+ if ((ENETUNREACH == errno) || (ENETDOWN == errno))
+ {
+ /* "Network unreachable" or "Network down"
+ *
+ * This indicates that we just do not have network connectivity
+ */
+ GNUNET_log(GNUNET_ERROR_TYPE_BULK | GNUNET_ERROR_TYPE_WARNING,
+ "Network connectivity is down, cannot send beacon!\n");
+ }
+ else
+ GNUNET_log_strerror(GNUNET_ERROR_TYPE_ERROR, "sendto");
+ }
else
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "sendto");
- }
- else
- {
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Sent HELLO beacon broadcast with %i bytes to address %s\n", sent,
- GNUNET_a2s (baddr->addr, baddr->addrlen));
+ {
+ LOG(GNUNET_ERROR_TYPE_DEBUG,
+ "Sent HELLO beacon broadcast with %i bytes to address %s\n", sent,
+ GNUNET_a2s(baddr->addr, baddr->addrlen));
+ }
}
- }
#if LINUX
/*
* Cryogenic
*/
if (NULL != baddr->cryogenic_fd)
- {
- baddr->cryogenic_times.delay_msecs = (plugin->broadcast_interval.rel_value_us/1000.0)*0.5;
- baddr->cryogenic_times.timeout_msecs = (plugin->broadcast_interval.rel_value_us/1000.0)*1.5;
-
- if (ioctl(baddr->cryogenic_fd->fd,
- PM_SET_DELAY_AND_TIMEOUT,
- &baddr->cryogenic_times) < 0)
{
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "ioctl");
- baddr->broadcast_task =
- GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval,
- &udp_ipv4_broadcast_send, baddr);
- }
- else
- GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL,
- baddr->cryogenic_fd,
- &udp_ipv4_broadcast_send,
- baddr);
+ baddr->cryogenic_times.delay_msecs = (plugin->broadcast_interval.rel_value_us / 1000.0) * 0.5;
+ baddr->cryogenic_times.timeout_msecs = (plugin->broadcast_interval.rel_value_us / 1000.0) * 1.5;
- }
+ if (ioctl(baddr->cryogenic_fd->fd,
+ PM_SET_DELAY_AND_TIMEOUT,
+ &baddr->cryogenic_times) < 0)
+ {
+ GNUNET_log_strerror(GNUNET_ERROR_TYPE_WARNING, "ioctl");
+ baddr->broadcast_task =
+ GNUNET_SCHEDULER_add_delayed(plugin->broadcast_interval,
+ &udp_ipv4_broadcast_send, baddr);
+ }
+ else
+ GNUNET_SCHEDULER_add_write_file(GNUNET_TIME_UNIT_FOREVER_REL,
+ baddr->cryogenic_fd,
+ &udp_ipv4_broadcast_send,
+ baddr);
+ }
else
#endif
- baddr->broadcast_task =
- GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval,
- &udp_ipv4_broadcast_send, baddr);
+ baddr->broadcast_task =
+ GNUNET_SCHEDULER_add_delayed(plugin->broadcast_interval,
+ &udp_ipv4_broadcast_send, baddr);
}
static void
-udp_ipv6_broadcast_send (void *cls)
+udp_ipv6_broadcast_send(void *cls)
{
struct BroadcastAddress *baddr = cls;
struct Plugin *plugin = baddr->plugin;
ssize_t sent;
uint16_t msg_size;
char buf[65536] GNUNET_ALIGN;
- const struct sockaddr_in6 *s6 = (const struct sockaddr_in6 *) baddr->addr;
+ const struct sockaddr_in6 *s6 = (const struct sockaddr_in6 *)baddr->addr;
baddr->broadcast_task = NULL;
- msg_size = prepare_beacon(plugin, (struct UDP_Beacon_Message *) &buf);
+ msg_size = prepare_beacon(plugin, (struct UDP_Beacon_Message *)&buf);
/* Note: unclear if this actually works to limit the multicast to
the specified interface as we're not (necessarily) using a
link-local multicast group and the kernel suggests that the
@@ -330,63 +327,63 @@ udp_ipv6_broadcast_send (void *cls)
in that case, we might want to revert to only doing this
once, and not per interface (hard to test...) */
plugin->ipv6_multicast_address.sin6_scope_id = s6->sin6_scope_id;
- sent = GNUNET_NETWORK_socket_sendto (plugin->sockv6, &buf, msg_size,
- (const struct sockaddr *)
- &plugin->ipv6_multicast_address,
- sizeof (struct sockaddr_in6));
+ sent = GNUNET_NETWORK_socket_sendto(plugin->sockv6, &buf, msg_size,
+ (const struct sockaddr *)
+ &plugin->ipv6_multicast_address,
+ sizeof(struct sockaddr_in6));
plugin->ipv6_multicast_address.sin6_scope_id = 0;
if (sent == GNUNET_SYSERR)
- {
- if ((ENETUNREACH == errno) || (ENETDOWN == errno))
{
- /* "Network unreachable" or "Network down"
- *
- * This indicates that this system is IPv6 enabled, but does not
- * have a valid global IPv6 address assigned
- */
- GNUNET_log (GNUNET_ERROR_TYPE_BULK | GNUNET_ERROR_TYPE_WARNING,
- "Network connectivity is down, cannot send beacon!\n");
+ if ((ENETUNREACH == errno) || (ENETDOWN == errno))
+ {
+ /* "Network unreachable" or "Network down"
+ *
+ * This indicates that this system is IPv6 enabled, but does not
+ * have a valid global IPv6 address assigned
+ */
+ GNUNET_log(GNUNET_ERROR_TYPE_BULK | GNUNET_ERROR_TYPE_WARNING,
+ "Network connectivity is down, cannot send beacon!\n");
+ }
+ else
+ GNUNET_log_strerror(GNUNET_ERROR_TYPE_ERROR, "sendto");
}
- else
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "sendto");
- }
else
- {
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Sending IPv6 HELLO beacon broadcast with %d bytes to address %s\n",
- (int) sent,
- GNUNET_a2s ((const struct sockaddr *) &plugin->ipv6_multicast_address,
- sizeof (struct sockaddr_in6)));
- }
+ {
+ LOG(GNUNET_ERROR_TYPE_DEBUG,
+ "Sending IPv6 HELLO beacon broadcast with %d bytes to address %s\n",
+ (int)sent,
+ GNUNET_a2s((const struct sockaddr *)&plugin->ipv6_multicast_address,
+ sizeof(struct sockaddr_in6)));
+ }
#if LINUX
/*
* Cryogenic
*/
if (NULL != baddr->cryogenic_fd)
- {
- baddr->cryogenic_times.delay_msecs = (plugin->broadcast_interval.rel_value_us/1000.0)*0.5;
- baddr->cryogenic_times.timeout_msecs = (plugin->broadcast_interval.rel_value_us/1000.0)*1.5;
-
- if (ioctl(baddr->cryogenic_fd->fd,
- PM_SET_DELAY_AND_TIMEOUT,
- &baddr->cryogenic_times) < 0)
{
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "ioctl");
- baddr->broadcast_task =
- GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval,
- &udp_ipv6_broadcast_send, baddr);
+ baddr->cryogenic_times.delay_msecs = (plugin->broadcast_interval.rel_value_us / 1000.0) * 0.5;
+ baddr->cryogenic_times.timeout_msecs = (plugin->broadcast_interval.rel_value_us / 1000.0) * 1.5;
+
+ if (ioctl(baddr->cryogenic_fd->fd,
+ PM_SET_DELAY_AND_TIMEOUT,
+ &baddr->cryogenic_times) < 0)
+ {
+ GNUNET_log_strerror(GNUNET_ERROR_TYPE_WARNING, "ioctl");
+ baddr->broadcast_task =
+ GNUNET_SCHEDULER_add_delayed(plugin->broadcast_interval,
+ &udp_ipv6_broadcast_send, baddr);
+ }
+ else
+ GNUNET_SCHEDULER_add_write_file(GNUNET_TIME_UNIT_FOREVER_REL,
+ baddr->cryogenic_fd,
+ &udp_ipv6_broadcast_send,
+ baddr);
}
- else
- GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL,
- baddr->cryogenic_fd,
- &udp_ipv6_broadcast_send,
- baddr);
- }
else
#endif
- baddr->broadcast_task =
- GNUNET_SCHEDULER_add_delayed (plugin->broadcast_interval,
- &udp_ipv6_broadcast_send, baddr);
+ baddr->broadcast_task =
+ GNUNET_SCHEDULER_add_delayed(plugin->broadcast_interval,
+ &udp_ipv6_broadcast_send, baddr);
}
@@ -403,12 +400,12 @@ udp_ipv6_broadcast_send (void *cls)
* @return #GNUNET_OK to continue iteration, #GNUNET_SYSERR to abort
*/
static int
-iface_proc (void *cls,
- const char *name,
- int isDefault,
- const struct sockaddr *addr,
- const struct sockaddr *broadcast_addr,
- const struct sockaddr *netmask, socklen_t addrlen)
+iface_proc(void *cls,
+ const char *name,
+ int isDefault,
+ const struct sockaddr *addr,
+ const struct sockaddr *broadcast_addr,
+ const struct sockaddr *netmask, socklen_t addrlen)
{
struct Plugin *plugin = cls;
struct BroadcastAddress *ba;
@@ -416,113 +413,113 @@ iface_proc (void *cls,
if (NULL == addr)
return GNUNET_OK;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "address %s for interface %s %p\n ",
- GNUNET_a2s (addr, addrlen), name, addr);
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "address %s for interface %s %p\n ",
+ GNUNET_a2s(addr, addrlen), name, addr);
if (NULL == broadcast_addr)
return GNUNET_OK;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "broadcast address %s for interface %s %p\n ",
- GNUNET_a2s (broadcast_addr, addrlen), name, broadcast_addr);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "netmask %s for interface %s %p\n ",
- GNUNET_a2s (netmask, addrlen), name, netmask);
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
+ "broadcast address %s for interface %s %p\n ",
+ GNUNET_a2s(broadcast_addr, addrlen), name, broadcast_addr);
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "netmask %s for interface %s %p\n ",
+ GNUNET_a2s(netmask, addrlen), name, netmask);
- network = plugin->env->get_address_type (plugin->env->cls, broadcast_addr, addrlen);
+ network = plugin->env->get_address_type(plugin->env->cls, broadcast_addr, addrlen);
if (GNUNET_NT_LOOPBACK == network)
- {
- /* Broadcasting on loopback does not make sense */
- return GNUNET_YES;
- }
+ {
+ /* Broadcasting on loopback does not make sense */
+ return GNUNET_YES;
+ }
- ba = GNUNET_new (struct BroadcastAddress);
+ ba = GNUNET_new(struct BroadcastAddress);
ba->plugin = plugin;
- ba->addr = GNUNET_malloc (addrlen);
- GNUNET_memcpy (ba->addr, broadcast_addr, addrlen);
+ ba->addr = GNUNET_malloc(addrlen);
+ GNUNET_memcpy(ba->addr, broadcast_addr, addrlen);
ba->addrlen = addrlen;
- if ( (GNUNET_YES == plugin->enable_ipv4) &&
- (NULL != plugin->sockv4) &&
- (addrlen == sizeof (struct sockaddr_in)) )
- {
-#if LINUX
- /*
- * setup Cryogenic FD for ipv4 broadcasting
- */
- char *filename;
-
- GNUNET_asprintf (&filename,
- "/dev/cryogenic/%s",
- name);
- if (0 == ACCESS (name, R_OK))
+ if ((GNUNET_YES == plugin->enable_ipv4) &&
+ (NULL != plugin->sockv4) &&
+ (addrlen == sizeof(struct sockaddr_in)))
{
- ba->cryogenic_fd =
- GNUNET_DISK_file_open (filename,
- GNUNET_DISK_OPEN_WRITE,
- GNUNET_DISK_PERM_NONE);
- }
- GNUNET_free (filename);
+#if LINUX
+ /*
+ * setup Cryogenic FD for ipv4 broadcasting
+ */
+ char *filename;
+
+ GNUNET_asprintf(&filename,
+ "/dev/cryogenic/%s",
+ name);
+ if (0 == ACCESS(name, R_OK))
+ {
+ ba->cryogenic_fd =
+ GNUNET_DISK_file_open(filename,
+ GNUNET_DISK_OPEN_WRITE,
+ GNUNET_DISK_PERM_NONE);
+ }
+ GNUNET_free(filename);
#endif
- ba->broadcast_task =
- GNUNET_SCHEDULER_add_now (&udp_ipv4_broadcast_send, ba);
- }
+ ba->broadcast_task =
+ GNUNET_SCHEDULER_add_now(&udp_ipv4_broadcast_send, ba);
+ }
if ((GNUNET_YES == plugin->enable_ipv6) &&
(NULL != plugin->sockv6) &&
- (addrlen == sizeof (struct sockaddr_in6)))
- {
- /* Create IPv6 multicast request */
- struct ipv6_mreq multicastRequest;
- const struct sockaddr_in6 *s6 = (const struct sockaddr_in6 *) broadcast_addr;
+ (addrlen == sizeof(struct sockaddr_in6)))
+ {
+ /* Create IPv6 multicast request */
+ struct ipv6_mreq multicastRequest;
+ const struct sockaddr_in6 *s6 = (const struct sockaddr_in6 *)broadcast_addr;
- multicastRequest.ipv6mr_multiaddr =
+ multicastRequest.ipv6mr_multiaddr =
plugin->ipv6_multicast_address.sin6_addr;
- /* http://tools.ietf.org/html/rfc2553#section-5.2:
- *
- * IPV6_JOIN_GROUP
- *
- * Join a multicast group on a specified local interface. If the
- * interface index is specified as 0, the kernel chooses the local
- * interface. For example, some kernels look up the multicast
- * group in the normal IPv6 routing table and using the resulting
- * interface; we do this for each interface, so no need to use
- * zero (anymore...).
- */
- multicastRequest.ipv6mr_interface = s6->sin6_scope_id;
-
- /* Join the multicast group */
- if (GNUNET_OK !=
- GNUNET_NETWORK_socket_setsockopt
- (plugin->sockv6, IPPROTO_IPV6, IPV6_JOIN_GROUP,
- &multicastRequest, sizeof (multicastRequest)))
- {
- LOG (GNUNET_ERROR_TYPE_WARNING,
- "Failed to join IPv6 multicast group: IPv6 broadcasting not running\n");
- }
- else
- {
-#if LINUX
- /*
- * setup Cryogenic FD for ipv6 broadcasting
+ /* http://tools.ietf.org/html/rfc2553#section-5.2:
+ *
+ * IPV6_JOIN_GROUP
+ *
+ * Join a multicast group on a specified local interface. If the
+ * interface index is specified as 0, the kernel chooses the local
+ * interface. For example, some kernels look up the multicast
+ * group in the normal IPv6 routing table and using the resulting
+ * interface; we do this for each interface, so no need to use
+ * zero (anymore...).
*/
- char *filename;
+ multicastRequest.ipv6mr_interface = s6->sin6_scope_id;
- GNUNET_asprintf (&filename,
- "/dev/cryogenic/%s",
- name);
- if (0 == ACCESS (name, R_OK))
- {
- ba->cryogenic_fd =
- GNUNET_DISK_file_open (filename,
- GNUNET_DISK_OPEN_WRITE,
- GNUNET_DISK_PERM_NONE);
- }
- GNUNET_free (filename);
+ /* Join the multicast group */
+ if (GNUNET_OK !=
+ GNUNET_NETWORK_socket_setsockopt
+ (plugin->sockv6, IPPROTO_IPV6, IPV6_JOIN_GROUP,
+ &multicastRequest, sizeof(multicastRequest)))
+ {
+ LOG(GNUNET_ERROR_TYPE_WARNING,
+ "Failed to join IPv6 multicast group: IPv6 broadcasting not running\n");
+ }
+ else
+ {
+#if LINUX
+ /*
+ * setup Cryogenic FD for ipv6 broadcasting
+ */
+ char *filename;
+
+ GNUNET_asprintf(&filename,
+ "/dev/cryogenic/%s",
+ name);
+ if (0 == ACCESS(name, R_OK))
+ {
+ ba->cryogenic_fd =
+ GNUNET_DISK_file_open(filename,
+ GNUNET_DISK_OPEN_WRITE,
+ GNUNET_DISK_PERM_NONE);
+ }
+ GNUNET_free(filename);
#endif
- ba->broadcast_task =
- GNUNET_SCHEDULER_add_now (&udp_ipv6_broadcast_send, ba);
+ ba->broadcast_task =
+ GNUNET_SCHEDULER_add_now(&udp_ipv6_broadcast_send, ba);
+ }
}
- }
- GNUNET_CONTAINER_DLL_insert (plugin->broadcast_head,
- plugin->broadcast_tail, ba);
+ GNUNET_CONTAINER_DLL_insert(plugin->broadcast_head,
+ plugin->broadcast_tail, ba);
return GNUNET_OK;
}
@@ -535,48 +532,48 @@ iface_proc (void *cls,
* @param server_addrv4
*/
void
-setup_broadcast (struct Plugin *plugin,
- struct sockaddr_in6 *server_addrv6,
- struct sockaddr_in *server_addrv4)
+setup_broadcast(struct Plugin *plugin,
+ struct sockaddr_in6 *server_addrv6,
+ struct sockaddr_in *server_addrv4)
{
if (GNUNET_YES ==
- GNUNET_CONFIGURATION_get_value_yesno (plugin->env->cfg,
- "topology",
- "FRIENDS-ONLY"))
- {
- LOG (GNUNET_ERROR_TYPE_WARNING,
- _("Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"));
- return;
- }
+ GNUNET_CONFIGURATION_get_value_yesno(plugin->env->cfg,
+ "topology",
+ "FRIENDS-ONLY"))
+ {
+ LOG(GNUNET_ERROR_TYPE_WARNING,
+ _("Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"));
+ return;
+ }
if (GNUNET_YES != plugin->enable_broadcasting)
return; /* We do not send, just receive */
/* create IPv4 broadcast socket */
if ((GNUNET_YES == plugin->enable_ipv4) && (NULL != plugin->sockv4))
- {
- static int yes = 1;
-
- if (GNUNET_NETWORK_socket_setsockopt
- (plugin->sockv4, SOL_SOCKET, SO_BROADCAST, &yes,
- sizeof (int)) != GNUNET_OK)
{
- LOG (GNUNET_ERROR_TYPE_WARNING,
- _("Failed to set IPv4 broadcast option for broadcast socket on port %d\n"),
- ntohs (server_addrv4->sin_port));
+ static int yes = 1;
+
+ if (GNUNET_NETWORK_socket_setsockopt
+ (plugin->sockv4, SOL_SOCKET, SO_BROADCAST, &yes,
+ sizeof(int)) != GNUNET_OK)
+ {
+ LOG(GNUNET_ERROR_TYPE_WARNING,
+ _("Failed to set IPv4 broadcast option for broadcast socket on port %d\n"),
+ ntohs(server_addrv4->sin_port));
+ }
}
- }
/* create IPv6 multicast socket */
if ((GNUNET_YES == plugin->enable_ipv6) && (plugin->sockv6 != NULL))
- {
- memset (&plugin->ipv6_multicast_address, 0, sizeof (struct sockaddr_in6));
- GNUNET_assert (1 ==
- inet_pton (AF_INET6, "FF05::13B",
+ {
+ memset(&plugin->ipv6_multicast_address, 0, sizeof(struct sockaddr_in6));
+ GNUNET_assert(1 ==
+ inet_pton(AF_INET6, "FF05::13B",
&plugin->ipv6_multicast_address.sin6_addr));
- plugin->ipv6_multicast_address.sin6_family = AF_INET6;
- plugin->ipv6_multicast_address.sin6_port = htons (plugin->port);
- }
- GNUNET_OS_network_interfaces_list (&iface_proc, plugin);
+ plugin->ipv6_multicast_address.sin6_family = AF_INET6;
+ plugin->ipv6_multicast_address.sin6_port = htons(plugin->port);
+ }
+ GNUNET_OS_network_interfaces_list(&iface_proc, plugin);
}
@@ -586,55 +583,55 @@ setup_broadcast (struct Plugin *plugin,
* @param plugin
*/
void
-stop_broadcast (struct Plugin *plugin)
+stop_broadcast(struct Plugin *plugin)
{
if (GNUNET_YES == plugin->enable_broadcasting)
- {
- /* Disable broadcasting */
- while (plugin->broadcast_head != NULL)
{
- struct BroadcastAddress *p = plugin->broadcast_head;
-
- if (p->broadcast_task != NULL)
- {
- GNUNET_SCHEDULER_cancel (p->broadcast_task);
- p->broadcast_task = NULL;
- }
- if ((GNUNET_YES == plugin->enable_ipv6) &&
- (NULL != plugin->sockv6) &&
- (p->addrlen == sizeof (struct sockaddr_in6)))
- {
- /* Create IPv6 multicast request */
- struct ipv6_mreq multicastRequest;
- const struct sockaddr_in6 *s6 = (const struct sockaddr_in6 *) p->addr;
-
- multicastRequest.ipv6mr_multiaddr =
- plugin->ipv6_multicast_address.sin6_addr;
- multicastRequest.ipv6mr_interface = s6->sin6_scope_id;
-
- /* Leave the multicast group */
- if (GNUNET_OK ==
- GNUNET_NETWORK_socket_setsockopt
- (plugin->sockv6, IPPROTO_IPV6, IPV6_LEAVE_GROUP,
- &multicastRequest, sizeof (multicastRequest)))
+ /* Disable broadcasting */
+ while (plugin->broadcast_head != NULL)
{
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "setsockopt");
- }
- else
- {
- LOG (GNUNET_ERROR_TYPE_DEBUG, "IPv6 multicasting stopped\n");
- }
- }
+ struct BroadcastAddress *p = plugin->broadcast_head;
+
+ if (p->broadcast_task != NULL)
+ {
+ GNUNET_SCHEDULER_cancel(p->broadcast_task);
+ p->broadcast_task = NULL;
+ }
+ if ((GNUNET_YES == plugin->enable_ipv6) &&
+ (NULL != plugin->sockv6) &&
+ (p->addrlen == sizeof(struct sockaddr_in6)))
+ {
+ /* Create IPv6 multicast request */
+ struct ipv6_mreq multicastRequest;
+ const struct sockaddr_in6 *s6 = (const struct sockaddr_in6 *)p->addr;
+
+ multicastRequest.ipv6mr_multiaddr =
+ plugin->ipv6_multicast_address.sin6_addr;
+ multicastRequest.ipv6mr_interface = s6->sin6_scope_id;
+
+ /* Leave the multicast group */
+ if (GNUNET_OK ==
+ GNUNET_NETWORK_socket_setsockopt
+ (plugin->sockv6, IPPROTO_IPV6, IPV6_LEAVE_GROUP,
+ &multicastRequest, sizeof(multicastRequest)))
+ {
+ GNUNET_log_strerror(GNUNET_ERROR_TYPE_ERROR, "setsockopt");
+ }
+ else
+ {
+ LOG(GNUNET_ERROR_TYPE_DEBUG, "IPv6 multicasting stopped\n");
+ }
+ }
#if LINUX
- GNUNET_DISK_file_close(p->cryogenic_fd);
+ GNUNET_DISK_file_close(p->cryogenic_fd);
#endif
- GNUNET_CONTAINER_DLL_remove (plugin->broadcast_head,
- plugin->broadcast_tail, p);
- GNUNET_free (p->addr);
- GNUNET_free (p);
+ GNUNET_CONTAINER_DLL_remove(plugin->broadcast_head,
+ plugin->broadcast_tail, p);
+ GNUNET_free(p->addr);
+ GNUNET_free(p);
+ }
}
- }
}
/* end of plugin_transport_udp_broadcasting.c */