Skip to content

Commit d262cf6

Browse files
committed
askrene: move route_query definition and functions into child/.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
1 parent 3606cb1 commit d262cf6

File tree

10 files changed

+108
-92
lines changed

10 files changed

+108
-92
lines changed

plugins/askrene/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ PLUGIN_ASKRENE_CHILD_SRC := \
1515
plugins/askrene/child/priorityqueue.c \
1616
plugins/askrene/child/algorithm.c \
1717
plugins/askrene/child/child_log.c \
18+
plugins/askrene/child/route_query.c \
1819

1920
PLUGIN_ASKRENE_SRC := $(PLUGIN_ASKRENE_PARENT_SRC) $(PLUGIN_ASKRENE_CHILD_SRC)
2021
PLUGIN_ASKRENE_HEADER := $(PLUGIN_ASKRENE_SRC:.c=.h) plugins/askrene/child/additional_costs.h

plugins/askrene/askrene.c

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
#include <math.h>
2424
#include <plugins/askrene/askrene.h>
2525
#include <plugins/askrene/child/additional_costs.h>
26-
#include <plugins/askrene/child/child_log.h>
2726
#include <plugins/askrene/child/entry.h>
27+
#include <plugins/askrene/child/route_query.h>
2828
#include <plugins/askrene/layer.h>
2929
#include <plugins/askrene/reserve.h>
3030
#include <sys/wait.h>
@@ -266,17 +266,6 @@ static struct layer *remove_small_channel_layer(const tal_t *ctx,
266266
return layer;
267267
}
268268

269-
struct amount_msat get_additional_per_htlc_cost(const struct route_query *rq,
270-
const struct short_channel_id_dir *scidd)
271-
{
272-
const struct per_htlc_cost *phc;
273-
phc = additional_cost_htable_get(rq->additional_costs, scidd);
274-
if (phc)
275-
return phc->per_htlc_cost;
276-
else
277-
return AMOUNT_MSAT(0);
278-
}
279-
280269
PRINTF_FMT(4, 5)
281270
static const char *cmd_log(const tal_t *ctx,
282271
struct command *cmd,
@@ -379,42 +368,6 @@ static void apply_layers(struct askrene *askrene,
379368
}
380369
}
381370

