mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
channeld: dump htlc transitions.
Good for debugging. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -51,6 +51,36 @@ static s64 balance_removing_htlc(const struct htlc *htlc, enum side side)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dump_htlc(const struct htlc *htlc, const char *prefix)
|
||||||
|
{
|
||||||
|
enum htlc_state remote_state;
|
||||||
|
|
||||||
|
if (htlc->state <= RCVD_REMOVE_ACK_REVOCATION)
|
||||||
|
remote_state = htlc->state + 10;
|
||||||
|
else
|
||||||
|
remote_state = htlc->state - 10;
|
||||||
|
|
||||||
|
status_trace("%s: HTLC %s %"PRIu64" = %s/%s %s",
|
||||||
|
prefix,
|
||||||
|
htlc_owner(htlc) == LOCAL ? "LOCAL" : "REMOTE",
|
||||||
|
htlc->id,
|
||||||
|
htlc_state_name(htlc->state),
|
||||||
|
htlc_state_name(remote_state),
|
||||||
|
htlc->r ? "FULFILLED" : htlc->fail ? "FAILED" : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void dump_htlcs(const struct channel *channel, const char *prefix)
|
||||||
|
{
|
||||||
|
struct htlc_map_iter it;
|
||||||
|
const struct htlc *htlc;
|
||||||
|
|
||||||
|
for (htlc = htlc_map_first(&channel->htlcs, &it);
|
||||||
|
htlc;
|
||||||
|
htlc = htlc_map_next(&channel->htlcs, &it)) {
|
||||||
|
dump_htlc(htlc, prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Returns up to three arrays:
|
/* Returns up to three arrays:
|
||||||
* committed: HTLCs currently committed.
|
* committed: HTLCs currently committed.
|
||||||
* pending_removal: HTLCs pending removal (subset of committed)
|
* pending_removal: HTLCs pending removal (subset of committed)
|
||||||
@@ -478,6 +508,7 @@ enum channel_add_err channel_add_htlc(struct channel *channel,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dump_htlc(htlc, "NEW:");
|
||||||
htlc_map_add(&channel->htlcs, tal_steal(channel, htlc));
|
htlc_map_add(&channel->htlcs, tal_steal(channel, htlc));
|
||||||
e = CHANNEL_ERR_ADD_OK;
|
e = CHANNEL_ERR_ADD_OK;
|
||||||
|
|
||||||
@@ -546,6 +577,7 @@ enum channel_remove_err channel_fulfill_htlc(struct channel *channel,
|
|||||||
htlc->id, htlc_state_name(htlc->state));
|
htlc->id, htlc_state_name(htlc->state));
|
||||||
return CHANNEL_ERR_HTLC_NOT_IRREVOCABLE;
|
return CHANNEL_ERR_HTLC_NOT_IRREVOCABLE;
|
||||||
}
|
}
|
||||||
|
dump_htlc(htlc, "FULFILL:");
|
||||||
|
|
||||||
return CHANNEL_ERR_REMOVE_OK;
|
return CHANNEL_ERR_REMOVE_OK;
|
||||||
}
|
}
|
||||||
@@ -582,6 +614,7 @@ enum channel_remove_err channel_fail_htlc(struct channel *channel,
|
|||||||
htlc->id, htlc_state_name(htlc->state));
|
htlc->id, htlc_state_name(htlc->state));
|
||||||
return CHANNEL_ERR_HTLC_NOT_IRREVOCABLE;
|
return CHANNEL_ERR_HTLC_NOT_IRREVOCABLE;
|
||||||
}
|
}
|
||||||
|
dump_htlc(htlc, "FAIL:");
|
||||||
|
|
||||||
return CHANNEL_ERR_REMOVE_OK;
|
return CHANNEL_ERR_REMOVE_OK;
|
||||||
}
|
}
|
||||||
@@ -644,7 +677,8 @@ static int change_htlcs(struct channel *channel,
|
|||||||
enum side sidechanged,
|
enum side sidechanged,
|
||||||
const enum htlc_state *htlc_states,
|
const enum htlc_state *htlc_states,
|
||||||
size_t n_hstates,
|
size_t n_hstates,
|
||||||
const struct htlc ***htlcs)
|
const struct htlc ***htlcs,
|
||||||
|
const char *prefix)
|
||||||
{
|
{
|
||||||
struct htlc_map_iter it;
|
struct htlc_map_iter it;
|
||||||
struct htlc *h;
|
struct htlc *h;
|
||||||
@@ -657,6 +691,7 @@ static int change_htlcs(struct channel *channel,
|
|||||||
for (i = 0; i < n_hstates; i++) {
|
for (i = 0; i < n_hstates; i++) {
|
||||||
if (h->state == htlc_states[i]) {
|
if (h->state == htlc_states[i]) {
|
||||||
htlc_incstate(channel, h, sidechanged);
|
htlc_incstate(channel, h, sidechanged);
|
||||||
|
dump_htlc(h, prefix);
|
||||||
append_htlc(htlcs, h);
|
append_htlc(htlcs, h);
|
||||||
cflags |= (htlc_state_flags(htlc_states[i])
|
cflags |= (htlc_state_flags(htlc_states[i])
|
||||||
^ htlc_state_flags(h->state));
|
^ htlc_state_flags(h->state));
|
||||||
@@ -677,7 +712,7 @@ bool channel_sending_commit(struct channel *channel,
|
|||||||
SENT_REMOVE_HTLC };
|
SENT_REMOVE_HTLC };
|
||||||
status_trace("Trying commit");
|
status_trace("Trying commit");
|
||||||
change = change_htlcs(channel, REMOTE, states, ARRAY_SIZE(states),
|
change = change_htlcs(channel, REMOTE, states, ARRAY_SIZE(states),
|
||||||
htlcs);
|
htlcs, "sending_commit");
|
||||||
return change & HTLC_REMOTE_F_COMMITTED;
|
return change & HTLC_REMOTE_F_COMMITTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,7 +727,7 @@ bool channel_rcvd_revoke_and_ack(struct channel *channel,
|
|||||||
|
|
||||||
status_trace("Received revoke_and_ack");
|
status_trace("Received revoke_and_ack");
|
||||||
change = change_htlcs(channel, LOCAL, states, ARRAY_SIZE(states),
|
change = change_htlcs(channel, LOCAL, states, ARRAY_SIZE(states),
|
||||||
htlcs);
|
htlcs, "rcvd_revoke_and_ack");
|
||||||
return change & HTLC_LOCAL_F_COMMITTED;
|
return change & HTLC_LOCAL_F_COMMITTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -706,7 +741,8 @@ bool channel_rcvd_commit(struct channel *channel, const struct htlc ***htlcs)
|
|||||||
RCVD_REMOVE_REVOCATION };
|
RCVD_REMOVE_REVOCATION };
|
||||||
|
|
||||||
status_trace("Received commit");
|
status_trace("Received commit");
|
||||||
change = change_htlcs(channel, LOCAL, states, ARRAY_SIZE(states), htlcs);
|
change = change_htlcs(channel, LOCAL, states, ARRAY_SIZE(states), htlcs,
|
||||||
|
"rcvd_commit");
|
||||||
return change & HTLC_LOCAL_F_COMMITTED;
|
return change & HTLC_LOCAL_F_COMMITTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -718,7 +754,8 @@ bool channel_sending_revoke_and_ack(struct channel *channel)
|
|||||||
RCVD_ADD_COMMIT,
|
RCVD_ADD_COMMIT,
|
||||||
RCVD_REMOVE_ACK_COMMIT };
|
RCVD_REMOVE_ACK_COMMIT };
|
||||||
status_trace("Sending revoke_and_ack");
|
status_trace("Sending revoke_and_ack");
|
||||||
change = change_htlcs(channel, REMOTE, states, ARRAY_SIZE(states), NULL);
|
change = change_htlcs(channel, REMOTE, states, ARRAY_SIZE(states), NULL,
|
||||||
|
"sending_revoke_and_ack");
|
||||||
return change & HTLC_REMOTE_F_PENDING;
|
return change & HTLC_REMOTE_F_PENDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -367,4 +367,13 @@ bool channel_sending_revoke_and_ack(struct channel *channel);
|
|||||||
* If true, we can't send a new commit message.
|
* If true, we can't send a new commit message.
|
||||||
*/
|
*/
|
||||||
bool channel_awaiting_revoke_and_ack(const struct channel *channel);
|
bool channel_awaiting_revoke_and_ack(const struct channel *channel);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dump_htlcs: debugging dump of all HTLCs
|
||||||
|
* @channel: the channel
|
||||||
|
* @prefix: the prefix to prepend to each line.
|
||||||
|
*
|
||||||
|
* Uses status_trace() on every HTLC.
|
||||||
|
*/
|
||||||
|
void dump_htlcs(const struct channel *channel, const char *prefix);
|
||||||
#endif /* LIGHTNING_DAEMON_CHANNEL_H */
|
#endif /* LIGHTNING_DAEMON_CHANNEL_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user