aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-communicator-udp.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <schanzen@gnunet.org>2023-06-02 18:08:52 +0200
committerMartin Schanzenbach <schanzen@gnunet.org>2023-06-02 18:08:52 +0200
commit3f175b372d2fd8e5cedb2543d06a126ee9650dca (patch)
tree11240da9ba764ec6d93ccc8846fc2a0e1827c127 /src/transport/gnunet-communicator-udp.c
parentaac3e643d17fa7a0cc336faf4286bbbeba2f3eac (diff)
downloadgnunet-3f175b372d2fd8e5cedb2543d06a126ee9650dca.tar.gz
gnunet-3f175b372d2fd8e5cedb2543d06a126ee9650dca.zip
TNG: Minor code cleanup UDP communicator.
Diffstat (limited to 'src/transport/gnunet-communicator-udp.c')
-rw-r--r--src/transport/gnunet-communicator-udp.c107
1 files changed, 11 insertions, 96 deletions
diff --git a/src/transport/gnunet-communicator-udp.c b/src/transport/gnunet-communicator-udp.c
index 67207c4b3..4657a7220 100644
--- a/src/transport/gnunet-communicator-udp.c
+++ b/src/transport/gnunet-communicator-udp.c
@@ -67,7 +67,7 @@
67 * How often do we scan for changes to our network interfaces? 67 * How often do we scan for changes to our network interfaces?
68 */ 68 */
69#define INTERFACE_SCAN_FREQUENCY \ 69#define INTERFACE_SCAN_FREQUENCY \
70 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5) 70 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5)
71 71
72/** 72/**
73 * How long do we believe our addresses to remain up (before 73 * How long do we believe our addresses to remain up (before
@@ -76,7 +76,7 @@
76#define ADDRESS_VALIDITY_PERIOD GNUNET_TIME_UNIT_HOURS 76#define ADDRESS_VALIDITY_PERIOD GNUNET_TIME_UNIT_HOURS
77 77
78#define WORKING_QUEUE_INTERVALL \ 78#define WORKING_QUEUE_INTERVALL \
79 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MICROSECONDS,1) 79 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MICROSECONDS,1)
80 80
81/** 81/**
82 * AES key size. 82 * AES key size.
@@ -937,22 +937,12 @@ receiver_destroy (struct ReceiverAddress *receiver)
937 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 937 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
938 "Disconnecting receiver for peer `%s'\n", 938 "Disconnecting receiver for peer `%s'\n",
939 GNUNET_i2s (&receiver->target)); 939 GNUNET_i2s (&receiver->target));
940 /*if (NULL != (mq = receiver->kx_mq))
941 {
942 receiver->kx_mq = NULL;
943 GNUNET_MQ_destroy (mq);
944 }*/
945 if (NULL != receiver->kx_qh) 940 if (NULL != receiver->kx_qh)
946 { 941 {
947 GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh); 942 GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh);
948 receiver->kx_qh = NULL; 943 receiver->kx_qh = NULL;
949 receiver->kx_mq = NULL; 944 receiver->kx_mq = NULL;
950 } 945 }
951 /*if (NULL != (mq = receiver->d_mq))
952 {
953 receiver->d_mq = NULL;
954 GNUNET_MQ_destroy (mq);
955 }*/
956 if (NULL != receiver->d_qh) 946 if (NULL != receiver->d_qh)
957 { 947 {
958 GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh); 948 GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh);
@@ -1207,15 +1197,12 @@ check_timeouts (void *cls)
1207 rt = GNUNET_TIME_UNIT_FOREVER_REL; 1197 rt = GNUNET_TIME_UNIT_FOREVER_REL;
1208 while (NULL != (receiver = GNUNET_CONTAINER_heap_peek (receivers_heap))) 1198 while (NULL != (receiver = GNUNET_CONTAINER_heap_peek (receivers_heap)))
1209 { 1199 {
1210 /* if (GNUNET_YES != receiver->receiver_destroy_called) */
1211 /* { */
1212 rt = GNUNET_TIME_absolute_get_remaining (receiver->timeout); 1200 rt = GNUNET_TIME_absolute_get_remaining (receiver->timeout);
1213 if (0 != rt.rel_value_us) 1201 if (0 != rt.rel_value_us)
1214 break; 1202 break;
1215 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1203 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1216 "Receiver timed out\n"); 1204 "Receiver timed out\n");
1217 receiver_destroy (receiver); 1205 receiver_destroy (receiver);
1218 // }
1219 } 1206 }
1220 st = GNUNET_TIME_UNIT_FOREVER_REL; 1207 st = GNUNET_TIME_UNIT_FOREVER_REL;
1221 while (NULL != (sender = GNUNET_CONTAINER_heap_peek (senders_heap))) 1208 while (NULL != (sender = GNUNET_CONTAINER_heap_peek (senders_heap)))
@@ -1575,7 +1562,6 @@ add_acks_rekey (struct ReceiverAddress *receiver)
1575 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1562 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1576 "%u receiver->acks_available 4\n", 1563 "%u receiver->acks_available 4\n",
1577 receiver->acks_available); 1564 receiver->acks_available);
1578 /* add_acks (receiver->ss_rekey, acks_to_add - 3); */
1579 if (0 != acks_to_add) 1565 if (0 != acks_to_add)
1580 { 1566 {
1581 add_acks (receiver->ss_rekey, acks_to_add); 1567 add_acks (receiver->ss_rekey, acks_to_add);
@@ -1607,7 +1593,6 @@ handle_ack (void *cls, const struct GNUNET_PeerIdentity *pid, void *value)
1607 struct ReceiverAddress *receiver = value; 1593 struct ReceiverAddress *receiver = value;
1608 uint32_t acks_to_add; 1594 uint32_t acks_to_add;
1609 uint32_t allowed; 1595 uint32_t allowed;
1610 // int needed_for_rekeying;
1611 1596
1612 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1597 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1613 "in handle ack with cmac %s\n", 1598 "in handle ack with cmac %s\n",
@@ -1662,30 +1647,10 @@ handle_ack (void *cls, const struct GNUNET_PeerIdentity *pid, void *value)
1662 receiver->acks_available, 1647 receiver->acks_available,
1663 ack->acks_available, 1648 ack->acks_available,
1664 GNUNET_h2s (&ss->master)); 1649 GNUNET_h2s (&ss->master));
1665 // Uncomment this for alternativ 1 of backchannel functionality
1666 acks_to_add = (allowed - ss->sequence_allowed); 1650 acks_to_add = (allowed - ss->sequence_allowed);
1667 if ((GNUNET_NO == receiver->rekeying) && 1651 if ((GNUNET_NO == receiver->rekeying) &&
1668 (receiver->number_rekeying_kce < 3) ) 1652 (receiver->number_rekeying_kce < 3) )
1669 acks_to_add = reset_rekey_kces (receiver, acks_to_add); 1653 acks_to_add = reset_rekey_kces (receiver, acks_to_add);
1670 /* if ((GNUNET_NO == receiver->rekeying) && */
1671 /* (receiver->number_rekeying_kce < */
1672 /* 3) ) */
1673 /* { */
1674 /* needed_for_rekeying = (3 - receiver->number_rekeying_kce); */
1675 /* if (acks_to_add <= needed_for_rekeying) */
1676 /* { */
1677 /* receiver->number_rekeying_kce += acks_to_add; */
1678 /* acks_to_add = 0; */
1679 /* } */
1680 /* else */
1681 /* { */
1682 /* acks_to_add -= (3 - receiver->number_rekeying_kce); */
1683 /* receiver->number_rekeying_kce = 3; */
1684 /* } */
1685 /* } */
1686 /* GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, */
1687 /* "%u kce for rekeying\n", */
1688 /* receiver->number_rekeying_kce); */
1689 1654
1690 if ((0 != acks_to_add) && (GNUNET_NO == receiver->rekeying)) 1655 if ((0 != acks_to_add) && (GNUNET_NO == receiver->rekeying))
1691 { 1656 {
@@ -1794,7 +1759,6 @@ kce_generate_cb (void *cls)
1794 } 1759 }
1795 1760
1796 1761
1797
1798} 1762}
1799 1763
1800 1764
@@ -1869,14 +1833,6 @@ consider_ss_ack (struct SharedSecret *ss, int initial)
1869 if (GNUNET_NO == initial) 1833 if (GNUNET_NO == initial)
1870 kce_generate (ss, ++ss->sequence_allowed); 1834 kce_generate (ss, ++ss->sequence_allowed);
1871 1835
1872 /*if (0 == ss->sender->acks_available)
1873 {
1874 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1875 "Generating keys\n");
1876 while (ss->active_kce_count < KCN_TARGET)
1877 kce_generate (ss, ++ss->sequence_allowed);
1878 }*/
1879
1880 if (NULL != kce_task) 1836 if (NULL != kce_task)
1881 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1837 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1882 "kce_task is not NULL\n"); 1838 "kce_task is not NULL\n");
@@ -1887,7 +1843,7 @@ consider_ss_ack (struct SharedSecret *ss, int initial)
1887 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1843 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1888 "initial: GNUNET_YES\n"); 1844 "initial: GNUNET_YES\n");
1889 1845
1890 if ( kce_task_finished || (GNUNET_NO == initial)) 1846 if (kce_task_finished || (GNUNET_NO == initial))
1891 { 1847 {
1892 struct UDPAck ack; 1848 struct UDPAck ack;
1893 struct SharedSecret *ss_tell; 1849 struct SharedSecret *ss_tell;
@@ -1923,9 +1879,7 @@ consider_ss_ack (struct SharedSecret *ss, int initial)
1923 (ss->sender->num_secrets > MAX_SECRETS) )) 1879 (ss->sender->num_secrets > MAX_SECRETS) ))
1924 { 1880 {
1925 1881
1926 // kce_generate (ss, ++ss->sequence_allowed); 1882 // TODO This task must be per sender! FIXME: This is a nice todo, but I do not know what must be done here to fix.
1927 // kce_generate (ss, ++ss->sequence_allowed);
1928 // TODO This task must be per sender!
1929 kce_task = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, 1883 kce_task = GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL,
1930 kce_generate_cb, 1884 kce_generate_cb,
1931 ss); 1885 ss);
@@ -1989,12 +1943,9 @@ decrypt_box (const struct UDPBox *box,
1989 { 1943 {
1990 ss->sender->rekeying = GNUNET_NO; 1944 ss->sender->rekeying = GNUNET_NO;
1991 ss->sender->ss_rekey = NULL; 1945 ss->sender->ss_rekey = NULL;
1992 // destroy_all_secrets (ss, GNUNET_NO);
1993 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1946 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1994 "Receiver stopped rekeying.\n"); 1947 "Receiver stopped rekeying.\n");
1995 } 1948 }
1996 /*else if (GNUNET_NO == box->rekeying)
1997 consider_ss_ack (ss, GNUNET_NO);*/
1998 else 1949 else
1999 { 1950 {
2000 ss->sender->rekeying = GNUNET_YES; 1951 ss->sender->rekeying = GNUNET_YES;
@@ -2052,23 +2003,11 @@ decrypt_rekey (const struct UDPRekey *rekey,
2052 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2003 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2053 "decrypted UDPRekey with kid %s\n", 2004 "decrypted UDPRekey with kid %s\n",
2054 GNUNET_sh2s (&rekey->kid)); 2005 GNUNET_sh2s (&rekey->kid));
2055 /*cmac = (struct GNUNET_HashCode *) out_buf;
2056 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2057 "Received secret with cmac %s \n",
2058 GNUNET_h2s (&cmac));*/
2059 // ss_rekey = (struct SharedSecret *) out_buf;
2060 master = (struct GNUNET_HashCode *) out_buf; 2006 master = (struct GNUNET_HashCode *) out_buf;
2061 ss_rekey = GNUNET_new (struct SharedSecret); 2007 ss_rekey = GNUNET_new (struct SharedSecret);
2062 ss_rekey->master = *master; 2008 ss_rekey->master = *master;
2063 calculate_cmac (ss_rekey); 2009 calculate_cmac (ss_rekey);
2064 ss_rekey->sender = sender; 2010 ss_rekey->sender = sender;
2065 // ss_rekey->sequence_used = 0;
2066 // ss_rekey->sequence_allowed = 0;
2067 /* ss_rekey->active_kce_count = 0; */
2068 /* ss_rekey->prev = NULL; */
2069 /* ss_rekey->next = NULL; */
2070 /* GNUNET_assert (ss_rekey->prev == NULL && sender->ss_head != ss_rekey); */
2071 /* GNUNET_assert (ss_rekey->next == NULL && sender->ss_tail != ss_rekey); */
2072 GNUNET_CONTAINER_DLL_insert (sender->ss_head, sender->ss_tail, ss_rekey); 2011 GNUNET_CONTAINER_DLL_insert (sender->ss_head, sender->ss_tail, ss_rekey);
2073 sender->ss_rekey = ss_rekey; 2012 sender->ss_rekey = ss_rekey;
2074 sender->num_secrets++; 2013 sender->num_secrets++;
@@ -2496,8 +2435,6 @@ sock_read (void *cls)
2496 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2435 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2497 "Got KX: Receiver doing rekeying.\n"); 2436 "Got KX: Receiver doing rekeying.\n");
2498 } 2437 }
2499 /*if (sender->num_secrets > MAX_SECRETS)
2500 secret_destroy (sender->ss_tail);*/
2501 } 2438 }
2502} 2439}
2503 2440
@@ -2885,16 +2822,6 @@ send_UDPRekey (struct ReceiverAddress *receiver, struct SharedSecret *ss)
2885 &(receiver->ss_rekey->master), 2822 &(receiver->ss_rekey->master),
2886 sizeof(receiver->ss_rekey->master))); 2823 sizeof(receiver->ss_rekey->master)));
2887 dpos += sizeof(receiver->ss_rekey->master); 2824 dpos += sizeof(receiver->ss_rekey->master);
2888 /* GNUNET_assert ( */
2889 /* 0 == gcry_cipher_encrypt (rekey_out_cipher, &rekey_dgram[dpos], */
2890 /* /\*sizeof(receiver->ss_rekey->cmac), */
2891 /* &(receiver->ss_rekey->cmac), */
2892 /* sizeof(receiver->ss_rekey->cmac))); */
2893 /* dpos += sizeof(receiver->ss_rekey->cmac);*\/ */
2894 /* sizeof(receiver->ss_rekey), */
2895 /* receiver->ss_rekey, */
2896 /* sizeof(receiver->ss_rekey))); */
2897 /* dpos += sizeof(receiver->ss_rekey); */
2898 do_pad (rekey_out_cipher, &rekey_dgram[dpos], sizeof(rekey_dgram) 2825 do_pad (rekey_out_cipher, &rekey_dgram[dpos], sizeof(rekey_dgram)
2899 - dpos); 2826 - dpos);
2900 GNUNET_assert (0 == gcry_cipher_gettag (rekey_out_cipher, 2827 GNUNET_assert (0 == gcry_cipher_gettag (rekey_out_cipher,
@@ -2975,15 +2902,9 @@ mq_send_d (struct GNUNET_MQ_Handle *mq,
2975 GNUNET_h2s (&ss->master), 2902 GNUNET_h2s (&ss->master),
2976 ss->sequence_used, 2903 ss->sequence_used,
2977 ss->sequence_allowed); 2904 ss->sequence_allowed);
2978 // Uncomment this for alternativ 1 of backchannel functionality
2979 if (ss->sequence_used >= ss->sequence_allowed) 2905 if (ss->sequence_used >= ss->sequence_allowed)
2980 // Until here for alternativ 1
2981 // Uncomment this for alternativ 2 of backchannel functionality
2982 // if (0 == ss->sequence_allowed)
2983 // Until here for alternativ 2
2984 {
2985 continue; 2906 continue;
2986 } 2907
2987 char dgram[sizeof(struct UDPBox) + receiver->d_mtu]; 2908 char dgram[sizeof(struct UDPBox) + receiver->d_mtu];
2988 struct UDPBox *box; 2909 struct UDPBox *box;
2989 gcry_cipher_hd_t out_cipher; 2910 gcry_cipher_hd_t out_cipher;
@@ -3148,17 +3069,6 @@ setup_receiver_mq (struct ReceiverAddress *receiver)
3148{ 3069{
3149 size_t base_mtu; 3070 size_t base_mtu;
3150 3071
3151 /*if (NULL != receiver->kx_qh)
3152 {
3153 GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh);
3154 receiver->kx_qh = NULL;
3155 }
3156 if (NULL != receiver->d_qh)
3157 {
3158 GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh);
3159 receiver->d_qh = NULL;
3160 }*/
3161 // GNUNET_assert (NULL == receiver->mq);
3162 switch (receiver->address->sa_family) 3072 switch (receiver->address->sa_family)
3163 { 3073 {
3164 case AF_INET: 3074 case AF_INET:
@@ -3694,7 +3604,8 @@ iface_proc (void *cls,
3694 * group in the normal IPv6 routing table and using the resulting 3604 * group in the normal IPv6 routing table and using the resulting
3695 * interface; we do this for each interface, so no need to use 3605 * interface; we do this for each interface, so no need to use
3696 * zero (anymore...). 3606 * zero (anymore...).
3697 */bi->mcreq.ipv6mr_interface = s6->sin6_scope_id; 3607 */
3608 bi->mcreq.ipv6mr_interface = s6->sin6_scope_id;
3698 3609
3699 /* Join the multicast group */ 3610 /* Join the multicast group */
3700 if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, 3611 if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock,
@@ -3735,14 +3646,18 @@ do_broadcast (void *cls)
3735 NULL); 3646 NULL);
3736} 3647}
3737 3648
3649
3738static void 3650static void
3739try_connection_reversal (void *cls, 3651try_connection_reversal (void *cls,
3740 const struct sockaddr *addr, 3652 const struct sockaddr *addr,
3741 socklen_t addrlen) 3653 socklen_t addrlen)
3742{ 3654{
3743 /* FIXME: support reversal: #5529 */ 3655 /* FIXME: support reversal: #5529 */
3656 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
3657 "No connection reversal implemented!");
3744} 3658}
3745 3659
3660
3746/** 3661/**
3747 * Setup communicator and launch network interactions. 3662 * Setup communicator and launch network interactions.
3748 * 3663 *