2021-08-20 19:32:50 +02:00
|
|
|
package config
|
|
|
|
|
2021-08-23 21:11:01 +02:00
|
|
|
import (
|
|
|
|
"crypto/rand"
|
2021-08-25 10:13:53 +02:00
|
|
|
"math"
|
2021-08-25 13:54:13 +02:00
|
|
|
"strconv"
|
2021-08-25 10:13:53 +02:00
|
|
|
)
|
|
|
|
|
2021-09-20 22:20:00 +02:00
|
|
|
// Nonnegative integer ID of vertex
|
|
|
|
type Vertex uint16
|
|
|
|
|
2021-08-25 10:13:53 +02:00
|
|
|
const (
|
2021-09-30 23:15:23 +02:00
|
|
|
Broadcast Vertex = math.MaxUint16 - iota // Normal boardcast, boardcast with route table
|
|
|
|
ControlMessage Vertex = math.MaxUint16 - iota // p2p mode: boardcast to every know peer and prevent dup. super mode: send to supernode
|
2021-09-20 22:20:00 +02:00
|
|
|
SuperNodeMessage Vertex = math.MaxUint16 - iota
|
2021-08-25 10:13:53 +02:00
|
|
|
Special_NodeID Vertex = SuperNodeMessage
|
2021-08-23 21:11:01 +02:00
|
|
|
)
|
|
|
|
|
2021-08-20 19:32:50 +02:00
|
|
|
type EdgeConfig struct {
|
2021-08-24 10:43:55 +02:00
|
|
|
Interface InterfaceConf
|
|
|
|
NodeID Vertex
|
|
|
|
NodeName string
|
2021-09-20 22:20:00 +02:00
|
|
|
DefaultTTL uint8
|
2021-08-24 10:43:55 +02:00
|
|
|
PrivKey string
|
|
|
|
ListenPort int
|
|
|
|
LogLevel LoggerInfo
|
|
|
|
DynamicRoute DynamicRouteInfo
|
|
|
|
NextHopTable NextHopTable
|
|
|
|
ResetConnInterval float64
|
|
|
|
Peers []PeerInfo
|
2021-08-20 19:32:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
type SuperConfig struct {
|
|
|
|
NodeName string
|
|
|
|
PrivKeyV4 string
|
|
|
|
PrivKeyV6 string
|
|
|
|
ListenPort int
|
|
|
|
LogLevel LoggerInfo
|
2021-08-21 16:54:24 +02:00
|
|
|
RePushConfigInterval float64
|
2021-09-21 03:15:23 +02:00
|
|
|
Passwords Passwords
|
2021-08-20 19:32:50 +02:00
|
|
|
GraphRecalculateSetting GraphRecalculateSetting
|
2021-09-30 23:15:23 +02:00
|
|
|
NextHopTable NextHopTable
|
2021-09-21 03:15:23 +02:00
|
|
|
EdgeTemplate string
|
2021-09-30 23:15:23 +02:00
|
|
|
UsePSKForInterEdge bool
|
2021-09-20 22:20:00 +02:00
|
|
|
Peers []SuperPeerInfo
|
2021-08-20 19:32:50 +02:00
|
|
|
}
|
|
|
|
|
2021-09-21 03:15:23 +02:00
|
|
|
type Passwords struct {
|
|
|
|
ShowState string
|
|
|
|
AddPeer string
|
|
|
|
DelPeer string
|
|
|
|
}
|
|
|
|
|
2021-08-20 19:32:50 +02:00
|
|
|
type InterfaceConf struct {
|
2021-08-24 10:43:55 +02:00
|
|
|
Itype string
|
|
|
|
Name string
|
|
|
|
VPPIfaceID uint32
|
|
|
|
VPPBridgeID uint32
|
|
|
|
MacAddrPrefix string
|
|
|
|
MTU int
|
|
|
|
RecvAddr string
|
|
|
|
SendAddr string
|
|
|
|
L2HeaderMode string
|
2021-08-20 19:32:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
type PeerInfo struct {
|
|
|
|
NodeID Vertex
|
|
|
|
PubKey string
|
2021-08-21 16:54:24 +02:00
|
|
|
PSKey string
|
2021-08-20 19:32:50 +02:00
|
|
|
EndPoint string
|
|
|
|
Static bool
|
|
|
|
}
|
|
|
|
|
2021-09-20 22:20:00 +02:00
|
|
|
type SuperPeerInfo struct {
|
|
|
|
NodeID Vertex
|
|
|
|
Name string
|
|
|
|
PubKey string
|
|
|
|
PSKey string
|
|
|
|
}
|
|
|
|
|
2021-08-20 19:32:50 +02:00
|
|
|
type LoggerInfo struct {
|
|
|
|
LogLevel string
|
|
|
|
LogTransit bool
|
2021-08-21 16:54:24 +02:00
|
|
|
LogControl bool
|
2021-08-25 10:13:53 +02:00
|
|
|
LogNormal bool
|
2021-08-25 13:54:13 +02:00
|
|
|
LogNTP bool
|
2021-08-20 19:32:50 +02:00
|
|
|
}
|
|
|
|
|
2021-08-25 10:13:53 +02:00
|
|
|
func (v *Vertex) ToString() string {
|
2021-08-25 13:54:13 +02:00
|
|
|
switch *v {
|
2021-09-30 23:15:23 +02:00
|
|
|
case Broadcast:
|
2021-09-21 22:03:11 +02:00
|
|
|
return "Boardcast"
|
2021-08-25 10:13:53 +02:00
|
|
|
case ControlMessage:
|
2021-09-21 22:03:11 +02:00
|
|
|
return "Control"
|
2021-08-25 10:13:53 +02:00
|
|
|
case SuperNodeMessage:
|
2021-09-21 22:03:11 +02:00
|
|
|
return "Super"
|
2021-08-25 10:13:53 +02:00
|
|
|
default:
|
|
|
|
return strconv.Itoa(int(*v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-08-20 19:32:50 +02:00
|
|
|
type DynamicRouteInfo struct {
|
|
|
|
SendPingInterval float64
|
2021-09-23 13:31:01 +02:00
|
|
|
PeerAliveTimeout float64
|
2021-08-20 19:32:50 +02:00
|
|
|
DupCheckTimeout float64
|
|
|
|
ConnTimeOut float64
|
2021-09-23 13:31:01 +02:00
|
|
|
ConnNextTry float64
|
2021-08-20 19:32:50 +02:00
|
|
|
SaveNewPeers bool
|
|
|
|
SuperNode SuperInfo
|
|
|
|
P2P P2Pinfo
|
|
|
|
NTPconfig NTPinfo
|
|
|
|
}
|
|
|
|
|
|
|
|
type NTPinfo struct {
|
2021-08-25 13:54:13 +02:00
|
|
|
UseNTP bool
|
|
|
|
MaxServerUse int
|
|
|
|
SyncTimeInterval float64
|
|
|
|
NTPTimeout float64
|
|
|
|
Servers []string
|
2021-08-20 19:32:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
type SuperInfo struct {
|
|
|
|
UseSuperNode bool
|
2021-09-23 13:31:01 +02:00
|
|
|
PSKey string
|
2021-08-20 19:32:50 +02:00
|
|
|
ConnURLV4 string
|
|
|
|
PubKeyV4 string
|
|
|
|
ConnURLV6 string
|
|
|
|
PubKeyV6 string
|
|
|
|
APIUrl string
|
|
|
|
SuperNodeInfoTimeout float64
|
|
|
|
}
|
|
|
|
|
|
|
|
type P2Pinfo struct {
|
|
|
|
UseP2P bool
|
|
|
|
SendPeerInterval float64
|
|
|
|
GraphRecalculateSetting GraphRecalculateSetting
|
|
|
|
}
|
|
|
|
|
|
|
|
type GraphRecalculateSetting struct {
|
2021-09-30 23:15:23 +02:00
|
|
|
StaticMode bool
|
2021-08-20 19:32:50 +02:00
|
|
|
JitterTolerance float64
|
|
|
|
JitterToleranceMultiplier float64
|
|
|
|
NodeReportTimeout float64
|
|
|
|
RecalculateCoolDown float64
|
|
|
|
}
|
|
|
|
|
|
|
|
type DistTable map[Vertex]map[Vertex]float64
|
|
|
|
type NextHopTable map[Vertex]map[Vertex]*Vertex
|
|
|
|
|
2021-09-21 22:03:11 +02:00
|
|
|
type API_Peerinfo struct {
|
2021-08-20 19:32:50 +02:00
|
|
|
NodeID Vertex
|
|
|
|
PSKey string
|
2021-09-23 13:31:01 +02:00
|
|
|
Connurl map[string]int
|
2021-08-20 19:32:50 +02:00
|
|
|
}
|
2021-09-20 22:20:00 +02:00
|
|
|
|
2021-09-21 22:03:11 +02:00
|
|
|
type API_Peers map[string]API_Peerinfo // map[PubKey]API_Peerinfo
|
2021-08-23 21:11:01 +02:00
|
|
|
|
|
|
|
const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
|
|
|
|
func RandomStr(length int, defaults string) string {
|
|
|
|
bytes := make([]byte, length)
|
|
|
|
|
|
|
|
if _, err := rand.Read(bytes); err != nil {
|
|
|
|
return defaults
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, b := range bytes {
|
|
|
|
bytes[i] = chars[b%byte(len(chars))]
|
|
|
|
}
|
|
|
|
|
|
|
|
return string(bytes)
|
|
|
|
}
|