1. moved address to core

This commit is contained in:
vadym 2022-10-30 21:58:42 +02:00
parent b5f79eadcb
commit 6319d6231b
15 changed files with 61 additions and 60 deletions

View file

@ -19,7 +19,7 @@ import (
"net" "net"
"runtime" "runtime"
"github.com/RiV-chain/RiV-mesh/src/address" "github.com/RiV-chain/RiV-mesh/src/core"
) )
type keySet struct { type keySet struct {
@ -41,7 +41,7 @@ func main() {
fmt.Println("-----") fmt.Println("-----")
fmt.Println("Priv:", hex.EncodeToString(newKey.priv)) fmt.Println("Priv:", hex.EncodeToString(newKey.priv))
fmt.Println("Pub:", hex.EncodeToString(newKey.pub)) fmt.Println("Pub:", hex.EncodeToString(newKey.pub))
addr := address.AddrForKey(newKey.pub) addr := core.AddrForKey(newKey.pub)
fmt.Println("IP:", net.IP(addr[:]).String()) fmt.Println("IP:", net.IP(addr[:]).String())
} }
} }

View file

@ -25,7 +25,7 @@ import (
"github.com/kardianos/minwinsvc" "github.com/kardianos/minwinsvc"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
"github.com/RiV-chain/RiV-mesh/src/admin" "github.com/RiV-chain/RiV-mesh/src/admin"
"github.com/RiV-chain/RiV-mesh/src/config" "github.com/RiV-chain/RiV-mesh/src/config"
"github.com/RiV-chain/RiV-mesh/src/defaults" "github.com/RiV-chain/RiV-mesh/src/defaults"
@ -261,6 +261,7 @@ func run(args yggArgs, ctx context.Context) {
if cfg == nil { if cfg == nil {
return return
} }
n := &node{}
// Have we been asked for the node address yet? If so, print it and then stop. // Have we been asked for the node address yet? If so, print it and then stop.
getNodeKey := func() ed25519.PublicKey { getNodeKey := func() ed25519.PublicKey {
if pubkey, err := hex.DecodeString(cfg.PrivateKey); err == nil { if pubkey, err := hex.DecodeString(cfg.PrivateKey); err == nil {
@ -271,14 +272,14 @@ func run(args yggArgs, ctx context.Context) {
switch { switch {
case args.getaddr: case args.getaddr:
if key := getNodeKey(); key != nil { if key := getNodeKey(); key != nil {
addr := address.AddrForKey(key) addr := n.core.AddrForKey(key)
ip := net.IP(addr[:]) ip := net.IP(addr[:])
fmt.Println(ip.String()) fmt.Println(ip.String())
} }
return return
case args.getsnet: case args.getsnet:
if key := getNodeKey(); key != nil { if key := getNodeKey(); key != nil {
snet := address.SubnetForKey(key) snet := n.core.SubnetForKey(key)
ipnet := net.IPNet{ ipnet := net.IPNet{
IP: append(snet[:], 0, 0, 0, 0, 0, 0, 0, 0), IP: append(snet[:], 0, 0, 0, 0, 0, 0, 0, 0),
Mask: net.CIDRMask(len(snet)*8, 128), Mask: net.CIDRMask(len(snet)*8, 128),
@ -291,7 +292,6 @@ func run(args yggArgs, ctx context.Context) {
cfg.HttpAddress = args.httpaddress cfg.HttpAddress = args.httpaddress
cfg.WwwRoot = args.wwwroot cfg.WwwRoot = args.wwwroot
n := &node{}
// Setup the RiV-mesh node itself. // Setup the RiV-mesh node itself.
{ {
sk, err := hex.DecodeString(cfg.PrivateKey) sk, err := hex.DecodeString(cfg.PrivateKey)

View file

@ -9,7 +9,7 @@ import (
"github.com/gologme/log" "github.com/gologme/log"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
"github.com/RiV-chain/RiV-mesh/src/config" "github.com/RiV-chain/RiV-mesh/src/config"
"github.com/RiV-chain/RiV-mesh/src/core" "github.com/RiV-chain/RiV-mesh/src/core"
"github.com/RiV-chain/RiV-mesh/src/defaults" "github.com/RiV-chain/RiV-mesh/src/defaults"
@ -176,7 +176,7 @@ func (m *Mesh) GetPeersJSON() (result string) {
IP string IP string
}{} }{}
for _, v := range m.core.GetPeers() { for _, v := range m.core.GetPeers() {
a := address.AddrForKey(v.Key) a := m.core.AddrForKey(v.Key)
ip := net.IP(a[:]).String() ip := net.IP(a[:]).String()
peers = append(peers, struct { peers = append(peers, struct {
core.PeerInfo core.PeerInfo

View file

@ -6,7 +6,7 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
) )
type GetDHTRequest struct{} type GetDHTRequest struct{}
@ -26,7 +26,7 @@ func (a *AdminSocket) getDHTHandler(req *GetDHTRequest, res *GetDHTResponse) err
dht := a.core.GetDHT() dht := a.core.GetDHT()
res.DHT = make([]DHTEntry, 0, len(dht)) res.DHT = make([]DHTEntry, 0, len(dht))
for _, d := range dht { for _, d := range dht {
addr := address.AddrForKey(d.Key) addr := a.core.AddrForKey(d.Key)
res.DHT = append(res.DHT, DHTEntry{ res.DHT = append(res.DHT, DHTEntry{
IPAddress: net.IP(addr[:]).String(), IPAddress: net.IP(addr[:]).String(),
PublicKey: hex.EncodeToString(d.Key[:]), PublicKey: hex.EncodeToString(d.Key[:]),

View file

@ -6,7 +6,7 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
) )
type GetPathsRequest struct { type GetPathsRequest struct {
@ -26,7 +26,7 @@ func (a *AdminSocket) getPathsHandler(req *GetPathsRequest, res *GetPathsRespons
paths := a.core.GetPaths() paths := a.core.GetPaths()
res.Paths = make([]PathEntry, 0, len(paths)) res.Paths = make([]PathEntry, 0, len(paths))
for _, p := range paths { for _, p := range paths {
addr := address.AddrForKey(p.Key) addr := a.core.AddrForKey(p.Key)
res.Paths = append(res.Paths, PathEntry{ res.Paths = append(res.Paths, PathEntry{
IPAddress: net.IP(addr[:]).String(), IPAddress: net.IP(addr[:]).String(),
PublicKey: hex.EncodeToString(p.Key), PublicKey: hex.EncodeToString(p.Key),

View file

@ -5,7 +5,7 @@ import (
"net" "net"
"sort" "sort"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
) )
type GetPeersRequest struct { type GetPeersRequest struct {
@ -31,7 +31,7 @@ func (a *AdminSocket) getPeersHandler(req *GetPeersRequest, res *GetPeersRespons
peers := a.core.GetPeers() peers := a.core.GetPeers()
res.Peers = make([]PeerEntry, 0, len(peers)) res.Peers = make([]PeerEntry, 0, len(peers))
for _, p := range peers { for _, p := range peers {
addr := address.AddrForKey(p.Key) addr := a.core.AddrForKey(p.Key)
res.Peers = append(res.Peers, PeerEntry{ res.Peers = append(res.Peers, PeerEntry{
IPAddress: net.IP(addr[:]).String(), IPAddress: net.IP(addr[:]).String(),
PublicKey: hex.EncodeToString(p.Key), PublicKey: hex.EncodeToString(p.Key),

View file

@ -6,7 +6,7 @@ import (
"sort" "sort"
"strings" "strings"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
) )
type GetSessionsRequest struct{} type GetSessionsRequest struct{}
@ -27,7 +27,7 @@ func (a *AdminSocket) getSessionsHandler(req *GetSessionsRequest, res *GetSessio
sessions := a.core.GetSessions() sessions := a.core.GetSessions()
res.Sessions = make([]SessionEntry, 0, len(sessions)) res.Sessions = make([]SessionEntry, 0, len(sessions))
for _, s := range sessions { for _, s := range sessions {
addr := address.AddrForKey(s.Key) addr := a.core.AddrForKey(s.Key)
res.Sessions = append(res.Sessions, SessionEntry{ res.Sessions = append(res.Sessions, SessionEntry{
IPAddress: net.IP(addr[:]).String(), IPAddress: net.IP(addr[:]).String(),
PublicKey: hex.EncodeToString(s.Key[:]), PublicKey: hex.EncodeToString(s.Key[:]),

View file

@ -1,6 +1,6 @@
// Package address contains the types used by mesh to represent IPv6 addresses or prefixes, as well as functions for working with these types. // Package address contains the types used by mesh to represent IPv6 addresses or prefixes, as well as functions for working with these types.
// Of particular importance are the functions used to derive addresses or subnets from a NodeID, or to get the NodeID and bitmask of the bits visible from an address, which is needed for DHT searches. // Of particular importance are the functions used to derive addresses or subnets from a NodeID, or to get the NodeID and bitmask of the bits visible from an address, which is needed for DHT searches.
package address package core
import ( import (
"crypto/ed25519" "crypto/ed25519"
@ -48,7 +48,7 @@ func (s *Subnet) IsValid() bool {
// This address begins with the contents of GetPrefix(), with the last bit set to 0 to indicate an address. // This address begins with the contents of GetPrefix(), with the last bit set to 0 to indicate an address.
// The following 8 bits are set to the number of leading 1 bits in the bitwise inverse of the public key. // The following 8 bits are set to the number of leading 1 bits in the bitwise inverse of the public key.
// The bitwise inverse of the key, excluding the leading 1 bits and the first leading 0 bit, is truncated to the appropriate length and makes up the remainder of the address. // The bitwise inverse of the key, excluding the leading 1 bits and the first leading 0 bit, is truncated to the appropriate length and makes up the remainder of the address.
func AddrForKey(publicKey ed25519.PublicKey) *Address { func (c *Core) AddrForKey(publicKey ed25519.PublicKey) *Address {
// 128 bit address // 128 bit address
// Begins with prefix // Begins with prefix
// Next bit is a 0 // Next bit is a 0
@ -98,11 +98,11 @@ func AddrForKey(publicKey ed25519.PublicKey) *Address {
// The subnet begins with the address prefix, with the last bit set to 1 to indicate a prefix. // The subnet begins with the address prefix, with the last bit set to 1 to indicate a prefix.
// The following 8 bits are set to the number of leading 1 bits in the bitwise inverse of the key. // The following 8 bits are set to the number of leading 1 bits in the bitwise inverse of the key.
// The bitwise inverse of the key, excluding the leading 1 bits and the first leading 0 bit, is truncated to the appropriate length and makes up the remainder of the subnet. // The bitwise inverse of the key, excluding the leading 1 bits and the first leading 0 bit, is truncated to the appropriate length and makes up the remainder of the subnet.
func SubnetForKey(publicKey ed25519.PublicKey) *Subnet { func (c *Core) SubnetForKey(publicKey ed25519.PublicKey) *Subnet {
// Exactly as the address version, with two exceptions: // Exactly as the address version, with two exceptions:
// 1) The first bit after the fixed prefix is a 1 instead of a 0 // 1) The first bit after the fixed prefix is a 1 instead of a 0
// 2) It's truncated to a subnet prefix length instead of 128 bits // 2) It's truncated to a subnet prefix length instead of 128 bits
addr := AddrForKey(publicKey) addr := c.AddrForKey(publicKey)
if addr == nil { if addr == nil {
return nil return nil
} }

View file

@ -1,4 +1,4 @@
package address package core
import ( import (
"bytes" "bytes"

View file

@ -17,7 +17,7 @@ import (
//"time" //"time"
"github.com/Arceliar/phony" "github.com/Arceliar/phony"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
) )
type SelfInfo struct { type SelfInfo struct {
@ -159,7 +159,7 @@ func (c *Core) Listen(u *url.URL, sintf string) (*Listener, error) {
// that application also implements either VPN functionality or deals with IP // that application also implements either VPN functionality or deals with IP
// packets specifically. // packets specifically.
func (c *Core) Address() net.IP { func (c *Core) Address() net.IP {
addr := net.IP(address.AddrForKey(c.public)[:]) addr := net.IP(c.AddrForKey(c.public)[:])
return addr return addr
} }
@ -169,7 +169,7 @@ func (c *Core) Address() net.IP {
// that application also implements either VPN functionality or deals with IP // that application also implements either VPN functionality or deals with IP
// packets specifically. // packets specifically.
func (c *Core) Subnet() net.IPNet { func (c *Core) Subnet() net.IPNet {
subnet := address.SubnetForKey(c.public)[:] subnet := c.SubnetForKey(c.public)[:]
subnet = append(subnet, 0, 0, 0, 0, 0, 0, 0, 0) subnet = append(subnet, 0, 0, 0, 0, 0, 0, 0, 0)
return net.IPNet{IP: subnet, Mask: net.CIDRMask(64, 128)} return net.IPNet{IP: subnet, Mask: net.CIDRMask(64, 128)}
} }

View file

@ -20,6 +20,7 @@ import (
// The Core object represents the Mesh node. You should create a Core // The Core object represents the Mesh node. You should create a Core
// object for each Mesh node you plan to run. // object for each Mesh node you plan to run.
type Core struct { type Core struct {
address Address
// This is the main data structure that holds everything else for a node // This is the main data structure that holds everything else for a node
// We're going to keep our own copy of the provided config - that way we can // We're going to keep our own copy of the provided config - that way we can
// guarantee that it will be covered by the mutex // guarantee that it will be covered by the mutex

View file

@ -16,7 +16,7 @@ import (
"sync/atomic" "sync/atomic"
"github.com/Arceliar/phony" "github.com/Arceliar/phony"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
//"github.com/Arceliar/phony" // TODO? use instead of mutexes //"github.com/Arceliar/phony" // TODO? use instead of mutexes
) )
@ -188,7 +188,7 @@ func (intf *link) handler() error {
if intf.incoming { if intf.incoming {
dir = "inbound" dir = "inbound"
} }
remoteAddr := net.IP(address.AddrForKey(meta.key)[:]).String() remoteAddr := net.IP(intf.links.core.AddrForKey(meta.key)[:]).String()
remoteStr := fmt.Sprintf("%s@%s", remoteAddr, intf.info.remote) remoteStr := fmt.Sprintf("%s@%s", remoteAddr, intf.info.remote)
localStr := intf.conn.LocalAddr() localStr := intf.conn.LocalAddr()
intf.links.core.log.Infof("Connected %s %s: %s, source %s", intf.links.core.log.Infof("Connected %s %s: %s, source %s",

View file

@ -12,7 +12,7 @@ import (
iwt "github.com/Arceliar/ironwood/types" iwt "github.com/Arceliar/ironwood/types"
"github.com/Arceliar/phony" "github.com/Arceliar/phony"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
) )
const ( const (
@ -266,7 +266,7 @@ func (p *protoHandler) getSelfHandler(in json.RawMessage) (interface{}, error) {
if err := msg.UnmarshalJSON(info); err != nil { if err := msg.UnmarshalJSON(info); err != nil {
return nil, err return nil, err
} }
ip := net.IP(address.AddrForKey(kbs)[:]) ip := net.IP(p.core.AddrForKey(kbs)[:])
res := DebugGetSelfResponse{ip.String(): msg} res := DebugGetSelfResponse{ip.String(): msg}
return res, nil return res, nil
} }
@ -316,7 +316,7 @@ func (p *protoHandler) getPeersHandler(in json.RawMessage) (interface{}, error)
if err := msg.UnmarshalJSON(js); err != nil { if err := msg.UnmarshalJSON(js); err != nil {
return nil, err return nil, err
} }
ip := net.IP(address.AddrForKey(kbs)[:]) ip := net.IP(p.core.AddrForKey(kbs)[:])
res := DebugGetPeersResponse{ip.String(): msg} res := DebugGetPeersResponse{ip.String(): msg}
return res, nil return res, nil
} }
@ -366,7 +366,7 @@ func (p *protoHandler) getDHTHandler(in json.RawMessage) (interface{}, error) {
if err := msg.UnmarshalJSON(js); err != nil { if err := msg.UnmarshalJSON(js); err != nil {
return nil, err return nil, err
} }
ip := net.IP(address.AddrForKey(kbs)[:]) ip := net.IP(p.core.AddrForKey(kbs)[:])
res := DebugGetDHTResponse{ip.String(): msg} res := DebugGetDHTResponse{ip.String(): msg}
return res, nil return res, nil
} }

View file

@ -13,7 +13,7 @@ import (
iwt "github.com/Arceliar/ironwood/types" iwt "github.com/Arceliar/ironwood/types"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
"github.com/RiV-chain/RiV-mesh/src/core" "github.com/RiV-chain/RiV-mesh/src/core"
) )
@ -30,21 +30,21 @@ type keyArray [ed25519.PublicKeySize]byte
type keyStore struct { type keyStore struct {
core *core.Core core *core.Core
address address.Address address core.Address
subnet address.Subnet subnet core.Subnet
mutex sync.Mutex mutex sync.Mutex
keyToInfo map[keyArray]*keyInfo keyToInfo map[keyArray]*keyInfo
addrToInfo map[address.Address]*keyInfo addrToInfo map[core.Address]*keyInfo
addrBuffer map[address.Address]*buffer addrBuffer map[core.Address]*buffer
subnetToInfo map[address.Subnet]*keyInfo subnetToInfo map[core.Subnet]*keyInfo
subnetBuffer map[address.Subnet]*buffer subnetBuffer map[core.Subnet]*buffer
mtu uint64 mtu uint64
} }
type keyInfo struct { type keyInfo struct {
key keyArray key keyArray
address address.Address address core.Address
subnet address.Subnet subnet core.Subnet
timeout *time.Timer // From calling a time.AfterFunc to do cleanup timeout *time.Timer // From calling a time.AfterFunc to do cleanup
} }
@ -55,21 +55,21 @@ type buffer struct {
func (k *keyStore) init(c *core.Core) { func (k *keyStore) init(c *core.Core) {
k.core = c k.core = c
k.address = *address.AddrForKey(k.core.PublicKey()) k.address = *c.AddrForKey(k.core.PublicKey())
k.subnet = *address.SubnetForKey(k.core.PublicKey()) k.subnet = *c.SubnetForKey(k.core.PublicKey())
if err := k.core.SetOutOfBandHandler(k.oobHandler); err != nil { if err := k.core.SetOutOfBandHandler(k.oobHandler); err != nil {
err = fmt.Errorf("tun.core.SetOutOfBandHander: %w", err) err = fmt.Errorf("tun.core.SetOutOfBandHander: %w", err)
panic(err) panic(err)
} }
k.keyToInfo = make(map[keyArray]*keyInfo) k.keyToInfo = make(map[keyArray]*keyInfo)
k.addrToInfo = make(map[address.Address]*keyInfo) k.addrToInfo = make(map[core.Address]*keyInfo)
k.addrBuffer = make(map[address.Address]*buffer) k.addrBuffer = make(map[core.Address]*buffer)
k.subnetToInfo = make(map[address.Subnet]*keyInfo) k.subnetToInfo = make(map[core.Subnet]*keyInfo)
k.subnetBuffer = make(map[address.Subnet]*buffer) k.subnetBuffer = make(map[core.Subnet]*buffer)
k.mtu = 1280 // Default to something safe, expect user to set this k.mtu = 1280 // Default to something safe, expect user to set this
} }
func (k *keyStore) sendToAddress(addr address.Address, bs []byte) { func (k *keyStore) sendToAddress(addr core.Address, bs []byte) {
k.mutex.Lock() k.mutex.Lock()
if info := k.addrToInfo[addr]; info != nil { if info := k.addrToInfo[addr]; info != nil {
k.resetTimeout(info) k.resetTimeout(info)
@ -98,7 +98,7 @@ func (k *keyStore) sendToAddress(addr address.Address, bs []byte) {
} }
} }
func (k *keyStore) sendToSubnet(subnet address.Subnet, bs []byte) { func (k *keyStore) sendToSubnet(subnet core.Subnet, bs []byte) {
k.mutex.Lock() k.mutex.Lock()
if info := k.subnetToInfo[subnet]; info != nil { if info := k.subnetToInfo[subnet]; info != nil {
k.resetTimeout(info) k.resetTimeout(info)
@ -136,8 +136,8 @@ func (k *keyStore) update(key ed25519.PublicKey) *keyInfo {
if info = k.keyToInfo[kArray]; info == nil { if info = k.keyToInfo[kArray]; info == nil {
info = new(keyInfo) info = new(keyInfo)
info.key = kArray info.key = kArray
info.address = *address.AddrForKey(ed25519.PublicKey(info.key[:])) info.address = *k.core.AddrForKey(ed25519.PublicKey(info.key[:]))
info.subnet = *address.SubnetForKey(ed25519.PublicKey(info.key[:])) info.subnet = *k.core.SubnetForKey(ed25519.PublicKey(info.key[:]))
k.keyToInfo[info.key] = info k.keyToInfo[info.key] = info
k.addrToInfo[info.address] = info k.addrToInfo[info.address] = info
k.subnetToInfo[info.subnet] = info k.subnetToInfo[info.subnet] = info
@ -184,7 +184,7 @@ func (k *keyStore) oobHandler(fromKey, toKey ed25519.PublicKey, data []byte) {
sig := data[1:] sig := data[1:]
switch data[0] { switch data[0] {
case typeKeyLookup: case typeKeyLookup:
snet := *address.SubnetForKey(toKey) snet := *k.core.SubnetForKey(toKey)
if snet == k.subnet && ed25519.Verify(fromKey, toKey[:], sig) { if snet == k.subnet && ed25519.Verify(fromKey, toKey[:], sig) {
// This is looking for at least our subnet (possibly our address) // This is looking for at least our subnet (possibly our address)
// Send a response // Send a response
@ -248,8 +248,8 @@ func (k *keyStore) readPC(p []byte) (int, error) {
} }
continue continue
} }
var srcAddr, dstAddr address.Address var srcAddr, dstAddr core.Address
var srcSubnet, dstSubnet address.Subnet var srcSubnet, dstSubnet core.Subnet
copy(srcAddr[:], bs[8:]) copy(srcAddr[:], bs[8:])
copy(dstAddr[:], bs[24:]) copy(dstAddr[:], bs[24:])
copy(srcSubnet[:], bs[8:]) copy(srcSubnet[:], bs[8:])
@ -274,8 +274,8 @@ func (k *keyStore) writePC(bs []byte) (int, error) {
strErr := fmt.Sprint("undersized IPv6 packet, length: ", len(bs)) strErr := fmt.Sprint("undersized IPv6 packet, length: ", len(bs))
return 0, errors.New(strErr) return 0, errors.New(strErr)
} }
var srcAddr, dstAddr address.Address var srcAddr, dstAddr core.Address
var srcSubnet, dstSubnet address.Subnet var srcSubnet, dstSubnet core.Subnet
copy(srcAddr[:], bs[8:]) copy(srcAddr[:], bs[8:])
copy(dstAddr[:], bs[24:]) copy(dstAddr[:], bs[24:])
copy(srcSubnet[:], bs[8:]) copy(srcSubnet[:], bs[8:])
@ -331,11 +331,11 @@ func NewReadWriteCloser(c *core.Core) *ReadWriteCloser {
return rwc return rwc
} }
func (rwc *ReadWriteCloser) Address() address.Address { func (rwc *ReadWriteCloser) Address() core.Address {
return rwc.address return rwc.address
} }
func (rwc *ReadWriteCloser) Subnet() address.Subnet { func (rwc *ReadWriteCloser) Subnet() core.Subnet {
return rwc.subnet return rwc.subnet
} }

View file

@ -13,7 +13,7 @@ import (
"github.com/Arceliar/phony" "github.com/Arceliar/phony"
"golang.zx2c4.com/wireguard/tun" "golang.zx2c4.com/wireguard/tun"
"github.com/RiV-chain/RiV-mesh/src/address" //"github.com/RiV-chain/RiV-mesh/src/address"
"github.com/RiV-chain/RiV-mesh/src/core" "github.com/RiV-chain/RiV-mesh/src/core"
"github.com/RiV-chain/RiV-mesh/src/defaults" "github.com/RiV-chain/RiV-mesh/src/defaults"
"github.com/RiV-chain/RiV-mesh/src/ipv6rwc" "github.com/RiV-chain/RiV-mesh/src/ipv6rwc"
@ -28,8 +28,8 @@ type MTU uint16
type TunAdapter struct { type TunAdapter struct {
rwc *ipv6rwc.ReadWriteCloser rwc *ipv6rwc.ReadWriteCloser
log core.Logger log core.Logger
addr address.Address addr core.Address
subnet address.Subnet subnet core.Subnet
mtu uint64 mtu uint64
iface tun.Device iface tun.Device
phony.Inbox // Currently only used for _handlePacket from the reader, TODO: all the stuff that currently needs a mutex below phony.Inbox // Currently only used for _handlePacket from the reader, TODO: all the stuff that currently needs a mutex below
@ -107,7 +107,7 @@ func (tun *TunAdapter) _start() error {
} }
tun.addr = tun.rwc.Address() tun.addr = tun.rwc.Address()
tun.subnet = tun.rwc.Subnet() tun.subnet = tun.rwc.Subnet()
addr := fmt.Sprintf("%s/%d", net.IP(tun.addr[:]).String(), 8*len(address.GetPrefix())-1) addr := fmt.Sprintf("%s/%d", net.IP(tun.addr[:]).String(), 8*len(core.GetPrefix())-1)
if tun.config.name == "none" || tun.config.name == "dummy" { if tun.config.name == "none" || tun.config.name == "dummy" {
tun.log.Debugln("Not starting TUN as ifname is none or dummy") tun.log.Debugln("Not starting TUN as ifname is none or dummy")
tun.isEnabled = false tun.isEnabled = false