Skip to content

Commit a53cb52

Browse files
committed
wip
1 parent f1d3d0e commit a53cb52

File tree

7 files changed

+55
-25
lines changed

7 files changed

+55
-25
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,3 +237,6 @@
237237
path = vendor/nim-quic
238238
url = https://github.com/vacp2p/nim-quic
239239
branch = main
240+
[submodule "vendor/nim-lsquic"]
241+
path = vendor/nim-lsquic
242+
url = https://github.com/vacp2p/nim-lsquic.git

beacon_chain/conf.nim

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,18 @@ type
299299
defaultValueDesc: $defaultEth2TcpPortDesc
300300
name: "tcp-port" .}: Port
301301

302+
quicEnabled* {.
303+
hidden
304+
desc: "Enable QUIC transport"
305+
defaultValue: true # TODO: set to false by default
306+
name: "debug-quic" .}: bool
307+
302308
quicPort* {.
309+
hidden
303310
desc: "Listening UDP port for Ethereum LibP2P traffic over QUIC"
304311
defaultValue: defaultEth2QuicPort
305312
defaultValueDesc: $defaultEth2QuicPortDesc
306-
name: "quic-port" .}: Port
313+
name: "debug-quic-port" .}: Port
307314

308315
udpPort* {.
309316
desc: "Listening UDP port for node discovery"

beacon_chain/conf_light_client.nim

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,18 @@ type LightClientConf* = object
6969
defaultValueDesc: $defaultEth2TcpPortDesc
7070
name: "tcp-port" .}: Port
7171

72+
quicEnabled* {.
73+
hidden
74+
desc: "Enable QUIC transport"
75+
defaultValue: true # TODO: set to false by default
76+
name: "debug-quic" .}: bool
77+
7278
quicPort* {.
79+
hidden
7380
desc: "Listening UDP port for Ethereum LibP2P traffic over QUIC"
7481
defaultValue: defaultEth2QuicPort
7582
defaultValueDesc: $defaultEth2QuicPortDesc
76-
name: "quic-port" .}: Port
83+
name: "debug-quic-port" .}: Port
7784

7885
udpPort* {.
7986
desc: "Listening UDP port for node discovery"

beacon_chain/networking/eth2_network.nim

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2232,7 +2232,7 @@ template tcpEndPoint(address, port): auto =
22322232
MultiAddress.init(address, tcpProtocol, port)
22332233

22342234
template quicEndPoint(address, port): auto =
2235-
MultiAddress.init(address, udpProtocol, port) & MultiAddress.init("/quic-v1")
2235+
MultiAddress.init(address, udpProtocol, port) & MultiAddress.init("/quic-v1").tryGet()
22362236

22372237
func initNetKeys(privKey: PrivateKey): NetKeyPair =
22382238
let pubKey = privKey.getPublicKey().expect("working public key from random")
@@ -2338,18 +2338,22 @@ proc newBeaconSwitch(
23382338
var sb = SwitchBuilder.new()
23392339
# Order of multiplexers matters, the first will be default
23402340
try:
2341-
ok sb
2341+
sb = sb
23422342
.withPrivateKey(seckey)
23432343
.withAddresses(addresses)
23442344
.withRng(rng)
23452345
.withNoise()
2346-
.withQuicTransport()
2346+
# TODO: uncomment the following two lines to enable TCP back
2347+
#.withMplex(chronos.minutes(5), chronos.minutes(5))
2348+
#.withTcpTransport({ServerFlags.ReuseAddr})
23472349
.withMaxConnections(config.maxPeers)
23482350
.withAgentVersion(config.agentString)
2349-
.withMplex(chronos.minutes(5), chronos.minutes(5))
2350-
.withTcpTransport({ServerFlags.ReuseAddr})
23512351
.withServices(@[service])
2352-
.build()
2352+
2353+
if config.quicEnabled:
2354+
sb = sb.withQuicTransport()
2355+
2356+
ok sb.build()
23532357
except LPError as exc:
23542358
err(exc.msg)
23552359

@@ -2373,11 +2377,20 @@ proc createEth2Node*(
23732377
else:
23742378
getAutoAddress(Port(0)).toIpAddress()
23752379

2376-
# TODO: setupAddress only receives a single tcpPort and udpPort,
2377-
# We need a way to pass the quic port
2378-
(extIp, extTcpPort, extUdpPort) =
2379-
setupAddress(config.nat, listenAddress, config.tcpPort,
2380-
config.quicPort, config.udpPort, clientId)
2380+
var ports = newSeq[PortSpec]()
2381+
ports.add((config.tcpPort, PortProtocol.TCP))
2382+
ports.add((config.udpPort, PortProtocol.UDP))
2383+
if config.quicEnabled:
2384+
ports.add((config.quicPort, PortProtocol.UDP))
2385+
2386+
let
2387+
(extIp, extPorts) = setupAddress(config.nat, listenAddress, ports, clientId)
2388+
2389+
# TODO: uncommment this line and remove the next to add back TCP support
2390+
extTcpPort = Opt.none(Port)
2391+
# extTcpPort = extPorts[0].toPort()
2392+
extUdpPort = extPorts[1].toPort()
2393+
extQuicPort = if config.quicEnabled: extPorts[2].toPort() else: Opt.none(Port)
23812394

23822395
directPeers = block:
23832396
var res: DirectPeers
@@ -2402,16 +2415,15 @@ proc createEth2Node*(
24022415
info "Adding privileged direct peer", peerId, address
24032416
res
24042417

2405-
hostAddress = @[
2406-
quicEndpoint(listenAddress, config.quicUdpPort),
2407-
tcpEndPoint(listenAddress, config.tcpPort)
2408-
]
2418+
var hostAddress = @[tcpEndPoint(listenAddress, config.tcpPort)]
24092419

2410-
var announcedAddresses = newSeq[Multiaddr]()
2411-
if not(extIp.isNone() or extTcpPort.isNone()):
2412-
announcedAddresses.add tcpEndPoint(extIp.get(), extTcpPort.get())
2413-
if not(extIp.isNone() or extQuicUdpPort.isNone()):
2414-
announcedAddresses.add quicEndpoint(extIp.get(), extQuicUdpPort.get())
2420+
var announcedAddresses = newSeq[Multiaddress]()
2421+
# TODO: uncomment the following lines to add back TCP support
2422+
#if not(extIp.isNone() or extTcpPort.isNone()):
2423+
# announcedAddresses.add tcpEndPoint(extIp.get(), extTcpPort.get().port)
2424+
if config.quicEnabled and not(extIp.isNone() or extQuicPort.isNone()):
2425+
hostAddress.add(quicEndpoint(listenAddress, config.quicPort))
2426+
announcedAddresses.add(quicEndpoint(extIp.get(), extQuicPort.get()))
24152427

24162428
debug "Initializing networking", hostAddress,
24172429
network_public_key = netKeys.pubkey,
@@ -2490,7 +2502,7 @@ proc createEth2Node*(
24902502

24912503
let node = Eth2Node.new(
24922504
config, cfg, enrForkId, discoveryForkId, forkDigests, getBeaconTime, switch, pubsub, extIp,
2493-
extTcpPort, extUdpPort, netKeys.seckey.asEthKey,
2505+
extTcpPort, extQuicPort, extUdpPort, netKeys.seckey.asEthKey,
24942506
discovery = config.discv5Enabled, directPeers, announcedAddresses,
24952507
rng = rng)
24962508

vendor/nim-libp2p

Submodule nim-libp2p updated 390 files

vendor/nim-lsquic

Submodule nim-lsquic added at 4e362c0

0 commit comments

Comments
 (0)