mirror of
https://github.com/KusakabeShi/EtherGuard-VPN.git
synced 2024-11-22 07:13:09 +01:00
New log option: LogNormal
This commit is contained in:
parent
ad196d3f95
commit
89f3069e7f
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@ -11,7 +11,7 @@
|
|||||||
"mode": "auto",
|
"mode": "auto",
|
||||||
"program": "${workspaceFolder}",
|
"program": "${workspaceFolder}",
|
||||||
"env": {"CGO_CFLAGS":"-I/usr/include/memif"},
|
"env": {"CGO_CFLAGS":"-I/usr/include/memif"},
|
||||||
"args":["-config","example_config/static_mode/n1.yaml","-mode","edge"/*,"-example"*/],
|
"args":["-config","example_config/super_mode/n1.yaml","-mode","edge"/*,"-example"*/],
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -2,6 +2,16 @@ package config
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
|
"strconv"
|
||||||
|
"math"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
Boardcast Vertex = math.MaxUint32 - iota // Normal boardcast, boardcast with route table
|
||||||
|
ControlMessage Vertex = math.MaxUint32 - iota // p2p mode: boardcast to every know keer and prevent dup/ super mode: send to supernode
|
||||||
|
PingMessage Vertex = math.MaxUint32 - iota // boardsact to every know peer but don't transit
|
||||||
|
SuperNodeMessage Vertex = math.MaxUint32 - iota
|
||||||
|
Special_NodeID Vertex = SuperNodeMessage
|
||||||
)
|
)
|
||||||
|
|
||||||
type EdgeConfig struct {
|
type EdgeConfig struct {
|
||||||
@ -24,7 +34,7 @@ type SuperConfig struct {
|
|||||||
ListenPort int
|
ListenPort int
|
||||||
LogLevel LoggerInfo
|
LogLevel LoggerInfo
|
||||||
RePushConfigInterval float64
|
RePushConfigInterval float64
|
||||||
statepasswordd string
|
StatePassword string
|
||||||
GraphRecalculateSetting GraphRecalculateSetting
|
GraphRecalculateSetting GraphRecalculateSetting
|
||||||
Peers []PeerInfo
|
Peers []PeerInfo
|
||||||
}
|
}
|
||||||
@ -53,11 +63,27 @@ type LoggerInfo struct {
|
|||||||
LogLevel string
|
LogLevel string
|
||||||
LogTransit bool
|
LogTransit bool
|
||||||
LogControl bool
|
LogControl bool
|
||||||
|
LogNormal bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nonnegative integer ID of vertex
|
// Nonnegative integer ID of vertex
|
||||||
type Vertex uint32
|
type Vertex uint32
|
||||||
|
|
||||||
|
func (v *Vertex) ToString() string {
|
||||||
|
switch *v{
|
||||||
|
case Boardcast:
|
||||||
|
return "B"
|
||||||
|
case ControlMessage:
|
||||||
|
return "C"
|
||||||
|
case PingMessage:
|
||||||
|
return "P"
|
||||||
|
case SuperNodeMessage:
|
||||||
|
return "S"
|
||||||
|
default:
|
||||||
|
return strconv.Itoa(int(*v))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type DynamicRouteInfo struct {
|
type DynamicRouteInfo struct {
|
||||||
SendPingInterval float64
|
SendPingInterval float64
|
||||||
DupCheckTimeout float64
|
DupCheckTimeout float64
|
||||||
|
@ -82,6 +82,8 @@ type Device struct {
|
|||||||
Event_server_NhTable_changed chan struct{}
|
Event_server_NhTable_changed chan struct{}
|
||||||
Event_save_config chan struct{}
|
Event_save_config chan struct{}
|
||||||
|
|
||||||
|
Event_Supernode_OK chan struct{}
|
||||||
|
|
||||||
indexTable IndexTable
|
indexTable IndexTable
|
||||||
cookieChecker CookieChecker
|
cookieChecker CookieChecker
|
||||||
|
|
||||||
@ -90,8 +92,7 @@ type Device struct {
|
|||||||
ID config.Vertex
|
ID config.Vertex
|
||||||
graph *path.IG
|
graph *path.IG
|
||||||
l2fib sync.Map
|
l2fib sync.Map
|
||||||
LogTransit bool
|
LogLevel config.LoggerInfo
|
||||||
LogControl bool
|
|
||||||
DRoute config.DynamicRouteInfo
|
DRoute config.DynamicRouteInfo
|
||||||
DupData fixed_time_cache.Cache
|
DupData fixed_time_cache.Cache
|
||||||
|
|
||||||
@ -160,7 +161,7 @@ func removePeerLocked(device *Device, peer *Peer, key NoisePublicKey) {
|
|||||||
// remove from peer map
|
// remove from peer map
|
||||||
id := peer.ID
|
id := peer.ID
|
||||||
delete(device.peers.keyMap, key)
|
delete(device.peers.keyMap, key)
|
||||||
if id == path.SuperNodeMessage {
|
if id == config.SuperNodeMessage {
|
||||||
delete(device.peers.SuperPeer, key)
|
delete(device.peers.SuperPeer, key)
|
||||||
} else {
|
} else {
|
||||||
delete(device.peers.IDMap, id)
|
delete(device.peers.IDMap, id)
|
||||||
@ -335,8 +336,7 @@ func NewDevice(tapDevice tap.Device, id config.Vertex, bind conn.Bind, logger *L
|
|||||||
device.Event_server_pong = superevents.Event_server_pong
|
device.Event_server_pong = superevents.Event_server_pong
|
||||||
device.Event_server_register = superevents.Event_server_register
|
device.Event_server_register = superevents.Event_server_register
|
||||||
device.Event_server_NhTable_changed = superevents.Event_server_NhTable_changed
|
device.Event_server_NhTable_changed = superevents.Event_server_NhTable_changed
|
||||||
device.LogTransit = sconfig.LogLevel.LogTransit
|
device.LogLevel = sconfig.LogLevel
|
||||||
device.LogControl = sconfig.LogLevel.LogControl
|
|
||||||
device.SuperConfig = sconfig
|
device.SuperConfig = sconfig
|
||||||
device.SuperConfigPath = configpath
|
device.SuperConfigPath = configpath
|
||||||
go device.RoutineRecalculateNhTable()
|
go device.RoutineRecalculateNhTable()
|
||||||
@ -347,8 +347,8 @@ func NewDevice(tapDevice tap.Device, id config.Vertex, bind conn.Bind, logger *L
|
|||||||
device.DupData = *fixed_time_cache.NewCache(path.S2TD(econfig.DynamicRoute.DupCheckTimeout), false, path.S2TD(60))
|
device.DupData = *fixed_time_cache.NewCache(path.S2TD(econfig.DynamicRoute.DupCheckTimeout), false, path.S2TD(60))
|
||||||
device.event_tryendpoint = make(chan struct{}, 1<<6)
|
device.event_tryendpoint = make(chan struct{}, 1<<6)
|
||||||
device.Event_save_config = make(chan struct{}, 1<<5)
|
device.Event_save_config = make(chan struct{}, 1<<5)
|
||||||
device.LogTransit = econfig.LogLevel.LogTransit
|
device.Event_Supernode_OK = make(chan struct{}, 4)
|
||||||
device.LogControl = econfig.LogLevel.LogControl
|
device.LogLevel = econfig.LogLevel
|
||||||
device.ResetConnInterval = device.EdgeConfig.ResetConnInterval
|
device.ResetConnInterval = device.EdgeConfig.ResetConnInterval
|
||||||
go device.RoutineSetEndpoint()
|
go device.RoutineSetEndpoint()
|
||||||
go device.RoutineRegister()
|
go device.RoutineRegister()
|
||||||
|
@ -12,14 +12,12 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"strconv"
|
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/KusakabeSi/EtherGuardVPN/config"
|
"github.com/KusakabeSi/EtherGuardVPN/config"
|
||||||
"github.com/KusakabeSi/EtherGuardVPN/conn"
|
"github.com/KusakabeSi/EtherGuardVPN/conn"
|
||||||
"github.com/KusakabeSi/EtherGuardVPN/path"
|
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -96,8 +94,8 @@ func (device *Device) NewPeer(pk NoisePublicKey, id config.Vertex) (*Peer, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create peer
|
// create peer
|
||||||
if device.LogControl {
|
if device.LogLevel.LogControl {
|
||||||
fmt.Println("Create peer with ID : " + strconv.Itoa(int(id)) + " and PubKey:" + base64.StdEncoding.EncodeToString(pk[:]))
|
fmt.Println("Create peer with ID : " + id.ToString() + " and PubKey:" + base64.StdEncoding.EncodeToString(pk[:]))
|
||||||
}
|
}
|
||||||
peer := new(Peer)
|
peer := new(Peer)
|
||||||
peer.Lock()
|
peer.Lock()
|
||||||
@ -130,7 +128,7 @@ func (device *Device) NewPeer(pk NoisePublicKey, id config.Vertex) (*Peer, error
|
|||||||
peer.endpoint = nil
|
peer.endpoint = nil
|
||||||
|
|
||||||
// add
|
// add
|
||||||
if id == path.SuperNodeMessage { // To communicate with supernode
|
if id == config.SuperNodeMessage { // To communicate with supernode
|
||||||
device.peers.SuperPeer[pk] = peer
|
device.peers.SuperPeer[pk] = peer
|
||||||
device.peers.keyMap[pk] = peer
|
device.peers.keyMap[pk] = peer
|
||||||
} else { // Regular peer, other edgenodes
|
} else { // Regular peer, other edgenodes
|
||||||
@ -356,7 +354,7 @@ func (device *Device) SaveToConfig(peer *Peer, endpoint conn.Endpoint) {
|
|||||||
peerfile.EndPoint = url
|
peerfile.EndPoint = url
|
||||||
}
|
}
|
||||||
} else if peerfile.NodeID == peer.ID || peerfile.PubKey == pubkeystr {
|
} else if peerfile.NodeID == peer.ID || peerfile.PubKey == pubkeystr {
|
||||||
panic("Found NodeID match " + strconv.Itoa(int(peer.ID)) + ", but PubKey Not match %s enrties in config file" + pubkeystr)
|
panic("Found NodeID match " + peer.ID.ToString() + ", but PubKey Not match %s enrties in config file" + pubkeystr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !foundInFile {
|
if !foundInFile {
|
||||||
|
@ -459,24 +459,24 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
if device.IsSuperNode {
|
if device.IsSuperNode {
|
||||||
peer.LastPingReceived = time.Now()
|
peer.LastPingReceived = time.Now()
|
||||||
switch dst_nodeID {
|
switch dst_nodeID {
|
||||||
case path.ControlMessage:
|
case config.ControlMessage:
|
||||||
should_process = true
|
should_process = true
|
||||||
case path.SuperNodeMessage:
|
case config.SuperNodeMessage:
|
||||||
should_process = true
|
should_process = true
|
||||||
default:
|
default:
|
||||||
device.log.Errorf("Invalid dst_nodeID received. Check your code for bug")
|
device.log.Errorf("Invalid dst_nodeID received. Check your code for bug")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch dst_nodeID {
|
switch dst_nodeID {
|
||||||
case path.Boardcast:
|
case config.Boardcast:
|
||||||
should_receive = true
|
should_receive = true
|
||||||
should_transfer = true
|
should_transfer = true
|
||||||
case path.PingMessage:
|
case config.PingMessage:
|
||||||
peer.LastPingReceived = time.Now()
|
peer.LastPingReceived = time.Now()
|
||||||
should_process = true
|
should_process = true
|
||||||
case path.SuperNodeMessage:
|
case config.SuperNodeMessage:
|
||||||
should_process = true
|
should_process = true
|
||||||
case path.ControlMessage:
|
case config.ControlMessage:
|
||||||
packet := elem.packet[path.EgHeaderLen:] //true packet
|
packet := elem.packet[path.EgHeaderLen:] //true packet
|
||||||
if device.CheckNoDup(packet) {
|
if device.CheckNoDup(packet) {
|
||||||
should_process = true
|
should_process = true
|
||||||
@ -484,7 +484,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
} else {
|
} else {
|
||||||
should_process = false
|
should_process = false
|
||||||
should_transfer = false
|
should_transfer = false
|
||||||
if device.LogTransit {
|
if device.LogLevel.LogTransit {
|
||||||
fmt.Printf("Duplicate packet received from %d through %d , src_nodeID = %d . Dropeed.\n", peer.ID, device.ID, src_nodeID)
|
fmt.Printf("Duplicate packet received from %d through %d , src_nodeID = %d . Dropeed.\n", peer.ID, device.ID, src_nodeID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -508,9 +508,9 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
device.log.Verbosef("TTL is 0 %v", dst_nodeID)
|
device.log.Verbosef("TTL is 0 %v", dst_nodeID)
|
||||||
} else {
|
} else {
|
||||||
EgHeader.SetTTL(l2ttl - 1)
|
EgHeader.SetTTL(l2ttl - 1)
|
||||||
if dst_nodeID == path.Boardcast { //Regular transfer algorithm
|
if dst_nodeID == config.Boardcast { //Regular transfer algorithm
|
||||||
device.TransitBoardcastPacket(src_nodeID, peer.ID, elem.packet, MessageTransportOffsetContent)
|
device.TransitBoardcastPacket(src_nodeID, peer.ID, elem.packet, MessageTransportOffsetContent)
|
||||||
} else if dst_nodeID == path.ControlMessage { // Control Message will try send to every know node regardless the connectivity
|
} else if dst_nodeID == config.ControlMessage { // Control Message will try send to every know node regardless the connectivity
|
||||||
skip_list := make(map[config.Vertex]bool)
|
skip_list := make(map[config.Vertex]bool)
|
||||||
skip_list[src_nodeID] = true //Don't send to conimg peer and source peer
|
skip_list[src_nodeID] = true //Don't send to conimg peer and source peer
|
||||||
skip_list[peer.ID] = true
|
skip_list[peer.ID] = true
|
||||||
@ -519,7 +519,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
} else {
|
} else {
|
||||||
next_id := *device.graph.NhTable[device.ID][dst_nodeID]
|
next_id := *device.graph.NhTable[device.ID][dst_nodeID]
|
||||||
peer_out = device.peers.IDMap[next_id]
|
peer_out = device.peers.IDMap[next_id]
|
||||||
if device.LogTransit {
|
if device.LogLevel.LogTransit {
|
||||||
fmt.Printf("Transfer packet from %d through %d to %d\n", peer.ID, device.ID, peer_out.ID)
|
fmt.Printf("Transfer packet from %d through %d to %d\n", peer.ID, device.ID, peer_out.ID)
|
||||||
}
|
}
|
||||||
device.SendPacket(peer_out, elem.packet, MessageTransportOffsetContent)
|
device.SendPacket(peer_out, elem.packet, MessageTransportOffsetContent)
|
||||||
@ -529,7 +529,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
|
|
||||||
if should_process {
|
if should_process {
|
||||||
if packet_type != path.NornalPacket {
|
if packet_type != path.NornalPacket {
|
||||||
if device.LogControl {
|
if device.LogLevel.LogControl {
|
||||||
if peer.GetEndpointDstStr() != "" {
|
if peer.GetEndpointDstStr() != "" {
|
||||||
fmt.Printf("Received MID:" + strconv.Itoa(int(EgHeader.GetMessageID())) + " From:" + peer.GetEndpointDstStr() + " " + device.sprint_received(packet_type, elem.packet[path.EgHeaderLen:]) + "\n")
|
fmt.Printf("Received MID:" + strconv.Itoa(int(EgHeader.GetMessageID())) + " From:" + peer.GetEndpointDstStr() + " " + device.sprint_received(packet_type, elem.packet[path.EgHeaderLen:]) + "\n")
|
||||||
}
|
}
|
||||||
@ -543,6 +543,9 @@ func (peer *Peer) RoutineSequentialReceiver() {
|
|||||||
|
|
||||||
if should_receive { // Write message to tap device
|
if should_receive { // Write message to tap device
|
||||||
if packet_type == path.NornalPacket {
|
if packet_type == path.NornalPacket {
|
||||||
|
if device.LogLevel.LogNormal {
|
||||||
|
fmt.Println("Reveived Normal packet From:" + peer.GetEndpointDstStr() + " SrcID:" + src_nodeID.ToString() + " DstID:" + dst_nodeID.ToString() + " Len:" + strconv.Itoa(len(elem.packet)))
|
||||||
|
}
|
||||||
if len(elem.packet) <= path.EgHeaderLen+12 {
|
if len(elem.packet) <= path.EgHeaderLen+12 {
|
||||||
device.log.Errorf("Invalid normal packet from peer %v", peer)
|
device.log.Errorf("Invalid normal packet from peer %v", peer)
|
||||||
goto skip
|
goto skip
|
||||||
|
@ -20,7 +20,14 @@ func (device *Device) SendPacket(peer *Peer, packet []byte, offset int) {
|
|||||||
if peer == nil {
|
if peer == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if device.LogControl {
|
if device.LogLevel.LogNormal {
|
||||||
|
EgHeader, _ := path.NewEgHeader(packet[:path.EgHeaderLen])
|
||||||
|
if EgHeader.GetUsage() == path.NornalPacket {
|
||||||
|
dst_nodeID := EgHeader.GetDst()
|
||||||
|
fmt.Println("Send Normal packet To:" + peer.GetEndpointDstStr() + " SrcID:" + device.ID.ToString() + " DstID:" + dst_nodeID.ToString() + " Len:" + strconv.Itoa(len(packet)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if device.LogLevel.LogControl {
|
||||||
EgHeader, _ := path.NewEgHeader(packet[:path.EgHeaderLen])
|
EgHeader, _ := path.NewEgHeader(packet[:path.EgHeaderLen])
|
||||||
if EgHeader.GetUsage() != path.NornalPacket {
|
if EgHeader.GetUsage() != path.NornalPacket {
|
||||||
device.MsgCount += 1
|
device.MsgCount += 1
|
||||||
@ -30,6 +37,7 @@ func (device *Device) SendPacket(peer *Peer, packet []byte, offset int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var elem *QueueOutboundElement
|
var elem *QueueOutboundElement
|
||||||
elem = device.NewOutboundElement()
|
elem = device.NewOutboundElement()
|
||||||
copy(elem.buffer[offset:offset+len(packet)], packet)
|
copy(elem.buffer[offset:offset+len(packet)], packet)
|
||||||
@ -59,7 +67,7 @@ func (device *Device) SpreadPacket(skip_list map[config.Vertex]bool, packet []by
|
|||||||
device.peers.RLock()
|
device.peers.RLock()
|
||||||
for peer_id, peer_out := range device.peers.IDMap {
|
for peer_id, peer_out := range device.peers.IDMap {
|
||||||
if _, ok := skip_list[peer_id]; ok {
|
if _, ok := skip_list[peer_id]; ok {
|
||||||
if device.LogTransit {
|
if device.LogLevel.LogTransit {
|
||||||
fmt.Printf("Skipped Spread Packet packet through %d to %d\n", device.ID, peer_out.ID)
|
fmt.Printf("Skipped Spread Packet packet through %d to %d\n", device.ID, peer_out.ID)
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -74,7 +82,7 @@ func (device *Device) TransitBoardcastPacket(src_nodeID config.Vertex, in_id con
|
|||||||
device.peers.RLock()
|
device.peers.RLock()
|
||||||
for peer_id := range node_boardcast_list {
|
for peer_id := range node_boardcast_list {
|
||||||
peer_out := device.peers.IDMap[peer_id]
|
peer_out := device.peers.IDMap[peer_id]
|
||||||
if device.LogTransit {
|
if device.LogLevel.LogTransit {
|
||||||
fmt.Printf("Transfer packet from %d through %d to %d\n", in_id, device.ID, peer_out.ID)
|
fmt.Printf("Transfer packet from %d through %d to %d\n", in_id, device.ID, peer_out.ID)
|
||||||
}
|
}
|
||||||
device.SendPacket(peer_out, packet, offset)
|
device.SendPacket(peer_out, packet, offset)
|
||||||
@ -86,9 +94,9 @@ func (device *Device) Send2Super(packet []byte, offset int) {
|
|||||||
device.peers.RLock()
|
device.peers.RLock()
|
||||||
if device.DRoute.SuperNode.UseSuperNode {
|
if device.DRoute.SuperNode.UseSuperNode {
|
||||||
for _, peer_out := range device.peers.SuperPeer {
|
for _, peer_out := range device.peers.SuperPeer {
|
||||||
if device.LogTransit {
|
/*if device.LogTransit {
|
||||||
fmt.Printf("Send to supernode %s\n", peer_out.endpoint.DstToString())
|
fmt.Printf("Send to supernode %s\n", peer_out.endpoint.DstToString())
|
||||||
}
|
}*/
|
||||||
device.SendPacket(peer_out, packet, offset)
|
device.SendPacket(peer_out, packet, offset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,11 +224,11 @@ func (device *Device) process_ping(content path.PingMsg) error {
|
|||||||
header.SetPacketLength(uint16(len(body)))
|
header.SetPacketLength(uint16(len(body)))
|
||||||
copy(buf[path.EgHeaderLen:], body)
|
copy(buf[path.EgHeaderLen:], body)
|
||||||
if device.DRoute.SuperNode.UseSuperNode {
|
if device.DRoute.SuperNode.UseSuperNode {
|
||||||
header.SetDst(path.SuperNodeMessage)
|
header.SetDst(config.SuperNodeMessage)
|
||||||
device.Send2Super(buf, MessageTransportOffsetContent)
|
device.Send2Super(buf, MessageTransportOffsetContent)
|
||||||
}
|
}
|
||||||
if device.DRoute.P2P.UseP2P {
|
if device.DRoute.P2P.UseP2P {
|
||||||
header.SetDst(path.ControlMessage)
|
header.SetDst(config.ControlMessage)
|
||||||
device.SpreadPacket(make(map[config.Vertex]bool), buf, MessageTransportOffsetContent)
|
device.SpreadPacket(make(map[config.Vertex]bool), buf, MessageTransportOffsetContent)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -259,7 +267,7 @@ func (device *Device) process_UpdatePeerMsg(content path.UpdatePeerMsg) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
downloadurl := device.DRoute.SuperNode.APIUrl + "/peerinfo?PubKey=" + url.QueryEscape(PubKey2Str(device.staticIdentity.publicKey)) + "&State=" + url.QueryEscape(string(content.State_hash[:]))
|
downloadurl := device.DRoute.SuperNode.APIUrl + "/peerinfo?PubKey=" + url.QueryEscape(PubKey2Str(device.staticIdentity.publicKey)) + "&State=" + url.QueryEscape(string(content.State_hash[:]))
|
||||||
if device.LogControl {
|
if device.LogLevel.LogControl {
|
||||||
fmt.Println("Download peerinfo from :" + downloadurl)
|
fmt.Println("Download peerinfo from :" + downloadurl)
|
||||||
}
|
}
|
||||||
client := http.Client{
|
client := http.Client{
|
||||||
@ -276,6 +284,9 @@ func (device *Device) process_UpdatePeerMsg(content path.UpdatePeerMsg) error {
|
|||||||
device.log.Errorf(err.Error())
|
device.log.Errorf(err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if device.LogLevel.LogControl {
|
||||||
|
fmt.Println("Download result :" + string(allbytes))
|
||||||
|
}
|
||||||
if err := json.Unmarshal(allbytes, &peer_infos); err != nil {
|
if err := json.Unmarshal(allbytes, &peer_infos); err != nil {
|
||||||
device.log.Errorf(err.Error())
|
device.log.Errorf(err.Error())
|
||||||
return err
|
return err
|
||||||
@ -348,8 +359,8 @@ func (device *Device) RoutineSetEndpoint() {
|
|||||||
thepeer.endpoint_trylist.Delete(url)
|
thepeer.endpoint_trylist.Delete(url)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if device.LogControl {
|
if device.LogLevel.LogControl {
|
||||||
fmt.Println("Set endpoint to " + endpoint.DstToString() + " for NodeID:" + strconv.Itoa(int(thepeer.ID)))
|
fmt.Println("Set endpoint to " + endpoint.DstToString() + " for NodeID:" + thepeer.ID.ToString())
|
||||||
}
|
}
|
||||||
thepeer.SetEndpointFromPacket(endpoint)
|
thepeer.SetEndpointFromPacket(endpoint)
|
||||||
NextRun = true
|
NextRun = true
|
||||||
@ -394,15 +405,17 @@ func (device *Device) RoutineRegister() {
|
|||||||
if !(device.DRoute.SuperNode.UseSuperNode) {
|
if !(device.DRoute.SuperNode.UseSuperNode) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
_ = <-device.Event_Supernode_OK
|
||||||
for {
|
for {
|
||||||
body, _ := path.GetByte(path.RegisterMsg{
|
body, _ := path.GetByte(path.RegisterMsg{
|
||||||
Node_id: device.ID,
|
Node_id: device.ID,
|
||||||
PeerStateHash: device.peers.Peer_state,
|
PeerStateHash: device.peers.Peer_state,
|
||||||
NhStateHash: device.graph.NhTableHash,
|
NhStateHash: device.graph.NhTableHash,
|
||||||
|
Name: device.EdgeConfig.NodeName,
|
||||||
})
|
})
|
||||||
buf := make([]byte, path.EgHeaderLen+len(body))
|
buf := make([]byte, path.EgHeaderLen+len(body))
|
||||||
header, _ := path.NewEgHeader(buf[0:path.EgHeaderLen])
|
header, _ := path.NewEgHeader(buf[0:path.EgHeaderLen])
|
||||||
header.SetDst(path.SuperNodeMessage)
|
header.SetDst(config.SuperNodeMessage)
|
||||||
header.SetTTL(0)
|
header.SetTTL(0)
|
||||||
header.SetSrc(device.ID)
|
header.SetSrc(device.ID)
|
||||||
header.SetUsage(path.Register)
|
header.SetUsage(path.Register)
|
||||||
@ -441,7 +454,7 @@ func (device *Device) RoutineSpreadAllMyNeighbor() {
|
|||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
device.process_RequestPeerMsg(path.QueryPeerMsg{
|
device.process_RequestPeerMsg(path.QueryPeerMsg{
|
||||||
Request_ID: uint32(path.Boardcast),
|
Request_ID: uint32(config.Boardcast),
|
||||||
})
|
})
|
||||||
time.Sleep(path.S2TD(device.DRoute.P2P.SendPeerInterval))
|
time.Sleep(path.S2TD(device.DRoute.P2P.SendPeerInterval))
|
||||||
}
|
}
|
||||||
@ -483,7 +496,7 @@ func (device *Device) GeneratePingPacket(src_nodeID config.Vertex) ([]byte, erro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
header.SetDst(path.PingMessage)
|
header.SetDst(config.PingMessage)
|
||||||
header.SetTTL(0)
|
header.SetTTL(0)
|
||||||
header.SetSrc(device.ID)
|
header.SetSrc(device.ID)
|
||||||
header.SetUsage(path.PingPacket)
|
header.SetUsage(path.PingPacket)
|
||||||
@ -502,7 +515,7 @@ func (device *Device) process_UpdateNhTableMsg(content path.UpdateNhTableMsg) er
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
downloadurl := device.DRoute.SuperNode.APIUrl + "/nhtable?PubKey=" + url.QueryEscape(PubKey2Str(device.staticIdentity.publicKey)) + "&State=" + url.QueryEscape(string(content.State_hash[:]))
|
downloadurl := device.DRoute.SuperNode.APIUrl + "/nhtable?PubKey=" + url.QueryEscape(PubKey2Str(device.staticIdentity.publicKey)) + "&State=" + url.QueryEscape(string(content.State_hash[:]))
|
||||||
if device.LogControl {
|
if device.LogLevel.LogControl {
|
||||||
fmt.Println("Download NhTable from :" + downloadurl)
|
fmt.Println("Download NhTable from :" + downloadurl)
|
||||||
}
|
}
|
||||||
client := http.Client{
|
client := http.Client{
|
||||||
@ -519,6 +532,9 @@ func (device *Device) process_UpdateNhTableMsg(content path.UpdateNhTableMsg) er
|
|||||||
device.log.Errorf(err.Error())
|
device.log.Errorf(err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if device.LogLevel.LogControl {
|
||||||
|
fmt.Println("Download result :" + string(allbytes))
|
||||||
|
}
|
||||||
if err := json.Unmarshal(allbytes, &NhTable); err != nil {
|
if err := json.Unmarshal(allbytes, &NhTable); err != nil {
|
||||||
device.log.Errorf(err.Error())
|
device.log.Errorf(err.Error())
|
||||||
return err
|
return err
|
||||||
@ -532,7 +548,7 @@ func (device *Device) process_RequestPeerMsg(content path.QueryPeerMsg) error {
|
|||||||
if device.DRoute.P2P.UseP2P {
|
if device.DRoute.P2P.UseP2P {
|
||||||
device.peers.RLock()
|
device.peers.RLock()
|
||||||
for pubkey, peer := range device.peers.keyMap {
|
for pubkey, peer := range device.peers.keyMap {
|
||||||
if peer.ID >= path.Special_NodeID {
|
if peer.ID >= config.Special_NodeID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if peer.endpoint == nil {
|
if peer.endpoint == nil {
|
||||||
@ -554,7 +570,7 @@ func (device *Device) process_RequestPeerMsg(content path.QueryPeerMsg) error {
|
|||||||
}
|
}
|
||||||
buf := make([]byte, path.EgHeaderLen+len(body))
|
buf := make([]byte, path.EgHeaderLen+len(body))
|
||||||
header, _ := path.NewEgHeader(buf[0:path.EgHeaderLen])
|
header, _ := path.NewEgHeader(buf[0:path.EgHeaderLen])
|
||||||
header.SetDst(path.ControlMessage)
|
header.SetDst(config.ControlMessage)
|
||||||
header.SetTTL(200)
|
header.SetTTL(200)
|
||||||
header.SetSrc(device.ID)
|
header.SetSrc(device.ID)
|
||||||
header.SetUsage(path.BoardcastPeer)
|
header.SetUsage(path.BoardcastPeer)
|
||||||
|
@ -9,7 +9,9 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@ -251,9 +253,9 @@ func (device *Device) RoutineReadFromTUN() {
|
|||||||
dstMacAddr := tap.GetDstMacAddr(elem.packet[path.EgHeaderLen:])
|
dstMacAddr := tap.GetDstMacAddr(elem.packet[path.EgHeaderLen:])
|
||||||
// lookup peer
|
// lookup peer
|
||||||
if tap.IsNotUnicast(dstMacAddr) {
|
if tap.IsNotUnicast(dstMacAddr) {
|
||||||
dst_nodeID = path.Boardcast
|
dst_nodeID = config.Boardcast
|
||||||
} else if val, ok := device.l2fib.Load(dstMacAddr); !ok { //Lookup failed
|
} else if val, ok := device.l2fib.Load(dstMacAddr); !ok { //Lookup failed
|
||||||
dst_nodeID = path.Boardcast
|
dst_nodeID = config.Boardcast
|
||||||
} else {
|
} else {
|
||||||
dst_nodeID = val.(config.Vertex)
|
dst_nodeID = val.(config.Vertex)
|
||||||
}
|
}
|
||||||
@ -263,17 +265,22 @@ func (device *Device) RoutineReadFromTUN() {
|
|||||||
EgBody.SetTTL(200)
|
EgBody.SetTTL(200)
|
||||||
EgBody.SetUsage(path.NornalPacket)
|
EgBody.SetUsage(path.NornalPacket)
|
||||||
|
|
||||||
if dst_nodeID != path.Boardcast {
|
if dst_nodeID != config.Boardcast {
|
||||||
var peer_out *Peer
|
var peer *Peer
|
||||||
next_id := *device.graph.NhTable[device.ID][dst_nodeID]
|
next_id := *device.graph.NhTable[device.ID][dst_nodeID]
|
||||||
peer_out = device.peers.IDMap[next_id]
|
peer = device.peers.IDMap[next_id]
|
||||||
if peer_out == nil {
|
if peer == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if peer_out.isRunning.Get() {
|
if device.LogLevel.LogNormal {
|
||||||
peer_out.StagePacket(elem)
|
if device.LogLevel.LogNormal {
|
||||||
|
fmt.Println("Send Normal packet To:" + peer.GetEndpointDstStr() + " SrcID:" + device.ID.ToString() + " DstID:" + dst_nodeID.ToString() + " Len:" + strconv.Itoa(len(elem.packet)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if peer.isRunning.Get() {
|
||||||
|
peer.StagePacket(elem)
|
||||||
elem = nil
|
elem = nil
|
||||||
peer_out.SendStagedPackets()
|
peer.SendStagedPackets()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
device.BoardcastPacket(make(map[config.Vertex]bool, 0), elem.packet, offset)
|
device.BoardcastPacket(make(map[config.Vertex]bool, 0), elem.packet, offset)
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -16,6 +16,7 @@ loglevel:
|
|||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
interface:
|
interface:
|
||||||
itype: stdio
|
itype: udpsock
|
||||||
name: tap1
|
name: tap1
|
||||||
vppifaceid: 1
|
vppifaceid: 1
|
||||||
vppbridgeid: 0
|
vppbridgeid: 0
|
||||||
@ -15,7 +15,8 @@ listenport: 3001
|
|||||||
loglevel:
|
loglevel:
|
||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: false
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -8,14 +8,15 @@ interface:
|
|||||||
recvaddr: 127.0.0.1:4002
|
recvaddr: 127.0.0.1:4002
|
||||||
sendaddr: 127.0.0.1:5002
|
sendaddr: 127.0.0.1:5002
|
||||||
l2headermode: kbdbg
|
l2headermode: kbdbg
|
||||||
nodeid: 1
|
nodeid: 2
|
||||||
nodename: Node01
|
nodename: Node02
|
||||||
privkey: OH8BsVUU2Rqzeu9B2J5GPG8PUmxWfX8uVvNFZKhVF3o=
|
privkey: OH8BsVUU2Rqzeu9B2J5GPG8PUmxWfX8uVvNFZKhVF3o=
|
||||||
listenport: 3002
|
listenport: 3002
|
||||||
loglevel:
|
loglevel:
|
||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: false
|
||||||
|
lognormal: true
|
||||||
dynamicroute:
|
dynamicroute:
|
||||||
sendpinginterval: 20
|
sendpinginterval: 20
|
||||||
dupchecktimeout: 40
|
dupchecktimeout: 40
|
||||||
|
@ -2,10 +2,12 @@ nodename: NodeSuper
|
|||||||
privkeyv4: mL5IW0GuqbjgDeOJuPHBU2iJzBPNKhaNEXbIGwwYWWk=
|
privkeyv4: mL5IW0GuqbjgDeOJuPHBU2iJzBPNKhaNEXbIGwwYWWk=
|
||||||
privkeyv6: +EdOKIoBp/EvIusHDsvXhV1RJYbyN3Qr8nxlz35wl3I=
|
privkeyv6: +EdOKIoBp/EvIusHDsvXhV1RJYbyN3Qr8nxlz35wl3I=
|
||||||
listenport: 3000
|
listenport: 3000
|
||||||
|
statepassword: passwd
|
||||||
loglevel:
|
loglevel:
|
||||||
loglevel: normal
|
loglevel: normal
|
||||||
logtransit: true
|
logtransit: true
|
||||||
logcontrol: true
|
logcontrol: true
|
||||||
|
lognormal: true
|
||||||
repushconfiginterval: 30
|
repushconfiginterval: 30
|
||||||
graphrecalculatesetting:
|
graphrecalculatesetting:
|
||||||
jittertolerance: 5
|
jittertolerance: 5
|
||||||
|
@ -203,7 +203,7 @@ func Edge(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
for _, peerconf := range tconfig.Peers {
|
for _, peerconf := range tconfig.Peers {
|
||||||
sk_slice, _ = base64.StdEncoding.DecodeString(peerconf.PubKey)
|
sk_slice, _ = base64.StdEncoding.DecodeString(peerconf.PubKey)
|
||||||
copy(sk[:], sk_slice)
|
copy(sk[:], sk_slice)
|
||||||
if peerconf.NodeID >= path.SuperNodeMessage {
|
if peerconf.NodeID >= config.SuperNodeMessage {
|
||||||
return errors.New(fmt.Sprintf("Invalid Node_id at peer %s\n", peerconf.PubKey))
|
return errors.New(fmt.Sprintf("Invalid Node_id at peer %s\n", peerconf.PubKey))
|
||||||
}
|
}
|
||||||
the_device.NewPeer(sk, peerconf.NodeID)
|
the_device.NewPeer(sk, peerconf.NodeID)
|
||||||
@ -228,7 +228,7 @@ func Edge(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
peer, err := the_device.NewPeer(sk, path.SuperNodeMessage)
|
peer, err := the_device.NewPeer(sk, config.SuperNodeMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -243,7 +243,7 @@ func Edge(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
peer, err := the_device.NewPeer(sk, path.SuperNodeMessage)
|
peer, err := the_device.NewPeer(sk, config.SuperNodeMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -251,6 +251,7 @@ func Edge(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
peer.ConnURL = tconfig.DynamicRoute.SuperNode.ConnURLV6
|
peer.ConnURL = tconfig.DynamicRoute.SuperNode.ConnURLV6
|
||||||
peer.SetEndpointFromPacket(endpoint)
|
peer.SetEndpointFromPacket(endpoint)
|
||||||
}
|
}
|
||||||
|
the_device.Event_Supernode_OK <- struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Verbosef("Device started")
|
logger.Verbosef("Device started")
|
||||||
|
@ -152,5 +152,6 @@ func HttpServer(http_port int, apiprefix string) {
|
|||||||
}
|
}
|
||||||
mux.HandleFunc(apiprefix+"/peerinfo", get_peerinfo)
|
mux.HandleFunc(apiprefix+"/peerinfo", get_peerinfo)
|
||||||
mux.HandleFunc(apiprefix+"/nhtable", get_nhtable)
|
mux.HandleFunc(apiprefix+"/nhtable", get_nhtable)
|
||||||
|
mux.HandleFunc(apiprefix+"/peerstate", get_info)
|
||||||
http.ListenAndServe(":"+strconv.Itoa(http_port), mux)
|
http.ListenAndServe(":"+strconv.Itoa(http_port), mux)
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ func Super(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
http_PeerID2Map = make(map[config.Vertex]string)
|
http_PeerID2Map = make(map[config.Vertex]string)
|
||||||
http_PeerInfos = make(map[string]config.HTTP_Peerinfo)
|
http_PeerInfos = make(map[string]config.HTTP_Peerinfo)
|
||||||
http_HashSalt = []byte(config.RandomStr(32, "Salt generate failed"))
|
http_HashSalt = []byte(config.RandomStr(32, "Salt generate failed"))
|
||||||
|
http_StatePWD = sconfig.StatePassword
|
||||||
|
|
||||||
super_chains := path.SUPER_Events{
|
super_chains := path.SUPER_Events{
|
||||||
Event_server_pong: make(chan path.PongMsg, 1<<5),
|
Event_server_pong: make(chan path.PongMsg, 1<<5),
|
||||||
@ -108,8 +109,8 @@ func Super(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
|
|
||||||
thetap, _ := tap.CreateDummyTAP()
|
thetap, _ := tap.CreateDummyTAP()
|
||||||
http_graph = path.NewGraph(3, true, sconfig.GraphRecalculateSetting)
|
http_graph = path.NewGraph(3, true, sconfig.GraphRecalculateSetting)
|
||||||
http_device4 = device.NewDevice(thetap, path.SuperNodeMessage, conn.NewCustomBind(true, false), logger4, http_graph, true, configPath, nil, &sconfig, &super_chains)
|
http_device4 = device.NewDevice(thetap, config.SuperNodeMessage, conn.NewCustomBind(true, false), logger4, http_graph, true, configPath, nil, &sconfig, &super_chains)
|
||||||
http_device6 = device.NewDevice(thetap, path.SuperNodeMessage, conn.NewCustomBind(false, true), logger6, http_graph, true, configPath, nil, &sconfig, &super_chains)
|
http_device6 = device.NewDevice(thetap, config.SuperNodeMessage, conn.NewCustomBind(false, true), logger6, http_graph, true, configPath, nil, &sconfig, &super_chains)
|
||||||
defer http_device4.Close()
|
defer http_device4.Close()
|
||||||
defer http_device6.Close()
|
defer http_device6.Close()
|
||||||
var sk [32]byte
|
var sk [32]byte
|
||||||
@ -142,7 +143,7 @@ func Super(configPath string, useUAPI bool, printExample bool) (err error) {
|
|||||||
fmt.Println("Error decode base64 ", err)
|
fmt.Println("Error decode base64 ", err)
|
||||||
}
|
}
|
||||||
copy(pk[:], pk_slice)
|
copy(pk[:], pk_slice)
|
||||||
if peerconf.NodeID >= path.SuperNodeMessage {
|
if peerconf.NodeID >= config.SuperNodeMessage {
|
||||||
return errors.New(fmt.Sprintf("Invalid Node_id at peer %s\n", peerconf.PubKey))
|
return errors.New(fmt.Sprintf("Invalid Node_id at peer %s\n", peerconf.PubKey))
|
||||||
}
|
}
|
||||||
http_PeerID2Map[peerconf.NodeID] = peerconf.PubKey
|
http_PeerID2Map[peerconf.NodeID] = peerconf.PubKey
|
||||||
@ -280,9 +281,9 @@ func PushNhTable() {
|
|||||||
}
|
}
|
||||||
buf := make([]byte, path.EgHeaderLen+len(body))
|
buf := make([]byte, path.EgHeaderLen+len(body))
|
||||||
header, _ := path.NewEgHeader(buf[:path.EgHeaderLen])
|
header, _ := path.NewEgHeader(buf[:path.EgHeaderLen])
|
||||||
header.SetDst(path.SuperNodeMessage)
|
header.SetDst(config.SuperNodeMessage)
|
||||||
header.SetPacketLength(uint16(len(body)))
|
header.SetPacketLength(uint16(len(body)))
|
||||||
header.SetSrc(path.SuperNodeMessage)
|
header.SetSrc(config.SuperNodeMessage)
|
||||||
header.SetTTL(0)
|
header.SetTTL(0)
|
||||||
header.SetUsage(path.UpdateNhTable)
|
header.SetUsage(path.UpdateNhTable)
|
||||||
copy(buf[path.EgHeaderLen:], body)
|
copy(buf[path.EgHeaderLen:], body)
|
||||||
@ -308,9 +309,9 @@ func PushUpdate() {
|
|||||||
}
|
}
|
||||||
buf := make([]byte, path.EgHeaderLen+len(body))
|
buf := make([]byte, path.EgHeaderLen+len(body))
|
||||||
header, _ := path.NewEgHeader(buf[:path.EgHeaderLen])
|
header, _ := path.NewEgHeader(buf[:path.EgHeaderLen])
|
||||||
header.SetDst(path.SuperNodeMessage)
|
header.SetDst(config.SuperNodeMessage)
|
||||||
header.SetPacketLength(uint16(len(body)))
|
header.SetPacketLength(uint16(len(body)))
|
||||||
header.SetSrc(path.SuperNodeMessage)
|
header.SetSrc(config.SuperNodeMessage)
|
||||||
header.SetTTL(0)
|
header.SetTTL(0)
|
||||||
header.SetUsage(path.UpdatePeer)
|
header.SetUsage(path.UpdatePeer)
|
||||||
copy(buf[path.EgHeaderLen:], body)
|
copy(buf[path.EgHeaderLen:], body)
|
||||||
|
@ -27,7 +27,7 @@ type RegisterMsg struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *RegisterMsg) ToString() string {
|
func (c *RegisterMsg) ToString() string {
|
||||||
return "RegisterMsg Node_id:" + strconv.Itoa(int(c.Node_id))
|
return "RegisterMsg Node_id:" + c.Node_id.ToString()
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseRegisterMsg(bin []byte) (StructPlace RegisterMsg, err error) {
|
func ParseRegisterMsg(bin []byte) (StructPlace RegisterMsg, err error) {
|
||||||
@ -77,7 +77,7 @@ type PingMsg struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *PingMsg) ToString() string {
|
func (c *PingMsg) ToString() string {
|
||||||
return "PingMsg SID:" + strconv.Itoa(int(c.Src_nodeID)) + " Time:" + c.Time.String() + " RequestID:" + strconv.Itoa(int(c.RequestID))
|
return "PingMsg SID:" + c.Src_nodeID.ToString() + " Time:" + c.Time.String() + " RequestID:" + strconv.Itoa(int(c.RequestID))
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParsePingMsg(bin []byte) (StructPlace PingMsg, err error) {
|
func ParsePingMsg(bin []byte) (StructPlace PingMsg, err error) {
|
||||||
@ -96,7 +96,7 @@ type PongMsg struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *PongMsg) ToString() string {
|
func (c *PongMsg) ToString() string {
|
||||||
return "PongMsg SID:" + strconv.Itoa(int(c.Src_nodeID)) + " DID:" + strconv.Itoa(int(c.Dst_nodeID)) + " Timediff:" + c.Timediff.String() + " RequestID:" + strconv.Itoa(int(c.RequestID))
|
return "PongMsg SID:" + c.Src_nodeID.ToString() + " DID:" + c.Dst_nodeID.ToString() + " Timediff:" + c.Timediff.String() + " RequestID:" + strconv.Itoa(int(c.RequestID))
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParsePongMsg(bin []byte) (StructPlace PongMsg, err error) {
|
func ParsePongMsg(bin []byte) (StructPlace PongMsg, err error) {
|
||||||
@ -132,7 +132,7 @@ type BoardcastPeerMsg struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *BoardcastPeerMsg) ToString() string {
|
func (c *BoardcastPeerMsg) ToString() string {
|
||||||
return "BoardcastPeerMsg Request_ID:" + strconv.Itoa(int(c.Request_ID)) + " NodeID:" + strconv.Itoa(int(c.NodeID)) + " ConnURL:" + c.ConnURL
|
return "BoardcastPeerMsg Request_ID:" + strconv.Itoa(int(c.Request_ID)) + " NodeID:" + c.NodeID.ToString() + " ConnURL:" + c.ConnURL
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseBoardcastPeerMsg(bin []byte) (StructPlace BoardcastPeerMsg, err error) {
|
func ParseBoardcastPeerMsg(bin []byte) (StructPlace BoardcastPeerMsg, err error) {
|
||||||
|
10
path/path.go
10
path/path.go
@ -12,14 +12,6 @@ import (
|
|||||||
|
|
||||||
const Infinity = float64(99999)
|
const Infinity = float64(99999)
|
||||||
|
|
||||||
const (
|
|
||||||
Boardcast config.Vertex = math.MaxUint32 - iota // Normal boardcast, boardcast with route table
|
|
||||||
ControlMessage config.Vertex = math.MaxUint32 - iota // p2p mode: boardcast to every know keer and prevent dup/ super mode: send to supernode
|
|
||||||
PingMessage config.Vertex = math.MaxUint32 - iota // boardsact to every know peer but don't transit
|
|
||||||
SuperNodeMessage config.Vertex = math.MaxUint32 - iota
|
|
||||||
Special_NodeID config.Vertex = SuperNodeMessage
|
|
||||||
)
|
|
||||||
|
|
||||||
func (g *IG) GetCurrentTime() time.Time {
|
func (g *IG) GetCurrentTime() time.Time {
|
||||||
return time.Now().Round(0)
|
return time.Now().Round(0)
|
||||||
}
|
}
|
||||||
@ -268,9 +260,11 @@ func (g *IG) GetEdges() (edges map[config.Vertex]map[config.Vertex]float64) {
|
|||||||
for src, _ := range vert {
|
for src, _ := range vert {
|
||||||
edges[src] = make(map[config.Vertex]float64, len(vert))
|
edges[src] = make(map[config.Vertex]float64, len(vert))
|
||||||
for dst, _ := range vert {
|
for dst, _ := range vert {
|
||||||
|
if src != dst {
|
||||||
edges[src][dst] = g.Weight(src, dst)
|
edges[src][dst] = g.Weight(src, dst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package tap
|
package tap
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
type DummyTap struct {
|
type DummyTap struct {
|
||||||
stopRead chan struct{}
|
stopRead chan struct{}
|
||||||
events chan Event
|
events chan Event
|
||||||
@ -21,7 +23,7 @@ func CreateDummyTAP() (tapdev Device, err error) {
|
|||||||
|
|
||||||
func (tap *DummyTap) Read([]byte, int) (int, error) {
|
func (tap *DummyTap) Read([]byte, int) (int, error) {
|
||||||
_ = <-tap.stopRead
|
_ = <-tap.stopRead
|
||||||
return 0, nil
|
return 0, errors.New("Device stopped")
|
||||||
} // read a packet from the device (without any additional headers)
|
} // read a packet from the device (without any additional headers)
|
||||||
func (tap *DummyTap) Write(packet []byte, size int) (int, error) {
|
func (tap *DummyTap) Write(packet []byte, size int) (int, error) {
|
||||||
return size, nil
|
return size, nil
|
||||||
@ -40,6 +42,8 @@ func (tap *DummyTap) Events() chan Event {
|
|||||||
} // returns a constant channel of events related to the device
|
} // returns a constant channel of events related to the device
|
||||||
func (tap *DummyTap) Close() error {
|
func (tap *DummyTap) Close() error {
|
||||||
tap.events <- EventDown
|
tap.events <- EventDown
|
||||||
close(tap.events)
|
tap.stopRead <- struct{}{}
|
||||||
|
//close(tap.stopRead)
|
||||||
|
//close(tap.events)
|
||||||
return nil
|
return nil
|
||||||
} // stops the device and closes the event channel
|
} // stops the device and closes the event channel
|
||||||
|
Loading…
Reference in New Issue
Block a user