This commit is contained in:
Neil Alexander 2022-02-13 21:50:08 +00:00 committed by Vasyl Gello
parent b90a3f19b5
commit b613994f40
3 changed files with 15 additions and 262 deletions

View file

@ -1,10 +1,8 @@
package netstack
import (
"encoding/base64"
"fmt"
"net"
"time"
"github.com/yggdrasil-network/yggdrasil-go/src/core"
@ -21,12 +19,12 @@ type YggdrasilNetstack struct {
stack *stack.Stack
}
func CreateYggdrasilNetstack(ygg *core.Core, handlelocal bool) (*YggdrasilNetstack, error) {
func CreateYggdrasilNetstack(ygg *core.Core) (*YggdrasilNetstack, error) {
s := &YggdrasilNetstack{
stack: stack.New(stack.Options{
NetworkProtocols: []stack.NetworkProtocolFactory{ipv6.NewProtocol},
TransportProtocols: []stack.TransportProtocolFactory{tcp.NewProtocol, udp.NewProtocol, icmp.NewProtocol6},
HandleLocal: handlelocal,
HandleLocal: true,
}),
}
if s.stack.HandleLocal() {
@ -37,22 +35,6 @@ func CreateYggdrasilNetstack(ygg *core.Core, handlelocal bool) (*YggdrasilNetsta
if err := s.NewYggdrasilNIC(ygg); err != nil {
return nil, fmt.Errorf("s.NewYggdrasilNIC: %s", err.String())
}
pk, err := base64.RawStdEncoding.WithPadding('=').DecodeString("T6wTiFBhFj1evcApUyQDuDNADGePrheqx0A6vW9rFEw=")
if err != nil {
panic(err)
}
if err := s.NewWireguardNIC(ygg, pk[:]); err != nil {
return nil, fmt.Errorf("s.NewWireguardNIC: %s", err.String())
}
var f func()
f = func() {
fmt.Printf("\nRouting table: %+v\n", s.stack.GetRouteTable())
fmt.Printf("Forwarding: %+v\n", s.stack.Stats().IP.Forwarding)
time.AfterFunc(time.Second, f)
}
f()
return s, nil
}
@ -65,33 +47,21 @@ func convertToFullAddr(ip net.IP, port int) (tcpip.FullAddress, tcpip.NetworkPro
}
func (s *YggdrasilNetstack) DialTCP(addr *net.TCPAddr) (net.Conn, error) {
if !s.stack.HandleLocal() {
return nil, fmt.Errorf("only available when handling local traffic is enabled")
}
fa, pn := convertToFullAddr(addr.IP, addr.Port)
return gonet.DialTCP(s.stack, fa, pn)
}
func (s *YggdrasilNetstack) DialUDP(addr *net.UDPAddr) (net.PacketConn, error) {
if !s.stack.HandleLocal() {
return nil, fmt.Errorf("only available when handling local traffic is enabled")
}
fa, pn := convertToFullAddr(addr.IP, addr.Port)
return gonet.DialUDP(s.stack, nil, &fa, pn)
}
func (s *YggdrasilNetstack) ListenTCP(addr *net.TCPAddr) (net.Listener, error) {
if !s.stack.HandleLocal() {
return nil, fmt.Errorf("only available when handling local traffic is enabled")
}
fa, pn := convertToFullAddr(addr.IP, addr.Port)
return gonet.ListenTCP(s.stack, fa, pn)
}
func (s *YggdrasilNetstack) ListenUDP(addr *net.UDPAddr) (net.PacketConn, error) {
if !s.stack.HandleLocal() {
return nil, fmt.Errorf("only available when handling local traffic is enabled")
}
fa, pn := convertToFullAddr(addr.IP, addr.Port)
return gonet.DialUDP(s.stack, &fa, nil, pn)
}