LocalConnection shouldn't have to know about remote UDP address
...and generally know less about how overlays establish connectivity.
This commit is contained in:
1 parent
e7ff6a2191
commit
18fe553d23
5 files changed
+32
-23
No files matched your search
@@ -190,16 +190,11 @@ func (conn *LocalConnection) run(actionChan <-chan ConnectionAction, finished ch
|
||||
|
||||
conn.Log("connection ready; using protocol version", conn.version)
|
||||
|
||||
var remoteAddr *net.UDPAddr
|
||||
if conn.outbound {
|
||||
tcpAddr := conn.TCPConn.RemoteAddr().(*net.TCPAddr)
|
||||
remoteAddr = &net.UDPAddr{IP: tcpAddr.IP, Port: tcpAddr.Port, Zone: tcpAddr.Zone}
|
||||
}
|
||||
|
||||
params := ForwarderParams{
|
||||
RemotePeer: conn.remote,
|
||||
LocalIP: conn.TCPConn.LocalAddr().(*net.TCPAddr).IP,
|
||||
RemoteAddr: remoteAddr,
|
||||
LocalAddr: conn.TCPConn.LocalAddr().(*net.TCPAddr),
|
||||
RemoteAddr: conn.TCPConn.RemoteAddr().(*net.TCPAddr),
|
||||
Outbound: conn.outbound,
|
||||
ConnUID: conn.uid,
|
||||
Crypto: conn.forwarderCrypto(),
|
||||
SendControlMessage: conn.sendOverlayControlMessage,
|
||||
|
||||
+6
-5
@@ -523,15 +523,16 @@ func (fastdp fastDatapathOverlay) MakeForwarder(params ForwarderParams) (Overlay
|
||||
}
|
||||
|
||||
vxlanVportID := fastdp.mainVxlanVportID
|
||||
remoteAddr := params.RemoteAddr
|
||||
if remoteAddr != nil {
|
||||
var remoteAddr *net.UDPAddr
|
||||
|
||||
if params.Outbound {
|
||||
remoteAddr = makeUDPAddr(params.RemoteAddr)
|
||||
// The provided address contains the main weave port
|
||||
// number to connect to. We need to derive the vxlan
|
||||
// port number from that.
|
||||
vxlanRemoteAddr := *params.RemoteAddr
|
||||
vxlanRemoteAddr := *remoteAddr
|
||||
vxlanRemoteAddr.Port++
|
||||
remoteAddr = &vxlanRemoteAddr
|
||||
|
||||
var err error
|
||||
vxlanVportID, err = fastdp.getVxlanVportID(remoteAddr.Port)
|
||||
if err != nil {
|
||||
@@ -539,7 +540,7 @@ func (fastdp fastDatapathOverlay) MakeForwarder(params ForwarderParams) (Overlay
|
||||
}
|
||||
}
|
||||
|
||||
localIP, err := ipv4Bytes(params.LocalIP)
|
||||
localIP, err := ipv4Bytes(params.LocalAddr.IP)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
+12
-8
@@ -29,15 +29,19 @@ type Overlay interface {
|
||||
type ForwarderParams struct {
|
||||
RemotePeer *Peer
|
||||
|
||||
// The local IP address to use for sending. Derived from the
|
||||
// local address of the corresponding TCP socket, so may
|
||||
// differ for different forwarders.
|
||||
LocalIP net.IP
|
||||
// The local address of the corresponding TCP connection. Used to
|
||||
// derive the local IP address for sending. May differ for
|
||||
// different forwarders.
|
||||
LocalAddr *net.TCPAddr
|
||||
|
||||
// The remote address to send to. nil if unknown, i.e. an
|
||||
// incoming connection, in which case the Overlay needs to
|
||||
// discover it (e.g. from incoming datagrams).
|
||||
RemoteAddr *net.UDPAddr
|
||||
// The remote address of the corresponding TCP connection. Used to
|
||||
// determine the address to send to, but only if the TCP
|
||||
// connection is outbound. Otherwise the Overlay needs to discover
|
||||
// it (e.g. from incoming datagrams).
|
||||
RemoteAddr *net.TCPAddr
|
||||
|
||||
// Is the corresponding TCP connection outbound?
|
||||
Outbound bool
|
||||
|
||||
// Unique identifier for this connection
|
||||
ConnUID uint64
|
||||
|
||||
+7
-2
@@ -365,6 +365,11 @@ func (sleeve *SleeveOverlay) MakeForwarder(params ForwarderParams) (OverlayForwa
|
||||
confirmedChan := make(chan struct{})
|
||||
finishedChan := make(chan struct{})
|
||||
|
||||
var remoteAddr *net.UDPAddr
|
||||
if params.Outbound {
|
||||
remoteAddr = makeUDPAddr(params.RemoteAddr)
|
||||
}
|
||||
|
||||
fwd := &sleeveForwarder{
|
||||
sleeve: sleeve,
|
||||
remotePeer: params.RemotePeer,
|
||||
@@ -379,13 +384,13 @@ func (sleeve *SleeveOverlay) MakeForwarder(params ForwarderParams) (OverlayForwa
|
||||
finishedChan: finishedChan,
|
||||
establishedChan: make(chan struct{}),
|
||||
errorChan: make(chan error, 1),
|
||||
remoteAddr: params.RemoteAddr,
|
||||
remoteAddr: remoteAddr,
|
||||
mtu: DefaultMTU,
|
||||
crypto: crypto,
|
||||
maxPayload: DefaultMTU - UDPOverhead,
|
||||
overheadDF: UDPOverhead + crypto.EncDF.PacketOverhead() +
|
||||
crypto.EncDF.FrameOverhead() + EthernetOverhead,
|
||||
senderDF: newUDPSenderDF(params.LocalIP, sleeve.localPort),
|
||||
senderDF: newUDPSenderDF(params.LocalAddr.IP, sleeve.localPort),
|
||||
}
|
||||
|
||||
go fwd.run(aggChan, aggDFChan, specialChan, controlMsgChan,
|
||||
|
||||
@@ -104,6 +104,10 @@ func intmac(key uint64) (r net.HardwareAddr) {
|
||||
return
|
||||
}
|
||||
|
||||
func makeUDPAddr(addr *net.TCPAddr) *net.UDPAddr {
|
||||
return &net.UDPAddr{IP: addr.IP, Port: addr.Port, Zone: addr.Zone}
|
||||
}
|
||||
|
||||
type ListOfPeers []*Peer
|
||||
|
||||
func (lop ListOfPeers) Len() int {
|
||||
|
||||
Reference in new issue
Block a user