diff options
author | Bart Polot <bart@net.in.tum.de> | 2012-11-05 17:28:17 +0000 |
---|---|---|
committer | Bart Polot <bart@net.in.tum.de> | 2012-11-05 17:28:17 +0000 |
commit | 4a9be5d0f9f2bc26d0e8150d042cbc6552084b8a (patch) | |
tree | 00394feea19c1011ad5336ad80e61dda51112cc0 /src/mesh/gnunet-service-mesh.c | |
parent | daf4b7a9199b41f6d3ae69375bfd89448403290b (diff) | |
download | gnunet-4a9be5d0f9f2bc26d0e8150d042cbc6552084b8a.tar.gz gnunet-4a9be5d0f9f2bc26d0e8150d042cbc6552084b8a.zip |
- allow force ACK to enable polling
Diffstat (limited to 'src/mesh/gnunet-service-mesh.c')
-rw-r--r-- | src/mesh/gnunet-service-mesh.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/mesh/gnunet-service-mesh.c b/src/mesh/gnunet-service-mesh.c index 2b313e84b..1035445b3 100644 --- a/src/mesh/gnunet-service-mesh.c +++ b/src/mesh/gnunet-service-mesh.c | |||
@@ -351,12 +351,17 @@ struct MeshTunnel | |||
351 | */ | 351 | */ |
352 | uint32_t bck_pid; | 352 | uint32_t bck_pid; |
353 | 353 | ||
354 | /** | 354 | /** |
355 | * SKIP value for this tunnel. | 355 | * SKIP value for this tunnel. |
356 | */ | 356 | */ |
357 | uint32_t skip; | 357 | uint32_t skip; |
358 | 358 | ||
359 | /** | 359 | /** |
360 | * Force sending ACK? Flag to allow duplicate ACK on POLL. | ||
361 | */ | ||
362 | int force_ack; | ||
363 | |||
364 | /** | ||
360 | * MeshTunnelChildInfo of all children, indexed by GNUNET_PEER_Id. | 365 | * MeshTunnelChildInfo of all children, indexed by GNUNET_PEER_Id. |
361 | * Contains the Flow Control info: FWD ACK value received, | 366 | * Contains the Flow Control info: FWD ACK value received, |
362 | * last BCK ACK sent, PID and SKIP values. | 367 | * last BCK ACK sent, PID and SKIP values. |
@@ -2969,7 +2974,6 @@ tunnel_poll (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
2969 | struct GNUNET_PeerIdentity id; | 2974 | struct GNUNET_PeerIdentity id; |
2970 | struct MeshTunnel *t; | 2975 | struct MeshTunnel *t; |
2971 | 2976 | ||
2972 | return; // FIXME fc activate | ||
2973 | cinfo->fc_poll = GNUNET_SCHEDULER_NO_TASK; | 2977 | cinfo->fc_poll = GNUNET_SCHEDULER_NO_TASK; |
2974 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) | 2978 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) |
2975 | { | 2979 | { |
@@ -4007,13 +4011,17 @@ tunnel_send_fwd_ack (struct MeshTunnel *t, uint16_t type) | |||
4007 | case GNUNET_MESSAGE_TYPE_MESH_ACK: | 4011 | case GNUNET_MESSAGE_TYPE_MESH_ACK: |
4008 | case GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK: | 4012 | case GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK: |
4009 | break; | 4013 | break; |
4014 | case GNUNET_MESSAGE_TYPE_MESH_POLL: | ||
4015 | t->force_ack = GNUNET_YES; | ||
4016 | break; | ||
4010 | default: | 4017 | default: |
4011 | GNUNET_break (0); | 4018 | GNUNET_break (0); |
4012 | } | 4019 | } |
4013 | 4020 | ||
4014 | /* Check if we need no retransmit the ACK */ | 4021 | /* Check if we need to transmit the ACK */ |
4015 | if (t->fwd_queue_max > t->fwd_queue_n * 4 && | 4022 | if (t->fwd_queue_max > t->fwd_queue_n * 4 && |
4016 | GMC_is_pid_bigger(t->last_fwd_ack, t->fwd_pid)) | 4023 | GMC_is_pid_bigger(t->last_fwd_ack, t->fwd_pid) && |
4024 | GNUNET_NO == t->force_ack) | ||
4017 | { | 4025 | { |
4018 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Not sending ACK, buffer free\n"); | 4026 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Not sending ACK, buffer free\n"); |
4019 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 4027 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -4029,7 +4037,7 @@ tunnel_send_fwd_ack (struct MeshTunnel *t, uint16_t type) | |||
4029 | ack = tunnel_get_fwd_ack (t); | 4037 | ack = tunnel_get_fwd_ack (t); |
4030 | 4038 | ||
4031 | /* If speed_min and not all children have ack'd, dont send yet */ | 4039 | /* If speed_min and not all children have ack'd, dont send yet */ |
4032 | if (ack == t->last_fwd_ack) | 4040 | if (ack == t->last_fwd_ack && GNUNET_NO == t->force_ack) |
4033 | { | 4041 | { |
4034 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Not sending FWD ACK, not ready\n"); | 4042 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Not sending FWD ACK, not ready\n"); |
4035 | return; | 4043 | return; |
@@ -4039,6 +4047,7 @@ tunnel_send_fwd_ack (struct MeshTunnel *t, uint16_t type) | |||
4039 | GNUNET_PEER_resolve (tree_get_predecessor (t->tree), &id); | 4047 | GNUNET_PEER_resolve (tree_get_predecessor (t->tree), &id); |
4040 | send_ack (t, &id, ack); | 4048 | send_ack (t, &id, ack); |
4041 | debug_fwd_ack++; | 4049 | debug_fwd_ack++; |
4050 | t->force_ack = GNUNET_NO; | ||
4042 | } | 4051 | } |
4043 | 4052 | ||
4044 | 4053 | ||
@@ -4062,9 +4071,8 @@ tunnel_send_child_bck_ack (void *cls, | |||
4062 | cinfo = tunnel_get_neighbor_fc (t, &peer); | 4071 | cinfo = tunnel_get_neighbor_fc (t, &peer); |
4063 | ack = cinfo->bck_pid + t->bck_queue_max - t->bck_queue_n; | 4072 | ack = cinfo->bck_pid + t->bck_queue_max - t->bck_queue_n; |
4064 | 4073 | ||
4065 | if (cinfo->bck_ack == ack) | 4074 | if (cinfo->bck_ack == ack && GNUNET_NO == t->force_ack) |
4066 | { | 4075 | { |
4067 | // FIXME fc allow force on poll | ||
4068 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 4076 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
4069 | " Not sending ACK, not needed\n"); | 4077 | " Not sending ACK, not needed\n"); |
4070 | return; | 4078 | return; |
@@ -4168,7 +4176,9 @@ tunnel_send_bck_ack (struct MeshTunnel *t, uint16_t type) | |||
4168 | break; | 4176 | break; |
4169 | case GNUNET_MESSAGE_TYPE_MESH_ACK: | 4177 | case GNUNET_MESSAGE_TYPE_MESH_ACK: |
4170 | case GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK: | 4178 | case GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK: |
4179 | break; | ||
4171 | case GNUNET_MESSAGE_TYPE_MESH_POLL: | 4180 | case GNUNET_MESSAGE_TYPE_MESH_POLL: |
4181 | t->force_ack = GNUNET_YES; | ||
4172 | break; | 4182 | break; |
4173 | default: | 4183 | default: |
4174 | GNUNET_break (0); | 4184 | GNUNET_break (0); |
@@ -4176,6 +4186,7 @@ tunnel_send_bck_ack (struct MeshTunnel *t, uint16_t type) | |||
4176 | 4186 | ||
4177 | tunnel_send_clients_bck_ack (t); | 4187 | tunnel_send_clients_bck_ack (t); |
4178 | tree_iterate_children (t->tree, &tunnel_send_child_bck_ack, t); | 4188 | tree_iterate_children (t->tree, &tunnel_send_child_bck_ack, t); |
4189 | t->force_ack = GNUNET_NO; | ||
4179 | } | 4190 | } |
4180 | 4191 | ||
4181 | 4192 | ||