Skip to content

Commit

Permalink
cmd/geth, p2p: add support for custom discovery UDP port (ethereum#24979
Browse files Browse the repository at this point in the history
)

This adds a new flag to set the discovery port to be different from
the TCP listener port.

Co-authored-by: Felix Lange <fjl@twurst.com>
  • Loading branch information
2 people authored and cp-wjhan committed Jun 30, 2023
1 parent a763b83 commit 8f10c70
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
1 change: 1 addition & 0 deletions cmd/geth/main.go
Expand Up @@ -125,6 +125,7 @@ var (
utils.TriesInMemoryFlag,
utils.FDLimitFlag,
utils.ListenPortFlag,
utils.DiscoveryPortFlag,
utils.MaxPeersFlag,
utils.MaxPendingPeersFlag,
utils.MiningEnabledFlag,
Expand Down
13 changes: 11 additions & 2 deletions cmd/utils/flags.go
Expand Up @@ -846,6 +846,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{
Expand Down Expand Up @@ -1228,12 +1234,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.
Expand Down
14 changes: 13 additions & 1 deletion p2p/server.go
Expand Up @@ -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.
Expand Down Expand Up @@ -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
}
Expand Down

0 comments on commit 8f10c70

Please sign in to comment.