mirror of
https://github.com/KusakabeShi/EtherGuard-VPN.git
synced 2024-11-26 01:03:08 +01:00
156 lines
3.3 KiB
Go
156 lines
3.3 KiB
Go
package config
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"math"
|
|
"strconv"
|
|
)
|
|
|
|
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 {
|
|
Interface InterfaceConf
|
|
NodeID Vertex
|
|
NodeName string
|
|
PrivKey string
|
|
ListenPort int
|
|
LogLevel LoggerInfo
|
|
DynamicRoute DynamicRouteInfo
|
|
NextHopTable NextHopTable
|
|
ResetConnInterval float64
|
|
Peers []PeerInfo
|
|
}
|
|
|
|
type SuperConfig struct {
|
|
NodeName string
|
|
PrivKeyV4 string
|
|
PrivKeyV6 string
|
|
ListenPort int
|
|
LogLevel LoggerInfo
|
|
RePushConfigInterval float64
|
|
StatePassword string
|
|
GraphRecalculateSetting GraphRecalculateSetting
|
|
Peers []PeerInfo
|
|
}
|
|
|
|
type InterfaceConf struct {
|
|
Itype string
|
|
Name string
|
|
VPPIfaceID uint32
|
|
VPPBridgeID uint32
|
|
MacAddrPrefix string
|
|
MTU int
|
|
RecvAddr string
|
|
SendAddr string
|
|
L2HeaderMode string
|
|
}
|
|
|
|
type PeerInfo struct {
|
|
NodeID Vertex
|
|
PubKey string
|
|
PSKey string
|
|
EndPoint string
|
|
Static bool
|
|
}
|
|
|
|
type LoggerInfo struct {
|
|
LogLevel string
|
|
LogTransit bool
|
|
LogControl bool
|
|
LogNormal bool
|
|
LogNTP bool
|
|
}
|
|
|
|
// Nonnegative integer ID of vertex
|
|
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 {
|
|
SendPingInterval float64
|
|
DupCheckTimeout float64
|
|
ConnTimeOut float64
|
|
SaveNewPeers bool
|
|
SuperNode SuperInfo
|
|
P2P P2Pinfo
|
|
NTPconfig NTPinfo
|
|
}
|
|
|
|
type NTPinfo struct {
|
|
UseNTP bool
|
|
MaxServerUse int
|
|
SyncTimeInterval float64
|
|
NTPTimeout float64
|
|
Servers []string
|
|
}
|
|
|
|
type SuperInfo struct {
|
|
UseSuperNode bool
|
|
ConnURLV4 string
|
|
PubKeyV4 string
|
|
ConnURLV6 string
|
|
PubKeyV6 string
|
|
APIUrl string
|
|
SuperNodeInfoTimeout float64
|
|
}
|
|
|
|
type P2Pinfo struct {
|
|
UseP2P bool
|
|
SendPeerInterval float64
|
|
PeerAliveTimeout float64
|
|
GraphRecalculateSetting GraphRecalculateSetting
|
|
}
|
|
|
|
type GraphRecalculateSetting struct {
|
|
JitterTolerance float64
|
|
JitterToleranceMultiplier float64
|
|
NodeReportTimeout float64
|
|
RecalculateCoolDown float64
|
|
}
|
|
|
|
type DistTable map[Vertex]map[Vertex]float64
|
|
type NextHopTable map[Vertex]map[Vertex]*Vertex
|
|
|
|
type HTTP_Peerinfo struct {
|
|
NodeID Vertex
|
|
PubKey string
|
|
PSKey string
|
|
Connurl map[string]bool
|
|
}
|
|
type HTTP_Peers map[string]HTTP_Peerinfo
|
|
|
|
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)
|
|
}
|