From 9a5c1000c73c39e036973f4dfa828acc707e6d7c Mon Sep 17 00:00:00 2001 From: zeim839 <50573884+zeim839@users.noreply.github.com> Date: Tue, 28 Jun 2022 11:25:47 -0400 Subject: [PATCH] cmd/geth, p2p: add support for custom discovery UDP port (#24979) This adds a new flag to set the discovery port to be different from the TCP listener port. Co-authored-by: Felix Lange --- cmd/geth/main.go | 1 + cmd/utils/flags.go | 13 +++++++++++-- p2p/server.go | 14 +++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 1ae7116eda79..b0a849a3ba6a 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -119,6 +119,7 @@ var ( utils.CachePreimagesFlag, utils.FDLimitFlag, utils.ListenPortFlag, + utils.DiscoveryPortFlag, utils.MaxPeersFlag, utils.MaxPendingPeersFlag, utils.MiningEnabledFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 5cebaba43ecf..ce116b574643 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -835,6 +835,12 @@ var ( Usage: "Sets DNS discovery entry points (use \"\" to disable DNS)", Category: flags.NetworkingCategory, } + DiscoveryPortFlag = &cli.IntFlag{ + Name: "discovery.port", + Usage: "Use a custom UDP port for P2P discovery", + Value: 30303, + Category: flags.NetworkingCategory, + } // Console JSpathFlag = &flags.DirectoryFlag{ @@ -1116,12 +1122,15 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { } } -// setListenAddress creates a TCP listening address string from set command -// line flags. +// setListenAddress creates TCP/UDP listening address strings from set command +// line flags func setListenAddress(ctx *cli.Context, cfg *p2p.Config) { if ctx.IsSet(ListenPortFlag.Name) { cfg.ListenAddr = fmt.Sprintf(":%d", ctx.Int(ListenPortFlag.Name)) } + if ctx.IsSet(DiscoveryPortFlag.Name) { + cfg.DiscAddr = fmt.Sprintf(":%d", ctx.Int(DiscoveryPortFlag.Name)) + } } // setNAT creates a port mapper from command line flags. diff --git a/p2p/server.go b/p2p/server.go index 898201f8f7fc..19f7935ffcae 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -136,6 +136,10 @@ type Config struct { // the server is started. ListenAddr string + // If DiscAddr is set to a non-nil value, the server will use ListenAddr + // for TCP and DiscAddr for the UDP discovery protocol. + DiscAddr string + // If set to a non-nil value, the given NAT port mapper // is used to make the listening port available to the // Internet. @@ -549,7 +553,15 @@ func (srv *Server) setupDiscovery() error { return nil } - addr, err := net.ResolveUDPAddr("udp", srv.ListenAddr) + listenAddr := srv.ListenAddr + + // Use an alternate listening address for UDP if + // a custom discovery address is configured. + if srv.DiscAddr != "" { + listenAddr = srv.DiscAddr + } + + addr, err := net.ResolveUDPAddr("udp", listenAddr) if err != nil { return err }