aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-28 12:23:08 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-28 12:23:08 +0000
commit91ec406325df69dc89d44a604a0b67c052f57cfc (patch)
treecf3985f7db72d668102158f3fc65f42f3cfff42a /src
parentec310a9a392987e8ddcaf14266f104d73a678b03 (diff)
downloadgnunet-91ec406325df69dc89d44a604a0b67c052f57cfc.tar.gz
gnunet-91ec406325df69dc89d44a604a0b67c052f57cfc.zip
clean up configuration parameters and implementation
Diffstat (limited to 'src')
-rw-r--r--src/ats/ats.conf.in25
-rw-r--r--src/ats/plugin_ats_mlp.c154
-rw-r--r--src/ats/plugin_ats_mlp.h18
3 files changed, 124 insertions, 73 deletions
diff --git a/src/ats/ats.conf.in b/src/ats/ats.conf.in
index 589ee6802..57e82cefc 100644
--- a/src/ats/ats.conf.in
+++ b/src/ats/ats.conf.in
@@ -34,13 +34,12 @@ BLUETOOTH_QUOTA_OUT = 128 KiB
34 34
35 35
36# MLP specific settings 36# MLP specific settings
37MLP_MIN_INTERVAL = 15000
38
39# check if required
40#MLP_EXEC_INTERVAL = 30000
41
42# MLP defaults 37# MLP defaults
38
39# Maximum duration for a solution process
43# MLP_MAX_DURATION = 3 s 40# MLP_MAX_DURATION = 3 s
41
42# Maximum number of iterations for a solution process
44# MLP_MAX_ITERATIONS = 1024 43# MLP_MAX_ITERATIONS = 1024
45# MLP_COEFFICIENT_D = 1.0 44# MLP_COEFFICIENT_D = 1.0
46# MLP_COEFFICIENT_U = 1.0 45# MLP_COEFFICIENT_U = 1.0
@@ -48,11 +47,13 @@ MLP_MIN_INTERVAL = 15000
48# MLP_MIN_BANDWIDTH = 1024 47# MLP_MIN_BANDWIDTH = 1024
49# MLP_MIN_CONNECTIONS = 4 48# MLP_MIN_CONNECTIONS = 4
50 49
51# MLP Debugging settings 50# MLP Log settings
52DUMP_MLP = NO 51# Dump all problems to disk
53DUMP_SOLUTION = NO 52# DUMP_PROBLEM_ALL = YES
54DUMP_OVERWRITE = NO 53# Dump all solution to disk
55DUMP_MIN_PEERS = 0 54# DUMP_SOLUTION_ALL = YES
56DUMP_MIN_ADDRS = 0
57DUMP_OVERWRITE = NO
58 55
56# Dump all problems to disk
57DUMP_PROBLEM_ON_FAIL = YES
58# Dump all solution to disk
59DUMP_SOLUTION_ON_FAIL = YES \ No newline at end of file
diff --git a/src/ats/plugin_ats_mlp.c b/src/ats/plugin_ats_mlp.c
index 7dd31edf5..3345be615 100644
--- a/src/ats/plugin_ats_mlp.c
+++ b/src/ats/plugin_ats_mlp.c
@@ -81,7 +81,7 @@
81 * adapted using configuration settings and uses the following parameters: 81 * adapted using configuration settings and uses the following parameters:
82 * * MLP_MAX_DURATION: 82 * * MLP_MAX_DURATION:
83 * Maximum duration for a MLP solution procees (default: 3 sec.) 83 * Maximum duration for a MLP solution procees (default: 3 sec.)
84 * * MLP_MAX_DURATION: 84 * * MLP_MAX_ITERATIONS:
85 * Maximum number of iterations for a MLP solution process (default: 85 * Maximum number of iterations for a MLP solution process (default:
86 * 1024) 86 * 1024)
87 * * MLP_MIN_CONNECTIONS: 87 * * MLP_MIN_CONNECTIONS:
@@ -1099,7 +1099,8 @@ GAS_mlp_solve_problem (void *solver)
1099 int res_lp = 0; 1099 int res_lp = 0;
1100 int res_mip = 0; 1100 int res_mip = 0;
1101 1101
1102 struct GNUNET_TIME_Absolute start; 1102 struct GNUNET_TIME_Absolute start_total;
1103 struct GNUNET_TIME_Absolute start_cur_op;
1103 struct GNUNET_TIME_Relative dur_total; 1104 struct GNUNET_TIME_Relative dur_total;
1104 struct GNUNET_TIME_Relative dur_setup; 1105 struct GNUNET_TIME_Relative dur_setup;
1105 struct GNUNET_TIME_Relative dur_lp; 1106 struct GNUNET_TIME_Relative dur_lp;
@@ -1114,7 +1115,7 @@ GAS_mlp_solve_problem (void *solver)
1114 } 1115 }
1115 notify(mlp, GAS_OP_SOLVE_START, GAS_STAT_SUCCESS, 1116 notify(mlp, GAS_OP_SOLVE_START, GAS_STAT_SUCCESS,
1116 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED); 1117 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1117 start = GNUNET_TIME_absolute_get(); 1118 start_total = GNUNET_TIME_absolute_get();
1118 1119
1119 if (0 == GNUNET_CONTAINER_multipeermap_size(mlp->requested_peers)) 1120 if (0 == GNUNET_CONTAINER_multipeermap_size(mlp->requested_peers))
1120 { 1121 {
@@ -1153,40 +1154,61 @@ GAS_mlp_solve_problem (void *solver)
1153 LOG(GNUNET_ERROR_TYPE_DEBUG, "Problem was updated, resolving\n"); 1154 LOG(GNUNET_ERROR_TYPE_DEBUG, "Problem was updated, resolving\n");
1154 } 1155 }
1155 1156
1156 dur_setup = GNUNET_TIME_absolute_get_duration (start); 1157 dur_setup = GNUNET_TIME_absolute_get_duration (start_total);
1157 mlp->control_param_lp.presolve = GLP_YES;
1158 /* Run LP solver */
1159 1158
1159 /* Run LP solver */
1160 mlp->control_param_lp.presolve = GLP_YES;
1160 notify(mlp, GAS_OP_SOLVE_MLP_LP_START, GAS_STAT_SUCCESS, 1161 notify(mlp, GAS_OP_SOLVE_MLP_LP_START, GAS_STAT_SUCCESS,
1161 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED); 1162 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1162 LOG(GNUNET_ERROR_TYPE_DEBUG, 1163 LOG(GNUNET_ERROR_TYPE_DEBUG,
1163 "Running LP solver %s\n", 1164 "Running LP solver %s\n",
1164 (GLP_YES == mlp->control_param_lp.presolve)? "with presolver": "without presolver"); 1165 (GLP_YES == mlp->control_param_lp.presolve)? "with presolver": "without presolver");
1166 start_cur_op = GNUNET_TIME_absolute_get();
1167
1168 /* Solve LP */
1165 res_lp = mlp_solve_lp_problem(mlp); 1169 res_lp = mlp_solve_lp_problem(mlp);
1170
1171 dur_lp = GNUNET_TIME_absolute_get_duration (start_cur_op);
1166 notify(mlp, GAS_OP_SOLVE_MLP_LP_STOP, 1172 notify(mlp, GAS_OP_SOLVE_MLP_LP_STOP,
1167 (GNUNET_OK == res_lp) ? GAS_STAT_SUCCESS : GAS_STAT_FAIL, 1173 (GNUNET_OK == res_lp) ? GAS_STAT_SUCCESS : GAS_STAT_FAIL,
1168 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED); 1174 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1169 1175
1170 dur_lp = GNUNET_TIME_absolute_get_duration (start);
1171 dur_lp = GNUNET_TIME_relative_subtract(dur_lp, dur_setup);
1172 1176
1173 /* Run MLP solver */ 1177 /* Run MLP solver */
1174 LOG(GNUNET_ERROR_TYPE_DEBUG, "Running MLP solver \n"); 1178 if (GNUNET_OK == res_lp)
1175 notify(mlp, GAS_OP_SOLVE_MLP_MLP_START, GAS_STAT_SUCCESS, 1179 {
1176 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED); 1180 LOG(GNUNET_ERROR_TYPE_DEBUG, "Running MLP solver \n");
1177 res_mip = mlp_solve_mlp_problem(mlp); 1181 notify(mlp, GAS_OP_SOLVE_MLP_MLP_START, GAS_STAT_SUCCESS,
1178 notify(mlp, GAS_OP_SOLVE_MLP_MLP_STOP, 1182 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1179 (GNUNET_OK == res_lp) ? GAS_STAT_SUCCESS : GAS_STAT_FAIL, 1183 start_cur_op = GNUNET_TIME_absolute_get();
1180 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED); 1184
1185 /* Solve MIP */
1186 res_mip = mlp_solve_mlp_problem(mlp);
1187
1188 dur_mlp = GNUNET_TIME_absolute_get_duration (start_cur_op);
1189 dur_total = GNUNET_TIME_absolute_get_duration (start_total);
1190
1191 notify(mlp, GAS_OP_SOLVE_MLP_MLP_STOP,
1192 (GNUNET_OK == res_mip) ? GAS_STAT_SUCCESS : GAS_STAT_FAIL,
1193 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1194 }
1195 else
1196 {
1197 /* Do not execute mip solver since lp solution is invalid */
1198 dur_mlp = GNUNET_TIME_UNIT_ZERO;
1199 dur_total = GNUNET_TIME_absolute_get_duration (start_total);
1200 GNUNET_break (0);
1201 notify(mlp, GAS_OP_SOLVE_MLP_MLP_STOP, GAS_STAT_FAIL,
1202 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1203 res_mip = GNUNET_SYSERR;
1204 }
1205
1206
1207 /* Notify about end */
1181 notify(mlp, GAS_OP_SOLVE_STOP, 1208 notify(mlp, GAS_OP_SOLVE_STOP,
1182 (GNUNET_OK == res_mip) ? GAS_STAT_SUCCESS : GAS_STAT_FAIL, 1209 ((GNUNET_OK == res_mip) && (GNUNET_OK == res_mip)) ? GAS_STAT_SUCCESS : GAS_STAT_FAIL,
1183 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED); 1210 (GNUNET_YES == mlp->mlp_prob_changed) ? GAS_INFO_FULL : GAS_INFO_UPDATED);
1184 1211
1185 dur_mlp = GNUNET_TIME_absolute_get_duration (start);
1186 dur_mlp = GNUNET_TIME_relative_subtract(dur_mlp, dur_setup);
1187 dur_mlp = GNUNET_TIME_relative_subtract(dur_mlp, dur_lp);
1188 dur_total = GNUNET_TIME_absolute_get_duration (start);
1189
1190 LOG (GNUNET_ERROR_TYPE_DEBUG, 1212 LOG (GNUNET_ERROR_TYPE_DEBUG,
1191 "Execution time for %s solve: (total/setup/lp/mlp) : %llu %llu %llu %llu\n", 1213 "Execution time for %s solve: (total/setup/lp/mlp) : %llu %llu %llu %llu\n",
1192 (GNUNET_YES == mlp->mlp_prob_changed) ? "full" : "updated", 1214 (GNUNET_YES == mlp->mlp_prob_changed) ? "full" : "updated",
@@ -1218,24 +1240,26 @@ GAS_mlp_solve_problem (void *solver)
1218 GAS_INFO_NONE); 1240 GAS_INFO_NONE);
1219 1241
1220 struct GNUNET_TIME_Absolute time = GNUNET_TIME_absolute_get(); 1242 struct GNUNET_TIME_Absolute time = GNUNET_TIME_absolute_get();
1221 if (GNUNET_YES == mlp->write_mip_mps) 1243 if ( (GNUNET_YES == mlp->dump_solution_all) ||
1244 (mlp->dump_solution_on_fail && ((GNUNET_OK != res_lp) || (GNUNET_OK != res_mip))) )
1222 { 1245 {
1223 /* Write problem to disk */ 1246 /* Write problem to disk */
1224 GNUNET_asprintf(&filename, "problem_p_%u_a%u_%llu.mps", mlp->p.num_peers, 1247 GNUNET_asprintf(&filename, "problem_p_%u_a%u_%llu.mps", mlp->p.num_peers,
1225 mlp->p.num_addresses, time.abs_value_us); 1248 mlp->p.num_addresses, time.abs_value_us);
1226 LOG(GNUNET_ERROR_TYPE_ERROR, "DUMP: %s \n", filename); 1249 LOG(GNUNET_ERROR_TYPE_ERROR, "Dumped problem to file: `%s' \n", filename);
1227 glp_write_lp(mlp->p.prob, NULL, filename); 1250 glp_write_mps (mlp->p.prob, GLP_MPS_FILE, NULL, filename);
1228 GNUNET_free(filename);
1229 }
1230 if (GNUNET_YES == mlp->write_mip_sol)
1231 {
1232 /* Write solution to disk */
1233 GNUNET_asprintf(&filename, "problem_p_%u_a%u_%llu.sol", mlp->p.num_peers,
1234 mlp->p.num_addresses, time.abs_value_us);
1235 glp_print_mip(mlp->p.prob, filename);
1236 LOG(GNUNET_ERROR_TYPE_ERROR, "DUMP: %s \n", filename);
1237 GNUNET_free(filename); 1251 GNUNET_free(filename);
1238 } 1252 }
1253 if ( (mlp->dump_solution_all) ||
1254 (mlp->dump_solution_on_fail && ((GNUNET_OK != res_lp) || (GNUNET_OK != res_mip))) )
1255 {
1256 /* Write solution to disk */
1257 GNUNET_asprintf(&filename, "problem_p_%u_a%u_%llu.sol", mlp->p.num_peers,
1258 mlp->p.num_addresses, time.abs_value_us);
1259 glp_print_mip(mlp->p.prob, filename);
1260 LOG(GNUNET_ERROR_TYPE_ERROR, "Dumped solution to file: `%s' \n", filename);
1261 GNUNET_free(filename);
1262 }
1239 1263
1240 /* Reset change and update marker */ 1264 /* Reset change and update marker */
1241 mlp->control_param_lp.presolve = GLP_NO; 1265 mlp->control_param_lp.presolve = GLP_NO;
@@ -1936,25 +1960,38 @@ libgnunet_plugin_ats_mlp_init (void *cls)
1936 break; 1960 break;
1937 } 1961 }
1938 1962
1939 mlp->write_mip_mps = GNUNET_CONFIGURATION_get_value_yesno (env->cfg, "ats", 1963 mlp->dump_problem_all = GNUNET_CONFIGURATION_get_value_yesno (env->cfg,
1940 "DUMP_MLP"); 1964 "ats", "DUMP_PROBLEM_ALL");
1941 if (GNUNET_SYSERR == mlp->write_mip_mps) 1965 if (GNUNET_SYSERR == mlp->dump_problem_all)
1942 mlp->write_mip_mps = GNUNET_NO; 1966 mlp->dump_problem_all = GNUNET_NO;
1943 mlp->write_mip_sol = GNUNET_CONFIGURATION_get_value_yesno (env->cfg, "ats", 1967
1944 "DUMP_SOLUTION"); 1968 mlp->dump_solution_all = GNUNET_CONFIGURATION_get_value_yesno (env->cfg,
1945 if (GNUNET_SYSERR == mlp->write_mip_sol) 1969 "ats", "DUMP_SOLUTION_ALL");
1946 mlp->write_mip_sol = GNUNET_NO; 1970 if (GNUNET_SYSERR == mlp->dump_solution_all)
1971 mlp->dump_solution_all = GNUNET_NO;
1972
1973 mlp->dump_problem_on_fail = GNUNET_CONFIGURATION_get_value_yesno (env->cfg,
1974 "ats", "DUMP_PROBLEM_ON_FAIL");
1975 if (GNUNET_SYSERR == mlp->dump_problem_on_fail)
1976 mlp->dump_problem_on_fail = GNUNET_NO;
1977
1978 mlp->dump_solution_on_fail = GNUNET_CONFIGURATION_get_value_yesno (env->cfg,
1979 "ats", "DUMP_SOLUTION_ON_FAIL");
1980 if (GNUNET_SYSERR == mlp->dump_solution_on_fail)
1981 mlp->dump_solution_on_fail = GNUNET_NO;
1947 1982
1948 mlp->pv.BIG_M = (double) BIG_M_VALUE; 1983 mlp->pv.BIG_M = (double) BIG_M_VALUE;
1949 1984
1950 /* Get timeout for iterations */ 1985 /* Get timeout for iterations */
1951 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time(env->cfg, "ats", "MLP_MAX_DURATION", &max_duration)) 1986 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time(env->cfg, "ats",
1987 "MLP_MAX_DURATION", &max_duration))
1952 { 1988 {
1953 max_duration = MLP_MAX_EXEC_DURATION; 1989 max_duration = MLP_MAX_EXEC_DURATION;
1954 } 1990 }
1955 1991
1956 /* Get maximum number of iterations */ 1992 /* Get maximum number of iterations */
1957 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_size(env->cfg, "ats", "MLP_MAX_ITERATIONS", &max_iterations)) 1993 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_size(env->cfg, "ats",
1994 "MLP_MAX_ITERATIONS", &max_iterations))
1958 { 1995 {
1959 max_iterations = MLP_MAX_ITERATIONS; 1996 max_iterations = MLP_MAX_ITERATIONS;
1960 } 1997 }
@@ -1999,17 +2036,16 @@ libgnunet_plugin_ats_mlp_init (void *cls)
1999 i_distance = c; 2036 i_distance = c;
2000 } 2037 }
2001 2038
2002 if ((i_delay != MLP_NaN) && (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats", 2039 if ( (i_delay != MLP_NaN) &&
2003 "MLP_COEFFICIENT_QUALITY_DELAY", 2040 (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats",
2004 &tmp))) 2041 "MLP_COEFFICIENT_QUALITY_DELAY", &tmp)) )
2005
2006 mlp->pv.co_Q[i_delay] = (double) tmp / 100; 2042 mlp->pv.co_Q[i_delay] = (double) tmp / 100;
2007 else 2043 else
2008 mlp->pv.co_Q[i_delay] = DEFAULT_QUALITY; 2044 mlp->pv.co_Q[i_delay] = DEFAULT_QUALITY;
2009 2045
2010 if ((i_distance != MLP_NaN) && (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats", 2046 if ( (i_distance != MLP_NaN) &&
2011 "MLP_COEFFICIENT_QUALITY_DISTANCE", 2047 (GNUNET_OK == GNUNET_CONFIGURATION_get_value_size (env->cfg, "ats",
2012 &tmp))) 2048 "MLP_COEFFICIENT_QUALITY_DISTANCE", &tmp)) )
2013 mlp->pv.co_Q[i_distance] = (double) tmp / 100; 2049 mlp->pv.co_Q[i_distance] = (double) tmp / 100;
2014 else 2050 else
2015 mlp->pv.co_Q[i_distance] = DEFAULT_QUALITY; 2051 mlp->pv.co_Q[i_distance] = DEFAULT_QUALITY;
@@ -2045,10 +2081,11 @@ libgnunet_plugin_ats_mlp_init (void *cls)
2045 mlp->pv.quota_out[c] = env->out_quota[c2]; 2081 mlp->pv.quota_out[c] = env->out_quota[c2];
2046 mlp->pv.quota_in[c] = env->in_quota[c2]; 2082 mlp->pv.quota_in[c] = env->in_quota[c2];
2047 found = GNUNET_YES; 2083 found = GNUNET_YES;
2048 LOG (GNUNET_ERROR_TYPE_DEBUG, "Quota for network `%s' (in/out) %llu/%llu\n", 2084 LOG (GNUNET_ERROR_TYPE_DEBUG,
2049 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]), 2085 "Quota for network `%s' (in/out) %llu/%llu\n",
2050 mlp->pv.quota_out[c], 2086 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]),
2051 mlp->pv.quota_in[c]); 2087 mlp->pv.quota_out[c],
2088 mlp->pv.quota_in[c]);
2052 break; 2089 break;
2053 } 2090 }
2054 } 2091 }
@@ -2056,7 +2093,8 @@ libgnunet_plugin_ats_mlp_init (void *cls)
2056 /* Check if defined quota could make problem unsolvable */ 2093 /* Check if defined quota could make problem unsolvable */
2057 if ((n_min * b_min) > mlp->pv.quota_out[c]) 2094 if ((n_min * b_min) > mlp->pv.quota_out[c])
2058 { 2095 {
2059 LOG (GNUNET_ERROR_TYPE_INFO, _("Adjusting inconsistent outbound quota configuration for network `%s', is %llu must be at least %llu\n"), 2096 LOG (GNUNET_ERROR_TYPE_INFO,
2097 _("Adjusting inconsistent outbound quota configuration for network `%s', is %llu must be at least %llu\n"),
2060 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]), 2098 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]),
2061 mlp->pv.quota_out[c], 2099 mlp->pv.quota_out[c],
2062 (n_min * b_min)); 2100 (n_min * b_min));
@@ -2064,7 +2102,8 @@ libgnunet_plugin_ats_mlp_init (void *cls)
2064 } 2102 }
2065 if ((n_min * b_min) > mlp->pv.quota_in[c]) 2103 if ((n_min * b_min) > mlp->pv.quota_in[c])
2066 { 2104 {
2067 LOG (GNUNET_ERROR_TYPE_INFO, _("Adjusting inconsistent inbound quota configuration for network `%s', is %llu must be at least %llu\n"), 2105 LOG (GNUNET_ERROR_TYPE_INFO,
2106 _("Adjusting inconsistent inbound quota configuration for network `%s', is %llu must be at least %llu\n"),
2068 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]), 2107 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]),
2069 mlp->pv.quota_in[c], 2108 mlp->pv.quota_in[c],
2070 (n_min * b_min)); 2109 (n_min * b_min));
@@ -2074,7 +2113,8 @@ libgnunet_plugin_ats_mlp_init (void *cls)
2074 /* Check if bandwidth is too big to make problem solvable */ 2113 /* Check if bandwidth is too big to make problem solvable */
2075 if (mlp->pv.BIG_M < mlp->pv.quota_out[c]) 2114 if (mlp->pv.BIG_M < mlp->pv.quota_out[c])
2076 { 2115 {
2077 LOG (GNUNET_ERROR_TYPE_INFO, _("Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"), 2116 LOG (GNUNET_ERROR_TYPE_INFO,
2117 _("Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"),
2078 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]), 2118 GNUNET_ATS_print_network_type(mlp->pv.quota_index[c]),
2079 mlp->pv.quota_out[c], 2119 mlp->pv.quota_out[c],
2080 mlp->pv.BIG_M); 2120 mlp->pv.BIG_M);
diff --git a/src/ats/plugin_ats_mlp.h b/src/ats/plugin_ats_mlp.h
index 57698c708..2ef640e75 100644
--- a/src/ats/plugin_ats_mlp.h
+++ b/src/ats/plugin_ats_mlp.h
@@ -317,14 +317,24 @@ struct GAS_MLP_Handle
317 int mlp_auto_solve; 317 int mlp_auto_solve;
318 318
319 /** 319 /**
320 * Write MILP problem to a MPS file 320 * Write all MILP problems to a MPS file
321 */ 321 */
322 int write_mip_mps; 322 int dump_problem_all;
323 323
324 /** 324 /**
325 * Write MILP problem to a MPS file 325 * Write all MILP problem solutions to a file
326 */ 326 */
327 int write_mip_sol; 327 int dump_solution_all;
328
329 /**
330 * Write MILP problems to a MPS file when solver fails
331 */
332 int dump_problem_on_fail;
333
334 /**
335 * Write MILP problem solutions to a file when solver fails
336 */
337 int dump_solution_on_fail;
328 338
329}; 339};
330 340