From db8cf4710a2aee6f15bb122d39ca20533c9f2f4e Mon Sep 17 00:00:00 2001 From: Kusakabe Si Date: Thu, 9 Dec 2021 22:39:37 +0000 Subject: [PATCH] reorder config, 3.3, genp2p --- .vscode/launch.json | 6 +- device/device.go | 1 + device/peer.go | 2 +- device/receive.go | 2 +- device/receivesendproc.go | 36 ++++- example_config/p2p_mode/EgNet_edge1.yaml | 71 ++++++++++ example_config/p2p_mode/EgNet_edge2.yaml | 83 ++++++++++++ example_config/p2p_mode/EgNet_edge3.yaml | 83 ++++++++++++ example_config/p2p_mode/EgNet_edge4.yaml | 83 ++++++++++++ example_config/p2p_mode/EgNet_edge5.yaml | 71 ++++++++++ example_config/p2p_mode/EgNet_edge6.yaml | 71 ++++++++++ example_config/p2p_mode/README_zh.md | 85 ++++++++++-- example_config/p2p_mode/genstatic.yaml | 29 +++++ example_config/p2p_mode/n1.yaml | 113 ---------------- example_config/p2p_mode/n2.yaml | 123 ------------------ example_config/p2p_mode/n3.yaml | 123 ------------------ example_config/p2p_mode/n4.yaml | 123 ------------------ example_config/p2p_mode/n5.yaml | 113 ---------------- example_config/p2p_mode/n6.yaml | 113 ---------------- example_config/static_mode/EgNet_edge1.yaml | 14 +- example_config/static_mode/EgNet_edge2.yaml | 30 ++--- example_config/static_mode/EgNet_edge3.yaml | 22 ++-- example_config/static_mode/EgNet_edge4.yaml | 22 ++-- example_config/static_mode/EgNet_edge5.yaml | 14 +- example_config/static_mode/EgNet_edge6.yaml | 14 +- example_config/static_mode/genstatic.yaml | 2 +- .../{Node_edge001.yaml => EgNet_edge001.yaml} | 24 ++-- .../{Node_edge002.yaml => EgNet_edge002.yaml} | 24 ++-- .../{Node_edge100.yaml => EgNet_edge100.yaml} | 24 ++-- example_config/super_mode/EgNet_super.yaml | 55 ++++++++ example_config/super_mode/Node_super.yaml | 55 -------- example_config/super_mode/README_zh.md | 20 +-- example_config/super_mode/gensuper.yaml | 4 +- gencfg/example_conf.go | 18 +-- gencfg/gencfgNM.go | 34 ++++- gencfg/gencfgSM.go | 1 - gencfg/types.go | 15 --- main.go | 4 +- main_edge.go | 4 +- main_httpserver.go | 39 ++++-- main_super.go | 4 +- mtypes/config.go | 42 +++--- path/path.go | 6 - 43 files changed, 854 insertions(+), 968 deletions(-) create mode 100644 example_config/p2p_mode/EgNet_edge1.yaml create mode 100644 example_config/p2p_mode/EgNet_edge2.yaml create mode 100644 example_config/p2p_mode/EgNet_edge3.yaml create mode 100644 example_config/p2p_mode/EgNet_edge4.yaml create mode 100644 example_config/p2p_mode/EgNet_edge5.yaml create mode 100644 example_config/p2p_mode/EgNet_edge6.yaml create mode 100644 example_config/p2p_mode/genstatic.yaml delete mode 100644 example_config/p2p_mode/n1.yaml delete mode 100644 example_config/p2p_mode/n2.yaml delete mode 100644 example_config/p2p_mode/n3.yaml delete mode 100644 example_config/p2p_mode/n4.yaml delete mode 100644 example_config/p2p_mode/n5.yaml delete mode 100644 example_config/p2p_mode/n6.yaml rename example_config/super_mode/{Node_edge001.yaml => EgNet_edge001.yaml} (82%) rename example_config/super_mode/{Node_edge002.yaml => EgNet_edge002.yaml} (82%) rename example_config/super_mode/{Node_edge100.yaml => EgNet_edge100.yaml} (82%) create mode 100644 example_config/super_mode/EgNet_super.yaml delete mode 100644 example_config/super_mode/Node_super.yaml diff --git a/.vscode/launch.json b/.vscode/launch.json index ef84fd7..a31bf61 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,7 +12,7 @@ "program": "${workspaceFolder}", "buildFlags": "-tags 'novpp'", "env": {"CGO_CFLAGS":"-I/usr/include/memif"}, - "args":["-config","example_config/super_mode/s1.yaml","-mode","super"/*,"-example"*/], + "args":["-config","example_config/super_mode/EgNet_super.yaml","-mode","super"/*,"-example"*/], }, { "name": "Launch Edge", @@ -22,8 +22,8 @@ "program": "${workspaceFolder}", "buildFlags": "-tags 'novpp'", "env": {"CGO_CFLAGS":"-I/usr/include/memif"}, - "args":["-config","example_config/super_mode/n1.yaml","-mode","edge"/*,"-example"*/], - } + "args":["-config","example_config/p2p_mode/EgNet_edge1.yaml","-mode","edge"/*,"-example"*/], + }, { "name": "Launch GenCfg", "type": "go", diff --git a/device/device.go b/device/device.go index aef58fd..742c32a 100644 --- a/device/device.go +++ b/device/device.go @@ -371,6 +371,7 @@ func NewDevice(tapDevice tap.Device, id mtypes.Vertex, bind conn.Bind, logger *L device.Chan_SendRegisterStart = make(chan struct{}, 1<<5) device.Chan_HttpPostStart = make(chan struct{}, 1<<5) device.LogLevel = econfig.LogLevel + device.SuperConfig.DampingResistance = device.EdgeConfig.DynamicRoute.DampingResistance go device.RoutineSetEndpoint() go device.RoutineDetectOfflineAndTryNextEndpoint() diff --git a/device/peer.go b/device/peer.go index 4e87250..87c8241 100644 --- a/device/peer.go +++ b/device/peer.go @@ -126,7 +126,7 @@ func (et *endpoint_trylist) GetNextTry() (bool, string) { } delete(et.trymap_p2p, url) } - if smallest.lastTry.After(v.lastTry) { + if smallest == nil || smallest.lastTry.After(v.lastTry) { smallest = v } } diff --git a/device/receive.go b/device/receive.go index 52584b2..dcf1e27 100644 --- a/device/receive.go +++ b/device/receive.go @@ -581,7 +581,7 @@ func (peer *Peer) RoutineSequentialReceiver() { if packet_type != path.NormalPacket { if device.LogLevel.LogControl { if peer.GetEndpointDstStr() != "" { - fmt.Println("Control: Received From:" + peer.GetEndpointDstStr() + " " + device.sprint_received(packet_type, elem.packet[path.EgHeaderLen:])) + fmt.Printf("Control: Received S:%v D:%v %v From:%v\n", src_nodeID.ToString(), dst_nodeID.ToString(), device.sprint_received(packet_type, elem.packet[path.EgHeaderLen:]), peer.ID.ToString()) } } err = device.process_received(packet_type, peer, elem.packet[path.EgHeaderLen:]) diff --git a/device/receivesendproc.go b/device/receivesendproc.go index 2799f1f..4589410 100644 --- a/device/receivesendproc.go +++ b/device/receivesendproc.go @@ -52,9 +52,11 @@ func (device *Device) SendPacket(peer *Peer, usage path.Usage, packet []byte, of } } if device.LogLevel.LogControl { + EgHeader, _ := path.NewEgHeader(packet[:path.EgHeaderLen]) if usage != path.NormalPacket { if peer.GetEndpointDstStr() != "" { - fmt.Println("Control: Send To:" + peer.GetEndpointDstStr() + " " + device.sprint_received(usage, packet[path.EgHeaderLen:])) + dst_nodeID := EgHeader.GetDst() + fmt.Printf("Control: Send D:%v %v To:%v\n", dst_nodeID.ToString(), device.sprint_received(usage, packet[path.EgHeaderLen:]), peer.GetEndpointDstStr()) } } } @@ -146,10 +148,14 @@ func (device *Device) process_received(msg_type path.Usage, peer *Peer, body []b case path.Register: if content, err := mtypes.ParseRegisterMsg(body); err == nil { return device.server_process_RegisterMsg(peer, content) + } else { + return err } case path.PongPacket: if content, err := mtypes.ParsePongMsg(body); err == nil { return device.server_process_Pong(peer, content) + } else { + return err } default: err = errors.New("not a valid msg_type") @@ -159,22 +165,32 @@ func (device *Device) process_received(msg_type path.Usage, peer *Peer, body []b case path.ServerUpdate: if content, err := mtypes.ParseServerUpdateMsg(body); err == nil { device.process_ServerUpdateMsg(peer, content) + } else { + return err } case path.PingPacket: if content, err := mtypes.ParsePingMsg(body); err == nil { return device.process_ping(peer, content) + } else { + return err } case path.PongPacket: if content, err := mtypes.ParsePongMsg(body); err == nil { return device.process_pong(peer, content) + } else { + return err } case path.QueryPeer: if content, err := mtypes.ParseQueryPeerMsg(body); err == nil { return device.process_RequestPeerMsg(content) + } else { + return err } case path.BroadcastPeer: if content, err := mtypes.ParseBoardcastPeerMsg(body); err == nil { return device.process_BoardcastPeerMsg(peer, content) + } else { + return err } default: err = errors.New("not a valid msg_type") @@ -311,8 +327,8 @@ func (device *Device) process_ping(peer *Peer, content mtypes.PingMsg) error { Timediff := device.graph.GetCurrentTime().Sub(content.Time).Seconds() OldTimediff := peer.SingleWayLatency.Load().(float64) NewTimediff := Timediff - if OldTimediff <= mtypes.Infinity { - DR := device.EdgeConfig.DynamicRoute.P2P.GraphRecalculateSetting.DampingResistance + if (OldTimediff < mtypes.Infinity) == (NewTimediff < mtypes.Infinity) { + DR := device.SuperConfig.DampingResistance NewTimediff = OldTimediff*DR + Timediff*(1-DR) } peer.SingleWayLatency.Store(NewTimediff) @@ -612,6 +628,9 @@ func (device *Device) process_UpdateSuperParamsMsg(peer *Peer, State_hash string device.EdgeConfig.DynamicRoute.PeerAliveTimeout = SuperParams.PeerAliveTimeout device.EdgeConfig.DynamicRoute.SendPingInterval = SuperParams.SendPingInterval device.SuperConfig.HttpPostInterval = SuperParams.HttpPostInterval + if SuperParams.DampingResistance > 0 && SuperParams.DampingResistance <= 1 { + device.SuperConfig.DampingResistance = SuperParams.DampingResistance + } device.Chan_SendPingStart <- struct{}{} device.Chan_HttpPostStart <- struct{}{} if SuperParams.AdditionalCost >= 0 { @@ -696,7 +715,7 @@ func (device *Device) process_RequestPeerMsg(content mtypes.QueryPeerMsg) error return nil } -func (device *Device) process_BoardcastPeerMsg(peer *Peer, content mtypes.BoardcastPeerMsg) error { +func (device *Device) process_BoardcastPeerMsg(peer *Peer, content mtypes.BoardcastPeerMsg) (err error) { if device.EdgeConfig.DynamicRoute.P2P.UseP2P { var pk NoisePublicKey if content.Request_ID == uint32(device.ID) { @@ -717,7 +736,10 @@ func (device *Device) process_BoardcastPeerMsg(peer *Peer, content mtypes.Boardc if device.graph.Weight(content.NodeID, device.ID, false) == mtypes.Infinity { // add node to graph device.graph.UpdateLatency(content.NodeID, device.ID, mtypes.Infinity, 0, device.EdgeConfig.DynamicRoute.AdditionalCost, true, false) } - device.NewPeer(pk, content.NodeID, false, 0) + thepeer, err = device.NewPeer(pk, content.NodeID, false, 0) + if err != nil { + return err + } } if !thepeer.IsPeerAlive() { //Peer died, try to switch to this new endpoint @@ -781,10 +803,10 @@ func (device *Device) RoutineDetectOfflineAndTryNextEndpoint() { if !(device.EdgeConfig.DynamicRoute.P2P.UseP2P || device.EdgeConfig.DynamicRoute.SuperNode.UseSuperNode) { return } - if device.EdgeConfig.DynamicRoute.ConnTimeOut == 0 { + if device.EdgeConfig.DynamicRoute.TimeoutCheckInterval == 0 { return } - timeout := mtypes.S2TD(device.EdgeConfig.DynamicRoute.ConnTimeOut) + timeout := mtypes.S2TD(device.EdgeConfig.DynamicRoute.TimeoutCheckInterval) for { device.event_tryendpoint <- struct{}{} time.Sleep(timeout) diff --git a/example_config/p2p_mode/EgNet_edge1.yaml b/example_config/p2p_mode/EgNet_edge1.yaml new file mode 100644 index 0000000..6b81f79 --- /dev/null +++ b/example_config/p2p_mode/EgNet_edge1.yaml @@ -0,0 +1,71 @@ +Interface: + IType: stdio + Name: tap1 + VPPIFaceID: 1 + VPPBridgeID: 4242 + MacAddrPrefix: 26:E9:46:C5 + IPv4CIDR: 192.168.76.0/24 + IPv6CIDR: fd95:71cb:a3df:e586::/64 + IPv6LLPrefix: fe80::a3df:0/112 + MTU: 1416 + RecvAddr: 127.0.0.1:4001 + SendAddr: 127.0.0.1:5001 + L2HeaderMode: kbdbg +NodeID: 1 +NodeName: EgNet1 +PostScript: "" +DefaultTTL: 200 +L2FIBTimeout: 3600 +PrivKey: m+okCrSHKbhaAw1MycIf9+i1mnl/PXQFBx9q6Alfa7Y= +ListenPort: 3001 +LogLevel: + LogLevel: error + LogTransit: true + LogNormal: true + LogControl: true + LogInternal: true + LogNTP: true +DynamicRoute: + SendPingInterval: 16 + PeerAliveTimeout: 70 + TimeoutCheckInterval: 20 + ConnNextTry: 5 + DupCheckTimeout: 40 + AdditionalCost: 10 + DampingResistance: 0.95 + SaveNewPeers: false + SuperNode: + UseSuperNode: false + PSKey: "" + EndpointV4: "" + PubKeyV4: "" + EndpointV6: "" + PubKeyV6: "" + EndpointEdgeAPIUrl: "" + SkipLocalIP: false + SuperNodeInfoTimeout: 50 + P2P: + UseP2P: true + SendPeerInterval: 20 + GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 50 + JitterToleranceMultiplier: 1.1 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 + NTPConfig: + UseNTP: true + MaxServerUse: 8 + SyncTimeInterval: 3600 + NTPTimeout: 3 + Servers: [] +NextHopTable: {} +ResetConnInterval: 86400 +Peers: +- NodeID: 2 + PubKey: FRPoFmNczfXChxHcyqUB/DlP8uilmULXJ53rkXKbRnA= + PSKey: F04akG91pDuDPSpeiorm1RBZTspDqpk5xbWg1ywW2qA= + EndPoint: 127.0.0.1:3002 + PersistentKeepalive: 0 + Static: true diff --git a/example_config/p2p_mode/EgNet_edge2.yaml b/example_config/p2p_mode/EgNet_edge2.yaml new file mode 100644 index 0000000..b230b30 --- /dev/null +++ b/example_config/p2p_mode/EgNet_edge2.yaml @@ -0,0 +1,83 @@ +Interface: + IType: stdio + Name: tap1 + VPPIFaceID: 1 + VPPBridgeID: 4242 + MacAddrPrefix: 26:E9:46:C5 + IPv4CIDR: 192.168.76.0/24 + IPv6CIDR: fd95:71cb:a3df:e586::/64 + IPv6LLPrefix: fe80::a3df:0/112 + MTU: 1416 + RecvAddr: 127.0.0.1:4001 + SendAddr: 127.0.0.1:5001 + L2HeaderMode: kbdbg +NodeID: 2 +NodeName: EgNet2 +PostScript: "" +DefaultTTL: 200 +L2FIBTimeout: 3600 +PrivKey: F1rQITtaIzm4uGI83znW7hXRA/brORBYh9nYE1T20TQ= +ListenPort: 3002 +LogLevel: + LogLevel: error + LogTransit: true + LogNormal: true + LogControl: true + LogInternal: true + LogNTP: true +DynamicRoute: + SendPingInterval: 16 + PeerAliveTimeout: 70 + TimeoutCheckInterval: 20 + ConnNextTry: 5 + DupCheckTimeout: 40 + AdditionalCost: 10 + DampingResistance: 0.9 + SaveNewPeers: false + SuperNode: + UseSuperNode: false + PSKey: "" + EndpointV4: "" + PubKeyV4: "" + EndpointV6: "" + PubKeyV6: "" + EndpointEdgeAPIUrl: "" + SkipLocalIP: false + SuperNodeInfoTimeout: 50 + P2P: + UseP2P: true + SendPeerInterval: 20 + GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 50 + JitterToleranceMultiplier: 1.1 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 + NTPConfig: + UseNTP: true + MaxServerUse: 8 + SyncTimeInterval: 3600 + NTPTimeout: 3 + Servers: [] +NextHopTable: {} +ResetConnInterval: 86400 +Peers: +- NodeID: 4 + PubKey: kSH8k+0tx67ExXNXYLElgnMaLQDxqPQ3wIUv2CRXKSc= + PSKey: wFwfJeWIBTZw3eAQxBK7mM70cZOllNnCoOnUJC0008g= + EndPoint: 127.0.0.1:3004 + PersistentKeepalive: 0 + Static: true +- NodeID: 1 + PubKey: Da0+2BD/tyz38YuAJ7Ltfm8N+tetzo/0YwyqY9PCrRw= + PSKey: F04akG91pDuDPSpeiorm1RBZTspDqpk5xbWg1ywW2qA= + EndPoint: 127.0.0.1:3001 + PersistentKeepalive: 0 + Static: true +- NodeID: 3 + PubKey: Xv/1VqAxaB+ZYSBg2PeL+oeyi05U+PHdXjoUeHuX7Rs= + PSKey: Cijbh7tHoGbwVANl/3x7qtDHbe3bO9lpOFXoU4hp8w8= + EndPoint: 127.0.0.1:3003 + PersistentKeepalive: 0 + Static: true diff --git a/example_config/p2p_mode/EgNet_edge3.yaml b/example_config/p2p_mode/EgNet_edge3.yaml new file mode 100644 index 0000000..1c319ae --- /dev/null +++ b/example_config/p2p_mode/EgNet_edge3.yaml @@ -0,0 +1,83 @@ +Interface: + IType: stdio + Name: tap1 + VPPIFaceID: 1 + VPPBridgeID: 4242 + MacAddrPrefix: 26:E9:46:C5 + IPv4CIDR: 192.168.76.0/24 + IPv6CIDR: fd95:71cb:a3df:e586::/64 + IPv6LLPrefix: fe80::a3df:0/112 + MTU: 1416 + RecvAddr: 127.0.0.1:4001 + SendAddr: 127.0.0.1:5001 + L2HeaderMode: kbdbg +NodeID: 3 +NodeName: EgNet3 +PostScript: "" +DefaultTTL: 200 +L2FIBTimeout: 3600 +PrivKey: +zc8mBj65eA/J7RAVRnsRxAfoi45fgipiyqL9kmsqdM= +ListenPort: 3003 +LogLevel: + LogLevel: error + LogTransit: true + LogNormal: true + LogControl: true + LogInternal: true + LogNTP: true +DynamicRoute: + SendPingInterval: 16 + PeerAliveTimeout: 70 + TimeoutCheckInterval: 20 + ConnNextTry: 5 + DupCheckTimeout: 40 + AdditionalCost: 10 + DampingResistance: 0.9 + SaveNewPeers: false + SuperNode: + UseSuperNode: false + PSKey: "" + EndpointV4: "" + PubKeyV4: "" + EndpointV6: "" + PubKeyV6: "" + EndpointEdgeAPIUrl: "" + SkipLocalIP: false + SuperNodeInfoTimeout: 50 + P2P: + UseP2P: true + SendPeerInterval: 20 + GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 50 + JitterToleranceMultiplier: 1.1 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 + NTPConfig: + UseNTP: true + MaxServerUse: 8 + SyncTimeInterval: 3600 + NTPTimeout: 3 + Servers: [] +NextHopTable: {} +ResetConnInterval: 86400 +Peers: +- NodeID: 2 + PubKey: FRPoFmNczfXChxHcyqUB/DlP8uilmULXJ53rkXKbRnA= + PSKey: Cijbh7tHoGbwVANl/3x7qtDHbe3bO9lpOFXoU4hp8w8= + EndPoint: 127.0.0.1:3002 + PersistentKeepalive: 0 + Static: true +- NodeID: 4 + PubKey: kSH8k+0tx67ExXNXYLElgnMaLQDxqPQ3wIUv2CRXKSc= + PSKey: mAgQbX34b3f/geVEU7bn1y4AqA6Eu+ZY9PR1d6IEkDg= + EndPoint: 127.0.0.1:3004 + PersistentKeepalive: 0 + Static: true +- NodeID: 5 + PubKey: 6GTxl1C65KC2wV0bXDVSnp6f3FdtjUhhDWZF4Ipt6gY= + PSKey: 5Ph+d0SFW7hQ8LibICiXcpWpWnaI7i3T1J5Zmw8km3w= + EndPoint: 127.0.0.1:3005 + PersistentKeepalive: 0 + Static: true diff --git a/example_config/p2p_mode/EgNet_edge4.yaml b/example_config/p2p_mode/EgNet_edge4.yaml new file mode 100644 index 0000000..8274cd5 --- /dev/null +++ b/example_config/p2p_mode/EgNet_edge4.yaml @@ -0,0 +1,83 @@ +Interface: + IType: stdio + Name: tap1 + VPPIFaceID: 1 + VPPBridgeID: 4242 + MacAddrPrefix: 26:E9:46:C5 + IPv4CIDR: 192.168.76.0/24 + IPv6CIDR: fd95:71cb:a3df:e586::/64 + IPv6LLPrefix: fe80::a3df:0/112 + MTU: 1416 + RecvAddr: 127.0.0.1:4001 + SendAddr: 127.0.0.1:5001 + L2HeaderMode: kbdbg +NodeID: 4 +NodeName: EgNet4 +PostScript: "" +DefaultTTL: 200 +L2FIBTimeout: 3600 +PrivKey: DW1nI8xKiaYJRJYUwQaZKNLRVKIVl1unF4YKzmYfNZE= +ListenPort: 3004 +LogLevel: + LogLevel: error + LogTransit: true + LogNormal: true + LogControl: true + LogInternal: true + LogNTP: true +DynamicRoute: + SendPingInterval: 16 + PeerAliveTimeout: 70 + TimeoutCheckInterval: 20 + ConnNextTry: 5 + DupCheckTimeout: 40 + AdditionalCost: 10 + DampingResistance: 0.9 + SaveNewPeers: false + SuperNode: + UseSuperNode: false + PSKey: "" + EndpointV4: "" + PubKeyV4: "" + EndpointV6: "" + PubKeyV6: "" + EndpointEdgeAPIUrl: "" + SkipLocalIP: false + SuperNodeInfoTimeout: 50 + P2P: + UseP2P: true + SendPeerInterval: 20 + GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 50 + JitterToleranceMultiplier: 1.1 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 + NTPConfig: + UseNTP: true + MaxServerUse: 8 + SyncTimeInterval: 3600 + NTPTimeout: 3 + Servers: [] +NextHopTable: {} +ResetConnInterval: 86400 +Peers: +- NodeID: 2 + PubKey: FRPoFmNczfXChxHcyqUB/DlP8uilmULXJ53rkXKbRnA= + PSKey: wFwfJeWIBTZw3eAQxBK7mM70cZOllNnCoOnUJC0008g= + EndPoint: 127.0.0.1:3002 + PersistentKeepalive: 0 + Static: true +- NodeID: 3 + PubKey: Xv/1VqAxaB+ZYSBg2PeL+oeyi05U+PHdXjoUeHuX7Rs= + PSKey: mAgQbX34b3f/geVEU7bn1y4AqA6Eu+ZY9PR1d6IEkDg= + EndPoint: 127.0.0.1:3003 + PersistentKeepalive: 0 + Static: true +- NodeID: 6 + PubKey: XagHQGIw/3Y1btg/gCWYbQMOB5RsOeJRP5i/w5bzf14= + PSKey: n44pByAV/umw2EtfP90jn2A1Hq/mzXCRrT6nXQKlJfw= + EndPoint: 127.0.0.1:3006 + PersistentKeepalive: 0 + Static: true diff --git a/example_config/p2p_mode/EgNet_edge5.yaml b/example_config/p2p_mode/EgNet_edge5.yaml new file mode 100644 index 0000000..bcd8515 --- /dev/null +++ b/example_config/p2p_mode/EgNet_edge5.yaml @@ -0,0 +1,71 @@ +Interface: + IType: stdio + Name: tap1 + VPPIFaceID: 1 + VPPBridgeID: 4242 + MacAddrPrefix: 26:E9:46:C5 + IPv4CIDR: 192.168.76.0/24 + IPv6CIDR: fd95:71cb:a3df:e586::/64 + IPv6LLPrefix: fe80::a3df:0/112 + MTU: 1416 + RecvAddr: 127.0.0.1:4001 + SendAddr: 127.0.0.1:5001 + L2HeaderMode: kbdbg +NodeID: 5 +NodeName: EgNet5 +PostScript: "" +DefaultTTL: 200 +L2FIBTimeout: 3600 +PrivKey: 0zI7tZlrD57Xj0u2qo7zfcqWslpUqaYPpxIp9nZSI1s= +ListenPort: 3005 +LogLevel: + LogLevel: error + LogTransit: true + LogNormal: true + LogControl: true + LogInternal: true + LogNTP: true +DynamicRoute: + SendPingInterval: 16 + PeerAliveTimeout: 70 + TimeoutCheckInterval: 20 + ConnNextTry: 5 + DupCheckTimeout: 40 + AdditionalCost: 10 + DampingResistance: 0.9 + SaveNewPeers: false + SuperNode: + UseSuperNode: false + PSKey: "" + EndpointV4: "" + PubKeyV4: "" + EndpointV6: "" + PubKeyV6: "" + EndpointEdgeAPIUrl: "" + SkipLocalIP: false + SuperNodeInfoTimeout: 50 + P2P: + UseP2P: true + SendPeerInterval: 20 + GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 50 + JitterToleranceMultiplier: 1.1 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 + NTPConfig: + UseNTP: true + MaxServerUse: 8 + SyncTimeInterval: 3600 + NTPTimeout: 3 + Servers: [] +NextHopTable: {} +ResetConnInterval: 86400 +Peers: +- NodeID: 3 + PubKey: Xv/1VqAxaB+ZYSBg2PeL+oeyi05U+PHdXjoUeHuX7Rs= + PSKey: 5Ph+d0SFW7hQ8LibICiXcpWpWnaI7i3T1J5Zmw8km3w= + EndPoint: 127.0.0.1:3003 + PersistentKeepalive: 0 + Static: true diff --git a/example_config/p2p_mode/EgNet_edge6.yaml b/example_config/p2p_mode/EgNet_edge6.yaml new file mode 100644 index 0000000..292a49d --- /dev/null +++ b/example_config/p2p_mode/EgNet_edge6.yaml @@ -0,0 +1,71 @@ +Interface: + IType: stdio + Name: tap1 + VPPIFaceID: 1 + VPPBridgeID: 4242 + MacAddrPrefix: 26:E9:46:C5 + IPv4CIDR: 192.168.76.0/24 + IPv6CIDR: fd95:71cb:a3df:e586::/64 + IPv6LLPrefix: fe80::a3df:0/112 + MTU: 1416 + RecvAddr: 127.0.0.1:4001 + SendAddr: 127.0.0.1:5001 + L2HeaderMode: kbdbg +NodeID: 6 +NodeName: EgNet6 +PostScript: "" +DefaultTTL: 200 +L2FIBTimeout: 3600 +PrivKey: 4J/LdOJYHem4ZJyzqniN4VYZcSiBZy362grDDovYVzc= +ListenPort: 3006 +LogLevel: + LogLevel: error + LogTransit: true + LogNormal: true + LogControl: true + LogInternal: true + LogNTP: true +DynamicRoute: + SendPingInterval: 16 + PeerAliveTimeout: 70 + TimeoutCheckInterval: 20 + ConnNextTry: 5 + DupCheckTimeout: 40 + AdditionalCost: 10 + DampingResistance: 0.9 + SaveNewPeers: false + SuperNode: + UseSuperNode: false + PSKey: "" + EndpointV4: "" + PubKeyV4: "" + EndpointV6: "" + PubKeyV6: "" + EndpointEdgeAPIUrl: "" + SkipLocalIP: false + SuperNodeInfoTimeout: 50 + P2P: + UseP2P: true + SendPeerInterval: 20 + GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 50 + JitterToleranceMultiplier: 1.1 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 + NTPConfig: + UseNTP: true + MaxServerUse: 8 + SyncTimeInterval: 3600 + NTPTimeout: 3 + Servers: [] +NextHopTable: {} +ResetConnInterval: 86400 +Peers: +- NodeID: 4 + PubKey: kSH8k+0tx67ExXNXYLElgnMaLQDxqPQ3wIUv2CRXKSc= + PSKey: n44pByAV/umw2EtfP90jn2A1Hq/mzXCRrT6nXQKlJfw= + EndPoint: 127.0.0.1:3004 + PersistentKeepalive: 0 + Static: true diff --git a/example_config/p2p_mode/README_zh.md b/example_config/p2p_mode/README_zh.md index 590234b..02dd8a6 100644 --- a/example_config/p2p_mode/README_zh.md +++ b/example_config/p2p_mode/README_zh.md @@ -1,14 +1,55 @@ # Etherguard [English](README.md) -P2P Mode的[範例配置檔](./)的說明文件 -在了解Super Mode的運作之前,建議您先閱讀[Super Mode的運作](../super_mode/README_zh.md)方法,再閱讀本篇會比較好 - ## P2P Mode 受到[tinc](https://github.com/gsliepen/tinc)的啟發 和[Super模式運作](../super_mode/README_zh.md)有點相似,不過也有點修改 +## Quick Start +首先,按照需求修改`genstatic.yaml` + +```yaml +Config output dir: /tmp/eg_gen_static # 設定檔輸出位置 +ConfigTemplate for edge node: "" # 設定檔Template +Network name: "EgNet" +Edge Node: + MacAddress prefix: "" # 留空隨機產生 + IPv4 range: 192.168.76.0/24 # 順帶一提,IP的部分可以直接省略沒關係 + IPv6 range: fd95:71cb:a3df:e586::/64 # 這個欄位唯一的目的只是在啟動以後,調用ip命令,幫tap接口加個ip + IPv6 LL range: fe80::a3df:0/112 # 和VPN本身運作完全無關 +Edge Nodes: # 所有的節點相關設定 + 1: + Endpoint(optional): "" + 2: + Endpoint(optional): "" + 3: + Endpoint(optional): 127.0.0.1:3003 + 4: + Endpoint(optional): 127.0.0.1:3004 + 5: + Endpoint(optional): "" + 6: + Endpoint(optional): "" +``` +接著執行這個,就會生成所需設定檔了。 +``` +./etherguard-go -mode gencfg -cfgmode static -config example_config/static_mode/genstatic.yaml +``` + +把這些設定檔不捨去對應節點,然後再執行 +``` +./etherguard-go -config [設定檔位置] -mode edge +``` +就可以了 + +確認運作以後,可以關閉不必要的log增加性能 + +## Documentation + +P2P Mode的[範例配置檔](./)的說明文件 +在了解Super Mode的運作之前,建議您先閱讀[Super Mode的運作](../super_mode/README_zh.md)方法,再閱讀本篇會比較好 + ### ControlMsg P2P模式又引入一種新的 `終點ID` 叫做 `ControlMsg` @@ -55,18 +96,34 @@ Pong封包是一種`ControlMsg`,使用**flood廣播**盡量讓每個節點都 如果已經有了,再檢查Peer是不是離線。 如果已經離線,就用收到的Endpoint覆蓋掉自己原本的Endpoint -## Config Paramaters +### EdgeNode Config Parameter -P2P模式也有幾個參數 -1. usep2p: 是否啟用P2P模式 -1. sendpeerinterval: 廣播BoardcastPeer的間格 -1. graphrecalculatesetting: 一些和[Floyd-Warshall演算法](https://zh.wikipedia.org/zh-tw/Floyd-Warshall算法)相關的參數 - 1. staticmode: 關閉Floyd-Warshall演算法,只使用一開始載入的nexthoptable。P2P單純用來打洞 - 1. jittertolerance: 抖動容許誤差,收到Pong以後,一個37ms,一個39ms,不會觸發重新計算 - 1. jittertolerancemultiplier: 一樣是抖動容許誤差,但是高ping的話允許更多誤差 - https://www.desmos.com/calculator/raoti16r5n - 1. nodereporttimeout: 收到的`Pong`封包的有效期限。太久沒收到就變回Infinity - 1. recalculatecooldown: Floyd-Warshal是O(n^3)時間複雜度,不能太常算。設個冷卻時間 +P2P | Description +------------------------|:----- +UseP2P | 是否啟用P2P模式 +SendPeerInterval | 廣播BoardcastPeer的間格 +[GraphRecalculateSetting](../super_mode/README_zh.md#GraphRecalculateSetting) | 一些和[Floyd-Warshall演算法](https://zh.wikipedia.org/zh-tw/Floyd-Warshall算法)相關的參數 + +#### Run example config + +在**不同terminal**分別執行以下命令 + +``` +./etherguard-go -config example_config/p2p_mode/EgNet_edge1.yaml -mode edge +./etherguard-go -config example_config/p2p_mode/EgNet_edge2.yaml -mode edge +./etherguard-go -config example_config/p2p_mode/EgNet_edge3.yaml -mode edge +./etherguard-go -config example_config/p2p_mode/EgNet_edge4.yaml -mode edge +./etherguard-go -config example_config/p2p_mode/EgNet_edge5.yaml -mode edge +./etherguard-go -config example_config/p2p_mode/EgNet_edge6.yaml -mode edge +``` + +因為本範例配置是stdio的kbdbg模式,stdin會讀入VPN網路 +請在其中一個edge視窗中鍵入 +``` +b1message +``` +因為`L2HeaderMode`是`kbdbg`,所以b1會被轉換成 12byte 的layer 2 header,b是廣播地址`FF:FF:FF:FF:FF:FF`,1是普通地址`AA:BB:CC:DD:EE:01`,message是後面的payload,然後再丟入VPN +此時應該要能夠在另一個視窗上看見字串b1message。前12byte被轉換回來了 ## Note P2P模式下,PSK是禁用的。因為n個節點有n(n-1)/2的連線,每個連線都要使用不同PSK diff --git a/example_config/p2p_mode/genstatic.yaml b/example_config/p2p_mode/genstatic.yaml new file mode 100644 index 0000000..67d04e2 --- /dev/null +++ b/example_config/p2p_mode/genstatic.yaml @@ -0,0 +1,29 @@ +Config output dir: /tmp/eg_gen_p2p +ConfigTemplate for edge node: "EgNet_edge1.yaml" +Network name: "EgNet" +Edge Node: + MacAddress prefix: "" + IPv4 range: 192.168.76.0/24 + IPv6 range: fd95:71cb:a3df:e586::/64 + IPv6 LL range: fe80::a3df:0/112 +Edge Nodes: + 1: + Endpoint(optional): 127.0.0.1:3001 + 2: + Endpoint(optional): 127.0.0.1:3002 + 3: + Endpoint(optional): 127.0.0.1:3003 + 4: + Endpoint(optional): 127.0.0.1:3004 + 5: + Endpoint(optional): 127.0.0.1:3005 + 6: + Endpoint(optional): 127.0.0.1:3006 +Distance matrix for all nodes: |- + X 1 2 3 4 5 6 + 1 0 1.0 Inf Inf Inf Inf + 2 1.0 0 1.0 1.0 Inf Inf + 3 Inf 1.0 0 1 1.0 Inf + 4 Inf 1.0 1.0 0 Inf 1.0 + 5 Inf Inf 1.0 Inf 1.0 Inf + 6 Inf Inf Inf 1.0 Inf 1.0 \ No newline at end of file diff --git a/example_config/p2p_mode/n1.yaml b/example_config/p2p_mode/n1.yaml deleted file mode 100644 index c43d0fc..0000000 --- a/example_config/p2p_mode/n1.yaml +++ /dev/null @@ -1,113 +0,0 @@ -interface: - itype: stdio - name: tap1 - vppifaceid: 1 - vppbridgeid: 4242 - macaddrprefix: AA:BB:CC:DD - mtu: 1416 - recvaddr: 127.0.0.1:4001 - sendaddr: 127.0.0.1:5001 - l2headermode: kbdbg -nodeid: 1 -nodename: Node01 -defaultttl: 200 -l2fibtimeout: 3600 -privkey: aABzjKhWdkFfQ29ZuijtMp1h1TNJe66SDCwvfmvQznw= -listenport: 3001 -loglevel: - loglevel: normal - logtransit: true - logcontrol: true - lognormal: true - loginternal: true - logntp: true -dynamicroute: - sendpinginterval: 20 - peeralivetimeout: 30 - dupchecktimeout: 40 - conntimeout: 30 - connnexttry: 5 - savenewpeers: false - supernode: - usesupernode: false - connurlv4: 127.0.0.1:3000 - pubkeyv4: LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic= - connurlv6: '[::1]:3000' - pubkeyv6: HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI= - apiurl: http://127.0.0.1:3000/api - supernodeinfotimeout: 40 - p2p: - usep2p: true - sendpeerinterval: 20 - graphrecalculatesetting: - staticmode: false - jittertolerance: 20 - jittertolerancemultiplier: 1.1 - nodereporttimeout: 40 - timeoutcheckinterval: 5 - recalculatecooldown: 5 - ntpconfig: - usentp: true - maxserveruse: 8 - synctimeinterval: 3600 - ntptimeout: 10 - servers: - - time.google.com - - time1.google.com - - time2.google.com - - time3.google.com - - time4.google.com - - time1.facebook.com - - time2.facebook.com - - time3.facebook.com - - time4.facebook.com - - time5.facebook.com - - time.cloudflare.com - - time.apple.com - - time.asia.apple.com - - time.euro.apple.com - - time.windows.com -nexthoptable: - 1: - 2: 2 - 3: 2 - 4: 2 - 5: 2 - 6: 2 - 2: - 1: 1 - 3: 3 - 4: 4 - 5: 3 - 6: 4 - 3: - 1: 2 - 2: 2 - 4: 4 - 5: 5 - 6: 4 - 4: - 1: 2 - 2: 2 - 3: 3 - 5: 3 - 6: 6 - 5: - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 6: 3 - 6: - 1: 4 - 2: 4 - 3: 4 - 4: 4 - 5: 4 -resetconninterval: 86400 -peers: -- nodeid: 2 - pubkey: csT+hco4Jpa7btMeC9subHk2ZqzxcljcBk/57V0cSEk= - pskey: "" - endpoint: 127.0.0.1:3002 - static: true \ No newline at end of file diff --git a/example_config/p2p_mode/n2.yaml b/example_config/p2p_mode/n2.yaml deleted file mode 100644 index 1c789b3..0000000 --- a/example_config/p2p_mode/n2.yaml +++ /dev/null @@ -1,123 +0,0 @@ -interface: - itype: stdio - name: tap2 - vppifaceid: 2 - vppbridgeid: 4242 - macaddrprefix: AA:BB:CC:DD - mtu: 1416 - recvaddr: 127.0.0.1:4002 - sendaddr: 127.0.0.1:5002 - l2headermode: kbdbg -nodeid: 2 -nodename: Node02 -defaultttl: 200 -l2fibtimeout: 3600 -privkey: UNZMzPX5fG/8yGC8edVj/ksF9N6ARRqdq7fqE/PD7ls= -listenport: 3002 -loglevel: - loglevel: normal - logtransit: true - logcontrol: true - lognormal: true - loginternal: true - logntp: true -dynamicroute: - sendpinginterval: 20 - peeralivetimeout: 30 - dupchecktimeout: 40 - conntimeout: 30 - connnexttry: 5 - savenewpeers: false - supernode: - usesupernode: false - connurlv4: 127.0.0.1:3000 - pubkeyv4: LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic= - connurlv6: '[::1]:3000' - pubkeyv6: HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI= - apiurl: http://127.0.0.1:3000/api - supernodeinfotimeout: 40 - p2p: - usep2p: true - sendpeerinterval: 20 - graphrecalculatesetting: - staticmode: false - jittertolerance: 20 - jittertolerancemultiplier: 1.1 - nodereporttimeout: 40 - timeoutcheckinterval: 5 - recalculatecooldown: 5 - ntpconfig: - usentp: true - maxserveruse: 8 - synctimeinterval: 3600 - ntptimeout: 10 - servers: - - time.google.com - - time1.google.com - - time2.google.com - - time3.google.com - - time4.google.com - - time1.facebook.com - - time2.facebook.com - - time3.facebook.com - - time4.facebook.com - - time5.facebook.com - - time.cloudflare.com - - time.apple.com - - time.asia.apple.com - - time.euro.apple.com - - time.windows.com -nexthoptable: - 1: - 2: 2 - 3: 2 - 4: 2 - 5: 2 - 6: 2 - 2: - 1: 1 - 3: 3 - 4: 4 - 5: 3 - 6: 4 - 3: - 1: 2 - 2: 2 - 4: 4 - 5: 5 - 6: 4 - 4: - 1: 2 - 2: 2 - 3: 3 - 5: 3 - 6: 6 - 5: - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 6: 3 - 6: - 1: 4 - 2: 4 - 3: 4 - 4: 4 - 5: 4 -resetconninterval: 86400 -peers: -- nodeid: 1 - pubkey: CooSkIP7/wiC7Rh83UYnB2yPkJijkNFmhtorHtyYlzY= - pskey: "" - endpoint: 127.0.0.1:3001 - static: true -- nodeid: 3 - pubkey: 0meQ0pQCAkLZdpfyMqggpnk0k3UKG2M8jfIMlQjTRWs= - pskey: "" - endpoint: 127.0.0.1:3003 - static: true -- nodeid: 4 - pubkey: 2EfY85KF1S+3dZ3A55eZcyi0QU+sOzOyuADtJs2U2Ww= - pskey: "" - endpoint: 127.0.0.1:3004 - static: true \ No newline at end of file diff --git a/example_config/p2p_mode/n3.yaml b/example_config/p2p_mode/n3.yaml deleted file mode 100644 index 7c718de..0000000 --- a/example_config/p2p_mode/n3.yaml +++ /dev/null @@ -1,123 +0,0 @@ -interface: - itype: stdio - name: tap3 - vppifaceid: 3 - vppbridgeid: 4242 - macaddrprefix: AA:BB:CC:DD - mtu: 1416 - recvaddr: 127.0.0.1:4003 - sendaddr: 127.0.0.1:5003 - l2headermode: kbdbg -nodeid: 3 -nodename: Node03 -defaultttl: 200 -l2fibtimeout: 3600 -privkey: gJy35nbsd8FuuxyWHjsefN+U+oM7RkuIB1EanNLSVHg= -listenport: 3003 -loglevel: - loglevel: normal - logtransit: true - logcontrol: true - lognormal: true - loginternal: true - logntp: true -dynamicroute: - sendpinginterval: 20 - peeralivetimeout: 30 - dupchecktimeout: 40 - conntimeout: 30 - connnexttry: 5 - savenewpeers: false - supernode: - usesupernode: false - connurlv4: 127.0.0.1:3000 - pubkeyv4: LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic= - connurlv6: '[::1]:3000' - pubkeyv6: HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI= - apiurl: http://127.0.0.1:3000/api - supernodeinfotimeout: 40 - p2p: - usep2p: true - sendpeerinterval: 20 - graphrecalculatesetting: - staticmode: false - jittertolerance: 20 - jittertolerancemultiplier: 1.1 - nodereporttimeout: 40 - timeoutcheckinterval: 5 - recalculatecooldown: 5 - ntpconfig: - usentp: true - maxserveruse: 8 - synctimeinterval: 3600 - ntptimeout: 10 - servers: - - time.google.com - - time1.google.com - - time2.google.com - - time3.google.com - - time4.google.com - - time1.facebook.com - - time2.facebook.com - - time3.facebook.com - - time4.facebook.com - - time5.facebook.com - - time.cloudflare.com - - time.apple.com - - time.asia.apple.com - - time.euro.apple.com - - time.windows.com -nexthoptable: - 1: - 2: 2 - 3: 2 - 4: 2 - 5: 2 - 6: 2 - 2: - 1: 1 - 3: 3 - 4: 4 - 5: 3 - 6: 4 - 3: - 1: 2 - 2: 2 - 4: 4 - 5: 5 - 6: 4 - 4: - 1: 2 - 2: 2 - 3: 3 - 5: 3 - 6: 6 - 5: - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 6: 3 - 6: - 1: 4 - 2: 4 - 3: 4 - 4: 4 - 5: 4 -resetconninterval: 86400 -peers: -- nodeid: 2 - pubkey: csT+hco4Jpa7btMeC9subHk2ZqzxcljcBk/57V0cSEk= - pskey: "" - endpoint: 127.0.0.1:3002 - static: true -- nodeid: 4 - pubkey: 2EfY85KF1S+3dZ3A55eZcyi0QU+sOzOyuADtJs2U2Ww= - pskey: "" - endpoint: 127.0.0.1:3004 - static: true -- nodeid: 5 - pubkey: yS7a/e0l0qF7z9MO/P79yYVfLI6UAli2iKjEZa6XmgY= - pskey: "" - endpoint: 127.0.0.1:3005 - static: true \ No newline at end of file diff --git a/example_config/p2p_mode/n4.yaml b/example_config/p2p_mode/n4.yaml deleted file mode 100644 index da9de80..0000000 --- a/example_config/p2p_mode/n4.yaml +++ /dev/null @@ -1,123 +0,0 @@ -interface: - itype: stdio - name: tap4 - vppifaceid: 4 - vppbridgeid: 4242 - macaddrprefix: AA:BB:CC:DD - mtu: 1416 - recvaddr: 127.0.0.1:4004 - sendaddr: 127.0.0.1:5004 - l2headermode: kbdbg -nodeid: 4 -nodename: Node04 -defaultttl: 200 -l2fibtimeout: 3600 -privkey: wAdLgCk0SHiO11/aUf9944focD1BUCH5b6Pe+cRHHXQ= -listenport: 3004 -loglevel: - loglevel: normal - logtransit: true - logcontrol: true - lognormal: true - loginternal: true - logntp: true -dynamicroute: - sendpinginterval: 20 - peeralivetimeout: 30 - dupchecktimeout: 40 - conntimeout: 30 - connnexttry: 5 - savenewpeers: false - supernode: - usesupernode: false - connurlv4: 127.0.0.1:3000 - pubkeyv4: LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic= - connurlv6: '[::1]:3000' - pubkeyv6: HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI= - apiurl: http://127.0.0.1:3000/api - supernodeinfotimeout: 40 - p2p: - usep2p: true - sendpeerinterval: 20 - graphrecalculatesetting: - staticmode: false - jittertolerance: 20 - jittertolerancemultiplier: 1.1 - nodereporttimeout: 40 - timeoutcheckinterval: 5 - recalculatecooldown: 5 - ntpconfig: - usentp: true - maxserveruse: 8 - synctimeinterval: 3600 - ntptimeout: 10 - servers: - - time.google.com - - time1.google.com - - time2.google.com - - time3.google.com - - time4.google.com - - time1.facebook.com - - time2.facebook.com - - time3.facebook.com - - time4.facebook.com - - time5.facebook.com - - time.cloudflare.com - - time.apple.com - - time.asia.apple.com - - time.euro.apple.com - - time.windows.com -nexthoptable: - 1: - 2: 2 - 3: 2 - 4: 2 - 5: 2 - 6: 2 - 2: - 1: 1 - 3: 3 - 4: 4 - 5: 3 - 6: 4 - 3: - 1: 2 - 2: 2 - 4: 4 - 5: 5 - 6: 4 - 4: - 1: 2 - 2: 2 - 3: 3 - 5: 3 - 6: 6 - 5: - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 6: 3 - 6: - 1: 4 - 2: 4 - 3: 4 - 4: 4 - 5: 4 -resetconninterval: 86400 -peers: -- nodeid: 2 - pubkey: csT+hco4Jpa7btMeC9subHk2ZqzxcljcBk/57V0cSEk= - pskey: "" - endpoint: 127.0.0.1:3002 - static: true -- nodeid: 3 - pubkey: 0meQ0pQCAkLZdpfyMqggpnk0k3UKG2M8jfIMlQjTRWs= - pskey: "" - endpoint: 127.0.0.1:3003 - static: true -- nodeid: 6 - pubkey: EXLAGpDrkB5cjP7lr4dL0FGZG0rssmQNtWx9k/CGChk= - pskey: "" - endpoint: 127.0.0.1:3006 - static: true \ No newline at end of file diff --git a/example_config/p2p_mode/n5.yaml b/example_config/p2p_mode/n5.yaml deleted file mode 100644 index bb78d03..0000000 --- a/example_config/p2p_mode/n5.yaml +++ /dev/null @@ -1,113 +0,0 @@ -interface: - itype: stdio - name: tap5 - vppifaceid: 5 - vppbridgeid: 4242 - macaddrprefix: AA:BB:CC:DD - mtu: 1416 - recvaddr: 127.0.0.1:4005 - sendaddr: 127.0.0.1:5005 - l2headermode: kbdbg -nodeid: 5 -nodename: Node05 -defaultttl: 200 -l2fibtimeout: 3600 -privkey: gLmzeCbmN/hjiE+ehNXL9IxuG9hhWIYv2s16/DOW6FE= -listenport: 3005 -loglevel: - loglevel: normal - logtransit: true - logcontrol: true - lognormal: true - loginternal: true - logntp: true -dynamicroute: - sendpinginterval: 20 - peeralivetimeout: 30 - dupchecktimeout: 40 - conntimeout: 30 - connnexttry: 5 - savenewpeers: false - supernode: - usesupernode: false - connurlv4: 127.0.0.1:3000 - pubkeyv4: LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic= - connurlv6: '[::1]:3000' - pubkeyv6: HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI= - apiurl: http://127.0.0.1:3000/api - supernodeinfotimeout: 40 - p2p: - usep2p: true - sendpeerinterval: 20 - graphrecalculatesetting: - staticmode: false - jittertolerance: 20 - jittertolerancemultiplier: 1.1 - nodereporttimeout: 40 - timeoutcheckinterval: 5 - recalculatecooldown: 5 - ntpconfig: - usentp: true - maxserveruse: 8 - synctimeinterval: 3600 - ntptimeout: 10 - servers: - - time.google.com - - time1.google.com - - time2.google.com - - time3.google.com - - time4.google.com - - time1.facebook.com - - time2.facebook.com - - time3.facebook.com - - time4.facebook.com - - time5.facebook.com - - time.cloudflare.com - - time.apple.com - - time.asia.apple.com - - time.euro.apple.com - - time.windows.com -nexthoptable: - 1: - 2: 2 - 3: 2 - 4: 2 - 5: 2 - 6: 2 - 2: - 1: 1 - 3: 3 - 4: 4 - 5: 3 - 6: 4 - 3: - 1: 2 - 2: 2 - 4: 4 - 5: 5 - 6: 4 - 4: - 1: 2 - 2: 2 - 3: 3 - 5: 3 - 6: 6 - 5: - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 6: 3 - 6: - 1: 4 - 2: 4 - 3: 4 - 4: 4 - 5: 4 -resetconninterval: 86400 -peers: -- nodeid: 3 - pubkey: 0meQ0pQCAkLZdpfyMqggpnk0k3UKG2M8jfIMlQjTRWs= - pskey: "" - endpoint: 127.0.0.1:3003 - static: true \ No newline at end of file diff --git a/example_config/p2p_mode/n6.yaml b/example_config/p2p_mode/n6.yaml deleted file mode 100644 index d2ac6b2..0000000 --- a/example_config/p2p_mode/n6.yaml +++ /dev/null @@ -1,113 +0,0 @@ -interface: - itype: stdio - name: tap6 - vppifaceid: 6 - vppbridgeid: 4242 - macaddrprefix: AA:BB:CC:DD - mtu: 1416 - recvaddr: 127.0.0.1:4006 - sendaddr: 127.0.0.1:5006 - l2headermode: kbdbg -nodeid: 6 -nodename: Node06 -defaultttl: 200 -l2fibtimeout: 3600 -privkey: IIX5F6oWZUS2dlhxWFJ7TxdJtDCr5jzeuhxUB6YM7Us= -listenport: 3006 -loglevel: - loglevel: normal - logtransit: true - logcontrol: true - lognormal: true - loginternal: true - logntp: true -dynamicroute: - sendpinginterval: 20 - peeralivetimeout: 30 - dupchecktimeout: 40 - conntimeout: 30 - connnexttry: 5 - savenewpeers: false - supernode: - usesupernode: false - connurlv4: 127.0.0.1:3000 - pubkeyv4: LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic= - connurlv6: '[::1]:3000' - pubkeyv6: HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI= - apiurl: http://127.0.0.1:3000/api - supernodeinfotimeout: 40 - p2p: - usep2p: true - sendpeerinterval: 20 - graphrecalculatesetting: - staticmode: false - jittertolerance: 20 - jittertolerancemultiplier: 1.1 - nodereporttimeout: 40 - timeoutcheckinterval: 5 - recalculatecooldown: 5 - ntpconfig: - usentp: true - maxserveruse: 8 - synctimeinterval: 3600 - ntptimeout: 10 - servers: - - time.google.com - - time1.google.com - - time2.google.com - - time3.google.com - - time4.google.com - - time1.facebook.com - - time2.facebook.com - - time3.facebook.com - - time4.facebook.com - - time5.facebook.com - - time.cloudflare.com - - time.apple.com - - time.asia.apple.com - - time.euro.apple.com - - time.windows.com -nexthoptable: - 1: - 2: 2 - 3: 2 - 4: 2 - 5: 2 - 6: 2 - 2: - 1: 1 - 3: 3 - 4: 4 - 5: 3 - 6: 4 - 3: - 1: 2 - 2: 2 - 4: 4 - 5: 5 - 6: 4 - 4: - 1: 2 - 2: 2 - 3: 3 - 5: 3 - 6: 6 - 5: - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 6: 3 - 6: - 1: 4 - 2: 4 - 3: 4 - 4: 4 - 5: 4 -resetconninterval: 86400 -peers: -- nodeid: 4 - pubkey: 2EfY85KF1S+3dZ3A55eZcyi0QU+sOzOyuADtJs2U2Ww= - pskey: "" - endpoint: 127.0.0.1:3004 - static: true \ No newline at end of file diff --git a/example_config/static_mode/EgNet_edge1.yaml b/example_config/static_mode/EgNet_edge1.yaml index bde9a9a..d51e8ef 100644 --- a/example_config/static_mode/EgNet_edge1.yaml +++ b/example_config/static_mode/EgNet_edge1.yaml @@ -3,7 +3,7 @@ Interface: Name: tap1 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: DA:21:10:81 + MacAddrPrefix: EA:C9:BC:0F IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -16,7 +16,7 @@ NodeName: EgNet1 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: LFFQqPBQ84x2AQ9BCI+0wG8nr+Y6yXHqhXkMCb4HCmg= +PrivKey: wEo/Y73+zu/OwhdV6pfwJHaUlhPhQJFk5scQYAWHdcI= ListenPort: 3001 LogLevel: LogLevel: error @@ -28,10 +28,11 @@ LogLevel: DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: false @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0.9 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: @@ -100,8 +100,8 @@ NextHopTable: ResetConnInterval: 86400 Peers: - NodeID: 2 - PubKey: 0r2o9Hb36gYVgD3VSKCH18MVOZw0BvzcJ6TOTo6Cc1g= - PSKey: lFq67qp9LXL3PtlEJ3SGg3c/6++Ljy2I8i/k0Xcibvk= + PubKey: /OUi+mno1dvZi3L0T72P4Lxd42TkXdEJwR0VEhsaKxQ= + PSKey: viLcvMWwVR2P+ojtc2psl5CFhmziiet5aquG3KFQDrs= EndPoint: 127.0.0.1:3002 PersistentKeepalive: 0 Static: true diff --git a/example_config/static_mode/EgNet_edge2.yaml b/example_config/static_mode/EgNet_edge2.yaml index 7293c34..867d102 100644 --- a/example_config/static_mode/EgNet_edge2.yaml +++ b/example_config/static_mode/EgNet_edge2.yaml @@ -3,7 +3,7 @@ Interface: Name: tap1 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: DA:21:10:81 + MacAddrPrefix: EA:C9:BC:0F IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -16,7 +16,7 @@ NodeName: EgNet2 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: M8SxYCTHCPES/yPqcKP4mr+AoMAx9sgUmk64FCJIv6k= +PrivKey: RYPUQ3ne0AxLKF6T800B/bqiF0L6kIA5aP6E2MUYoKw= ListenPort: 3002 LogLevel: LogLevel: error @@ -28,10 +28,11 @@ LogLevel: DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: false @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0.9 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: @@ -99,21 +99,21 @@ NextHopTable: 5: 4 ResetConnInterval: 86400 Peers: +- NodeID: 4 + PubKey: 4WO6Eqm0puYvZMyw6mlzq8Ap0KKXcaqbaQp0zxAVYhs= + PSKey: VVzfkmJBGdjphL0Ccs0Ka04rgsOlZkhuO308u4yK5Wc= + EndPoint: 127.0.0.1:3004 + PersistentKeepalive: 0 + Static: true - NodeID: 1 - PubKey: fnc7bfFTf7B23hwtARPpX14tCeZwNfDhGCJctBpMfA8= - PSKey: lFq67qp9LXL3PtlEJ3SGg3c/6++Ljy2I8i/k0Xcibvk= + PubKey: 4J8epTkbMnIiSQRM1BAzLMSjTN2OdcuXqIfH74IeQh0= + PSKey: viLcvMWwVR2P+ojtc2psl5CFhmziiet5aquG3KFQDrs= EndPoint: 127.0.0.1:3001 PersistentKeepalive: 0 Static: true - NodeID: 3 - PubKey: ymNpm430tiph3rMSVnQzDAxmK9+3jdcRFi6e96xmQUI= - PSKey: Y86PZY1ldgoyzPJxEqei5Vg5zlzkJkoO77LJfxV8alE= + PubKey: FRpS3KJJDiG3LgNkZCZiSNenYR3b/nINu2fTJmXZWlo= + PSKey: LBGuT44cTMEFe03LIpG3ze8GF+ZFmQ7/90ZdQUm/Stw= EndPoint: 127.0.0.1:3003 PersistentKeepalive: 0 Static: true -- NodeID: 4 - PubKey: 9YSIkihv/+aeukOaWwsR9EKvO1DM9+5kN53a/osTpmA= - PSKey: QHyrrls0KT2dvBKtoWkZvq5NQ+Xyjm0YgbMUzCCRw34= - EndPoint: 127.0.0.1:3004 - PersistentKeepalive: 0 - Static: true diff --git a/example_config/static_mode/EgNet_edge3.yaml b/example_config/static_mode/EgNet_edge3.yaml index dbca261..cefe6ef 100644 --- a/example_config/static_mode/EgNet_edge3.yaml +++ b/example_config/static_mode/EgNet_edge3.yaml @@ -3,7 +3,7 @@ Interface: Name: tap1 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: DA:21:10:81 + MacAddrPrefix: EA:C9:BC:0F IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -16,7 +16,7 @@ NodeName: EgNet3 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: cTO/GUSYHoj5mKczCyQu/ckPiDMEygkUbXcY3RafGEE= +PrivKey: f1B5y7rG0+ci4SM3myrPgUZdMsKfytqS1tC9V07mTrc= ListenPort: 3003 LogLevel: LogLevel: error @@ -28,10 +28,11 @@ LogLevel: DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: false @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0.9 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: @@ -100,20 +100,20 @@ NextHopTable: ResetConnInterval: 86400 Peers: - NodeID: 2 - PubKey: 0r2o9Hb36gYVgD3VSKCH18MVOZw0BvzcJ6TOTo6Cc1g= - PSKey: Y86PZY1ldgoyzPJxEqei5Vg5zlzkJkoO77LJfxV8alE= + PubKey: /OUi+mno1dvZi3L0T72P4Lxd42TkXdEJwR0VEhsaKxQ= + PSKey: LBGuT44cTMEFe03LIpG3ze8GF+ZFmQ7/90ZdQUm/Stw= EndPoint: 127.0.0.1:3002 PersistentKeepalive: 0 Static: true - NodeID: 4 - PubKey: 9YSIkihv/+aeukOaWwsR9EKvO1DM9+5kN53a/osTpmA= - PSKey: SQyLomXDeknBIFezUKardOviAmNS+YZ1XTvZtYVlOtE= + PubKey: 4WO6Eqm0puYvZMyw6mlzq8Ap0KKXcaqbaQp0zxAVYhs= + PSKey: Kpd1FKPEj+NFgq69+t5xDely7Yp5tU+fvlkeRVNCb2I= EndPoint: 127.0.0.1:3004 PersistentKeepalive: 0 Static: true - NodeID: 5 - PubKey: x66hOjYXoZjL1FI3OVtf/CWittsnvmezKV6sW0v5FXQ= - PSKey: ChWBQurfGNZE5xIlhi9EUvZrQPBvkFsfrPaD6tyqSYg= + PubKey: raPJ4aW930QQMko5khFGnFB9TcVv+iHNJpnjdCm6Wwo= + PSKey: pd+roM0C5CqSii7NPZkgK3EWdx0PS2zXEiUHycdIPts= EndPoint: 127.0.0.1:3005 PersistentKeepalive: 0 Static: true diff --git a/example_config/static_mode/EgNet_edge4.yaml b/example_config/static_mode/EgNet_edge4.yaml index 4ff6ae7..4f05d81 100644 --- a/example_config/static_mode/EgNet_edge4.yaml +++ b/example_config/static_mode/EgNet_edge4.yaml @@ -3,7 +3,7 @@ Interface: Name: tap1 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: DA:21:10:81 + MacAddrPrefix: EA:C9:BC:0F IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -16,7 +16,7 @@ NodeName: EgNet4 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: ai9XXdezwamYHf7EvzmLGlMp7mUg+hZwoqLefzwHWVM= +PrivKey: GwPv8hvKV5YP6TdSc9Bn4lJirmyapU/4iHb6NhgUueI= ListenPort: 3004 LogLevel: LogLevel: error @@ -28,10 +28,11 @@ LogLevel: DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: false @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0.9 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: @@ -100,20 +100,20 @@ NextHopTable: ResetConnInterval: 86400 Peers: - NodeID: 2 - PubKey: 0r2o9Hb36gYVgD3VSKCH18MVOZw0BvzcJ6TOTo6Cc1g= - PSKey: QHyrrls0KT2dvBKtoWkZvq5NQ+Xyjm0YgbMUzCCRw34= + PubKey: /OUi+mno1dvZi3L0T72P4Lxd42TkXdEJwR0VEhsaKxQ= + PSKey: VVzfkmJBGdjphL0Ccs0Ka04rgsOlZkhuO308u4yK5Wc= EndPoint: 127.0.0.1:3002 PersistentKeepalive: 0 Static: true - NodeID: 3 - PubKey: ymNpm430tiph3rMSVnQzDAxmK9+3jdcRFi6e96xmQUI= - PSKey: SQyLomXDeknBIFezUKardOviAmNS+YZ1XTvZtYVlOtE= + PubKey: FRpS3KJJDiG3LgNkZCZiSNenYR3b/nINu2fTJmXZWlo= + PSKey: Kpd1FKPEj+NFgq69+t5xDely7Yp5tU+fvlkeRVNCb2I= EndPoint: 127.0.0.1:3003 PersistentKeepalive: 0 Static: true - NodeID: 6 - PubKey: f6kHXq3qPLocdM0CZEkoumOHevrabzqOBFG5vg9cjDc= - PSKey: crsb9pbTY/Bei7TugjPNtg4dVKVzjwC/A6AjlSVoqbQ= + PubKey: jY7Uj9s2UXTiiNjZlTuUagIYz5YzAnelfrp4YT8+5So= + PSKey: zd3zB1QWk26a7IOCJSx031TPly3nv7P3QIxk845zsXA= EndPoint: 127.0.0.1:3006 PersistentKeepalive: 0 Static: true diff --git a/example_config/static_mode/EgNet_edge5.yaml b/example_config/static_mode/EgNet_edge5.yaml index 4dfd665..cfc7460 100644 --- a/example_config/static_mode/EgNet_edge5.yaml +++ b/example_config/static_mode/EgNet_edge5.yaml @@ -3,7 +3,7 @@ Interface: Name: tap1 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: DA:21:10:81 + MacAddrPrefix: EA:C9:BC:0F IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -16,7 +16,7 @@ NodeName: EgNet5 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: hBNK6Wu/Cl2MOXVA/F8yZsqIQ5eeIYCKPJeLu7i/190= +PrivKey: jK3oL4WfEPphp+2jra5/uVZwbhI6wqPAXYStOGwGJqQ= ListenPort: 3005 LogLevel: LogLevel: error @@ -28,10 +28,11 @@ LogLevel: DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: false @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0.9 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: @@ -100,8 +100,8 @@ NextHopTable: ResetConnInterval: 86400 Peers: - NodeID: 3 - PubKey: ymNpm430tiph3rMSVnQzDAxmK9+3jdcRFi6e96xmQUI= - PSKey: ChWBQurfGNZE5xIlhi9EUvZrQPBvkFsfrPaD6tyqSYg= + PubKey: FRpS3KJJDiG3LgNkZCZiSNenYR3b/nINu2fTJmXZWlo= + PSKey: pd+roM0C5CqSii7NPZkgK3EWdx0PS2zXEiUHycdIPts= EndPoint: 127.0.0.1:3003 PersistentKeepalive: 0 Static: true diff --git a/example_config/static_mode/EgNet_edge6.yaml b/example_config/static_mode/EgNet_edge6.yaml index 794cf15..d382e1c 100644 --- a/example_config/static_mode/EgNet_edge6.yaml +++ b/example_config/static_mode/EgNet_edge6.yaml @@ -3,7 +3,7 @@ Interface: Name: tap1 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: DA:21:10:81 + MacAddrPrefix: EA:C9:BC:0F IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -16,7 +16,7 @@ NodeName: EgNet6 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: ao6wfUYOG3FBYYPlb+VtXk2ZiK6j/6ac75Y9VuKd2Vs= +PrivKey: Hn6v3HRWZW63P44qocWQm+hydkZPqCwSSVv7N8aVBBo= ListenPort: 3006 LogLevel: LogLevel: error @@ -28,10 +28,11 @@ LogLevel: DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: false @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0.9 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: @@ -100,8 +100,8 @@ NextHopTable: ResetConnInterval: 86400 Peers: - NodeID: 4 - PubKey: 9YSIkihv/+aeukOaWwsR9EKvO1DM9+5kN53a/osTpmA= - PSKey: crsb9pbTY/Bei7TugjPNtg4dVKVzjwC/A6AjlSVoqbQ= + PubKey: 4WO6Eqm0puYvZMyw6mlzq8Ap0KKXcaqbaQp0zxAVYhs= + PSKey: zd3zB1QWk26a7IOCJSx031TPly3nv7P3QIxk845zsXA= EndPoint: 127.0.0.1:3004 PersistentKeepalive: 0 Static: true diff --git a/example_config/static_mode/genstatic.yaml b/example_config/static_mode/genstatic.yaml index fe78c05..3f9b2ae 100644 --- a/example_config/static_mode/genstatic.yaml +++ b/example_config/static_mode/genstatic.yaml @@ -1,5 +1,5 @@ Config output dir: /tmp/eg_gen_static -ConfigTemplate for edge node: "" # "EgNet_edge1.yaml" +ConfigTemplate for edge node: "EgNet_edge1.yaml" Network name: "EgNet" Edge Node: MacAddress prefix: "" diff --git a/example_config/super_mode/Node_edge001.yaml b/example_config/super_mode/EgNet_edge001.yaml similarity index 82% rename from example_config/super_mode/Node_edge001.yaml rename to example_config/super_mode/EgNet_edge001.yaml index c956eba..4188b7e 100644 --- a/example_config/super_mode/Node_edge001.yaml +++ b/example_config/super_mode/EgNet_edge001.yaml @@ -1,9 +1,9 @@ Interface: IType: stdio - Name: Node001 + Name: EgNet001 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: CE:51:BA:B4 + MacAddrPrefix: 62:A6:A3:6D IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -12,34 +12,35 @@ Interface: SendAddr: 127.0.0.1:5001 L2HeaderMode: kbdbg NodeID: 1 -NodeName: Node001 +NodeName: EgNet001 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: C0SXvffZh8nDqXYNzG4UqUJtSCiRMEj3ehX5o7QiJz0= -ListenPort: 3001 +PrivKey: 12CRJpzWOTRQDOdtROtwwWb68B4HHjSbrS1WySAkWYI= +ListenPort: 0 LogLevel: LogLevel: error LogTransit: false - LogControl: true LogNormal: false + LogControl: true LogInternal: true LogNTP: true DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: true - PSKey: j2f9Fhdhw2O2zLqUqfL5nTFStjVWPnEXpw7Iqz6VX9M= + PSKey: 2eOq1sJlEs3No80xYOaKJ059ElgRaSveyMu9IyQG3X8= EndpointV4: 127.0.0.1:3456 - PubKeyV4: Id/VoZ6HmTU3FSqhxBUswfuHHB0mQxfzcbdoJNGBRzQ= + PubKeyV4: 10CPQrpXKqXxnjtpdxDwnYqLglnuRnCFsiSAjxMrMTc= EndpointV6: :3456 - PubKeyV6: 40tADRhJTvaortwE5Ur4qNXhP+SOMX7ZuSvl251Yxnc= + PubKeyV6: KhpV1fJ+jtNT6S5wKUZJbb0oFlDNMS5qxO0f5Ow/QQU= EndpointEdgeAPIUrl: http://127.0.0.1:3456/eg_net/eg_api SkipLocalIP: false SuperNodeInfoTimeout: 50 @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: diff --git a/example_config/super_mode/Node_edge002.yaml b/example_config/super_mode/EgNet_edge002.yaml similarity index 82% rename from example_config/super_mode/Node_edge002.yaml rename to example_config/super_mode/EgNet_edge002.yaml index 98d34e7..adab6ae 100644 --- a/example_config/super_mode/Node_edge002.yaml +++ b/example_config/super_mode/EgNet_edge002.yaml @@ -1,9 +1,9 @@ Interface: IType: stdio - Name: Node002 + Name: EgNet002 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: CE:51:BA:B4 + MacAddrPrefix: 62:A6:A3:6D IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -12,34 +12,35 @@ Interface: SendAddr: 127.0.0.1:5002 L2HeaderMode: kbdbg NodeID: 2 -NodeName: Node002 +NodeName: EgNet002 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: AErxhLXdZvidPZVXRYgD+84fa2qYWG9ft4MRuCbAtt8= -ListenPort: 3002 +PrivKey: 2swvwMtyuOKd2HsrfSY1eEYKRjhS4dCr2Cwtj9or0us= +ListenPort: 0 LogLevel: LogLevel: error LogTransit: false - LogControl: true LogNormal: false + LogControl: true LogInternal: true LogNTP: true DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: true - PSKey: iCw096jsW2aWyMwPyzVEvL8C3XXqMpB+jOeWqDC34uU= + PSKey: Ye1vd4P8vZWCLmuhYq8yiu1ziB84AGwuO+/cexQObqc= EndpointV4: 127.0.0.1:3456 - PubKeyV4: Id/VoZ6HmTU3FSqhxBUswfuHHB0mQxfzcbdoJNGBRzQ= + PubKeyV4: 10CPQrpXKqXxnjtpdxDwnYqLglnuRnCFsiSAjxMrMTc= EndpointV6: :3456 - PubKeyV6: 40tADRhJTvaortwE5Ur4qNXhP+SOMX7ZuSvl251Yxnc= + PubKeyV6: KhpV1fJ+jtNT6S5wKUZJbb0oFlDNMS5qxO0f5Ow/QQU= EndpointEdgeAPIUrl: http://127.0.0.1:3456/eg_net/eg_api SkipLocalIP: false SuperNodeInfoTimeout: 50 @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: diff --git a/example_config/super_mode/Node_edge100.yaml b/example_config/super_mode/EgNet_edge100.yaml similarity index 82% rename from example_config/super_mode/Node_edge100.yaml rename to example_config/super_mode/EgNet_edge100.yaml index 6faa2e5..affb6b0 100644 --- a/example_config/super_mode/Node_edge100.yaml +++ b/example_config/super_mode/EgNet_edge100.yaml @@ -1,9 +1,9 @@ Interface: IType: stdio - Name: Node100 + Name: EgNet100 VPPIFaceID: 1 VPPBridgeID: 4242 - MacAddrPrefix: CE:51:BA:B4 + MacAddrPrefix: 62:A6:A3:6D IPv4CIDR: 192.168.76.0/24 IPv6CIDR: fd95:71cb:a3df:e586::/64 IPv6LLPrefix: fe80::a3df:0/112 @@ -12,34 +12,35 @@ Interface: SendAddr: 127.0.0.1:5100 L2HeaderMode: kbdbg NodeID: 100 -NodeName: Node100 +NodeName: EgNet100 PostScript: "" DefaultTTL: 200 L2FIBTimeout: 3600 -PrivKey: a04BVvT+YbrX1ejjvMQVI6k5VRFlBkEX8tuLGWNyNrY= -ListenPort: 3100 +PrivKey: iquaLyD+YLzW3zvI0JGSed9GfDqHYMh/vUaU0PYVAbQ= +ListenPort: 0 LogLevel: LogLevel: error LogTransit: false - LogControl: true LogNormal: false + LogControl: true LogInternal: true LogNTP: true DynamicRoute: SendPingInterval: 16 PeerAliveTimeout: 70 - DupCheckTimeout: 40 - ConnTimeOut: 20 + TimeoutCheckInterval: 20 ConnNextTry: 5 + DupCheckTimeout: 40 AdditionalCost: 10 + DampingResistance: 0.9 SaveNewPeers: true SuperNode: UseSuperNode: true - PSKey: Gfp2RkPNrKTeGKrCJNEvSyiBqYYRmzVnVG6CBuUKUNc= + PSKey: w5t64vFEoyNk/iKJP3oeSi9eiGEiPteZmf2o0oI2q2U= EndpointV4: 127.0.0.1:3456 - PubKeyV4: Id/VoZ6HmTU3FSqhxBUswfuHHB0mQxfzcbdoJNGBRzQ= + PubKeyV4: 10CPQrpXKqXxnjtpdxDwnYqLglnuRnCFsiSAjxMrMTc= EndpointV6: :3456 - PubKeyV6: 40tADRhJTvaortwE5Ur4qNXhP+SOMX7ZuSvl251Yxnc= + PubKeyV6: KhpV1fJ+jtNT6S5wKUZJbb0oFlDNMS5qxO0f5Ow/QQU= EndpointEdgeAPIUrl: http://127.0.0.1:3456/eg_net/eg_api SkipLocalIP: false SuperNodeInfoTimeout: 50 @@ -51,7 +52,6 @@ DynamicRoute: ManualLatency: {} JitterTolerance: 50 JitterToleranceMultiplier: 1.1 - DampingResistance: 0 TimeoutCheckInterval: 5 RecalculateCoolDown: 5 NTPConfig: diff --git a/example_config/super_mode/EgNet_super.yaml b/example_config/super_mode/EgNet_super.yaml new file mode 100644 index 0000000..73f46b9 --- /dev/null +++ b/example_config/super_mode/EgNet_super.yaml @@ -0,0 +1,55 @@ +NodeName: EgNetSP +PostScript: "" +PrivKeyV4: xJiK1UiWpZyygZUlZWR+nmGU9PrweCIPDcCRRXNvHLI= +PrivKeyV6: 8AEBC4hRAKhAWd2F5kR7xJZJi8GIp7K8hEjo2cDn8kE= +ListenPort: 3456 +ListenPort_EdgeAPI: "3456" +ListenPort_ManageAPI: "3456" +API_Prefix: /eg_net/eg_api +RePushConfigInterval: 30 +HttpPostInterval: 50 +PeerAliveTimeout: 70 +SendPingInterval: 15 +DampingResistance: 0.9 +LogLevel: + LogLevel: normal + LogTransit: false + LogNormal: false + LogControl: true + LogInternal: true + LogNTP: true +Passwords: + ShowState: zOWP0T9O_showstate + AddPeer: zOWP0T9O_addpeer + DelPeer: zOWP0T9O_delpeer + UpdatePeer: zOWP0T9O_updatepeer + UpdateSuper: zOWP0T9O_updatesuper +GraphRecalculateSetting: + StaticMode: false + ManualLatency: {} + JitterTolerance: 30 + JitterToleranceMultiplier: 1.01 + TimeoutCheckInterval: 5 + RecalculateCoolDown: 5 +NextHopTable: {} +EdgeTemplate: EgNet_edge001.yaml +UsePSKForInterEdge: true +Peers: +- NodeID: 1 + Name: EgNet001 + PubKey: SlRqHTbVz976aBbR06DFDFXG8yKjSvMdrrWeKuvePgw= + PSKey: 2eOq1sJlEs3No80xYOaKJ059ElgRaSveyMu9IyQG3X8= + AdditionalCost: 10 + SkipLocalIP: false +- NodeID: 2 + Name: EgNet002 + PubKey: TlxC+ZHej2RkitN1o2tnFT8pO6WUFulitF4RzMlMFlk= + PSKey: Ye1vd4P8vZWCLmuhYq8yiu1ziB84AGwuO+/cexQObqc= + AdditionalCost: 10 + SkipLocalIP: false +- NodeID: 100 + Name: EgNet100 + PubKey: DG/Lq1bFpE/6109emAoO3iaC+shgWtdRaGBhW3soiSI= + PSKey: w5t64vFEoyNk/iKJP3oeSi9eiGEiPteZmf2o0oI2q2U= + AdditionalCost: 10 + SkipLocalIP: false diff --git a/example_config/super_mode/Node_super.yaml b/example_config/super_mode/Node_super.yaml deleted file mode 100644 index 607488f..0000000 --- a/example_config/super_mode/Node_super.yaml +++ /dev/null @@ -1,55 +0,0 @@ -NodeName: NodeSP -PostScript: "" -PrivKeyV4: 2P0mV5RkpFFyg+aLPK841sml5RobQGrxAV5ld4En9Kk= -PrivKeyV6: 9JrdnAk1ljXUTn9VFb1uFyey20tQEQuzJJtVueM4vsw= -ListenPort: 3456 -ListenPort_EdgeAPI: "3456" -ListenPort_ManageAPI: "3456" -API_Prefix: /eg_net/eg_api -RePushConfigInterval: 30 -HttpPostInterval: 50 -PeerAliveTimeout: 70 -SendPingInterval: 15 -LogLevel: - LogLevel: normal - LogTransit: false - LogNormal: false - LogControl: true - LogInternal: true - LogNTP: true -Passwords: - ShowState: passwd_showstate - AddPeer: passwd_addpeer - DelPeer: passwd_delpeer - UpdatePeer: passwd_updatepeer - UpdateSuper: passwd_updatesuper -GraphRecalculateSetting: - StaticMode: false - ManualLatency: {} - JitterTolerance: 30 - JitterToleranceMultiplier: 1.01 - DampingResistance: 0.9 - TimeoutCheckInterval: 5 - RecalculateCoolDown: 5 -NextHopTable: {} -EdgeTemplate: "" -UsePSKForInterEdge: true -Peers: -- NodeID: 1 - Name: Node001 - PubKey: awnuKYQOgCywkJbHAynqMzKi5QEGsG0w4iBy2Ja1MDQ= - PSKey: j2f9Fhdhw2O2zLqUqfL5nTFStjVWPnEXpw7Iqz6VX9M= - AdditionalCost: 10 - SkipLocalIP: false -- NodeID: 2 - Name: Node002 - PubKey: WUyblc/DZzPNU5sOQQS2lS0aP53zFEVNjqCHjkhkdzE= - PSKey: iCw096jsW2aWyMwPyzVEvL8C3XXqMpB+jOeWqDC34uU= - AdditionalCost: 10 - SkipLocalIP: false -- NodeID: 100 - Name: Node_100 - PubKey: Bax6wOJpisSVJtrU92ujn8D/2oGUyhyPrKTXkHbGamM= - PSKey: Gfp2RkPNrKTeGKrCJNEvSyiBqYYRmzVnVG6CBuUKUNc= - AdditionalCost: 1000 - SkipLocalIP: false diff --git a/example_config/super_mode/README_zh.md b/example_config/super_mode/README_zh.md index 41225b2..a746558 100644 --- a/example_config/super_mode/README_zh.md +++ b/example_config/super_mode/README_zh.md @@ -230,7 +230,7 @@ curl "http://127.0.0.1:3456/eg_net/eg_api/manage/super/state?Password=passwd_sho ```bash curl -X POST "http://127.0.0.1:3456/eg_net/eg_api/manage/peer/add?Password=passwd_addpeer" \ -H "Content-Type: application/x-www-form-urlencoded" \ - -d "NodeID=100&Name=Node_100&PubKey=Bax6wOJpisSVJtrU92ujn8D%2F2oGUyhyPrKTXkHbGamM%3D&AdditionalCost=1000&PSKey=Gfp2RkPNrKTeGKrCJNEvSyiBqYYRmzVnVG6CBuUKUNc%3D&SkipLocalIP=false" + -d "NodeID=100&Name=Node_100&PubKey=DG%2FLq1bFpE%2F6109emAoO3iaC%2BshgWtdRaGBhW3soiSI%3D&AdditionalCost=1000&PSKey=w5t64vFEoyNk%2FiKJP3oeSi9eiGEiPteZmf2o0oI2q2U%3D&SkipLocalIP=false" ``` 參數: 1. URL query: Password: 新增peer用的密碼,在設定檔配置 @@ -260,7 +260,7 @@ curl "http://127.0.0.1:3456/eg_net/eg_api/manage/peer/del?Password=passwd_delpee 也可以使用privkey刪除,同上,但是只要附上privkey參數就好 ```bash -curl "http://127.0.0.1:3456/eg_net/eg_api/manage/peer/del?PrivKey=a04BVvT%2BYbrX1ejjvMQVI6k5VRFlBkEX8tuLGWNyNrY%3D" +curl "http://127.0.0.1:3456/eg_net/eg_api/manage/peer/del?PrivKey=iquaLyD%2BYLzW3zvI0JGSed9GfDqHYMh%2FvUaU0PYVAbQ%3D" ``` 參數: @@ -286,7 +286,7 @@ curl -X POST "http://127.0.0.1:3456/eg_net/eg_api/eg_api/manage/peer/update?Pass ```bash curl -X POST "http://127.0.0.1:3456/eg_net/eg_api/eg_api/manage/super/update?Password=e05znou1_updatesuper" \ -H "Content-Type: application/x-www-form-urlencoded" \ - -d "SendPingInterval=15&HttpPostInterval=60&PeerAliveTimeout=70" + -d "SendPingInterval=15&HttpPostInterval=60&PeerAliveTimeout=70DampingResistance=0.9" ``` ### SuperNode Config Parameter @@ -359,15 +359,15 @@ ResetConnInterval | 如果對方是動態ip就要用這個。每隔一段時間 DynamicRoute | Description --------------------|:----- -SendPingInterval | 發送Ping訊息的間隔(秒) -PeerAliveTimeout | 每次收到封包就重置,超過時間(秒)沒收到就標記該peer離線 -DupCheckTimeout | 重複封包檢查的timeout(秒)
完全相同的封包收第二次會被丟棄 -ConnTimeOut | 檢查peer離線的時間間格
如果標記離線,就切換下一個endpoint
SuperNode可能傳了多個endpoint過來 -ConnNextTry | 切換下一個endpoint的間隔 +SendPingInterval | 發送Ping訊息的間隔(秒) +PeerAliveTimeout | 被標記為離線所需的無反應時間(秒) +TimeoutCheckInterval | 檢查間格(秒),檢查是否有任何peer超時,若有就標記 +ConnNextTry | 被標記以後,嘗試下一個endpoint的間隔(秒) +DupCheckTimeout | 重複封包檢查的timeout(秒)
完全相同的封包收第二次會被丟棄 [AdditionalCost](#AdditionalCost) | 繞路成本(毫秒)。僅限SuperNode設定-1時生效 -SaveNewPeers | 是否把下載來的鄰居資訊存到本地設定檔裡面 +SaveNewPeers | 是否把下載來的鄰居資訊存到本地設定檔裡面 [SuperNode](#SuperNode) | SuperNode相關設定 -P2P | P2P相關設定,SuperMode用不到 +[P2P](../p2p_mode/README_zh.md#P2P) | P2P相關設定,SuperMode用不到 [NTPConfig](#NTPConfig) | NTP時間同步相關設定 SuperNode | Description diff --git a/example_config/super_mode/gensuper.yaml b/example_config/super_mode/gensuper.yaml index e3e0793..bb3c5f8 100644 --- a/example_config/super_mode/gensuper.yaml +++ b/example_config/super_mode/gensuper.yaml @@ -1,6 +1,6 @@ Config output dir: /tmp/eg_gen_super -ConfigTemplate for super node: "" -ConfigTemplate for edge node: "" +ConfigTemplate for super node: "" # "EgNet_super.yaml" +ConfigTemplate for edge node: "" # "EgNet_edge001.yaml" Network name: EgNet Super Node: Listen port: 3456 diff --git a/gencfg/example_conf.go b/gencfg/example_conf.go index 9c693ca..ccfab57 100644 --- a/gencfg/example_conf.go +++ b/gencfg/example_conf.go @@ -48,13 +48,14 @@ func GetExampleEdgeConf(templatePath string, getDemo bool) mtypes.EdgeConfig { LogNTP: true, }, DynamicRoute: mtypes.DynamicRouteInfo{ - SendPingInterval: 16, - PeerAliveTimeout: 70, - DupCheckTimeout: 40, - ConnTimeOut: 20, - ConnNextTry: 5, - AdditionalCost: 10, - SaveNewPeers: true, + SendPingInterval: 16, + PeerAliveTimeout: 70, + DupCheckTimeout: 40, + TimeoutCheckInterval: 20, + ConnNextTry: 5, + AdditionalCost: 10, + DampingResistance: 0.95, + SaveNewPeers: true, SuperNode: mtypes.SuperInfo{ UseSuperNode: true, PSKey: "iPM8FXfnHVzwjguZHRW9bLNY+h7+B1O2oTJtktptQkI=", @@ -73,7 +74,6 @@ func GetExampleEdgeConf(templatePath string, getDemo bool) mtypes.EdgeConfig { StaticMode: false, JitterTolerance: 50, JitterToleranceMultiplier: 1.1, - DampingResistance: 0.9, TimeoutCheckInterval: 5, RecalculateCoolDown: 5, ManualLatency: mtypes.DistTable{ @@ -193,6 +193,7 @@ func GetExampleSuperConf(templatePath string, getDemo bool) mtypes.SuperConfig { }, RePushConfigInterval: 30, PeerAliveTimeout: 70, + DampingResistance: 0.9, HttpPostInterval: 50, SendPingInterval: 15, Passwords: mtypes.Passwords{ @@ -206,7 +207,6 @@ func GetExampleSuperConf(templatePath string, getDemo bool) mtypes.SuperConfig { StaticMode: false, JitterTolerance: 30, JitterToleranceMultiplier: 1.01, - DampingResistance: 0.9, TimeoutCheckInterval: 5, RecalculateCoolDown: 5, }, diff --git a/gencfg/gencfgNM.go b/gencfg/gencfgNM.go index 763d184..aabe00e 100644 --- a/gencfg/gencfgNM.go +++ b/gencfg/gencfgNM.go @@ -34,7 +34,7 @@ func printNMCinfig() { fmt.Print(string(toprint)) } -func GenNMCfg(NMCinfigPath string, printExample bool) (err error) { +func GenNMCfg(NMCinfigPath string, enableP2P bool, printExample bool) (err error) { NMCfg := NMCfg{} if printExample { printNMCinfig() @@ -76,9 +76,30 @@ func GenNMCfg(NMCinfigPath string, printExample bool) (err error) { } g, _ := path.NewGraph(0, false, mtypes.GraphRecalculateSetting{}, mtypes.NTPInfo{}, mtypes.LoggerInfo{LogInternal: false}) - edges, err := path.ParseDistanceMatrix(NMCfg.DistanceMatrix) - if err != nil { - return err + edges := []mtypes.PongMsg{} + if NMCfg.DistanceMatrix != "" { + edges, err = path.ParseDistanceMatrix(NMCfg.DistanceMatrix) + if err != nil { + return err + } + } else { + for S, edgeinfoS := range NMCfg.EdgeNodes { + for D, edgeinfoD := range NMCfg.EdgeNodes { + if S == D { + continue + } + if len(edgeinfoS.Endpoint)+len(edgeinfoD.Endpoint) == 0 { + continue + } + edges = append(edges, mtypes.PongMsg{ + Src_nodeID: S, + Dst_nodeID: D, + Timediff: 1, + TimeToAlive: 99999, + AdditionalCost: 0, + }) + } + } } g.UpdateLatencyMulti(edges, false, false) all_verts := g.Vertices() @@ -156,9 +177,12 @@ func GenNMCfg(NMCinfigPath string, printExample bool) (err error) { } } econfig := GetExampleEdgeConf(NMCfg.EdgeConfigTemplate, false) - econfig.DynamicRoute.P2P.UseP2P = false + econfig.DynamicRoute.P2P.UseP2P = enableP2P econfig.DynamicRoute.SuperNode.UseSuperNode = false econfig.NextHopTable = next + if enableP2P { + econfig.NextHopTable = make(mtypes.NextHopTable) + } econfig.DynamicRoute.NTPConfig.Servers = make([]string, 0) econfig.DynamicRoute.SuperNode.PSKey = "" diff --git a/gencfg/gencfgSM.go b/gencfg/gencfgSM.go index 7a19753..28a42bc 100644 --- a/gencfg/gencfgSM.go +++ b/gencfg/gencfgSM.go @@ -264,7 +264,6 @@ func GenSuperCfg(SMCinfigPath string, printExample bool) (err error) { peerceconf.DynamicRoute.SuperNode.EndpointV4 = EndpointV4 + ":" + ListenPort peerceconf.DynamicRoute.SuperNode.EndpointV6 = EndpointV6 + ":" + ListenPort peerceconf.DynamicRoute.SuperNode.EndpointEdgeAPIUrl = EndpointEdgeAPIUrl - peerceconf.DynamicRoute.P2P.GraphRecalculateSetting.DampingResistance = 0 peerceconf.Interface.MacAddrPrefix = MacPrefix peerceconf.Interface.IPv4CIDR = IPv4Block peerceconf.Interface.IPv6CIDR = IPv6Block diff --git a/gencfg/types.go b/gencfg/types.go index f315d56..6388919 100644 --- a/gencfg/types.go +++ b/gencfg/types.go @@ -44,23 +44,8 @@ type NMCfg struct { DistanceMatrix string `yaml:"Distance matrix for all nodes"` } -type PMCfg struct { - ConfigOutputDir string `yaml:"Config output dir"` - EdgeConfigTemplate string `yaml:"ConfigTemplate for edge node"` - NetworkName string `yaml:"Network name"` - EdgeNode struct { - MacPrefix string `yaml:"MacAddress prefix"` - IPv4Range string `yaml:"IPv4 range"` - IPv6Range string `yaml:"IPv6 range"` - IPv6LLRange string `yaml:"IPv6 LL range"` - } `yaml:"Edge Node"` - EdgeNodes map[mtypes.Vertex]edge_raw_info `yaml:"Edge Nodes"` -} - type edge_raw_info struct { Endpoint string `yaml:"Endpoint(optional)"` - PersistentKeepalive uint32 `yaml:"PersistentKeepalive"` - AdditionalCost float64 `yaml:"AdditionalCost"` } type edge_info struct { diff --git a/main.go b/main.go index bcb344c..6068e4e 100644 --- a/main.go +++ b/main.go @@ -72,7 +72,9 @@ func main() { case "super": err = gencfg.GenSuperCfg(*tconfig, *printExample) case "static": - err = gencfg.GenNMCfg(*tconfig, *printExample) + err = gencfg.GenNMCfg(*tconfig, false, *printExample) + case "p2p": + err = gencfg.GenNMCfg(*tconfig, true, *printExample) default: err = fmt.Errorf("gencfg: generate config for %v mode are not implement", *cfgmode) } diff --git a/main_edge.go b/main_edge.go index 1ece5de..3f3779f 100644 --- a/main_edge.go +++ b/main_edge.go @@ -51,8 +51,8 @@ func Edge(configPath string, useUAPI bool, printExample bool, bindmode string) ( if len(NodeName) > 32 { return errors.New("Node name can't longer than 32 :" + NodeName) } - if econfig.DynamicRoute.P2P.GraphRecalculateSetting.DampingResistance < 0 || econfig.DynamicRoute.P2P.GraphRecalculateSetting.DampingResistance >= 1 { - return fmt.Errorf("DampingResistance must in range [0,1) : %v", econfig.DynamicRoute.P2P.GraphRecalculateSetting.DampingResistance) + if econfig.DynamicRoute.DampingResistance < 0 || econfig.DynamicRoute.DampingResistance >= 1 { + return fmt.Errorf("DampingResistance must in range [0,1) : %v", econfig.DynamicRoute.DampingResistance) } var logLevel int switch econfig.LogLevel.LogLevel { diff --git a/main_httpserver.go b/main_httpserver.go index 9e8303e..0720e7d 100644 --- a/main_httpserver.go +++ b/main_httpserver.go @@ -230,10 +230,11 @@ func edge_get_superparams(w http.ResponseWriter, r *http.Request) { } // Do something SuperParams := mtypes.API_SuperParams{ - SendPingInterval: httpobj.http_sconfig.SendPingInterval, - HttpPostInterval: httpobj.http_sconfig.HttpPostInterval, - PeerAliveTimeout: httpobj.http_sconfig.PeerAliveTimeout, - AdditionalCost: httpobj.http_PeerID2Info[NodeID].AdditionalCost, + SendPingInterval: httpobj.http_sconfig.SendPingInterval, + HttpPostInterval: httpobj.http_sconfig.HttpPostInterval, + PeerAliveTimeout: httpobj.http_sconfig.PeerAliveTimeout, + AdditionalCost: httpobj.http_PeerID2Info[NodeID].AdditionalCost, + DampingResistance: httpobj.http_sconfig.DampingResistance, } SuperParamStr, _ := json.Marshal(SuperParams) httpobj.http_PeerState[PubKey].SuperParamStateClient.Store(State) @@ -734,10 +735,11 @@ func manage_peerupdate(w http.ResponseWriter, r *http.Request) { httpobj.http_PeerID2Info[toUpdate] = new_superpeerinfo SuperParams := mtypes.API_SuperParams{ - SendPingInterval: httpobj.http_sconfig.SendPingInterval, - HttpPostInterval: httpobj.http_sconfig.HttpPostInterval, - PeerAliveTimeout: httpobj.http_sconfig.PeerAliveTimeout, - AdditionalCost: new_superpeerinfo.AdditionalCost, + SendPingInterval: httpobj.http_sconfig.SendPingInterval, + HttpPostInterval: httpobj.http_sconfig.HttpPostInterval, + PeerAliveTimeout: httpobj.http_sconfig.PeerAliveTimeout, + DampingResistance: httpobj.http_sconfig.DampingResistance, + AdditionalCost: new_superpeerinfo.AdditionalCost, } SuperParamStr, _ := json.Marshal(SuperParams) @@ -797,6 +799,17 @@ func manage_superupdate(w http.ResponseWriter, r *http.Request) { sconfig_temp.PeerAliveTimeout = PeerAliveTimeout } + DampingResistance, err := extractParamsFloat(r.Form, "DampingResistance", 64, nil) + if err == nil { + if DampingResistance < 0 || DampingResistance >= 0 { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(fmt.Sprintf("Paramater DampingResistance %v: Must in range [0,1)\n", DampingResistance))) + return + } + Updated_params["DampingResistance"] = fmt.Sprintf("%v", DampingResistance) + sconfig_temp.DampingResistance = DampingResistance + } + SendPingInterval, err := extractParamsFloat(r.Form, "SendPingInterval", 64, nil) if err == nil { if SendPingInterval <= 0 || SendPingInterval >= sconfig_temp.PeerAliveTimeout { @@ -827,12 +840,14 @@ func manage_superupdate(w http.ResponseWriter, r *http.Request) { httpobj.http_sconfig.PeerAliveTimeout = sconfig_temp.PeerAliveTimeout httpobj.http_sconfig.SendPingInterval = sconfig_temp.SendPingInterval httpobj.http_sconfig.HttpPostInterval = sconfig_temp.HttpPostInterval + httpobj.http_sconfig.DampingResistance = sconfig_temp.HttpPostInterval SuperParams := mtypes.API_SuperParams{ - SendPingInterval: httpobj.http_sconfig.SendPingInterval, - HttpPostInterval: httpobj.http_sconfig.HttpPostInterval, - PeerAliveTimeout: httpobj.http_sconfig.PeerAliveTimeout, - AdditionalCost: 10, + SendPingInterval: httpobj.http_sconfig.SendPingInterval, + HttpPostInterval: httpobj.http_sconfig.HttpPostInterval, + PeerAliveTimeout: httpobj.http_sconfig.PeerAliveTimeout, + DampingResistance: httpobj.http_sconfig.PeerAliveTimeout, + AdditionalCost: 10, } httpobj.Lock() defer httpobj.Unlock() diff --git a/main_super.go b/main_super.go index 95214cb..a723bf7 100644 --- a/main_super.go +++ b/main_super.go @@ -100,8 +100,8 @@ func Super(configPath string, useUAPI bool, printExample bool, bindmode string) if sconfig.RePushConfigInterval <= 0 { return fmt.Errorf("RePushConfigInterval must > 0 : %v", sconfig.RePushConfigInterval) } - if sconfig.GraphRecalculateSetting.DampingResistance < 0 || sconfig.GraphRecalculateSetting.DampingResistance >= 1 { - return fmt.Errorf("DampingResistance must in range [0,1) : %v", sconfig.GraphRecalculateSetting.DampingResistance) + if sconfig.DampingResistance < 0 || sconfig.DampingResistance >= 1 { + return fmt.Errorf("DampingResistance must in range [0,1) : %v", sconfig.DampingResistance) } var logLevel int diff --git a/mtypes/config.go b/mtypes/config.go index d70092f..e2ab4ef 100644 --- a/mtypes/config.go +++ b/mtypes/config.go @@ -10,11 +10,11 @@ import ( type Vertex uint16 const ( - NodeID_Broadcast Vertex = math.MaxUint16 - iota // Normal boardcast, boardcast with route table + NodeID_Broadcast Vertex = math.MaxUint16 - iota // Normal boardcast, boardcast with route table NodeID_AllPeer Vertex = math.MaxUint16 - iota // p2p mode: boardcast to every know peer and prevent dup. super mode: send to supernode NodeID_SuperNode Vertex = math.MaxUint16 - iota - NodeID_Invalid Vertex = math.MaxUint16 - iota - NodeID_Special Vertex = NodeID_Invalid + NodeID_Invalid Vertex = math.MaxUint16 - iota + NodeID_Special Vertex = NodeID_Invalid ) type EdgeConfig struct { @@ -46,6 +46,7 @@ type SuperConfig struct { HttpPostInterval float64 `yaml:"HttpPostInterval"` PeerAliveTimeout float64 `yaml:"PeerAliveTimeout"` SendPingInterval float64 `yaml:"SendPingInterval"` + DampingResistance float64 `yaml:"DampingResistance"` LogLevel LoggerInfo `yaml:"LogLevel"` Passwords Passwords `yaml:"Passwords"` GraphRecalculateSetting GraphRecalculateSetting `yaml:"GraphRecalculateSetting"` @@ -110,25 +111,28 @@ func (v *Vertex) ToString() string { case NodeID_Broadcast: return "Boardcast" case NodeID_AllPeer: - return "Control" + return "AllPeer" case NodeID_SuperNode: return "Super" + case NodeID_Invalid: + return "Invalid" default: return strconv.Itoa(int(*v)) } } type DynamicRouteInfo struct { - SendPingInterval float64 `yaml:"SendPingInterval"` - PeerAliveTimeout float64 `yaml:"PeerAliveTimeout"` - DupCheckTimeout float64 `yaml:"DupCheckTimeout"` - ConnTimeOut float64 `yaml:"ConnTimeOut"` - ConnNextTry float64 `yaml:"ConnNextTry"` - AdditionalCost float64 `yaml:"AdditionalCost"` - SaveNewPeers bool `yaml:"SaveNewPeers"` - SuperNode SuperInfo `yaml:"SuperNode"` - P2P P2PInfo `yaml:"P2P"` - NTPConfig NTPInfo `yaml:"NTPConfig"` + SendPingInterval float64 `yaml:"SendPingInterval"` + PeerAliveTimeout float64 `yaml:"PeerAliveTimeout"` + TimeoutCheckInterval float64 `yaml:"TimeoutCheckInterval"` + ConnNextTry float64 `yaml:"ConnNextTry"` + DupCheckTimeout float64 `yaml:"DupCheckTimeout"` + AdditionalCost float64 `yaml:"AdditionalCost"` + DampingResistance float64 `yaml:"DampingResistance"` + SaveNewPeers bool `yaml:"SaveNewPeers"` + SuperNode SuperInfo `yaml:"SuperNode"` + P2P P2PInfo `yaml:"P2P"` + NTPConfig NTPInfo `yaml:"NTPConfig"` } type NTPInfo struct { @@ -162,7 +166,6 @@ type GraphRecalculateSetting struct { ManualLatency DistTable `yaml:"ManualLatency"` JitterTolerance float64 `yaml:"JitterTolerance"` JitterToleranceMultiplier float64 `yaml:"JitterToleranceMultiplier"` - DampingResistance float64 `yaml:"DampingResistance"` TimeoutCheckInterval float64 `yaml:"TimeoutCheckInterval"` RecalculateCoolDown float64 `yaml:"RecalculateCoolDown"` } @@ -215,10 +218,11 @@ type API_Peerinfo struct { } type API_SuperParams struct { - SendPingInterval float64 - HttpPostInterval float64 - PeerAliveTimeout float64 - AdditionalCost float64 + SendPingInterval float64 + HttpPostInterval float64 + PeerAliveTimeout float64 + DampingResistance float64 + AdditionalCost float64 } type StateHash struct { diff --git a/path/path.go b/path/path.go index c97d189..bfae87a 100644 --- a/path/path.go +++ b/path/path.go @@ -65,9 +65,6 @@ func NewGraph(num_node int, IsSuperMode bool, theconfig mtypes.GraphRecalculateS g.edges = make(map[mtypes.Vertex]map[mtypes.Vertex]*Latency, num_node) g.IsSuperMode = IsSuperMode g.loglevel = loglevel - if theconfig.DampingResistance < 0 || theconfig.DampingResistance >= 1 { - return nil, fmt.Errorf("DampingResistance must in range [0,1)") - } g.InitNTP() return &g, nil } @@ -206,9 +203,6 @@ func (g *IG) UpdateLatencyMulti(pong_info []mtypes.PongMsg, recalculate bool, ch g.edgelock.Unlock() oldval := g.OldWeight(u, v, false) g.edgelock.Lock() - if oldval != mtypes.Infinity && g.IsSuperMode && g.gsetting.DampingResistance > 0 { - w = oldval*g.gsetting.DampingResistance + newval*(1-g.gsetting.DampingResistance) - } should_update = should_update || g.ShouldUpdate(oldval, w, false) if _, ok := g.edges[u][v]; ok { g.edges[u][v].ping = w