@@ -2,6 +2,7 @@ package main
22
33import (
44 "bufio"
5+ "context"
56 "encoding/binary"
67 "flag"
78 "fmt"
@@ -57,6 +58,7 @@ import (
5758var traceLevel = flag .String ("trace" , "info" , "set the trace level (\" fatal\" , \" error\" , \" warn\" , \" info\" , \" debug\" , \" trace\" )" )
5859var traceFile = flag .String ("log" , "trace.json" , "set the trace log file" )
5960var cpuprofile = flag .String ("cpuprofile" , "" , "write cpu profile to file" )
61+ var enableSNTP = flag .Bool ("sntp" , false , "enables a simple SNTP server on port 123" )
6062
6163func main () {
6264 flag .Parse ()
@@ -131,7 +133,7 @@ func main() {
131133 state_logger .Name : state_logger .NewLogger (),
132134 }
133135
134- loggerHandler := logger .NewLogger (subloggers )
136+ loggerHandler := logger .NewLogger (subloggers , trace . Logger )
135137
136138 // <--- order transfer --->
137139 idToBoard := make (map [uint16 ]string )
@@ -142,7 +144,7 @@ func main() {
142144 }
143145
144146 // <--- broker --->
145- broker := broker .New ()
147+ broker := broker .New (trace . Logger )
146148
147149 dataTopic := data_topic .NewUpdateTopic (time .Second / 10 )
148150 defer dataTopic .Stop ()
@@ -162,20 +164,20 @@ func main() {
162164 broker .AddTopic (message_topic .UpdateName , messageTopic )
163165
164166 connections := make (chan * websocket.Client )
165- upgrader := websocket .NewUpgrader (connections )
166- pool := websocket .NewPool (connections )
167+ upgrader := websocket .NewUpgrader (connections , trace . Logger )
168+ pool := websocket .NewPool (connections , trace . Logger )
167169 broker .SetPool (pool )
168170
169171 // <--- transport --->
170- transp := transport .NewTransport ()
172+ transp := transport .NewTransport (trace . Logger )
171173
172174 // <--- vehicle --->
173175 ipToBoardId := make (map [string ]abstraction.BoardId )
174176 for name , ip := range info .Addresses .Boards {
175177 ipToBoardId [ip .String ()] = abstraction .BoardId (info .BoardIds [name ])
176178 }
177179
178- vehicle := vehicle .New ()
180+ vehicle := vehicle .New (trace . Logger )
179181 vehicle .SetBroker (broker )
180182 vehicle .SetLogger (loggerHandler )
181183 vehicle .SetUpdateFactory (updateFactory )
@@ -193,6 +195,7 @@ func main() {
193195 for _ , packet := range board .Packets {
194196 transp .SetIdTarget (abstraction .PacketId (packet .Id ), abstraction .TransportTarget (board .Name ))
195197 }
198+ transp .SetTargetIp (info .Addresses .Boards [board .Name ].String (), abstraction .TransportTarget (board .Name ))
196199 }
197200
198201 // Start handling TCP client connections
@@ -207,12 +210,17 @@ func main() {
207210 if err != nil {
208211 panic ("Failed to resolve local backend TCP client address" )
209212 }
210- go transp .HandleClient (tcp .NewClient (backendTcpClientAddr ), abstraction . TransportTarget ( board . Name ), "tcp" , fmt .Sprintf ("%s:%d" , info .Addresses .Boards [board .Name ], info .Ports .TcpServer ))
213+ go transp .HandleClient (tcp .NewClientConfig (backendTcpClientAddr ), fmt .Sprintf ("%s:%d" , info .Addresses .Boards [board .Name ], info .Ports .TcpServer ))
211214 i ++
212215 }
213216
214217 // Start handling TCP server connections
215- go transp .HandleServer (tcp .NewServer (serverTargets ), "tcp" , fmt .Sprintf ("%s:%d" , info .Addresses .Backend , info .Ports .TcpServer ))
218+ go transp .HandleServer (tcp.ServerConfig {
219+ ListenConfig : net.ListenConfig {
220+ KeepAlive : time .Second ,
221+ },
222+ Context : context .TODO (),
223+ }, fmt .Sprintf ("%s:%d" , info .Addresses .Backend , info .Ports .TcpServer ))
216224
217225 // Start handling the sniffer
218226 source , err := pcap .OpenLive (dev .Name , 1500 , true , pcap .BlockForever )
@@ -227,7 +235,7 @@ func main() {
227235 if err != nil {
228236 panic ("failed to compile bpf filter" )
229237 }
230- go transp .HandleSniffer (sniffer .New (source , & layers .LayerTypeEthernet ))
238+ go transp .HandleSniffer (sniffer .New (source , & layers .LayerTypeEthernet , trace . Logger ))
231239
232240 // <--- http server --->
233241 podDataHandle , err := h .HandleDataJSON ("podData.json" , pod_data .GetDataOnlyPodData (podData ))
@@ -260,24 +268,26 @@ func main() {
260268 }
261269
262270 // <--- SNTP --->
263- sntpAddr , err := net .ResolveUDPAddr ("udp" , fmt .Sprintf ("%s:%d" , info .Addresses .Backend , info .Ports .SNTP ))
264- if err != nil {
265- fmt .Fprintf (os .Stderr , "error resolving sntp address: %v\n " , err )
266- os .Exit (1 )
267- }
268- sntpServer , err := sntp .NewUnicast ("udp" , sntpAddr )
269- if err != nil {
270- fmt .Fprintf (os .Stderr , "error creating sntp server: %v\n " , err )
271- os .Exit (1 )
272- }
273-
274- go func () {
275- err := sntpServer .ListenAndServe ()
271+ if * enableSNTP {
272+ sntpAddr , err := net .ResolveUDPAddr ("udp" , fmt .Sprintf ("%s:%d" , info .Addresses .Backend , info .Ports .SNTP ))
276273 if err != nil {
277- fmt .Fprintf (os .Stderr , "error listening sntp server : %v\n " , err )
278- return
274+ fmt .Fprintf (os .Stderr , "error resolving sntp address : %v\n " , err )
275+ os . Exit ( 1 )
279276 }
280- }()
277+ sntpServer , err := sntp .NewUnicast ("udp" , sntpAddr )
278+ if err != nil {
279+ fmt .Fprintf (os .Stderr , "error creating sntp server: %v\n " , err )
280+ os .Exit (1 )
281+ }
282+
283+ go func () {
284+ err := sntpServer .ListenAndServe ()
285+ if err != nil {
286+ fmt .Fprintf (os .Stderr , "error listening sntp server: %v\n " , err )
287+ return
288+ }
289+ }()
290+ }
281291
282292 interrupt := make (chan os.Signal , 1 )
283293 signal .Notify (interrupt , os .Interrupt )
@@ -390,8 +400,8 @@ func getConfig(path string) Config {
390400}
391401
392402func getTransportDecEnc (info info.Info , podData pod_data.PodData ) (* presentation.Decoder , * presentation.Encoder ) {
393- decoder := presentation .NewDecoder (binary .LittleEndian )
394- encoder := presentation .NewEncoder (binary .LittleEndian )
403+ decoder := presentation .NewDecoder (binary .LittleEndian , trace . Logger )
404+ encoder := presentation .NewEncoder (binary .LittleEndian , trace . Logger )
395405
396406 dataDecoder := data .NewDecoder (binary .LittleEndian )
397407 dataEncoder := data .NewEncoder (binary .LittleEndian )
0 commit comments