382-
void get_constraints(const struct route_query *rq,
383-
const struct gossmap_chan *chan,
384-
int dir,
385-
struct amount_msat *min,
386-
struct amount_msat *max)
387-
{
388-
struct short_channel_id_dir scidd;
389-
size_t idx = gossmap_chan_idx(rq->gossmap, chan);
390-
391-
*min = AMOUNT_MSAT(0);
392-
393-
/* Fast path: no information known, no reserve. */
394-
if (idx < tal_count(rq->capacities) && rq->capacities[idx] != 0) {
395-
*max = amount_msat(fp16_to_u64(rq->capacities[idx]) * 1000);
396-
return;
397-
}
398-
399-
/* Naive implementation! */
400-
scidd.scid = gossmap_chan_scid(rq->gossmap, chan);
401-
scidd.dir = dir;
402-
*max = AMOUNT_MSAT(-1ULL);
403-
404-
/* Look through layers for any constraints (might be dummy
405-
* ones, for created channels!) */
406-
for (size_t i = 0; i < tal_count(rq->layers); i++)
407-
layer_apply_constraints(rq->layers[i], &scidd, min, max);
408-
409-
/* Might be here because it's reserved, but capacity is normal. */
410-
if (amount_msat_eq(*max, AMOUNT_MSAT(-1ULL)))
411-
*max = gossmap_chan_get_capacity(rq->gossmap, chan);
412-
413-
/* Finally, if any is in use, subtract that! */
414-
reserve_sub(rq->reserved, &scidd, rq->layers, min);
415-
reserve_sub(rq->reserved, &scidd, rq->layers, max);
416-
}
417-
418371
static void process_child_logs(struct command *cmd,
419372
int log_fd)
420373
{

plugins/askrene/askrene.h

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,45 +30,6 @@ struct askrene {
3030
u32 route_seconds;
3131
};
3232

33-
/* Information for a single route query. */
34-
struct route_query {
35-
/* This is *not* updated during a query! Has all layers applied. */
36-
const struct gossmap *gossmap;
37-
38-
/* command id to use for reservations we create. */
39-
const char *cmd_id;
40-
41-
/* Array of layers we're applying */
42-
const struct layer **layers;
43-
44-
/* Compact cache of biases */
45-
const s8 *biases;
46-
47-
/* Additional per-htlc cost for local channels */
48-
const struct additional_cost_htable *additional_costs;
49-
50-
/* We need to take in-flight payments into account (this is
51-
* askrene->reserved, so make sure to undo changes! */
52-
struct reserve_htable *reserved;
53-
54-
/* Cache of channel capacities for non-reserved, unknown channels. */
55-
fp16_t *capacities;
56-
57-
/* channels we disable during computation to meet constraints */
58-
bitmap *disabled_chans;
59-
};
60-
61-
/* Given a gossmap channel, get the current known min/max */
62-
void get_constraints(const struct route_query *rq,
63-
const struct gossmap_chan *chan,
64-
int dir,
65-
struct amount_msat *min,
66-
struct amount_msat *max);
67-
68-
/* Is there a known additional per-htlc cost for this channel? */
69-
struct amount_msat get_additional_per_htlc_cost(const struct route_query *rq,
70-
const struct short_channel_id_dir *scidd);
71-
7233
/* Useful plugin->askrene mapping */
7334
static inline struct askrene *get_askrene(struct plugin *plugin)
7435
{

plugins/askrene/child/entry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
#include <common/json_stream.h>
88
#include <common/route.h>
99
#include <common/utils.h>
10-
#include <plugins/askrene/askrene.h>
1110
#include <plugins/askrene/child/child_log.h>
1211
#include <plugins/askrene/child/entry.h>
1312
#include <plugins/askrene/child/flow.h>
1413
#include <plugins/askrene/child/mcf.h>
14+
#include <plugins/askrene/child/route_query.h>
1515
#include <unistd.h>
1616

1717
/* A single route. */

plugins/askrene/child/explain_failure.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
#include <common/dijkstra.h>
44
#include <common/gossmap.h>
55
#include <common/route.h>
6-
#include <plugins/askrene/askrene.h>
6+
#include <common/utils.h>
77
#include <plugins/askrene/child/child_log.h>
88
#include <plugins/askrene/child/explain_failure.h>
9+
#include <plugins/askrene/child/route_query.h>
910
#include <plugins/askrene/layer.h>
1011
#include <plugins/askrene/reserve.h>
1112

plugins/askrene/child/flow.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
#include <common/fp16.h>
66
#include <common/overflows.h>
77
#include <math.h>
8-
#include <plugins/askrene/askrene.h>
98
#include <plugins/askrene/child/child_log.h>
109
#include <plugins/askrene/child/flow.h>
10+
#include <plugins/askrene/child/route_query.h>
1111
#include <plugins/libplugin.h>
1212
#include <stdio.h>
1313

plugins/askrene/child/mcf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
#include <float.h>
1010
#include <inttypes.h>
1111
#include <math.h>
12-
#include <plugins/askrene/askrene.h>
1312
#include <plugins/askrene/child/algorithm.h>
1413
#include <plugins/askrene/child/child_log.h>
1514
#include <plugins/askrene/child/dijkstra.h>
@@ -18,6 +17,7 @@
1817
#include <plugins/askrene/child/graph.h>
1918
#include <plugins/askrene/child/mcf.h>
2019
#include <plugins/askrene/child/refine.h>
20+
#include <plugins/askrene/child/route_query.h>
2121
#include <stdint.h>
2222

2323
/* # Optimal payments

plugins/askrene/child/refine.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
#include <ccan/cast/cast.h>
44
#include <ccan/tal/str/str.h>
55
#include <common/gossmap.h>
6-
#include <plugins/askrene/askrene.h>
6+
#include <common/utils.h>
77
#include <plugins/askrene/child/child_log.h>
88
#include <plugins/askrene/child/flow.h>
99
#include <plugins/askrene/child/refine.h>
10+
#include <plugins/askrene/child/route_query.h>
1011
#include <plugins/askrene/reserve.h>
1112
#include <string.h>
1213

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "config.h"
2+
#include <common/gossmap.h>
3+
#include <plugins/askrene/child/additional_costs.h>
4+
#include <plugins/askrene/child/route_query.h>
5+
#include <plugins/askrene/layer.h>
6+
#include <plugins/askrene/reserve.h>
7+
8+
struct amount_msat get_additional_per_htlc_cost(const struct route_query *rq,
9+
const struct short_channel_id_dir *scidd)
10+
{
11+
const struct per_htlc_cost *phc;
12+
phc = additional_cost_htable_get(rq->additional_costs, scidd);
13+
if (phc)
14+
return phc->per_htlc_cost;
15+
else
16+
return AMOUNT_MSAT(0);
17+
}
18+
19+
void get_constraints(const struct route_query *rq,
20+
const struct gossmap_chan *chan,
21+
int dir,
22+
struct amount_msat *min,
23+
struct amount_msat *max)
24+
{
25+
struct short_channel_id_dir scidd;
26+
size_t idx = gossmap_chan_idx(rq->gossmap, chan);
27+
28+
*min = AMOUNT_MSAT(0);
29+
30+
/* Fast path: no information known, no reserve. */
31+
if (idx < tal_count(rq->capacities) && rq->capacities[idx] != 0) {
32+
*max = amount_msat(fp16_to_u64(rq->capacities[idx]) * 1000);
33+
return;
34+
}
35+
36+
/* Naive implementation! */
37+
scidd.scid = gossmap_chan_scid(rq->gossmap, chan);
38+
scidd.dir = dir;
39+
*max = AMOUNT_MSAT(-1ULL);
40+
41+
/* Look through layers for any constraints (might be dummy
42+
* ones, for created channels!) */
43+
for (size_t i = 0; i < tal_count(rq->layers); i++)
44+
layer_apply_constraints(rq->layers[i], &scidd, min, max);
45+
46+
/* Might be here because it's reserved, but capacity is normal. */
47+
if (amount_msat_eq(*max, AMOUNT_MSAT(-1ULL)))
48+
*max = gossmap_chan_get_capacity(rq->gossmap, chan);
49+
50+
/* Finally, if any is in use, subtract that! */
51+
reserve_sub(rq->reserved, &scidd, rq->layers, min);
52+
reserve_sub(rq->reserved, &scidd, rq->layers, max);
53+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#ifndef LIGHTNING_PLUGINS_ASKRENE_CHILD_ROUTE_QUERY_H
2+
#define LIGHTNING_PLUGINS_ASKRENE_CHILD_ROUTE_QUERY_H
3+
#include "config.h"
4+
#include <ccan/bitmap/bitmap.h>
5+
/* Child-safe access routines for the route query. */
6+
7+
/* Information for a single route query. */
8+
struct route_query {
9+
/* This is *not* updated during a query! Has all layers applied. */
10+
const struct gossmap *gossmap;
11+
12+
/* command id to use for reservations we create. */
13+
const char *cmd_id;
14+
15+
/* Array of layers we're applying */
16+
const struct layer **layers;
17+
18+
/* Compact cache of biases */
19+
const s8 *biases;
20+
21+
/* Additional per-htlc cost for local channels */
22+
const struct additional_cost_htable *additional_costs;
23+
24+
/* We need to take in-flight payments into account (this is
25+
* askrene->reserved, so make sure to undo changes! */
26+
struct reserve_htable *reserved;
27+
28+
/* Cache of channel capacities for non-reserved, unknown channels. */
29+
fp16_t *capacities;
30+
31+
/* channels we disable during computation to meet constraints */
32+
bitmap *disabled_chans;
33+
};
34+
35+
/* Given a gossmap channel, get the current known min/max */
36+
void get_constraints(const struct route_query *rq,
37+
const struct gossmap_chan *chan,
38+
int dir,
39+
struct amount_msat *min,
40+
struct amount_msat *max);
41+
42+
/* Is there a known additional per-htlc cost for this channel? */
43+
struct amount_msat get_additional_per_htlc_cost(const struct route_query *rq,
44+
const struct short_channel_id_dir *scidd);
45+
46+
#endif /* LIGHTNING_PLUGINS_ASKRENE_CHILD_ROUTE_QUERY_H */

0 commit comments

Comments
 (0)