[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r29293 - gnunet/src/ats
From: |
gnunet |
Subject: |
[GNUnet-SVN] r29293 - gnunet/src/ats |
Date: |
Mon, 16 Sep 2013 12:48:41 +0200 |
Author: wachs
Date: 2013-09-16 12:48:41 +0200 (Mon, 16 Sep 2013)
New Revision: 29293
Modified:
gnunet/src/ats/gnunet-service-ats-solver_proportional.c
Log:
fixes for proportional solver:
- do not send 0-bandwidth on address switch since it will disconnect peer
- do disconnect peers if no address is available
Modified: gnunet/src/ats/gnunet-service-ats-solver_proportional.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats-solver_proportional.c 2013-09-16
08:35:22 UTC (rev 29292)
+++ gnunet/src/ats/gnunet-service-ats-solver_proportional.c 2013-09-16
10:48:41 UTC (rev 29293)
@@ -967,15 +967,13 @@
* - update quota for previous address network
* - update quota for this address network
*/
-
prev = get_active_address (s, (struct GNUNET_CONTAINER_MultiHashMap *)
s->addresses, peer);
if (NULL != prev)
{
net_prev = (struct Network *) prev->solver_information;
prev->active = GNUNET_NO; /* No active any longer */
- prev->assigned_bw_in = GNUNET_BANDWIDTH_value_init (0); /* no bw
assigned */
- prev->assigned_bw_out = GNUNET_BANDWIDTH_value_init (0); /* no bw
assigned */
- s->bw_changed (s->bw_changed_cls, prev); /* notify about bw change,
REQUIRED? */
+ prev->assigned_bw_in = BANDWIDTH_ZERO; /* no bandwidth assigned */
+ prev->assigned_bw_out = BANDWIDTH_ZERO; /* no bandwidth assigned */
if (GNUNET_SYSERR == addresse_decrement (s, net_prev, GNUNET_NO,
GNUNET_YES))
GNUNET_break (0);
distribute_bandwidth_in_network (s, net_prev, NULL);
@@ -988,7 +986,7 @@
}
fba_ctx.best->active = GNUNET_YES;
- addresse_increment(s, net_cur, GNUNET_NO, GNUNET_YES);
+ addresse_increment (s, net_cur, GNUNET_NO, GNUNET_YES);
distribute_bandwidth_in_network (s, net_cur, fba_ctx.best);
return fba_ctx.best;
}
@@ -1004,6 +1002,21 @@
GAS_proportional_stop_get_preferred_address (void *solver,
const struct GNUNET_PeerIdentity *peer)
{
+ struct GAS_PROPORTIONAL_Handle *s = solver;
+ struct ATS_Address *cur;
+ struct Network *cur_net;
+ cur = get_active_address (s, (struct GNUNET_CONTAINER_MultiHashMap *)
s->addresses, peer);
+ if (NULL != cur)
+ {
+ /* Disabling current address */
+ cur_net = (struct Network *) cur->solver_information;
+ cur->active = GNUNET_NO; /* No active any longer */
+ cur->assigned_bw_in = BANDWIDTH_ZERO; /* no bandwidth assigned */
+ cur->assigned_bw_out = BANDWIDTH_ZERO; /* no bandwidth assigned */
+ if (GNUNET_SYSERR == addresse_decrement (s, cur_net, GNUNET_NO,
GNUNET_YES))
+ GNUNET_break (0);
+ distribute_bandwidth_in_network (s, cur_net, NULL);
+ }
return;
}
@@ -1069,9 +1082,19 @@
{
/* Address was active, remove from network and update quotas*/
address->active = GNUNET_NO;
+ address->assigned_bw_in = BANDWIDTH_ZERO;
+ address->assigned_bw_out = BANDWIDTH_ZERO;
+
if (GNUNET_SYSERR == addresse_decrement (s, net, GNUNET_NO, GNUNET_YES))
GNUNET_break (0);
distribute_bandwidth_in_network (s, net, NULL);
+
+ /* Address was active, requesting alternative address */
+ if (NULL == GAS_proportional_get_preferred_address (s,
&address->peer))
+ {
+ /* No alternative address found, disconnect
peer */
+ s->bw_changed (s->bw_changed_cls, address);
+ }
}
LOG (GNUNET_ERROR_TYPE_DEBUG, "After deleting address now total %u and
active %u addresses in network `%s'\n",
net->total_addresses,
@@ -1264,31 +1287,40 @@
GNUNET_ATS_print_network_type (new_network));
save_active = address->active;
- /* remove from old network */
+
+ /* Disable and assign no bandwidth */
+ address->active = GNUNET_NO;
+ address->assigned_bw_in = BANDWIDTH_ZERO; /* no bandwidth assigned */
+ address->assigned_bw_out = BANDWIDTH_ZERO; /* no bandwidth assigned */
+
+ /* Remove from old network */
GAS_proportional_address_delete (solver, address, GNUNET_NO);
- /* set new network type */
- new_net = get_network (solver, new_network);
- if (NULL == new_net)
+ /* Set new network type */
+ if (NULL == (new_net = get_network (solver, new_network)))
{
/* Address changed to invalid network... */
- LOG (GNUNET_ERROR_TYPE_ERROR, _("Cannot find network of type
`%u' %s\n"),
+ LOG (GNUNET_ERROR_TYPE_ERROR, _("Invalid network type `%u'
`%s': Disconnect!\n"),
new_network, GNUNET_ATS_print_network_type
(new_network));
- address->assigned_bw_in = GNUNET_BANDWIDTH_value_init (0);
- address->assigned_bw_out = GNUNET_BANDWIDTH_value_init (0);
- s->bw_changed (s->bw_changed_cls, address);
+
+ /* Find new address to suggest since no bandwidth in network*/
+ if (NULL == (new = (struct ATS_Address *)
GAS_proportional_get_preferred_address (s, &address->peer)))
+ {
+ /* No alternative address found, disconnect peer */
+ s->bw_changed (s->bw_changed_cls, address);
+ }
return;
}
- address->solver_information = new_net;
/* Add to new network and update*/
+ address->solver_information = new_net;
GAS_proportional_address_add (solver, address, new_network);
if (GNUNET_YES == save_active)
{
/* check if bandwidth available in new network */
if (GNUNET_YES == (is_bandwidth_available_in_network (new_net)))
{
- /* Suggest updated address */
+ /* Assign bandwidth to updated address */
address->active = GNUNET_YES;
addresse_increment (s, new_net, GNUNET_NO,
GNUNET_YES);
distribute_bandwidth_in_network (solver,
new_net, NULL);
@@ -1296,18 +1328,11 @@
else
{
LOG (GNUNET_ERROR_TYPE_DEBUG, "Not enough bandwidth in
new network, suggesting alternative address ..\n");
-
- /* Set old address to zero bw */
- address->assigned_bw_in = GNUNET_BANDWIDTH_value_init
(0);
- address->assigned_bw_out = GNUNET_BANDWIDTH_value_init
(0);
- s->bw_changed (s->bw_changed_cls, address);
-
/* Find new address to suggest since no bandwidth in
network*/
- new = (struct ATS_Address *)
GAS_proportional_get_preferred_address (s, &address->peer);
- if (NULL != new)
+ if (NULL == (new = (struct ATS_Address *)
GAS_proportional_get_preferred_address (s, &address->peer)))
{
- /* Have an alternative address to
suggest */
- s->bw_changed (s->bw_changed_cls, new);
+ /* No alternative address found, disconnect
peer */
+ s->bw_changed (s->bw_changed_cls, address);
}
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r29293 - gnunet/src/ats,
gnunet <=