diff --git a/gossipd/gossip.c b/gossipd/gossip.c index 0e30b1318..229ef292b 100644 --- a/gossipd/gossip.c +++ b/gossipd/gossip.c @@ -569,11 +569,13 @@ static struct io_plan *getchannels_req(struct io_conn *conn, struct daemon *daem entries[num_chans].source = n->out[j]->src->id; entries[num_chans].destination = n->out[j]->dst->id; entries[num_chans].active = n->out[j]->active; - entries[num_chans].delay = n->out[j]->delay; - entries[num_chans].fee_per_kw = n->out[j]->proportional_fee; - entries[num_chans].last_update_timestamp = n->out[j]->last_timestamp; entries[num_chans].flags = n->out[j]->flags; entries[num_chans].short_channel_id = n->out[j]->short_channel_id; + entries[num_chans].last_update_timestamp = n->out[j]->last_timestamp; + if (entries[num_chans].last_update_timestamp >= 0) { + entries[num_chans].fee_per_kw = n->out[j]->proportional_fee; + entries[num_chans].delay = n->out[j]->delay; + } num_chans++; } n = node_map_next(daemon->rstate->nodes, &i); diff --git a/gossipd/routing.c b/gossipd/routing.c index 6c7c12616..f93485114 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -78,6 +78,7 @@ struct node *new_node(struct routing_state *rstate, n->out = tal_arr(n, struct node_connection *, 0); n->alias = NULL; n->node_announcement = NULL; + n->last_timestamp = -1; n->addresses = tal_arr(n, struct ipaddr, 0); node_map_add(rstate->nodes, n); tal_add_destructor(n, destroy_node); @@ -230,10 +231,8 @@ struct node_connection *half_add_connection(struct routing_state *rstate, nc->short_channel_id = *schanid; nc->active = false; nc->flags = flags; + nc->last_timestamp = -1; nc->min_blocks = 0; - nc->proportional_fee = 0; - nc->base_fee = 0; - nc->delay = 0; return nc; } @@ -763,7 +762,7 @@ void handle_channel_update(struct routing_state *rstate, const u8 *update, size_ &short_channel_id)); tal_free(tmpctx); return; - } else if (c->channel_update && c->last_timestamp >= timestamp) { + } else if (c->last_timestamp >= timestamp) { status_trace("Ignoring outdated update."); tal_free(tmpctx); return; @@ -856,7 +855,7 @@ void handle_node_announcement( status_trace("Node not found, was the node_announcement preceeded by at least channel_announcement?"); tal_free(tmpctx); return; - } else if (node->node_announcement && node->last_timestamp >= timestamp) { + } else if (node->last_timestamp >= timestamp) { status_trace("Ignoring node announcement, it's outdated."); tal_free(tmpctx); return; diff --git a/gossipd/routing.h b/gossipd/routing.h index c3dddecae..f5b4db2dd 100644 --- a/gossipd/routing.h +++ b/gossipd/routing.h @@ -24,7 +24,7 @@ struct node_connection { /* Is this connection active? */ bool active; - u32 last_timestamp; + s64 last_timestamp; /* Minimum number of msatoshi in an HTLC */ u32 htlc_minimum_msat; @@ -44,11 +44,12 @@ struct node_connection { struct node { struct pubkey id; + /* -1 means never; other fields undefined */ + s64 last_timestamp; + /* IP/Hostname and port of this node (may be NULL) */ struct ipaddr *addresses; - u32 last_timestamp; - /* Routes connecting to us, from us. */ struct node_connection **in, **out; diff --git a/lightningd/gossip_control.c b/lightningd/gossip_control.c index d05b9e1d3..89badba47 100644 --- a/lightningd/gossip_control.c +++ b/lightningd/gossip_control.c @@ -301,16 +301,18 @@ static bool json_getchannels_reply(struct subd *gossip, const u8 *reply, json_add_pubkey(response, "source", &entries[i].source); json_add_pubkey(response, "destination", &entries[i].destination); - json_add_bool(response, "active", entries[i].active); - json_add_num(response, "fee_per_kw", entries[i].fee_per_kw); - json_add_num(response, "last_update", - entries[i].last_update_timestamp); - json_add_num(response, "flags", entries[i].flags); - json_add_num(response, "delay", entries[i].delay); json_add_string(response, "short_id", tal_fmt(reply, "%d:%d:%d/%d", scid->blocknum, scid->txnum, scid->outnum, entries[i].flags & 0x1)); + json_add_num(response, "flags", entries[i].flags); + json_add_bool(response, "active", entries[i].active); + if (entries[i].last_update_timestamp >= 0) { + json_add_num(response, "last_update", + entries[i].last_update_timestamp); + json_add_num(response, "fee_per_kw", entries[i].fee_per_kw); + json_add_num(response, "delay", entries[i].delay); + } json_object_end(response); } json_array_end(response); diff --git a/lightningd/gossip_msg.c b/lightningd/gossip_msg.c index 25d4a458a..cf1efcdff 100644 --- a/lightningd/gossip_msg.c +++ b/lightningd/gossip_msg.c @@ -45,10 +45,12 @@ void fromwire_gossip_getchannels_entry(const u8 **pptr, size_t *max, fromwire_pubkey(pptr, max, &entry->source); fromwire_pubkey(pptr, max, &entry->destination); entry->active = fromwire_bool(pptr, max); - entry->fee_per_kw = fromwire_u32(pptr, max); - entry->delay = fromwire_u32(pptr, max); - entry->last_update_timestamp = fromwire_u32(pptr, max); entry->flags = fromwire_u16(pptr, max); + entry->last_update_timestamp = fromwire_u64(pptr, max); + if (entry->last_update_timestamp >= 0) { + entry->fee_per_kw = fromwire_u32(pptr, max); + entry->delay = fromwire_u32(pptr, max); + } } void towire_gossip_getchannels_entry( @@ -58,8 +60,10 @@ void towire_gossip_getchannels_entry( towire_pubkey(pptr, &entry->source); towire_pubkey(pptr, &entry->destination); towire_bool(pptr, entry->active); - towire_u32(pptr, entry->fee_per_kw); - towire_u32(pptr, entry->delay); - towire_u32(pptr, entry->last_update_timestamp); towire_u16(pptr, entry->flags); + towire_u64(pptr, entry->last_update_timestamp); + if (entry->last_update_timestamp >= 0) { + towire_u32(pptr, entry->fee_per_kw); + towire_u32(pptr, entry->delay); + } } diff --git a/lightningd/gossip_msg.h b/lightningd/gossip_msg.h index ee46b70a0..ea32c1e75 100644 --- a/lightningd/gossip_msg.h +++ b/lightningd/gossip_msg.h @@ -11,12 +11,13 @@ struct gossip_getnodes_entry { struct gossip_getchannels_entry { struct pubkey source, destination; - u32 fee_per_kw; bool active; struct short_channel_id short_channel_id; - u32 last_update_timestamp; - u32 delay; u16 flags; + s64 last_update_timestamp; /* -1 means never */ + /* These are only set if last_update_timestamp >= 0 */ + u32 delay; + u32 fee_per_kw; }; void fromwire_gossip_getnodes_entry(const tal_t *ctx, const u8 **pptr,