Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
170eb3ac
Commit
170eb3ac
authored
Feb 13, 2015
by
Felix Lange
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
p2p/discover: map listening port using configured mechanism
parent
82f0bd90
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
35 additions
and
18 deletions
+35
-18
main.go
cmd/bootnode/main.go
+10
-3
udp.go
p2p/discover/udp.go
+17
-6
udp_test.go
p2p/discover/udp_test.go
+7
-7
server.go
p2p/server.go
+1
-2
No files found.
cmd/bootnode/main.go
View file @
170eb3ac
...
...
@@ -30,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/p2p/discover"
"github.com/ethereum/go-ethereum/p2p/nat"
)
func
main
()
{
...
...
@@ -38,8 +39,10 @@ func main() {
genKey
=
flag
.
String
(
"genkey"
,
""
,
"generate a node key and quit"
)
nodeKeyFile
=
flag
.
String
(
"nodekey"
,
""
,
"private key filename"
)
nodeKeyHex
=
flag
.
String
(
"nodekeyhex"
,
""
,
"private key as hex (for testing)"
)
nodeKey
*
ecdsa
.
PrivateKey
err
error
natdesc
=
flag
.
String
(
"nat"
,
"none"
,
"port mapping mechanism (any|none|upnp|pmp|extip:<IP>)"
)
nodeKey
*
ecdsa
.
PrivateKey
err
error
)
flag
.
Parse
()
logger
.
AddLogSystem
(
logger
.
NewStdLogSystem
(
os
.
Stdout
,
log
.
LstdFlags
,
logger
.
DebugLevel
))
...
...
@@ -49,6 +52,10 @@ func main() {
os
.
Exit
(
0
)
}
natm
,
err
:=
nat
.
Parse
(
*
natdesc
)
if
err
!=
nil
{
log
.
Fatalf
(
"-nat: %v"
,
err
)
}
switch
{
case
*
nodeKeyFile
==
""
&&
*
nodeKeyHex
==
""
:
log
.
Fatal
(
"Use -nodekey or -nodekeyhex to specify a private key"
)
...
...
@@ -64,7 +71,7 @@ func main() {
}
}
if
_
,
err
:=
discover
.
ListenUDP
(
nodeKey
,
*
listenAddr
);
err
!=
nil
{
if
_
,
err
:=
discover
.
ListenUDP
(
nodeKey
,
*
listenAddr
,
natm
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
select
{}
...
...
p2p/discover/udp.go
View file @
170eb3ac
...
...
@@ -10,6 +10,7 @@ import (
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/p2p/nat"
"github.com/ethereum/go-ethereum/rlp"
)
...
...
@@ -82,6 +83,7 @@ type udp struct {
addpending
chan
*
pending
replies
chan
reply
closing
chan
struct
{}
nat
nat
.
Interface
*
Table
}
...
...
@@ -121,17 +123,26 @@ type reply struct {
}
// ListenUDP returns a new table that listens for UDP packets on laddr.
func
ListenUDP
(
priv
*
ecdsa
.
PrivateKey
,
laddr
string
)
(
*
Table
,
error
)
{
net
,
realaddr
,
err
:=
listen
(
priv
,
laddr
)
func
ListenUDP
(
priv
*
ecdsa
.
PrivateKey
,
laddr
string
,
natm
nat
.
Interface
)
(
*
Table
,
error
)
{
t
,
realaddr
,
err
:=
listen
(
priv
,
laddr
,
natm
)
if
err
!=
nil
{
return
nil
,
err
}
net
.
Table
=
newTable
(
net
,
PubkeyID
(
&
priv
.
PublicKey
),
realaddr
)
log
.
Debugf
(
"Listening, %v
\n
"
,
net
.
self
)
return
net
.
Table
,
nil
if
natm
!=
nil
{
if
!
realaddr
.
IP
.
IsLoopback
()
{
go
nat
.
Map
(
natm
,
t
.
closing
,
"udp"
,
realaddr
.
Port
,
realaddr
.
Port
,
"ethereum discovery"
)
}
// TODO: react to external IP changes over time.
if
ext
,
err
:=
natm
.
ExternalIP
();
err
==
nil
{
realaddr
=
&
net
.
UDPAddr
{
IP
:
ext
,
Port
:
realaddr
.
Port
}
}
}
t
.
Table
=
newTable
(
t
,
PubkeyID
(
&
priv
.
PublicKey
),
realaddr
)
log
.
Infoln
(
"Listening, "
,
t
.
self
)
return
t
.
Table
,
nil
}
func
listen
(
priv
*
ecdsa
.
PrivateKey
,
laddr
string
)
(
*
udp
,
*
net
.
UDPAddr
,
error
)
{
func
listen
(
priv
*
ecdsa
.
PrivateKey
,
laddr
string
,
nat
nat
.
Interface
)
(
*
udp
,
*
net
.
UDPAddr
,
error
)
{
addr
,
err
:=
net
.
ResolveUDPAddr
(
"udp"
,
laddr
)
if
err
!=
nil
{
return
nil
,
nil
,
err
...
...
p2p/discover/udp_test.go
View file @
170eb3ac
...
...
@@ -18,8 +18,8 @@ func init() {
func
TestUDP_ping
(
t
*
testing
.
T
)
{
t
.
Parallel
()
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n2
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
n2
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
defer
n1
.
Close
()
defer
n2
.
Close
()
...
...
@@ -48,8 +48,8 @@ func find(tab *Table, id NodeID) *Node {
func
TestUDP_findnode
(
t
*
testing
.
T
)
{
t
.
Parallel
()
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n2
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
n2
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
defer
n1
.
Close
()
defer
n2
.
Close
()
...
...
@@ -98,7 +98,7 @@ func TestUDP_replytimeout(t *testing.T) {
}
defer
fd
.
Close
()
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
defer
n1
.
Close
()
n2
:=
n1
.
bumpOrAdd
(
randomID
(
n1
.
self
.
ID
,
10
),
fd
.
LocalAddr
()
.
(
*
net
.
UDPAddr
))
...
...
@@ -116,8 +116,8 @@ func TestUDP_replytimeout(t *testing.T) {
func
TestUDP_findnodeMultiReply
(
t
*
testing
.
T
)
{
t
.
Parallel
()
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n2
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
)
n1
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
n2
,
_
:=
ListenUDP
(
newkey
(),
"127.0.0.1:0"
,
nil
)
udp2
:=
n2
.
net
.
(
*
udp
)
defer
n1
.
Close
()
defer
n2
.
Close
()
...
...
p2p/server.go
View file @
170eb3ac
...
...
@@ -182,7 +182,7 @@ func (srv *Server) Start() (err error) {
}
// dial stuff
dt
,
err
:=
discover
.
ListenUDP
(
srv
.
PrivateKey
,
srv
.
ListenAddr
)
dt
,
err
:=
discover
.
ListenUDP
(
srv
.
PrivateKey
,
srv
.
ListenAddr
,
srv
.
NAT
)
if
err
!=
nil
{
return
err
}
...
...
@@ -194,7 +194,6 @@ func (srv *Server) Start() (err error) {
srv
.
loopWG
.
Add
(
1
)
go
srv
.
dialLoop
()
}
if
srv
.
NoDial
&&
srv
.
ListenAddr
==
""
{
srvlog
.
Warnln
(
"I will be kind-of useless, neither dialing nor listening."
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment