From 7b2641ed0d154cd06c29772f5fba3221d1ff3e47 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 24 Jul 2018 15:48:58 +0930 Subject: [PATCH] gossipd: remove peer-related fields and wire messages. This completes the removal of peer-related messages. Signed-off-by: Rusty Russell --- gossipd/gossip.c | 44 ++-------- gossipd/gossip_wire.csv | 109 ------------------------- gossipd/routing.c | 4 +- gossipd/routing.h | 6 +- gossipd/test/run-bench-find_route.c | 2 +- gossipd/test/run-find_route-specific.c | 2 +- gossipd/test/run-find_route.c | 2 +- lightningd/gossip_control.c | 44 +--------- 8 files changed, 13 insertions(+), 200 deletions(-) diff --git a/gossipd/gossip.c b/gossipd/gossip.c index 338871ef7..029878fca 100644 --- a/gossipd/gossip.c +++ b/gossipd/gossip.c @@ -101,8 +101,8 @@ struct daemon { u32 broadcast_interval; - /* Local and global features to offer to peers. */ - u8 *localfeatures, *globalfeatures; + /* Global features to list in node_announcement. */ + u8 *globalfeatures; u8 alias[33]; u8 rgb[3]; @@ -1872,29 +1872,17 @@ static struct io_plan *gossip_init(struct daemon_conn *master, struct bitcoin_blkid chain_hash; u32 update_channel_interval; - /* FIXME: Remove these from init msg */ - bool dev_allow_localhost; - struct wireaddr_internal *proposed_wireaddr; - enum addr_listen_announce *proposed_listen_announce; - struct wireaddr *proxyaddr; - bool reconnect, use_proxy_always, use_dns; - char *tor_password; - if (!fromwire_gossipctl_init( daemon, msg, &daemon->broadcast_interval, &chain_hash, &daemon->id, &daemon->globalfeatures, - &daemon->localfeatures, &proposed_wireaddr, - &proposed_listen_announce, daemon->rgb, - daemon->alias, &update_channel_interval, &reconnect, - &proxyaddr, &use_proxy_always, - &dev_allow_localhost, &use_dns, - &tor_password, &daemon->announcable)) { + daemon->rgb, + daemon->alias, &update_channel_interval, + &daemon->announcable)) { master_badmsg(WIRE_GOSSIPCTL_INIT, msg); } /* Prune time is twice update time */ daemon->rstate = new_routing_state(daemon, &chain_hash, &daemon->id, - update_channel_interval * 2, - dev_allow_localhost); + update_channel_interval * 2); /* Load stored gossip messages */ gossip_store_load(daemon->rstate, daemon->rstate->store); @@ -2118,40 +2106,20 @@ static struct io_plan *recv_req(struct io_conn *conn, struct daemon_conn *master break; #endif /* !DEVELOPER */ - /* These are handled by channeld */ - case WIRE_GOSSIPCTL_ACTIVATE: - case WIRE_GOSSIPCTL_RELEASE_PEER: - case WIRE_GOSSIPCTL_HAND_BACK_PEER: - case WIRE_GOSSIPCTL_CONNECT_TO_PEER: - case WIRE_GOSSIPCTL_PEER_ADDRHINT: - case WIRE_GOSSIPCTL_PEER_IMPORTANT: - case WIRE_GOSSIPCTL_PEER_DISCONNECTED: - case WIRE_GOSSIP_GETPEERS_REQUEST: - case WIRE_GOSSIPCTL_PEER_DISCONNECT: - break; - /* We send these, we don't receive them */ - case WIRE_GOSSIPCTL_RELEASE_PEER_REPLY: - case WIRE_GOSSIPCTL_RELEASE_PEER_REPLYFAIL: case WIRE_GOSSIP_GETNODES_REPLY: case WIRE_GOSSIP_GETROUTE_REPLY: case WIRE_GOSSIP_GETCHANNELS_REPLY: - case WIRE_GOSSIP_GETPEERS_REPLY: case WIRE_GOSSIP_PING_REPLY: case WIRE_GOSSIP_SCIDS_REPLY: case WIRE_GOSSIP_QUERY_CHANNEL_RANGE_REPLY: case WIRE_GOSSIP_RESOLVE_CHANNEL_REPLY: - case WIRE_GOSSIP_PEER_CONNECTED: - case WIRE_GOSSIPCTL_CONNECT_TO_PEER_RESULT: - case WIRE_GOSSIP_PEER_NONGOSSIP: case WIRE_GOSSIP_GET_UPDATE: case WIRE_GOSSIP_GET_UPDATE_REPLY: case WIRE_GOSSIP_SEND_GOSSIP: case WIRE_GOSSIP_LOCAL_ADD_CHANNEL: case WIRE_GOSSIP_LOCAL_CHANNEL_UPDATE: case WIRE_GOSSIP_GET_TXOUT: - case WIRE_GOSSIPCTL_PEER_DISCONNECT_REPLY: - case WIRE_GOSSIPCTL_PEER_DISCONNECT_REPLYFAIL: break; } diff --git a/gossipd/gossip_wire.csv b/gossipd/gossip_wire.csv index de43bf84d..993e3f50f 100644 --- a/gossipd/gossip_wire.csv +++ b/gossipd/gossip_wire.csv @@ -9,100 +9,12 @@ gossipctl_init,,chain_hash,struct bitcoin_blkid gossipctl_init,,id,struct pubkey gossipctl_init,,gflen,u16 gossipctl_init,,gfeatures,gflen*u8 -gossipctl_init,,lflen,u16 -gossipctl_init,,lfeatures,lflen*u8 -gossipctl_init,,num_wireaddrs,u16 -gossipctl_init,,wireaddrs,num_wireaddrs*struct wireaddr_internal -gossipctl_init,,listen_announce,num_wireaddrs*enum addr_listen_announce gossipctl_init,,rgb,3*u8 gossipctl_init,,alias,32*u8 gossipctl_init,,update_channel_interval,u32 -gossipctl_init,,reconnect,bool -gossipctl_init,,tor_proxyaddr,?struct wireaddr -gossipctl_init,,use_tor_proxy_always,bool -gossipctl_init,,dev_allow_localhost,bool -gossipctl_init,,use_dns,bool -gossipctl_init,,tor_password,wirestring gossipctl_init,,num_announcable,u16 gossipctl_init,,announcable,num_announcable*struct wireaddr -# Activate the gossip daemon, so others can connect. -gossipctl_activate,3025 -# Do we listen? -gossipctl_activate,,listen,bool - -# Master -> gossipd: Optional hint for where to find peer. -gossipctl_peer_addrhint,3014 -gossipctl_peer_addrhint,,id,struct pubkey -gossipctl_peer_addrhint,,addr,struct wireaddr_internal - -# Master -> gossipd: connect to a peer. -gossipctl_connect_to_peer,3001 -gossipctl_connect_to_peer,,id,struct pubkey - -# Gossipd->master: result (not a reply since it can be out-of-order, but -# you will get one reply for every request). -gossipctl_connect_to_peer_result,3020 -gossipctl_connect_to_peer_result,,id,struct pubkey -# True it connected. -gossipctl_connect_to_peer_result,,connected,bool -# Otherwise, why we can't reach them. -gossipctl_connect_to_peer_result,,failreason,wirestring - -# Master -> gossipd: try to always maintain connection to this peer (or not) -gossipctl_peer_important,3010 -gossipctl_peer_important,,id,struct pubkey -gossipctl_peer_important,,important,bool - -# Gossipd -> master: we got a peer. Two fds: peer and gossip -gossip_peer_connected,3002 -gossip_peer_connected,,id,struct pubkey -gossip_peer_connected,,addr,struct wireaddr_internal -gossip_peer_connected,,crypto_state,struct crypto_state -gossip_peer_connected,,gflen,u16 -gossip_peer_connected,,gfeatures,gflen*u8 -gossip_peer_connected,,lflen,u16 -gossip_peer_connected,,lfeatures,lflen*u8 - -# Gossipd -> master: peer sent non-gossip packet. Two fds: peer and gossip -gossip_peer_nongossip,3003 -gossip_peer_nongossip,,id,struct pubkey -gossip_peer_nongossip,,addr,struct wireaddr_internal -gossip_peer_nongossip,,crypto_state,struct crypto_state -gossip_peer_nongossip,,gflen,u16 -gossip_peer_nongossip,,gfeatures,gflen*u8 -gossip_peer_nongossip,,lflen,u16 -gossip_peer_nongossip,,lfeatures,lflen*u8 -gossip_peer_nongossip,,len,u16 -gossip_peer_nongossip,,msg,len*u8 - -# Master -> gossipd: release a peer (so we can open a channel) -gossipctl_release_peer,3004 -gossipctl_release_peer,,id,struct pubkey - -# Gossipd -> master: reply to gossip_release_peer. Two fds: peer and gossip. -gossipctl_release_peer_reply,3104 -gossipctl_release_peer_reply,,addr,struct wireaddr_internal -gossipctl_release_peer_reply,,crypto_state,struct crypto_state -gossipctl_release_peer_reply,,gflen,u16 -gossipctl_release_peer_reply,,gfeatures,gflen*u8 -gossipctl_release_peer_reply,,lflen,u16 -gossipctl_release_peer_reply,,lfeatures,lflen*u8 - -# Gossipd -> master: reply to gossip_release_peer if we couldn't find the peer. -gossipctl_release_peer_replyfail,3204 - -# master -> gossipd: take back peer, with optional msg. (+peer fd, +gossip fd) -gossipctl_hand_back_peer,3013 -gossipctl_hand_back_peer,,id,struct pubkey -gossipctl_hand_back_peer,,crypto_state,struct crypto_state -gossipctl_hand_back_peer,,len,u16 -gossipctl_hand_back_peer,,msg,len*u8 - -# master -> gossipd: peer has disconnected. -gossipctl_peer_disconnected,3015 -gossipctl_peer_disconnected,,id,struct pubkey - # Pass JSON-RPC getnodes call through gossip_getnodes_request,3005 gossip_getnodes_request,,id,?struct pubkey @@ -188,16 +100,6 @@ gossip_resolve_channel_reply,3109 gossip_resolve_channel_reply,,num_keys,u16 gossip_resolve_channel_reply,,keys,num_keys*struct pubkey -# The main daemon asks for peers -gossip_getpeers_request,3011 -gossip_getpeers_request,,id,?struct pubkey - -gossip_getpeers_reply,3111 -gossip_getpeers_reply,,num,u16 -gossip_getpeers_reply,,id,num*struct pubkey -gossip_getpeers_reply,,addr,num*struct wireaddr_internal -gossip_getpeers_reply,,nodes,num*struct gossip_getnodes_entry - # Channel daemon can ask for updates for a specific channel, for sending # errors. Must be distinct from WIRE_CHANNEL_ANNOUNCEMENT etc. gossip msgs! gossip_get_update,3012 @@ -255,17 +157,6 @@ gossip_routing_failure,,channel_update,len*u8 gossip_mark_channel_unroutable,3022 gossip_mark_channel_unroutable,,channel,struct short_channel_id -# master->gossipd: Request to disconnect from a peer. -gossipctl_peer_disconnect,3023 -gossipctl_peer_disconnect,,id,struct pubkey - -# Gossipd -> master: reply to gossip_peer_disconnect with peer id. -gossipctl_peer_disconnect_reply,3123 - -# Gossipd -> master: reply to gossip_peer_disconnect if we couldn't find the peer. -gossipctl_peer_disconnect_replyfail,3223 -gossipctl_peer_disconnect_replyfail,,isconnected,bool - # master -> gossipd: a potential funding outpoint was spent, please forget the eventual channel gossip_outpoint_spent,3024 gossip_outpoint_spent,,short_channel_id,struct short_channel_id diff --git a/gossipd/routing.c b/gossipd/routing.c index 8feb60d93..b7ee92ca7 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -86,8 +86,7 @@ static struct node_map *empty_node_map(const tal_t *ctx) struct routing_state *new_routing_state(const tal_t *ctx, const struct bitcoin_blkid *chain_hash, const struct pubkey *local_id, - u32 prune_timeout, - bool dev_allow_localhost) + u32 prune_timeout) { struct routing_state *rstate = tal(ctx, struct routing_state); rstate->nodes = empty_node_map(rstate); @@ -96,7 +95,6 @@ struct routing_state *new_routing_state(const tal_t *ctx, rstate->local_id = *local_id; rstate->prune_timeout = prune_timeout; rstate->store = gossip_store_new(rstate, rstate, rstate->broadcasts); - rstate->dev_allow_localhost = dev_allow_localhost; rstate->local_channel_announced = false; list_head_init(&rstate->pending_cannouncement); uintmap_init(&rstate->chanmap); diff --git a/gossipd/routing.h b/gossipd/routing.h index d2fd42d48..4f10d2732 100644 --- a/gossipd/routing.h +++ b/gossipd/routing.h @@ -177,9 +177,6 @@ struct routing_state { * restarts */ struct gossip_store *store; - /* For testing, we announce and accept localhost */ - bool dev_allow_localhost; - /* A map of channels indexed by short_channel_ids */ UINTMAP(struct chan *) chanmap; @@ -204,8 +201,7 @@ struct route_hop { struct routing_state *new_routing_state(const tal_t *ctx, const struct bitcoin_blkid *chain_hash, const struct pubkey *local_id, - u32 prune_timeout, - bool dev_allow_localhost); + u32 prune_timeout); struct chan *new_chan(struct routing_state *rstate, const struct short_channel_id *scid, diff --git a/gossipd/test/run-bench-find_route.c b/gossipd/test/run-bench-find_route.c index 96f6a8da2..d9ec64d26 100644 --- a/gossipd/test/run-bench-find_route.c +++ b/gossipd/test/run-bench-find_route.c @@ -229,7 +229,7 @@ int main(int argc, char *argv[]) | SECP256K1_CONTEXT_SIGN); setup_tmpctx(); - rstate = new_routing_state(tmpctx, &zerohash, &me, 0, false); + rstate = new_routing_state(tmpctx, &zerohash, &me, 0); opt_register_noarg("--perfme", opt_set_bool, &perfme, "Run perfme-start and perfme-stop around benchmark"); diff --git a/gossipd/test/run-find_route-specific.c b/gossipd/test/run-find_route-specific.c index becd2d5d9..7bf0f67ea 100644 --- a/gossipd/test/run-find_route-specific.c +++ b/gossipd/test/run-find_route-specific.c @@ -166,7 +166,7 @@ int main(void) strlen("02ea622d5c8d6143f15ed3ce1d501dd0d3d09d3b1c83a44d0034949f8a9ab60f06"), &c); - rstate = new_routing_state(tmpctx, &zerohash, &a, 0, false); + rstate = new_routing_state(tmpctx, &zerohash, &a, 0); /* [{'active': True, 'short_id': '6990:2:1/1', 'fee_per_kw': 10, 'delay': 5, 'flags': 1, 'destination': '0230ad0e74ea03976b28fda587bb75bdd357a1938af4424156a18265167f5e40ae', 'source': '02ea622d5c8d6143f15ed3ce1d501dd0d3d09d3b1c83a44d0034949f8a9ab60f06', 'last_update': 1504064344}, */ nc = get_or_make_connection(rstate, &c, &b, "6990:2:1"); diff --git a/gossipd/test/run-find_route.c b/gossipd/test/run-find_route.c index f49872869..352de4dd8 100644 --- a/gossipd/test/run-find_route.c +++ b/gossipd/test/run-find_route.c @@ -200,7 +200,7 @@ int main(void) memset(&tmp, 'a', sizeof(tmp)); pubkey_from_privkey(&tmp, &a); - rstate = new_routing_state(tmpctx, &zerohash, &a, 0, false); + rstate = new_routing_state(tmpctx, &zerohash, &a, 0); new_node(rstate, &a); diff --git a/lightningd/gossip_control.c b/lightningd/gossip_control.c index 51dfdea91..e63bf09a7 100644 --- a/lightningd/gossip_control.c +++ b/lightningd/gossip_control.c @@ -130,26 +130,6 @@ static unsigned gossip_msg(struct subd *gossip, const u8 *msg, const int *fds) case WIRE_GOSSIP_LOCAL_CHANNEL_CLOSE: break; - /* These are handled by connectd */ - case WIRE_GOSSIPCTL_ACTIVATE: - case WIRE_GOSSIP_GETPEERS_REQUEST: - case WIRE_GOSSIPCTL_CONNECT_TO_PEER: - case WIRE_GOSSIPCTL_HAND_BACK_PEER: - case WIRE_GOSSIPCTL_RELEASE_PEER: - case WIRE_GOSSIPCTL_PEER_ADDRHINT: - case WIRE_GOSSIPCTL_PEER_DISCONNECT: - case WIRE_GOSSIPCTL_PEER_IMPORTANT: - case WIRE_GOSSIPCTL_PEER_DISCONNECTED: - case WIRE_GOSSIP_GETPEERS_REPLY: - case WIRE_GOSSIPCTL_RELEASE_PEER_REPLY: - case WIRE_GOSSIPCTL_RELEASE_PEER_REPLYFAIL: - case WIRE_GOSSIPCTL_PEER_DISCONNECT_REPLY: - case WIRE_GOSSIPCTL_PEER_DISCONNECT_REPLYFAIL: - case WIRE_GOSSIP_PEER_CONNECTED: - case WIRE_GOSSIP_PEER_NONGOSSIP: - case WIRE_GOSSIPCTL_CONNECT_TO_PEER_RESULT: - break; - case WIRE_GOSSIP_GET_TXOUT: get_txout(gossip, msg); break; @@ -164,13 +144,6 @@ void gossip_init(struct lightningd *ld, int connectd_fd) u8 *msg; int hsmfd; u64 capabilities = HSM_CAP_SIGN_GOSSIP; - struct wireaddr_internal *wireaddrs = ld->proposed_wireaddr; - enum addr_listen_announce *listen_announce = ld->proposed_listen_announce; - bool allow_localhost = false; -#if DEVELOPER - if (ld->dev_allow_localhost) - allow_localhost = true; -#endif msg = towire_hsm_client_hsmfd(tmpctx, &ld->id, 0, capabilities); if (!wire_sync_write(ld->hsm_fd, msg)) @@ -190,25 +163,12 @@ void gossip_init(struct lightningd *ld, int connectd_fd) if (!ld->gossip) err(1, "Could not subdaemon gossip"); - /* If no addr specified, hand wildcard to gossipd */ - if (tal_count(wireaddrs) == 0 && ld->autolisten) { - wireaddrs = tal_arrz(tmpctx, struct wireaddr_internal, 1); - listen_announce = tal_arr(tmpctx, enum addr_listen_announce, 1); - wireaddrs->itype = ADDR_INTERNAL_ALLPROTO; - wireaddrs->u.port = ld->portnum; - *listen_announce = ADDR_LISTEN_AND_ANNOUNCE; - } - msg = towire_gossipctl_init( tmpctx, ld->config.broadcast_interval, &get_chainparams(ld)->genesis_blockhash, &ld->id, get_offered_global_features(tmpctx), - get_offered_local_features(tmpctx), wireaddrs, - listen_announce, ld->rgb, - ld->alias, ld->config.channel_update_interval, ld->reconnect, - ld->proxyaddr, ld->use_proxy_always || ld->pure_tor_setup, - allow_localhost, ld->config.use_dns, - ld->tor_service_password ? ld->tor_service_password : "", + ld->rgb, + ld->alias, ld->config.channel_update_interval, ld->announcable); subd_send_msg(ld->gossip, msg); }