From b6f36342012faa0779bfeffa966a5e506c4a5237 Mon Sep 17 00:00:00 2001 From: Marc Sanchis Date: Sun, 8 Jun 2025 20:02:41 +0200 Subject: [PATCH 1/2] Add TFTP configuration for BLCU packet size and transfer options --- backend/cmd/config.go | 9 ++++++++ backend/cmd/config.toml | 7 +++++++ backend/cmd/main.go | 9 +++++++- backend/pkg/boards/blcu.go | 42 +++++++++++++++++++++++++++++++------- 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/backend/cmd/config.go b/backend/cmd/config.go index 9aeb4208b..f8f587acc 100644 --- a/backend/cmd/config.go +++ b/backend/cmd/config.go @@ -18,10 +18,19 @@ type Transport struct { PropagateFault bool } +type TFTP struct { + BlockSize int `toml:"block_size"` + Retries int `toml:"retries"` + TimeoutMs int `toml:"timeout_ms"` + BackoffFactor int `toml:"backoff_factor"` + EnableProgress bool `toml:"enable_progress"` +} + type Config struct { Vehicle vehicle.Config Server server.Config Adj Adj Network Network Transport Transport + TFTP TFTP } diff --git a/backend/cmd/config.toml b/backend/cmd/config.toml index 7ac70bf6f..83fb21561 100644 --- a/backend/cmd/config.toml +++ b/backend/cmd/config.toml @@ -25,3 +25,10 @@ test = true manual = false [transport] propagate_fault = true + +[tftp] +block_size = 512 # TFTP block size in bytes (default: 512) +retries = 3 # Maximum number of retries before aborting transfer +timeout_ms = 5000 # Timeout between retries in milliseconds +backoff_factor = 2 # Backoff multiplier for retry delays +enable_progress = true # Enable progress callbacks during transfers diff --git a/backend/cmd/main.go b/backend/cmd/main.go index cc046a872..a4611d52d 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -223,7 +223,14 @@ func main() { // <--- BLCU Board ---> // Register BLCU board for handling bootloader operations if blcuIP, exists := adj.Info.Addresses[BLCU]; exists { - blcuBoard := boards.New(blcuIP) + tftpConfig := boards.TFTPConfig{ + BlockSize: config.TFTP.BlockSize, + Retries: config.TFTP.Retries, + TimeoutMs: config.TFTP.TimeoutMs, + BackoffFactor: config.TFTP.BackoffFactor, + EnableProgress: config.TFTP.EnableProgress, + } + blcuBoard := boards.NewWithTFTPConfig(blcuIP, tftpConfig) vehicle.AddBoard(blcuBoard) trace.Info().Str("ip", blcuIP).Msg("BLCU board registered") } else { diff --git a/backend/pkg/boards/blcu.go b/backend/pkg/boards/blcu.go index 39f6a9977..90bf61d47 100644 --- a/backend/pkg/boards/blcu.go +++ b/backend/pkg/boards/blcu.go @@ -23,16 +23,36 @@ const ( BlcuUploadOrderId = 2 ) +type TFTPConfig struct { + BlockSize int + Retries int + TimeoutMs int + BackoffFactor int + EnableProgress bool +} + type BLCU struct { - api abstraction.BoardAPI - ackChan chan struct{} - ip string + api abstraction.BoardAPI + ackChan chan struct{} + ip string + tftpConfig TFTPConfig } func New(ip string) *BLCU { + return NewWithTFTPConfig(ip, TFTPConfig{ + BlockSize: 512, + Retries: 3, + TimeoutMs: 5000, + BackoffFactor: 2, + EnableProgress: true, + }) +} + +func NewWithTFTPConfig(ip string, tftpConfig TFTPConfig) *BLCU { return &BLCU{ - ackChan: make(chan struct{}), - ip: ip, + ackChan: make(chan struct{}), + ip: ip, + tftpConfig: tftpConfig, } } func (boards *BLCU) Id() abstraction.BoardId { @@ -96,7 +116,11 @@ func (boards *BLCU) download(notification DownloadEvent) error { // TODO! Notify on progress - client, err := tftp.NewClient(boards.ip) + client, err := tftp.NewClient(boards.ip, + tftp.WithBlockSize(boards.tftpConfig.BlockSize), + tftp.WithRetries(boards.tftpConfig.Retries), + tftp.WithTimeout(time.Duration(boards.tftpConfig.TimeoutMs) * time.Millisecond), + ) if err != nil { return ErrNewClientFailed{ Addr: boards.ip, @@ -164,7 +188,11 @@ func (boards *BLCU) upload(notification UploadEvent) error { // TODO! Notify on progress - client, err := tftp.NewClient(boards.ip) + client, err := tftp.NewClient(boards.ip, + tftp.WithBlockSize(boards.tftpConfig.BlockSize), + tftp.WithRetries(boards.tftpConfig.Retries), + tftp.WithTimeout(time.Duration(boards.tftpConfig.TimeoutMs) * time.Millisecond), + ) if err != nil { return ErrNewClientFailed{ Addr: boards.ip, From 62193093421da07bfa81b533a7fb71ee5cc91fc1 Mon Sep 17 00:00:00 2001 From: Marc Sanchis Date: Sun, 8 Jun 2025 20:05:18 +0200 Subject: [PATCH 2/2] Update TFTP block size to 128kB for improved transfer performance --- backend/cmd/config.toml | 2 +- backend/pkg/boards/blcu.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/cmd/config.toml b/backend/cmd/config.toml index 83fb21561..c4e37c67f 100644 --- a/backend/cmd/config.toml +++ b/backend/cmd/config.toml @@ -27,7 +27,7 @@ manual = false propagate_fault = true [tftp] -block_size = 512 # TFTP block size in bytes (default: 512) +block_size = 131072 # TFTP block size in bytes (128kB) retries = 3 # Maximum number of retries before aborting transfer timeout_ms = 5000 # Timeout between retries in milliseconds backoff_factor = 2 # Backoff multiplier for retry delays diff --git a/backend/pkg/boards/blcu.go b/backend/pkg/boards/blcu.go index 90bf61d47..d14919782 100644 --- a/backend/pkg/boards/blcu.go +++ b/backend/pkg/boards/blcu.go @@ -40,7 +40,7 @@ type BLCU struct { func New(ip string) *BLCU { return NewWithTFTPConfig(ip, TFTPConfig{ - BlockSize: 512, + BlockSize: 131072, // 128kB Retries: 3, TimeoutMs: 5000, BackoffFactor: 2,