@@ -952,8 +952,7 @@ struct flow **minflow(const tal_t *ctx,
952952 const struct gossmap_node * target ,
953953 struct amount_msat amount ,
954954 u32 mu ,
955- double delay_feefactor ,
956- bool single_part )
955+ double delay_feefactor )
957956{
958957 struct flow * * flow_paths ;
959958 /* We allocate everything off this, and free it at the end,
@@ -1044,31 +1043,6 @@ struct flow **minflow(const tal_t *ctx,
10441043 goto fail ;
10451044 }
10461045 tal_free (working_ctx );
1047-
1048- /* This is dumb, but if you don't support MPP you don't deserve any
1049- * better. Pile it into the largest part if not already. */
1050- if (single_part ) {
1051- struct flow * best = flow_paths [0 ];
1052- for (size_t i = 1 ; i < tal_count (flow_paths ); i ++ ) {
1053- if (amount_msat_greater (flow_paths [i ]-> delivers , best -> delivers ))
1054- best = flow_paths [i ];
1055- }
1056- for (size_t i = 0 ; i < tal_count (flow_paths ); i ++ ) {
1057- if (flow_paths [i ] == best )
1058- continue ;
1059- if (!amount_msat_accumulate (& best -> delivers ,
1060- flow_paths [i ]-> delivers )) {
1061- rq_log (tmpctx , rq , LOG_BROKEN ,
1062- "%s: failed to extract accumulate flow paths %s+%s" ,
1063- __func__ ,
1064- fmt_amount_msat (tmpctx , best -> delivers ),
1065- fmt_amount_msat (tmpctx , flow_paths [i ]-> delivers ));
1066- goto fail ;
1067- }
1068- }
1069- flow_paths [0 ] = best ;
1070- tal_resize (& flow_paths , 1 );
1071- }
10721046 return flow_paths ;
10731047
10741048fail :
@@ -1273,13 +1247,16 @@ struct flow **single_path_flow(const tal_t *ctx, const struct route_query *rq,
12731247 return NULL ;
12741248}
12751249
1276- const char * default_routes (const tal_t * ctx , struct route_query * rq ,
1277- const struct gossmap_node * srcnode ,
1278- const struct gossmap_node * dstnode ,
1279- struct amount_msat amount , bool single_path ,
1280- struct amount_msat maxfee , u32 finalcltv ,
1281- u32 maxdelay , struct flow * * * flows ,
1282- double * probability )
1250+ static const char *
1251+ linear_routes (const tal_t * ctx , struct route_query * rq ,
1252+ const struct gossmap_node * srcnode ,
1253+ const struct gossmap_node * dstnode , struct amount_msat amount ,
1254+ struct amount_msat maxfee , u32 finalcltv , u32 maxdelay ,
1255+ struct flow * * * flows , double * probability ,
1256+ struct flow * * (* solver )(const tal_t * , const struct route_query * ,
1257+ const struct gossmap_node * ,
1258+ const struct gossmap_node * ,
1259+ struct amount_msat , u32 , double ))
12831260{
12841261 * flows = NULL ;
12851262 const char * ret ;
@@ -1288,8 +1265,7 @@ const char *default_routes(const tal_t *ctx, struct route_query *rq,
12881265 /* First up, don't care about fees (well, just enough to tiebreak!) */
12891266 u32 mu = 1 ;
12901267 tal_free (* flows );
1291- * flows = minflow (ctx , rq , srcnode , dstnode , amount , mu , delay_feefactor ,
1292- single_path );
1268+ * flows = solver (ctx , rq , srcnode , dstnode , amount , mu , delay_feefactor );
12931269 if (!* flows ) {
12941270 ret = explain_failure (ctx , rq , srcnode , dstnode , amount );
12951271 goto fail ;
@@ -1304,8 +1280,8 @@ const char *default_routes(const tal_t *ctx, struct route_query *rq,
13041280 flows_worst_delay (* flows ), maxdelay - finalcltv ,
13051281 delay_feefactor );
13061282 tal_free (* flows );
1307- * flows = minflow (ctx , rq , srcnode , dstnode , amount , mu ,
1308- delay_feefactor , single_path );
1283+ * flows = solver (ctx , rq , srcnode , dstnode , amount , mu ,
1284+ delay_feefactor );
13091285 if (!* flows || delay_feefactor > 10 ) {
13101286 ret = rq_log (
13111287 ctx , rq , LOG_UNUSUAL ,
@@ -1328,9 +1304,8 @@ const char *default_routes(const tal_t *ctx, struct route_query *rq,
13281304 "retrying with mu of %u%%..." ,
13291305 fmt_amount_msat (tmpctx , flowset_fee (rq -> plugin , * flows )),
13301306 fmt_amount_msat (tmpctx , maxfee ), mu );
1331- new_flows =
1332- minflow (ctx , rq , srcnode , dstnode , amount ,
1333- mu > 100 ? 100 : mu , delay_feefactor , single_path );
1307+ new_flows = solver (ctx , rq , srcnode , dstnode , amount ,
1308+ mu > 100 ? 100 : mu , delay_feefactor );
13341309 if (!* flows || mu >= 100 ) {
13351310 ret = rq_log (
13361311 ctx , rq , LOG_UNUSUAL ,
@@ -1411,3 +1386,27 @@ const char *default_routes(const tal_t *ctx, struct route_query *rq,
14111386 assert (ret != NULL );
14121387 return ret ;
14131388}
1389+
1390+ const char * default_routes (const tal_t * ctx , struct route_query * rq ,
1391+ const struct gossmap_node * srcnode ,
1392+ const struct gossmap_node * dstnode ,
1393+ struct amount_msat amount , struct amount_msat maxfee ,
1394+ u32 finalcltv , u32 maxdelay , struct flow * * * flows ,
1395+ double * probability )
1396+ {
1397+ return linear_routes (ctx , rq , srcnode , dstnode , amount , maxfee ,
1398+ finalcltv , maxdelay , flows , probability , minflow );
1399+ }
1400+
1401+ const char * single_path_routes (const tal_t * ctx , struct route_query * rq ,
1402+ const struct gossmap_node * srcnode ,
1403+ const struct gossmap_node * dstnode ,
1404+ struct amount_msat amount ,
1405+ struct amount_msat maxfee , u32 finalcltv ,
1406+ u32 maxdelay , struct flow * * * flows ,
1407+ double * probability )
1408+ {
1409+ return linear_routes (ctx , rq , srcnode , dstnode , amount , maxfee ,
1410+ finalcltv , maxdelay , flows , probability ,
1411+ single_path_flow );
1412+ }
0 commit comments