From 0bd15d392c8c1c4dab56c794ec88fdbd7245cc51 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 18 Jan 2022 21:18:30 +0100 Subject: -adding logging, minor dthu bugfixes --- src/dht/gnunet-service-dht.c | 6 +++ src/dht/gnunet-service-dht_clients.c | 8 ++++ src/dht/gnunet-service-dht_neighbours.c | 15 ++++++ src/dhtu/plugin_dhtu_ip.c | 82 ++++++++++++++++++++++++++++----- 4 files changed, 100 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c index 4b0a290b9..39433791d 100644 --- a/src/dht/gnunet-service-dht.c +++ b/src/dht/gnunet-service-dht.c @@ -265,6 +265,9 @@ u_address_add (void *cls, struct GDS_Underlay *u = cls; struct MyAddress *a; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Underlay adds address %s for this peer\n", + address); a = GNUNET_new (struct MyAddress); a->source = source; a->url = GNUNET_strdup (address); @@ -292,6 +295,9 @@ u_address_del (void *ctx) { struct MyAddress *a = ctx; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Underlay deletes address %s for this peer\n", + a->url); GNUNET_HELLO_builder_del_address (GDS_my_hello, a->url); GNUNET_CONTAINER_DLL_remove (a_head, diff --git a/src/dht/gnunet-service-dht_clients.c b/src/dht/gnunet-service-dht_clients.c index e5819b193..dc451ed15 100644 --- a/src/dht/gnunet-service-dht_clients.c +++ b/src/dht/gnunet-service-dht_clients.c @@ -562,6 +562,9 @@ handle_local_result (void *cls, const struct GDS_DATACACHE_BlockData *bd) { /* FIXME: use 'cls' instead of looking up the client? */ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Datacache provided result for query key %s\n", + GNUNET_h2s (&bd->key)); GDS_CLIENTS_handle_reply (bd, &bd->key, 0, NULL /* get_path */); @@ -1081,6 +1084,8 @@ handle_dht_local_hello_get (void *cls, struct GNUNET_MessageHeader *hdr; struct GNUNET_MQ_Envelope *env; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Handling request from local client for my HELLO\n"); env = GNUNET_MQ_msg_extra (hdr, slen, GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_URL); @@ -1134,6 +1139,9 @@ handle_dht_local_hello_offer (void *cls, struct GNUNET_HELLO_Builder *b; struct GNUNET_PeerIdentity pid; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Local client provided HELLO URL %s\n", + url); b = GNUNET_HELLO_builder_from_url (url); if (NULL == b) { diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c index 63307dea2..c4d6b7428 100644 --- a/src/dht/gnunet-service-dht_neighbours.c +++ b/src/dht/gnunet-service-dht_neighbours.c @@ -2260,7 +2260,11 @@ GDS_try_connect (void *cls, if (0 == GNUNET_memcmp (&GDS_my_identity, pid)) + { + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Got a HELLO for my own PID, ignoring it\n"); return; /* that's us! */ + } GNUNET_CRYPTO_hash (pid, sizeof(*pid), &phash); @@ -2282,6 +2286,13 @@ GDS_try_connect (void *cls, alternative address??? */ return; } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Discovered peer %s at %s suitable for bucket %d (%u/%u), trying to connect\n", + GNUNET_i2s (pid), + uri, + peer_bucket, + bucket->peers_size, + bucket_size); /* new peer that we like! */ GDS_u_try_connect (pid, uri); @@ -2492,6 +2503,10 @@ GDS_u_receive (void *cls, GNUNET_break_op (0); return; } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Handling message of type %u from peer %s\n", + ntohs (mh->type), + GNUNET_i2s (&pi->id)); if (GNUNET_OK != GNUNET_MQ_handle_message (core_handlers, mh)) diff --git a/src/dhtu/plugin_dhtu_ip.c b/src/dhtu/plugin_dhtu_ip.c index 123a372b6..617f722b5 100644 --- a/src/dhtu/plugin_dhtu_ip.c +++ b/src/dhtu/plugin_dhtu_ip.c @@ -250,7 +250,7 @@ create_target (struct Plugin *plugin, { struct GNUNET_DHTU_Target *dst; - if (MAX_DESTS > + if (MAX_DESTS <= GNUNET_CONTAINER_multihashmap_size (plugin->dsts)) { struct GNUNET_HashCode key; @@ -566,6 +566,55 @@ create_source (struct Plugin *plugin, } +/** + * Compare two addresses for equality. Only + * compares IP address and port. Must only be + * called on AF_INET or AF_INET6 addresses. + * + * @param a1 address to compare + * @param a2 address to compare + * @param alen number of bytes in @a a1 and @a a2 + * @return 0 if @a a1 == @a a2. + */ +static int +addrcmp (const struct sockaddr *a1, + const struct sockaddr *a2, + size_t alen) +{ + GNUNET_assert (a1->sa_family == a2->sa_family); + switch (a1->sa_family) + { + case AF_INET: + GNUNET_assert (sizeof (struct sockaddr_in) == alen); + { + const struct sockaddr_in *s1 = (const struct sockaddr_in *) a1; + const struct sockaddr_in *s2 = (const struct sockaddr_in *) a2; + + if (s1->sin_port != s2->sin_port) + return 1; + if (s1->sin_addr.s_addr != s2->sin_addr.s_addr) + return 1; + break; + } + case AF_INET6: + GNUNET_assert (sizeof (struct sockaddr_in6) == alen); + { + const struct sockaddr_in6 *s1 = (const struct sockaddr_in6 *) a1; + const struct sockaddr_in6 *s2 = (const struct sockaddr_in6 *) a2; + if (s1->sin6_port != s2->sin6_port) + return 1; + if (0 != GNUNET_memcmp (&s1->sin6_addr, + &s2->sin6_addr)) + return 1; + break; + } + default: + GNUNET_assert (0); + } + return 0; +} + + /** * Callback function invoked for each interface found. * @@ -595,9 +644,9 @@ process_ifcs (void *cls, src = src->next) { if ( (addrlen == src->addrlen) && - (0 == memcmp (addr, - &src->addr, - addrlen)) ) + (0 == addrcmp (addr, + (const struct sockaddr *) &src->addr, + addrlen)) ) { src->scan_generation = plugin->scan_generation; return GNUNET_OK; @@ -691,9 +740,9 @@ find_source (struct Plugin *plugin, src = src->next) { if ( (addrlen == src->addrlen) && - (0 == memcmp (addr, - &src->addr, - addrlen)) ) + (0 == addrcmp (addr, + (const struct sockaddr *) &src->addr, + addrlen)) ) return src; } @@ -731,7 +780,6 @@ read_cb (void *cls) }; struct GNUNET_DHTU_Target *dst = NULL; struct GNUNET_DHTU_Source *src = NULL; - struct cmsghdr *cmsg; ret = recvmsg (GNUNET_NETWORK_get_fd (plugin->sock), &mh, @@ -749,11 +797,19 @@ read_cb (void *cls) return; } /* find IP where we received message */ - for (cmsg = CMSG_FIRSTHDR (&mh); + for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mh); NULL != cmsg; cmsg = CMSG_NXTHDR (&mh, cmsg)) { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Got CMSG level %u (%d/%d), type %u (%d/%d)\n", + cmsg->cmsg_level, + (cmsg->cmsg_level == IPPROTO_IP), + (cmsg->cmsg_level == IPPROTO_IPV6), + cmsg->cmsg_type, + (cmsg->cmsg_type == IP_PKTINFO), + (cmsg->cmsg_type == IPV6_RECVPKTINFO)); if ( (cmsg->cmsg_level == IPPROTO_IP) && (cmsg->cmsg_type == IP_PKTINFO) ) { @@ -808,13 +864,17 @@ read_cb (void *cls) GNUNET_break (0); } } + if (NULL == src) + { + GNUNET_break (0); + return; + } pid = (const struct GNUNET_PeerIdentity *) buf; dst = find_target (plugin, pid, &sa, mh.msg_namelen); - if ( (NULL == src) || - (NULL == dst) ) + if (NULL == dst) { GNUNET_break (0); return; -- cgit v1.2.3