diff options
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 111 |
1 files changed, 58 insertions, 53 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 718925e68..357358c7c 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -505,6 +505,10 @@ create_address (const struct GNUNET_PeerIdentity *peer, | |||
505 | aa->plugin = GNUNET_strdup (plugin_name); | 505 | aa->plugin = GNUNET_strdup (plugin_name); |
506 | aa->session_id = session_id; | 506 | aa->session_id = session_id; |
507 | aa->local_address_info = local_address_info; | 507 | aa->local_address_info = local_address_info; |
508 | aa->assigned_bw_out = 0; | ||
509 | aa->assigned_bw_in = 0; | ||
510 | aa->last_notified_bw_out = 0; | ||
511 | aa->last_notified_bw_in = 0; | ||
508 | 512 | ||
509 | for (c1 = 0; c1 < GNUNET_ATS_QualityPropertiesCount; c1++) | 513 | for (c1 = 0; c1 < GNUNET_ATS_QualityPropertiesCount; c1++) |
510 | { | 514 | { |
@@ -830,15 +834,11 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
830 | handle->env.sf.s_bulk_stop (handle->solver); | 834 | handle->env.sf.s_bulk_stop (handle->solver); |
831 | 835 | ||
832 | /* Notify performance clients about new address */ | 836 | /* Notify performance clients about new address */ |
833 | GAS_performance_notify_all_clients (&new_address->peer, | 837 | GAS_performance_notify_all_clients (&new_address->peer, new_address->plugin, |
834 | new_address->plugin, | 838 | new_address->addr, new_address->addr_len, new_address->active, |
835 | new_address->addr, | 839 | new_address->atsi, new_address->atsi_count, |
836 | new_address->addr_len, | 840 | GNUNET_BANDWIDTH_value_init (new_address->assigned_bw_out), |
837 | new_address->active, | 841 | GNUNET_BANDWIDTH_value_init (new_address->assigned_bw_in)); |
838 | new_address->atsi, | ||
839 | new_address->atsi_count, | ||
840 | new_address->assigned_bw_out, | ||
841 | new_address->assigned_bw_in); | ||
842 | return; | 842 | return; |
843 | } | 843 | } |
844 | 844 | ||
@@ -874,14 +874,11 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
874 | { | 874 | { |
875 | /* Notify performance clients about properties */ | 875 | /* Notify performance clients about properties */ |
876 | GAS_performance_notify_all_clients (&existing_address->peer, | 876 | GAS_performance_notify_all_clients (&existing_address->peer, |
877 | existing_address->plugin, | 877 | existing_address->plugin, existing_address->addr, |
878 | existing_address->addr, | 878 | existing_address->addr_len, existing_address->active, |
879 | existing_address->addr_len, | 879 | existing_address->atsi, existing_address->atsi_count, |
880 | existing_address->active, | 880 | GNUNET_BANDWIDTH_value_init (existing_address->assigned_bw_out), |
881 | existing_address->atsi, | 881 | GNUNET_BANDWIDTH_value_init (existing_address->assigned_bw_in)); |
882 | existing_address->atsi_count, | ||
883 | existing_address->assigned_bw_out, | ||
884 | existing_address->assigned_bw_in); | ||
885 | 882 | ||
886 | for (c1 = 0; c1 < atsi_delta_count; c1++) | 883 | for (c1 = 0; c1 < atsi_delta_count; c1++) |
887 | { | 884 | { |
@@ -1010,15 +1007,11 @@ GAS_addresses_update (struct GAS_Addresses_Handle *handle, | |||
1010 | } | 1007 | } |
1011 | 1008 | ||
1012 | /* Notify performance clients about updated address */ | 1009 | /* Notify performance clients about updated address */ |
1013 | GAS_performance_notify_all_clients (&aa->peer, | 1010 | GAS_performance_notify_all_clients (&aa->peer, aa->plugin, aa->addr, |
1014 | aa->plugin, | 1011 | aa->addr_len, aa->active, aa->atsi, aa->atsi_count, |
1015 | aa->addr, | 1012 | GNUNET_BANDWIDTH_value_init (aa->assigned_bw_out), |
1016 | aa->addr_len, | 1013 | GNUNET_BANDWIDTH_value_init (aa->assigned_bw_in)); |
1017 | aa->active, | 1014 | |
1018 | aa->atsi, | ||
1019 | aa->atsi_count, | ||
1020 | aa->assigned_bw_out, | ||
1021 | aa->assigned_bw_in); | ||
1022 | handle->env.sf.s_bulk_start (handle->solver); | 1015 | handle->env.sf.s_bulk_start (handle->solver); |
1023 | GAS_normalization_normalize_property (handle->addresses, | 1016 | GAS_normalization_normalize_property (handle->addresses, |
1024 | aa, | 1017 | aa, |
@@ -1405,9 +1398,9 @@ GAS_addresses_request_address (struct GAS_Addresses_Handle *handle, | |||
1405 | aa, GNUNET_i2s (peer)); | 1398 | aa, GNUNET_i2s (peer)); |
1406 | 1399 | ||
1407 | GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, | 1400 | GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, |
1408 | aa->addr_len, aa->local_address_info, aa->session_id, | 1401 | aa->addr_len, aa->local_address_info, aa->session_id, aa->atsi, |
1409 | aa->atsi, aa->atsi_count, | 1402 | aa->atsi_count, GNUNET_BANDWIDTH_value_init (aa->assigned_bw_out), |
1410 | aa->assigned_bw_out, aa->assigned_bw_in); | 1403 | GNUNET_BANDWIDTH_value_init (aa->assigned_bw_in)); |
1411 | 1404 | ||
1412 | aa->block_interval = GNUNET_TIME_relative_add (aa->block_interval, | 1405 | aa->block_interval = GNUNET_TIME_relative_add (aa->block_interval, |
1413 | ATS_BLOCKING_DELTA); | 1406 | ATS_BLOCKING_DELTA); |
@@ -1865,8 +1858,7 @@ load_quotas (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
1865 | * @param address the address with changes | 1858 | * @param address the address with changes |
1866 | */ | 1859 | */ |
1867 | static void | 1860 | static void |
1868 | bandwidth_changed_cb (void *cls, | 1861 | bandwidth_changed_cb (void *cls, struct ATS_Address *address) |
1869 | struct ATS_Address *address) | ||
1870 | { | 1862 | { |
1871 | struct GAS_Addresses_Handle *handle = cls; | 1863 | struct GAS_Addresses_Handle *handle = cls; |
1872 | struct GAS_Addresses_Suggestion_Requests *cur; | 1864 | struct GAS_Addresses_Suggestion_Requests *cur; |
@@ -1878,15 +1870,12 @@ bandwidth_changed_cb (void *cls, | |||
1878 | GNUNET_i2s (&address->peer)); | 1870 | GNUNET_i2s (&address->peer)); |
1879 | 1871 | ||
1880 | /* Notify performance clients about changes to address */ | 1872 | /* Notify performance clients about changes to address */ |
1881 | GAS_performance_notify_all_clients (&address->peer, | 1873 | GAS_performance_notify_all_clients (&address->peer, address->plugin, |
1882 | address->plugin, | 1874 | address->addr, address->addr_len, address->active, address->atsi, |
1883 | address->addr, | 1875 | address->atsi_count, |
1884 | address->addr_len, | 1876 | GNUNET_BANDWIDTH_value_init (address->assigned_bw_out), |
1885 | address->active, | 1877 | GNUNET_BANDWIDTH_value_init (address->assigned_bw_in)); |
1886 | address->atsi, | 1878 | |
1887 | address->atsi_count, | ||
1888 | address->assigned_bw_out, | ||
1889 | address->assigned_bw_in); | ||
1890 | cur = handle->pending_requests_head; | 1879 | cur = handle->pending_requests_head; |
1891 | while (NULL != cur) | 1880 | while (NULL != cur) |
1892 | { | 1881 | { |
@@ -1902,27 +1891,42 @@ bandwidth_changed_cb (void *cls, | |||
1902 | return; | 1891 | return; |
1903 | } | 1892 | } |
1904 | 1893 | ||
1905 | if ((0 == ntohl (address->assigned_bw_in.value__)) | 1894 | if ((0 == address->assigned_bw_in) && (0 == address->assigned_bw_out)) |
1906 | && (0 == ntohl (address->assigned_bw_out.value__))) | ||
1907 | { | 1895 | { |
1908 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 1896 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1909 | "Telling transport to disconnect peer `%s'\n", | 1897 | "Telling transport to disconnect peer `%s'\n", |
1910 | GNUNET_i2s (&address->peer)); | 1898 | GNUNET_i2s (&address->peer)); |
1899 | |||
1900 | /* *Notify scheduling clients about suggestion */ | ||
1901 | GAS_scheduling_transmit_address_suggestion (&address->peer, address->plugin, | ||
1902 | address->addr, address->addr_len, address->local_address_info, | ||
1903 | address->session_id, address->atsi, address->atsi_count, | ||
1904 | GNUNET_BANDWIDTH_value_init (0), | ||
1905 | GNUNET_BANDWIDTH_value_init (0)); | ||
1906 | |||
1907 | return; | ||
1908 | |||
1911 | } | 1909 | } |
1912 | else | 1910 | |
1913 | { | 1911 | /* Do bandwidth stability check */ |
1914 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 1912 | int diff = abs (address->assigned_bw_out - address->last_notified_bw_out); |
1915 | "Sending bandwidth update for peer `%s': %u %u\n", | 1913 | |
1916 | GNUNET_i2s (&address->peer), | 1914 | |
1917 | (unsigned int) ntohl (address->assigned_bw_out.value__), | 1915 | |
1918 | (unsigned int) ntohl (address->assigned_bw_out.value__)); | 1916 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
1919 | } | 1917 | "Sending bandwidth update for peer `%s': %u %u\n", |
1918 | GNUNET_i2s (&address->peer), address->assigned_bw_out, | ||
1919 | address->assigned_bw_out); | ||
1920 | 1920 | ||
1921 | /* *Notify scheduling clients about suggestion */ | 1921 | /* *Notify scheduling clients about suggestion */ |
1922 | GAS_scheduling_transmit_address_suggestion (&address->peer, address->plugin, | 1922 | GAS_scheduling_transmit_address_suggestion (&address->peer, address->plugin, |
1923 | address->addr, address->addr_len, address->local_address_info, | 1923 | address->addr, address->addr_len, address->local_address_info, |
1924 | address->session_id, address->atsi, | 1924 | address->session_id, address->atsi, address->atsi_count, |
1925 | address->atsi_count, address->assigned_bw_out, address->assigned_bw_in); | 1925 | GNUNET_BANDWIDTH_value_init (address->assigned_bw_out), |
1926 | GNUNET_BANDWIDTH_value_init (address->assigned_bw_in)); | ||
1927 | |||
1928 | address->last_notified_bw_out = address->assigned_bw_out; | ||
1929 | address->last_notified_bw_in = address->assigned_bw_in; | ||
1926 | } | 1930 | } |
1927 | 1931 | ||
1928 | 1932 | ||
@@ -2260,7 +2264,8 @@ peerinfo_it (void *cls, | |||
2260 | { | 2264 | { |
2261 | pi_ctx->it (pi_ctx->it_cls, &addr->peer, addr->plugin, addr->addr, | 2265 | pi_ctx->it (pi_ctx->it_cls, &addr->peer, addr->plugin, addr->addr, |
2262 | addr->addr_len, addr->active, addr->atsi, addr->atsi_count, | 2266 | addr->addr_len, addr->active, addr->atsi, addr->atsi_count, |
2263 | addr->assigned_bw_out, addr->assigned_bw_in); | 2267 | GNUNET_BANDWIDTH_value_init (addr->assigned_bw_out), |
2268 | GNUNET_BANDWIDTH_value_init (addr->assigned_bw_in)); | ||
2264 | } | 2269 | } |
2265 | return GNUNET_YES; | 2270 | return GNUNET_YES; |
2266 | } | 2271 | } |