diff options
author | Christian Grothoff <christian@grothoff.org> | 2022-01-18 21:18:30 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2022-02-19 12:41:01 +0100 |
commit | 0bd15d392c8c1c4dab56c794ec88fdbd7245cc51 (patch) | |
tree | 6370f222cdb735efdbae3022b1c94fc4c7207dc4 /src/dhtu/plugin_dhtu_ip.c | |
parent | e5f00fda52a45ebd22716debf0d9af36fb6fce0a (diff) | |
download | gnunet-0bd15d392c8c1c4dab56c794ec88fdbd7245cc51.tar.gz gnunet-0bd15d392c8c1c4dab56c794ec88fdbd7245cc51.zip |
-adding logging, minor dthu bugfixes
Diffstat (limited to 'src/dhtu/plugin_dhtu_ip.c')
-rw-r--r-- | src/dhtu/plugin_dhtu_ip.c | 82 |
1 files changed, 71 insertions, 11 deletions
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, | |||
250 | { | 250 | { |
251 | struct GNUNET_DHTU_Target *dst; | 251 | struct GNUNET_DHTU_Target *dst; |
252 | 252 | ||
253 | if (MAX_DESTS > | 253 | if (MAX_DESTS <= |
254 | GNUNET_CONTAINER_multihashmap_size (plugin->dsts)) | 254 | GNUNET_CONTAINER_multihashmap_size (plugin->dsts)) |
255 | { | 255 | { |
256 | struct GNUNET_HashCode key; | 256 | struct GNUNET_HashCode key; |
@@ -567,6 +567,55 @@ create_source (struct Plugin *plugin, | |||
567 | 567 | ||
568 | 568 | ||
569 | /** | 569 | /** |
570 | * Compare two addresses for equality. Only | ||
571 | * compares IP address and port. Must only be | ||
572 | * called on AF_INET or AF_INET6 addresses. | ||
573 | * | ||
574 | * @param a1 address to compare | ||
575 | * @param a2 address to compare | ||
576 | * @param alen number of bytes in @a a1 and @a a2 | ||
577 | * @return 0 if @a a1 == @a a2. | ||
578 | */ | ||
579 | static int | ||
580 | addrcmp (const struct sockaddr *a1, | ||
581 | const struct sockaddr *a2, | ||
582 | size_t alen) | ||
583 | { | ||
584 | GNUNET_assert (a1->sa_family == a2->sa_family); | ||
585 | switch (a1->sa_family) | ||
586 | { | ||
587 | case AF_INET: | ||
588 | GNUNET_assert (sizeof (struct sockaddr_in) == alen); | ||
589 | { | ||
590 | const struct sockaddr_in *s1 = (const struct sockaddr_in *) a1; | ||
591 | const struct sockaddr_in *s2 = (const struct sockaddr_in *) a2; | ||
592 | |||
593 | if (s1->sin_port != s2->sin_port) | ||
594 | return 1; | ||
595 | if (s1->sin_addr.s_addr != s2->sin_addr.s_addr) | ||
596 | return 1; | ||
597 | break; | ||
598 | } | ||
599 | case AF_INET6: | ||
600 | GNUNET_assert (sizeof (struct sockaddr_in6) == alen); | ||
601 | { | ||
602 | const struct sockaddr_in6 *s1 = (const struct sockaddr_in6 *) a1; | ||
603 | const struct sockaddr_in6 *s2 = (const struct sockaddr_in6 *) a2; | ||
604 | if (s1->sin6_port != s2->sin6_port) | ||
605 | return 1; | ||
606 | if (0 != GNUNET_memcmp (&s1->sin6_addr, | ||
607 | &s2->sin6_addr)) | ||
608 | return 1; | ||
609 | break; | ||
610 | } | ||
611 | default: | ||
612 | GNUNET_assert (0); | ||
613 | } | ||
614 | return 0; | ||
615 | } | ||
616 | |||
617 | |||
618 | /** | ||
570 | * Callback function invoked for each interface found. | 619 | * Callback function invoked for each interface found. |
571 | * | 620 | * |
572 | * @param cls closure | 621 | * @param cls closure |
@@ -595,9 +644,9 @@ process_ifcs (void *cls, | |||
595 | src = src->next) | 644 | src = src->next) |
596 | { | 645 | { |
597 | if ( (addrlen == src->addrlen) && | 646 | if ( (addrlen == src->addrlen) && |
598 | (0 == memcmp (addr, | 647 | (0 == addrcmp (addr, |
599 | &src->addr, | 648 | (const struct sockaddr *) &src->addr, |
600 | addrlen)) ) | 649 | addrlen)) ) |
601 | { | 650 | { |
602 | src->scan_generation = plugin->scan_generation; | 651 | src->scan_generation = plugin->scan_generation; |
603 | return GNUNET_OK; | 652 | return GNUNET_OK; |
@@ -691,9 +740,9 @@ find_source (struct Plugin *plugin, | |||
691 | src = src->next) | 740 | src = src->next) |
692 | { | 741 | { |
693 | if ( (addrlen == src->addrlen) && | 742 | if ( (addrlen == src->addrlen) && |
694 | (0 == memcmp (addr, | 743 | (0 == addrcmp (addr, |
695 | &src->addr, | 744 | (const struct sockaddr *) &src->addr, |
696 | addrlen)) ) | 745 | addrlen)) ) |
697 | return src; | 746 | return src; |
698 | } | 747 | } |
699 | 748 | ||
@@ -731,7 +780,6 @@ read_cb (void *cls) | |||
731 | }; | 780 | }; |
732 | struct GNUNET_DHTU_Target *dst = NULL; | 781 | struct GNUNET_DHTU_Target *dst = NULL; |
733 | struct GNUNET_DHTU_Source *src = NULL; | 782 | struct GNUNET_DHTU_Source *src = NULL; |
734 | struct cmsghdr *cmsg; | ||
735 | 783 | ||
736 | ret = recvmsg (GNUNET_NETWORK_get_fd (plugin->sock), | 784 | ret = recvmsg (GNUNET_NETWORK_get_fd (plugin->sock), |
737 | &mh, | 785 | &mh, |
@@ -749,11 +797,19 @@ read_cb (void *cls) | |||
749 | return; | 797 | return; |
750 | } | 798 | } |
751 | /* find IP where we received message */ | 799 | /* find IP where we received message */ |
752 | for (cmsg = CMSG_FIRSTHDR (&mh); | 800 | for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mh); |
753 | NULL != cmsg; | 801 | NULL != cmsg; |
754 | cmsg = CMSG_NXTHDR (&mh, | 802 | cmsg = CMSG_NXTHDR (&mh, |
755 | cmsg)) | 803 | cmsg)) |
756 | { | 804 | { |
805 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
806 | "Got CMSG level %u (%d/%d), type %u (%d/%d)\n", | ||
807 | cmsg->cmsg_level, | ||
808 | (cmsg->cmsg_level == IPPROTO_IP), | ||
809 | (cmsg->cmsg_level == IPPROTO_IPV6), | ||
810 | cmsg->cmsg_type, | ||
811 | (cmsg->cmsg_type == IP_PKTINFO), | ||
812 | (cmsg->cmsg_type == IPV6_RECVPKTINFO)); | ||
757 | if ( (cmsg->cmsg_level == IPPROTO_IP) && | 813 | if ( (cmsg->cmsg_level == IPPROTO_IP) && |
758 | (cmsg->cmsg_type == IP_PKTINFO) ) | 814 | (cmsg->cmsg_type == IP_PKTINFO) ) |
759 | { | 815 | { |
@@ -808,13 +864,17 @@ read_cb (void *cls) | |||
808 | GNUNET_break (0); | 864 | GNUNET_break (0); |
809 | } | 865 | } |
810 | } | 866 | } |
867 | if (NULL == src) | ||
868 | { | ||
869 | GNUNET_break (0); | ||
870 | return; | ||
871 | } | ||
811 | pid = (const struct GNUNET_PeerIdentity *) buf; | 872 | pid = (const struct GNUNET_PeerIdentity *) buf; |
812 | dst = find_target (plugin, | 873 | dst = find_target (plugin, |
813 | pid, | 874 | pid, |
814 | &sa, | 875 | &sa, |
815 | mh.msg_namelen); | 876 | mh.msg_namelen); |
816 | if ( (NULL == src) || | 877 | if (NULL == dst) |
817 | (NULL == dst) ) | ||
818 | { | 878 | { |
819 | GNUNET_break (0); | 879 | GNUNET_break (0); |
820 | return; | 880 | return; |