package node import ( "net/netip" "vppn/m" ) // ---------------------------------------------------------------------------- type controlMsg[T any] struct { SrcIP byte SrcAddr netip.AddrPort 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{} // ----------------------------------------------------------------------------