Skip to content

Commit 50b78e3

Browse files
authored
Merge pull request #127 from HyperloopUPV-H8/develop
Merge for Ethernet View v1.0.0
2 parents 4a48593 + cc5c075 commit 50b78e3

115 files changed

Lines changed: 3195 additions & 696 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ secret.json
66

77
# MacOS Files
88
.DS_Store
9+
10+
# JetBrains IDE
11+
.idea/

backend/cmd/main.go

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"bufio"
5+
"context"
56
"encoding/binary"
67
"flag"
78
"fmt"
@@ -57,6 +58,7 @@ import (
5758
var traceLevel = flag.String("trace", "info", "set the trace level (\"fatal\", \"error\", \"warn\", \"info\", \"debug\", \"trace\")")
5859
var traceFile = flag.String("log", "trace.json", "set the trace log file")
5960
var 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

6163
func 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

392402
func 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)

backend/cmd/trace.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,6 @@ var traceLevelMap = map[string]zerolog.Level{
2121

2222
func initTrace(traceLevel string, traceFile string) *os.File {
2323
zerolog.CallerMarshalFunc = func(pc uintptr, file string, line int) string {
24-
short := file
25-
for i := len(file) - 1; i > 0; i-- {
26-
if file[i] == '/' {
27-
short = file[i+1:]
28-
break
29-
}
30-
}
31-
file = short
3224
return file + ":" + strconv.Itoa(line)
3325
}
3426
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixNano
@@ -45,8 +37,7 @@ func initTrace(traceLevel string, traceFile string) *os.File {
4537

4638
multi := zerolog.MultiLevelWriter(consoleWriter, file)
4739

48-
global_logger := zerolog.New(multi).With().Timestamp().Caller().Logger()
49-
trace.Logger = global_logger
40+
trace.Logger = zerolog.New(multi).With().Timestamp().Caller().Logger()
5041

5142
if level, ok := traceLevelMap[traceLevel]; ok {
5243
zerolog.SetGlobalLevel(level)

backend/pkg/abstraction/broker.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ type Broker interface {
3232
SetAPI(BrokerAPI)
3333
}
3434

35-
// BrokerAPi is the API provided for the Broker by the Vehicle.
35+
// BrokerAPI is the API provided for the Broker by the Vehicle.
3636
// The Broker must use this to communicate with the rest of the code
3737
type BrokerAPI interface {
38-
// UserPush notifies that the front-end has sent information without a previous request
39-
UserPush(BrokerPush)
38+
// UserPush notifies that the front-end has sent information without a previous request.
39+
UserPush(BrokerPush) error
40+
// UserPull notifies that the front-end has requested information.
41+
UserPull(BrokerRequest) (BrokerResponse, error)
4042
}

0 commit comments

Comments
 (0)