Skip to content

Commit 701aa0d

Browse files
Merge branch 'develop' into neil/mptcp
2 parents 44af68a + 6a94937 commit 701aa0d

File tree

8 files changed

+432
-415
lines changed

8 files changed

+432
-415
lines changed

CHANGELOG.md

+401-360
Large diffs are not rendered by default.

cmd/genkeys/main.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"fmt"
1717
"net"
1818
"runtime"
19+
"time"
1920

2021
"github.com/yggdrasil-network/yggdrasil-go/src/address"
2122
)
@@ -27,6 +28,8 @@ type keySet struct {
2728

2829
func main() {
2930
threads := runtime.GOMAXPROCS(0)
31+
fmt.Println("Threads:", threads)
32+
start := time.Now()
3033
var currentBest ed25519.PublicKey
3134
newKeys := make(chan keySet, threads)
3235
for i := 0; i < threads; i++ {
@@ -36,7 +39,7 @@ func main() {
3639
newKey := <-newKeys
3740
if isBetter(currentBest, newKey.pub) || len(currentBest) == 0 {
3841
currentBest = newKey.pub
39-
fmt.Println("-----")
42+
fmt.Println("-----", time.Since(start))
4043
fmt.Println("Priv:", hex.EncodeToString(newKey.priv))
4144
fmt.Println("Pub:", hex.EncodeToString(newKey.pub))
4245
addr := address.AddrForKey(newKey.pub)

cmd/yggdrasil/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func main() {
6767

6868
case "syslog":
6969
if syslogger, err := gsyslog.NewLogger(gsyslog.LOG_NOTICE, "DAEMON", version.BuildName()); err == nil {
70-
logger = log.New(syslogger, "", log.Flags())
70+
logger = log.New(syslogger, "", log.Flags() &^ (log.Ldate | log.Ltime))
7171
}
7272

7373
default:

contrib/mobile/mobile.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ func (m *Yggdrasil) StartJSON(configjson []byte) error {
7070
}
7171
options = append(options, core.AllowedPublicKey(k[:]))
7272
}
73+
for _, lAddr := range m.config.Listen {
74+
options = append(options, core.ListenAddress(lAddr))
75+
}
7376
var err error
7477
m.core, err = core.New(m.config.Certificate, logger, options...)
7578
if err != nil {
@@ -208,8 +211,11 @@ func (m *Yggdrasil) GetPeersJSON() (result string) {
208211
IP string
209212
}{}
210213
for _, v := range m.core.GetPeers() {
211-
a := address.AddrForKey(v.Key)
212-
ip := net.IP(a[:]).String()
214+
var ip string
215+
if v.Key != nil {
216+
a := address.AddrForKey(v.Key)
217+
ip = net.IP(a[:]).String()
218+
}
213219
peers = append(peers, struct {
214220
core.PeerInfo
215221
IP string

src/core/link.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ func (l *links) listen(u *url.URL, sintf string) (*Listener, error) {
374374
for {
375375
conn, err := listener.Accept()
376376
if err != nil {
377-
continue
377+
return
378378
}
379379
go func(conn net.Conn) {
380380
defer conn.Close()

src/core/tls.go

+3-22
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,27 @@ package core
33
import (
44
"crypto/tls"
55
"crypto/x509"
6-
"fmt"
76
)
87

98
func (c *Core) generateTLSConfig(cert *tls.Certificate) (*tls.Config, error) {
109
config := &tls.Config{
1110
Certificates: []tls.Certificate{*cert},
12-
ClientAuth: tls.RequireAnyClientCert,
11+
ClientAuth: tls.NoClientCert,
1312
GetClientCertificate: func(cri *tls.CertificateRequestInfo) (*tls.Certificate, error) {
1413
return cert, nil
1514
},
1615
VerifyPeerCertificate: c.verifyTLSCertificate,
1716
VerifyConnection: c.verifyTLSConnection,
1817
InsecureSkipVerify: true,
1918
MinVersion: tls.VersionTLS13,
20-
NextProtos: []string{
21-
fmt.Sprintf("yggdrasil/%d.%d", ProtocolVersionMajor, ProtocolVersionMinor),
22-
},
2319
}
2420
return config, nil
2521
}
2622

27-
func (c *Core) verifyTLSCertificate(rawCerts [][]byte, _ [][]*x509.Certificate) error {
28-
if len(rawCerts) != 1 {
29-
return fmt.Errorf("expected one certificate")
30-
}
31-
32-
/*
33-
opts := x509.VerifyOptions{}
34-
cert, err := x509.ParseCertificate(rawCerts[0])
35-
if err != nil {
36-
return fmt.Errorf("failed to parse leaf certificate: %w", err)
37-
}
38-
39-
_, err = cert.Verify(opts)
40-
return err
41-
*/
42-
23+
func (c *Core) verifyTLSCertificate(_ [][]byte, _ [][]*x509.Certificate) error {
4324
return nil
4425
}
4526

46-
func (c *Core) verifyTLSConnection(cs tls.ConnectionState) error {
27+
func (c *Core) verifyTLSConnection(_ tls.ConnectionState) error {
4728
return nil
4829
}

src/core/version.go

+3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ func (m *version_metadata) decode(r io.Reader, password []byte) bool {
101101
return false
102102
}
103103

104+
if len(bs) < ed25519.SignatureSize {
105+
return false
106+
}
104107
sig := bs[len(bs)-ed25519.SignatureSize:]
105108
bs = bs[:len(bs)-ed25519.SignatureSize]
106109

src/tun/tun_windows.go

+11-28
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
package tun
55

66
import (
7-
"bytes"
87
"errors"
98
"fmt"
109
"log"
11-
"net"
10+
"net/netip"
1211

1312
"github.com/yggdrasil-network/yggdrasil-go/src/config"
1413
"golang.org/x/sys/windows"
@@ -89,13 +88,9 @@ func (tun *TunAdapter) setupAddress(addr string) error {
8988
return errors.New("Can't configure IPv6 address as TUN adapter is not present")
9089
}
9190
if intf, ok := tun.iface.(*wgtun.NativeTun); ok {
92-
if ipaddr, ipnet, err := net.ParseCIDR(addr); err == nil {
91+
if ipnet, err := netip.ParsePrefix(addr); err == nil {
9392
luid := winipcfg.LUID(intf.LUID())
94-
addresses := append([]net.IPNet{}, net.IPNet{
95-
IP: ipaddr,
96-
Mask: ipnet.Mask,
97-
})
98-
93+
addresses := []netip.Prefix{ipnet}
9994
err := luid.SetIPAddressesForFamily(windows.AF_INET6, addresses)
10095
if err == windows.ERROR_OBJECT_ALREADY_EXISTS {
10196
cleanupAddressesOnDisconnectedInterfaces(windows.AF_INET6, addresses)
@@ -118,24 +113,13 @@ func (tun *TunAdapter) setupAddress(addr string) error {
118113
* SPDX-License-Identifier: MIT
119114
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
120115
*/
121-
func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, addresses []net.IPNet) {
116+
func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, addresses []netip.Prefix) {
122117
if len(addresses) == 0 {
123118
return
124119
}
125-
includedInAddresses := func(a net.IPNet) bool {
126-
// TODO: this makes the whole algorithm O(n^2). But we can't stick net.IPNet in a Go hashmap. Bummer!
127-
for _, addr := range addresses {
128-
ip := addr.IP
129-
if ip4 := ip.To4(); ip4 != nil {
130-
ip = ip4
131-
}
132-
mA, _ := addr.Mask.Size()
133-
mB, _ := a.Mask.Size()
134-
if bytes.Equal(ip, a.IP) && mA == mB {
135-
return true
136-
}
137-
}
138-
return false
120+
addrHash := make(map[netip.Addr]bool, len(addresses))
121+
for i := range addresses {
122+
addrHash[addresses[i].Addr()] = true
139123
}
140124
interfaces, err := winipcfg.GetAdaptersAddresses(family, winipcfg.GAAFlagDefault)
141125
if err != nil {
@@ -146,11 +130,10 @@ func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, add
146130
continue
147131
}
148132
for address := iface.FirstUnicastAddress; address != nil; address = address.Next {
149-
ip := address.Address.IP()
150-
ipnet := net.IPNet{IP: ip, Mask: net.CIDRMask(int(address.OnLinkPrefixLength), 8*len(ip))}
151-
if includedInAddresses(ipnet) {
152-
log.Printf("Cleaning up stale address %s from interface ‘%s’", ipnet.String(), iface.FriendlyName())
153-
iface.LUID.DeleteIPAddress(ipnet)
133+
if ip, _ := netip.AddrFromSlice(address.Address.IP()); addrHash[ip] {
134+
prefix := netip.PrefixFrom(ip, int(address.OnLinkPrefixLength))
135+
log.Printf("Cleaning up stale address %s from interface ‘%s’", prefix.String(), iface.FriendlyName())
136+
iface.LUID.DeleteIPAddress(prefix)
154137
}
155138
}
156139
}

0 commit comments

Comments
 (0)