59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package node
|
|
|
|
import (
|
|
"net/netip"
|
|
"vppn/m"
|
|
)
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type controlMsg[T any] struct {
|
|
SrcIP byte
|
|
SrcAddr netip.AddrPort
|
|
// TODO: RecvdAt int64 // Unixmilli.
|
|
Packet T
|
|
}
|
|
|
|
func parseControlMsg(srcIP byte, srcAddr netip.AddrPort, buf []byte) (any, error) {
|
|
switch buf[0] {
|
|
|
|
case packetTypeSyn:
|
|
packet, err := parseSynPacket(buf)
|
|
return controlMsg[synPacket]{
|
|
SrcIP: srcIP,
|
|
SrcAddr: srcAddr,
|
|
Packet: packet,
|
|
}, err
|
|
|
|
case packetTypeAck:
|
|
packet, err := parseAckPacket(buf)
|
|
return controlMsg[ackPacket]{
|
|
SrcIP: srcIP,
|
|
SrcAddr: srcAddr,
|
|
Packet: packet,
|
|
}, err
|
|
|
|
case packetTypeProbe:
|
|
packet, err := parseProbePacket(buf)
|
|
return controlMsg[probePacket]{
|
|
SrcIP: srcIP,
|
|
SrcAddr: srcAddr,
|
|
Packet: packet,
|
|
}, err
|
|
|
|
default:
|
|
return nil, errUnknownPacketType
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type peerUpdateMsg struct {
|
|
PeerIP byte
|
|
Peer *m.Peer
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type pingTimerMsg struct{}
|