@@ -33,15 +33,14 @@ import (
3333 h "github.com/HyperloopUPV-H8/h9-backend/pkg/http"
3434 "github.com/HyperloopUPV-H8/h9-backend/pkg/logger"
3535 data_logger "github.com/HyperloopUPV-H8/h9-backend/pkg/logger/data"
36- messages_logger "github.com/HyperloopUPV-H8/h9-backend/pkg/logger/messages"
3736 order_logger "github.com/HyperloopUPV-H8/h9-backend/pkg/logger/order"
37+ protection_logger "github.com/HyperloopUPV-H8/h9-backend/pkg/logger/protection"
3838 state_logger "github.com/HyperloopUPV-H8/h9-backend/pkg/logger/state"
3939 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport"
4040 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network/sniffer"
4141 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network/tcp"
4242 blcu_packet "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/blcu"
4343 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/data"
44- info_packet "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/info"
4544 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/order"
4645 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/packet/protection"
4746 "github.com/HyperloopUPV-H8/h9-backend/pkg/transport/presentation"
@@ -50,6 +49,7 @@ import (
5049 "github.com/fatih/color"
5150 "github.com/google/gopacket/layers"
5251 "github.com/google/gopacket/pcap"
52+ "github.com/jmaralo/sntp"
5353 "github.com/pelletier/go-toml/v2"
5454 trace "github.com/rs/zerolog/log"
5555)
@@ -117,10 +117,10 @@ func main() {
117117 // <--- logger --->
118118 var boardMap map [abstraction.BoardId ]string
119119 var subloggers = map [abstraction.LoggerName ]abstraction.Logger {
120- data_logger .Name : data_logger .NewLogger (),
121- messages_logger .Name : messages_logger .NewLogger (boardMap ),
122- order_logger .Name : order_logger .NewLogger (),
123- state_logger .Name : state_logger .NewLogger (),
120+ data_logger .Name : data_logger .NewLogger (),
121+ protection_logger .Name : protection_logger .NewLogger (boardMap ),
122+ order_logger .Name : order_logger .NewLogger (),
123+ state_logger .Name : state_logger .NewLogger (),
124124 }
125125
126126 loggerHandler := logger .NewLogger (subloggers )
@@ -159,17 +159,23 @@ func main() {
159159 broker .SetPool (pool )
160160
161161 // <--- transport --->
162- orders := make (map [abstraction.PacketId ]struct {})
163- for _ , board := range podData .Boards {
164- for _ , packet := range board .Packets {
165- if packet .Type == "order" {
166- orders [abstraction .PacketId (packet .Id )] = struct {}{}
167- }
168- }
162+ transp := transport .NewTransport ()
163+
164+ // <--- vehicle --->
165+ ipToBoardId := make (map [string ]abstraction.BoardId )
166+ for name , ip := range info .Addresses .Boards {
167+ ipToBoardId [ip .String ()] = abstraction .BoardId (info .BoardIds [name ])
169168 }
170169
171- transp := transport .NewTransport ()
170+ vehicle := vehicle .New ()
171+ vehicle .SetBroker (broker )
172+ vehicle .SetLogger (loggerHandler )
173+ vehicle .SetUpdateFactory (updateFactory )
174+ vehicle .SetIpToBoardId (ipToBoardId )
175+ vehicle .SetIdToBoardName (idToBoard )
176+ vehicle .SetTransport (transp )
172177
178+ // <--- transport --->
173179 // Load and set packet decoder and encoder
174180 decoder , encoder := getTransportDecEnc (info , podData )
175181 transp .WithDecoder (decoder ).WithEncoder (encoder )
@@ -182,17 +188,19 @@ func main() {
182188 }
183189
184190 // Start handling TCP client connections
185- backendTcpClientAddr , err := net .ResolveTCPAddr ("tcp" , fmt .Sprintf ("%s:%d" , info .Addresses .Backend .String (), info .Ports .TcpClient ))
186- if err != nil {
187- panic ("Failed to resolve local backend TCP client address" )
188- }
191+ i := 0
189192 serverTargets := make (map [string ]abstraction.TransportTarget )
190193 for _ , board := range podData .Boards {
191194 if ! common .Contains (config .Vehicle .Boards , board .Name ) {
192195 serverTargets [fmt .Sprintf ("%s:%d" , info .Addresses .Boards [board .Name ], info .Ports .TcpClient )] = abstraction .TransportTarget (board .Name )
193196 continue
194197 }
198+ backendTcpClientAddr , err := net .ResolveTCPAddr ("tcp" , fmt .Sprintf ("%s:%d" , info .Addresses .Backend .String (), info .Ports .TcpClient + uint16 (i )))
199+ if err != nil {
200+ panic ("Failed to resolve local backend TCP client address" )
201+ }
195202 go transp .HandleClient (tcp .NewClient (backendTcpClientAddr ), abstraction .TransportTarget (board .Name ), "tcp" , fmt .Sprintf ("%s:%d" , info .Addresses .Boards [board .Name ], info .Ports .TcpServer ))
203+ i ++
196204 }
197205
198206 // Start handling TCP server connections
@@ -213,14 +221,6 @@ func main() {
213221 }
214222 go transp .HandleSniffer (sniffer .New (source , & layers .LayerTypeEthernet ))
215223
216- // <--- vehicle --->
217- vehicle := vehicle .New ()
218- vehicle .SetBroker (broker )
219- vehicle .SetLogger (loggerHandler )
220- vehicle .SetUpdateFactory (updateFactory )
221- vehicle .SetIdToBoardName (idToBoard )
222- vehicle .SetTransport (transp )
223-
224224 // <--- http server --->
225225 podDataHandle , err := h .HandleDataJSON ("podData.json" , pod_data .GetDataOnlyPodData (podData ))
226226 if err != nil {
@@ -251,6 +251,26 @@ func main() {
251251 go httpServer .ListenAndServe ()
252252 }
253253
254+ // <--- SNTP --->
255+ sntpAddr , err := net .ResolveUDPAddr ("udp" , fmt .Sprintf ("%s:%d" , info .Addresses .Backend , info .Ports .SNTP ))
256+ if err != nil {
257+ fmt .Fprintf (os .Stderr , "error resolving sntp address: %v\n " , err )
258+ os .Exit (1 )
259+ }
260+ sntpServer , err := sntp .NewUnicast ("udp" , sntpAddr )
261+ if err != nil {
262+ fmt .Fprintf (os .Stderr , "error creating sntp server: %v\n " , err )
263+ os .Exit (1 )
264+ }
265+
266+ go func () {
267+ err := sntpServer .ListenAndServe ()
268+ if err != nil {
269+ fmt .Fprintf (os .Stderr , "error listening sntp server: %v\n " , err )
270+ return
271+ }
272+ }()
273+
254274 interrupt := make (chan os.Signal , 1 )
255275 signal .Notify (interrupt , os .Interrupt )
256276
@@ -426,19 +446,35 @@ func getTransportDecEnc(info info.Info, podData pod_data.PodData) (*presentation
426446
427447 decoder .SetPacketDecoder (abstraction .PacketId (info .MessageIds .BlcuAck ), blcu_packet .NewDecoder ())
428448
429- decoder .SetPacketDecoder (abstraction .PacketId (info .MessageIds .Info ), info_packet .NewDecoder (0 ))
430-
431449 stateOrdersDecoder := order .NewDecoder (binary .LittleEndian )
432450 stateOrdersDecoder .SetActionId (abstraction .PacketId (info .MessageIds .AddStateOrder ), stateOrdersDecoder .DecodeAdd )
433451 stateOrdersDecoder .SetActionId (abstraction .PacketId (info .MessageIds .RemoveStateOrder ), stateOrdersDecoder .DecodeRemove )
434452 decoder .SetPacketDecoder (abstraction .PacketId (info .MessageIds .AddStateOrder ), stateOrdersDecoder )
435453 decoder .SetPacketDecoder (abstraction .PacketId (info .MessageIds .RemoveStateOrder ), stateOrdersDecoder )
436454
437- protectionDecoder := protection .NewDecoder ()
438- protectionDecoder .SetSeverity (abstraction .PacketId (info .MessageIds .Warning ), protection .SeverityWarning )
439- protectionDecoder .SetSeverity (abstraction .PacketId (info .MessageIds .Fault ), protection .SeverityFault )
440- decoder .SetPacketDecoder (abstraction .PacketId (info .MessageIds .Warning ), protectionDecoder )
441- decoder .SetPacketDecoder (abstraction .PacketId (info .MessageIds .Fault ), protectionDecoder )
455+ protectionDecoder := protection .NewDecoder (binary .LittleEndian )
456+ protectionDecoder .SetSeverity (1000 , protection .Fault ).SetSeverity (2000 , protection .Warning ).SetSeverity (3000 , protection .Ok )
457+ protectionDecoder .SetSeverity (1111 , protection .Fault ).SetSeverity (2111 , protection .Warning ).SetSeverity (3111 , protection .Ok )
458+ protectionDecoder .SetSeverity (1222 , protection .Fault ).SetSeverity (2222 , protection .Warning ).SetSeverity (3222 , protection .Ok )
459+ protectionDecoder .SetSeverity (1333 , protection .Fault )
460+ protectionDecoder .SetSeverity (1444 , protection .Fault )
461+ protectionDecoder .SetSeverity (1555 , protection .Fault )
462+ protectionDecoder .SetSeverity (1666 , protection .Fault ).SetSeverity (2666 , protection .Warning ).SetSeverity (3666 , protection .Ok )
463+ decoder .SetPacketDecoder (1000 , protectionDecoder )
464+ decoder .SetPacketDecoder (1111 , protectionDecoder )
465+ decoder .SetPacketDecoder (1222 , protectionDecoder )
466+ decoder .SetPacketDecoder (1333 , protectionDecoder )
467+ decoder .SetPacketDecoder (1444 , protectionDecoder )
468+ decoder .SetPacketDecoder (1555 , protectionDecoder )
469+ decoder .SetPacketDecoder (1666 , protectionDecoder )
470+ decoder .SetPacketDecoder (2000 , protectionDecoder )
471+ decoder .SetPacketDecoder (2111 , protectionDecoder )
472+ decoder .SetPacketDecoder (2222 , protectionDecoder )
473+ decoder .SetPacketDecoder (2666 , protectionDecoder )
474+ decoder .SetPacketDecoder (3000 , protectionDecoder )
475+ decoder .SetPacketDecoder (3111 , protectionDecoder )
476+ decoder .SetPacketDecoder (3222 , protectionDecoder )
477+ decoder .SetPacketDecoder (3666 , protectionDecoder )
442478
443479 return decoder , encoder
444480}
0 commit comments