Skip to content

Commit 02119cc

Browse files
committed
Merge branch 'main' into backend/packet-sender
2 parents a8930cb + 3e1b7ce commit 02119cc

10 files changed

Lines changed: 188 additions & 275 deletions

File tree

.gitignore

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
build
22
profiles
3-
4-
# GOOGLE API KEY
5-
secret.json
3+
backend/cmd/cmd
64

75
# MacOS Files
86
.DS_Store
97

108
# Code Editor
119
.idea/
1210
.vscode/
13-
.prettierrc
11+
.prettierrc

.gitmodules

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[submodule "backend/cmd/JSON_ADE"]
2+
path = backend/cmd/JSON_ADE
3+
url = https://github.com/HyperloopUPV-H8/JSON_ADE.git
4+
branch = main

backend/cmd/JSON_ADE

Submodule JSON_ADE added at 7a3da66

backend/cmd/main.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -256,16 +256,11 @@ func main() {
256256
}
257257
}
258258

259-
boardIps := make([]net.IP, 0)
260-
for boardName, _ := range adj.Info.BoardIds {
259+
boardIps := make([]net.IP, 0, len(adj.Info.BoardIds))
260+
for boardName := range adj.Info.BoardIds {
261261
boardIps = append(boardIps, net.ParseIP(adj.Info.Addresses[boardName]))
262262
}
263263

264-
boardIpsStr := make([]string, 0)
265-
for boardName, _ := range adj.Info.BoardIds {
266-
boardIpsStr = append(boardIpsStr, adj.Info.Addresses[boardName])
267-
}
268-
269264
filter := getFilter(boardIps, net.ParseIP(adj.Info.Addresses[BACKEND]), adj.Info.Ports[UDP])
270265
trace.Warn().Str("filter", filter).Msg("filter")
271266
err = source.SetBPFFilter(filter)
@@ -564,12 +559,16 @@ func getIPIPfilter() string {
564559
}
565560

566561
func getUDPFilter(addrs []net.IP, backendAddr net.IP, port uint16) string {
567-
udpPort := fmt.Sprintf("udp port %d", port)
568-
udpAddrs := common.Map(addrs, func(addr net.IP) string {
562+
udpPort := "udp" // TODO use proper ports for the filter
563+
srcUdpAddrs := common.Map(addrs, func(addr net.IP) string {
569564
return fmt.Sprintf("(src host %s)", addr)
570565
})
566+
dstUdpAddrs := common.Map(addrs, func(addr net.IP) string {
567+
return fmt.Sprintf("(dst host %s)", addr)
568+
})
571569

572-
udpAddrsStr := strings.Join(udpAddrs, " or ")
570+
srcUdpAddrsStr := strings.Join(srcUdpAddrs, " or ")
571+
dstUdpAddrsStr := strings.Join(dstUdpAddrs, " or ")
573572

574-
return fmt.Sprintf("(%s) and (%s) and (dst host %s)", udpPort, udpAddrsStr, backendAddr)
573+
return fmt.Sprintf("(%s) and (%s) and (%s or (dst host %s))", udpPort, srcUdpAddrsStr, dstUdpAddrsStr, backendAddr)
575574
}

backend/internal/adj/adj.go

Lines changed: 113 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,70 @@ package adj
22

33
import (
44
"encoding/json"
5-
"errors"
5+
"os"
6+
"path"
7+
68
"github.com/HyperloopUPV-H8/h9-backend/internal/utils"
79
"github.com/go-git/go-git/v5"
8-
"os"
910
)
1011

1112
const (
1213
RepoUrl = "https://github.com/HyperloopUPV-H8/JSON_ADE.git" // URL of the ADJ repository
1314
RepoPath = "./JSON_ADE/" // Path where the ADJ repository is cloned
1415
)
1516

16-
func NewADJ() (*ADJ, error) {
17+
func NewADJ() (ADJ, error) {
1718
infoRaw, boardsRaw, err := downloadADJ()
1819
if err != nil {
19-
return nil, err
20+
return ADJ{}, err
2021
}
2122

22-
var JsonInfo JsonInfo
23-
var info Info
24-
if err := json.Unmarshal(infoRaw, &JsonInfo); err != nil {
25-
return nil, err
23+
var infoJSON InfoJSON
24+
if err := json.Unmarshal(infoRaw, &infoJSON); err != nil {
25+
println("Info JSON unmarshal error")
26+
return ADJ{}, err
27+
}
28+
29+
var info Info = Info{
30+
Ports: infoJSON.Ports,
31+
MessageIds: infoJSON.MessageIds,
32+
Units: make(map[string]utils.Operations),
33+
}
34+
for key, value := range infoJSON.Units {
35+
info.Units[key], err = utils.NewOperations(value)
36+
if err != nil {
37+
return ADJ{}, err
38+
}
2639
}
2740

28-
info.Ports = utils.ConvertToMap_Str_Uint16(JsonInfo.Ports)
29-
info.Addresses = utils.ConvertToMap_Str_Str(JsonInfo.Addresses)
30-
info.Units = utils.ConvertToMap_Str_Op(JsonInfo.Units)
31-
info.MessageIds = utils.ConvertToMap_Str_Uint16(JsonInfo.MessageIds)
41+
type BoardList struct {
42+
Boards map[string]string `json:"boards"`
43+
}
3244

33-
var boardsList map[string]string
45+
var boardsList BoardList
3446
if err := json.Unmarshal(boardsRaw, &boardsList); err != nil {
35-
return nil, err
47+
return ADJ{}, err
3648
}
3749

38-
boards, err := getBoards(info, boardsList)
50+
boards, err := getBoards(boardsList.Boards)
51+
if err != nil {
52+
return ADJ{}, err
53+
}
3954

40-
info.BoardIds, err = getBoardIds(boardsList)
55+
info.BoardIds, err = getBoardIds(boardsList.Boards)
56+
if err != nil {
57+
return ADJ{}, err
58+
}
59+
60+
info.Addresses, err = getAddresses(boards)
61+
if err != nil {
62+
return ADJ{}, err
63+
}
64+
for target, address := range infoJSON.Addresses {
65+
info.Addresses[target] = address
66+
}
4167

42-
adj := &ADJ{
68+
adj := ADJ{
4369
Info: info,
4470
Boards: boards,
4571
}
@@ -79,14 +105,11 @@ func checkRepo() bool {
79105
return true
80106
}
81107

82-
func getBoards(info Info, boardsList map[string]string) (map[string]Board, error) {
83-
var boards map[string]Board
108+
func getBoards(boardsList map[string]string) (map[string]Board, error) {
109+
boards := make(map[string]Board, len(boardsList))
84110
for boardName, boardPath := range boardsList {
85-
if _, err := os.Stat(boardPath); os.IsNotExist(err) {
86-
return nil, err
87-
}
88-
89-
boardRaw, err := os.ReadFile(boardPath)
111+
fullPath := path.Join(RepoPath, boardPath)
112+
boardRaw, err := os.ReadFile(fullPath)
90113
if err != nil {
91114
return nil, err
92115
}
@@ -96,15 +119,22 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
96119
return nil, err
97120
}
98121

99-
if info.Addresses[boardName] != boardJSON.IP {
100-
return nil, errors.New("the IP of the board does not match the one in the general info")
122+
measPathsFr := make([]string, 0)
123+
for _, measPath := range boardJSON.MeasurementsPaths {
124+
measPathsFr = append(measPathsFr, path.Join(RepoPath, "boards", boardName, measPath))
101125
}
126+
boardJSON.MeasurementsPaths = measPathsFr
102127

103-
var board Board
104-
105-
board.Name = boardName
106-
board.IP = boardJSON.IP
128+
packetPathsFr := make([]string, 0)
129+
for _, packetPath := range boardJSON.PacketsPaths {
130+
packetPathsFr = append(packetPathsFr, path.Join(RepoPath, "boards", boardName, packetPath))
131+
}
132+
boardJSON.PacketsPaths = packetPathsFr
107133

134+
board := Board{
135+
Name: boardName,
136+
IP: boardJSON.IP,
137+
}
108138
board.Packets, err = getBoardPackets(boardJSON.PacketsPaths)
109139
if err != nil {
110140
return nil, err
@@ -114,6 +144,12 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
114144
if err != nil {
115145
return nil, err
116146
}
147+
board.LookUpMeasurements = make(map[string]Measurement, len(board.Measurements))
148+
149+
for _, measurement := range board.Measurements {
150+
board.LookUpMeasurements[measurement.Id] = measurement
151+
}
152+
board.Structures = getBoardStructures(board)
117153

118154
boards[boardName] = board
119155
}
@@ -122,7 +158,7 @@ func getBoards(info Info, boardsList map[string]string) (map[string]Board, error
122158
}
123159

124160
func getBoardPackets(packetsPaths []string) ([]Packet, error) {
125-
var packets []Packet
161+
packets := make([]Packet, 0)
126162
for _, packetPath := range packetsPaths {
127163
if _, err := os.Stat(packetPath); os.IsNotExist(err) {
128164
continue
@@ -133,19 +169,26 @@ func getBoardPackets(packetsPaths []string) ([]Packet, error) {
133169
return nil, err
134170
}
135171

136-
var packet Packet
137-
if err = json.Unmarshal(packetRaw, &packet); err != nil {
138-
return nil, err
172+
// Magic happens here
173+
type PacketJSON struct {
174+
Packet []Packet `json:"packets"`
139175
}
140176

141-
packets = append(packets, packet)
177+
packetsJSON := PacketJSON{}
178+
if err = json.Unmarshal(packetRaw, &packetsJSON); err != nil {
179+
return nil, err
180+
}
181+
for _, packetTMP := range packetsJSON.Packet {
182+
packets = append(packets, packetTMP)
183+
}
142184
}
143185

144186
return packets, nil
145187
}
146188

147189
func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) {
148-
var measurements []Measurement
190+
measurements := make([]Measurement, 0)
191+
149192
for _, measurementPath := range measurementsPaths {
150193
if _, err := os.Stat(measurementPath); os.IsNotExist(err) {
151194
continue
@@ -156,25 +199,28 @@ func getBoardMeasurements(measurementsPaths []string) ([]Measurement, error) {
156199
return nil, err
157200
}
158201

159-
var measurement Measurement
160-
if err = json.Unmarshal(measurementRaw, &measurement); err != nil {
161-
return nil, err
202+
// Absolutely doing tricks on it AGAIN - @msanlli
203+
type MeasurementJSON struct {
204+
Measurements []Measurement `json:"measurements"`
162205
}
163206

164-
measurements = append(measurements, measurement)
207+
measurementsJSON := MeasurementJSON{}
208+
if err = json.Unmarshal(measurementRaw, &measurementsJSON); err != nil {
209+
return nil, err
210+
}
211+
for _, measurementTMP := range measurementsJSON.Measurements {
212+
measurements = append(measurements, measurementTMP)
213+
}
165214
}
166215

167216
return measurements, nil
168217
}
169218

170219
func getBoardIds(boards map[string]string) (map[string]uint16, error) {
171-
var boardIds map[string]uint16
220+
boardIds := make(map[string]uint16, len(boards))
172221
for boardName, boardPath := range boards {
173-
if _, err := os.Stat(boardPath); os.IsNotExist(err) {
174-
return nil, err
175-
}
176-
177-
boardRaw, err := os.ReadFile(boardPath)
222+
fullPath := path.Join(RepoPath, boardPath)
223+
boardRaw, err := os.ReadFile(fullPath)
178224
if err != nil {
179225
return nil, err
180226
}
@@ -189,3 +235,24 @@ func getBoardIds(boards map[string]string) (map[string]uint16, error) {
189235

190236
return boardIds, nil
191237
}
238+
239+
func getBoardStructures(board Board) []Structure {
240+
structures := make([]Structure, len(board.Packets))
241+
for i, packet := range board.Packets {
242+
structures[i] = Structure{
243+
Packet: packet,
244+
Measurements: board.Measurements,
245+
}
246+
}
247+
248+
return structures
249+
}
250+
251+
func getAddresses(boards map[string]Board) (map[string]string, error) {
252+
addresses := make(map[string]string, len(boards))
253+
for boardName, board := range boards {
254+
addresses[boardName] = board.IP
255+
}
256+
257+
return addresses, nil
258+
}

backend/internal/adj/models.go

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ type ADJ struct {
77
Boards map[string]Board
88
}
99

10-
type JsonInfo struct {
11-
Ports []map[string]uint16 `json:"ports"`
12-
Addresses []map[string]string `json:"addresses"`
13-
Units []map[string]utils.Operations `json:"units"`
14-
MessageIds []map[string]uint16 `json:"message_ids"`
10+
type InfoJSON struct {
11+
Ports map[string]uint16 `json:"ports"`
12+
Addresses map[string]string
13+
Units map[string]string `json:"units"`
14+
MessageIds map[string]uint16 `json:"message_ids"`
15+
BoardIds map[string]uint16
1516
}
1617

1718
type Info struct {
@@ -22,39 +23,41 @@ type Info struct {
2223
BoardIds map[string]uint16
2324
}
2425

25-
type Board struct {
26-
Name string
27-
IP string
28-
Packets []Packet
29-
Measurements []Measurement
30-
Structures []Structure
31-
}
32-
3326
type BoardJSON struct {
3427
ID uint16 `json:"board_id"`
3528
IP string `json:"board_ip"`
3629
MeasurementsPaths []string `json:"measurements"`
3730
PacketsPaths []string `json:"packets"`
38-
// StructuresPaths []string `json:"structures"` // TODO: Issued in JSON_ADE #1
31+
}
32+
33+
type Board struct {
34+
Name string
35+
IP string
36+
Packets []Packet
37+
Measurements []Measurement
38+
Structures []Structure
39+
LookUpMeasurements map[string]Measurement
3940
}
4041

4142
type Packet struct {
42-
Id string
43-
Name string
44-
Type string
43+
Id string `json:"id"`
44+
Name string `json:"name"`
45+
Type string `json:"type"`
46+
Variables []Measurement `json:"variables"`
4547
}
4648

4749
type Measurement struct {
48-
Id string
49-
Name string
50-
Type string
51-
PodUnits string
52-
DisplayUnits string
53-
SafeRange string
54-
WarningRange string
50+
Id string `json:"id"`
51+
Name string `json:"name"`
52+
Type string `json:"type"`
53+
PodUnits string `json:"podUnits"`
54+
DisplayUnits string `json:"displayUnits"`
55+
SafeRange []*float64 `json:"safeRange"`
56+
WarningRange []*float64 `json:"warningRange"`
57+
EnumValues []string `json:"enumValues"`
5558
}
5659

5760
type Structure struct {
58-
Packet string
59-
Measurements []string
61+
Packet Packet
62+
Measurements []Measurement
6063
}

0 commit comments

Comments
 (0)