Skip to content

Commit df82053

Browse files
committed
Transport fixes and SNTP server
1 parent e49aa8e commit df82053

5 files changed

Lines changed: 39 additions & 8 deletions

File tree

backend/cmd/main.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
"github.com/fatih/color"
5050
"github.com/google/gopacket/layers"
5151
"github.com/google/gopacket/pcap"
52+
"github.com/jmaralo/sntp"
5253
"github.com/pelletier/go-toml/v2"
5354
trace "github.com/rs/zerolog/log"
5455
)
@@ -187,17 +188,19 @@ func main() {
187188
}
188189

189190
// Start handling TCP client connections
190-
backendTcpClientAddr, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", info.Addresses.Backend.String(), info.Ports.TcpClient))
191-
if err != nil {
192-
panic("Failed to resolve local backend TCP client address")
193-
}
191+
i := 0
194192
serverTargets := make(map[string]abstraction.TransportTarget)
195193
for _, board := range podData.Boards {
196194
if !common.Contains(config.Vehicle.Boards, board.Name) {
197195
serverTargets[fmt.Sprintf("%s:%d", info.Addresses.Boards[board.Name], info.Ports.TcpClient)] = abstraction.TransportTarget(board.Name)
198196
continue
199197
}
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+
}
200202
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++
201204
}
202205

203206
// Start handling TCP server connections
@@ -248,6 +251,26 @@ func main() {
248251
go httpServer.ListenAndServe()
249252
}
250253

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+
251274
interrupt := make(chan os.Signal, 1)
252275
signal.Notify(interrupt, os.Interrupt)
253276

backend/go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/HyperloopUPV-H8/h9-backend
22

3-
go 1.19
3+
go 1.21.3
44

55
require (
66
github.com/HyperloopUPV-H8/ade-linter v0.0.0-20230530153315-3379f05a664f
@@ -23,6 +23,7 @@ require (
2323
github.com/golang/protobuf v1.5.3 // indirect
2424
github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
2525
github.com/googleapis/gax-go/v2 v2.7.1 // indirect
26+
github.com/jmaralo/sntp v0.0.0-20240116111937-45a0a3419272 // indirect
2627
github.com/mattn/go-colorable v0.1.13 // indirect
2728
github.com/mattn/go-isatty v0.0.17 // indirect
2829
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect

backend/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
6060
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
6161
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
6262
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
63+
github.com/jmaralo/sntp v0.0.0-20240116111937-45a0a3419272 h1:dtQzdBn2P781UxyDPZd1tv4QE29ffpnmJ15qBkXHypY=
64+
github.com/jmaralo/sntp v0.0.0-20240116111937-45a0a3419272/go.mod h1:nA+gdd8RXyFnxlLOCu0lOLGcQuwNklQfWOUL8fAFBDI=
6365
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
6466
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
6567
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=

backend/pkg/transport/transport.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ func (transport *Transport) handleTCPConn(target abstraction.TransportTarget, co
9898
if err != nil {
9999
fmt.Fprintf(os.Stderr, "Error setting %s linger to zero: %v\n", target, err)
100100
}
101+
102+
err = tcpConn.SetNoDelay(true)
103+
if err != nil {
104+
fmt.Fprintf(os.Stderr, "Error setting %s no delay: %v\n", target, err)
105+
}
101106
}
102107
conn, errChan := tcp.WithErrChan(conn)
103108
defer conn.Close()
@@ -123,8 +128,8 @@ func (transport *Transport) handleTCPConn(target abstraction.TransportTarget, co
123128
break
124129
}
125130

126-
from := conn.LocalAddr().String()
127-
to := string(target)
131+
to := conn.LocalAddr().String()
132+
from := conn.RemoteAddr().String()
128133

129134
transport.api.Notification(NewPacketNotification(packet, from, to, time.Now()))
130135
}

go.work

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
go 1.21
1+
go 1.21.3
22

33
use (
44
./backend

0 commit comments

Comments
 (0)