diff --git a/config.go b/config.go index b22cbf2f9..fdb4344dd 100644 --- a/config.go +++ b/config.go @@ -328,6 +328,8 @@ type config struct { WtClient *lncfg.WtClient `group:"wtclient" namespace:"wtclient"` Watchtower *lncfg.Watchtower `group:"watchtower" namespace:"watchtower"` + + LegacyProtocol *lncfg.LegacyProtocol `group:"legacyprotocol" namespace:"legacyprotocol"` } // loadConfig initializes and parses the config using a config file and command diff --git a/lncfg/protocol_legacy_off.go b/lncfg/protocol_legacy_off.go new file mode 100644 index 000000000..6f5660e9a --- /dev/null +++ b/lncfg/protocol_legacy_off.go @@ -0,0 +1,16 @@ +// +build !dev + +package lncfg + +// LegacyProtocol is a struct that we use to be able to test backwards +// compatibility of protocol additions, while defaulting to the latest within +// lnd. +type LegacyProtocol struct { +} + +// LegacyOnion returns true if the old legacy onion format should be used when +// we're an intermediate or final hop. This controls if we set the +// TLVOnionPayloadOptional bit or not. +func (l *LegacyProtocol) LegacyOnion() bool { + return false +} diff --git a/lncfg/protocol_legacy_on.go b/lncfg/protocol_legacy_on.go new file mode 100644 index 000000000..52bd93880 --- /dev/null +++ b/lncfg/protocol_legacy_on.go @@ -0,0 +1,20 @@ +// +build dev + +package lncfg + +// LegacyProtocol is a struct that we use to be able to test backwards +// compatibility of protocol additions, while defaulting to the latest within +// lnd. +type LegacyProtocol struct { + // Onion if set to true, then we won't signal TLVOnionPayloadOptional. + // As a result, nodes that include us in the route won't use the new + // modern onion framing. + Onion bool `long:"onion" description:"force node to not advertise the new modern TLV onion format"` +} + +// LegacyOnion returns true if the old legacy onion format should be used when +// we're an intermediate or final hop. This controls if we set the +// TLVOnionPayloadOptional bit or not. +func (l *LegacyProtocol) LegacyOnion() bool { + return l.Onion +} diff --git a/server.go b/server.go index d1b89ccda..7a37e7695 100644 --- a/server.go +++ b/server.go @@ -312,7 +312,12 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB, } globalFeatures := lnwire.NewRawFeatureVector() - globalFeatures.Set(lnwire.TLVOnionPayloadOptional) + + // Only if we're not being forced to use the legacy onion format, will + // we signal our knowledge of the new TLV onion format. + if !cfg.LegacyProtocol.LegacyOnion() { + globalFeatures.Set(lnwire.TLVOnionPayloadOptional) + } var serializedPubKey [33]byte copy(serializedPubKey[:], privKey.PubKey().SerializeCompressed())