Use device path to describe boot apps

This commit is contained in:
Melora Hugues 2023-09-16 13:51:01 +02:00
parent 2ae7327f6b
commit ebfd2ea96c
4 changed files with 11 additions and 9 deletions

View file

@ -3,9 +3,8 @@ package bootoption
import "github.com/google/uuid" import "github.com/google/uuid"
type EFIApp struct { type EFIApp struct {
Name string `json:"name"` Name string `json:"name"`
Path string `json:"path"` DevicePath string `json:"device_path"`
DiskID string `json:"disk_id"`
} }
type Client struct { type Client struct {

View file

@ -6,6 +6,7 @@ import (
"encoding" "encoding"
"errors" "errors"
"fmt" "fmt"
"strings"
"github.com/google/uuid" "github.com/google/uuid"
) )
@ -20,7 +21,7 @@ const (
) )
var spaceByte = []byte(" ") var spaceByte = []byte(" ")
var commaByte = []byte(",") var commaByte = []byte(";")
const ( const (
keyID = "id" keyID = "id"
@ -140,9 +141,13 @@ func (am *acceptMessage) UnmarshalBinary(data []byte) error {
func (am *acceptMessage) MarshalBinary() (data []byte, err error) { func (am *acceptMessage) MarshalBinary() (data []byte, err error) {
action := []byte(am.Action().String()) action := []byte(am.Action().String())
// efiApp := strings.ReplaceAll(am.efiApp, `\`, `\\`)
// efiApp = strings.ReplaceAll(efiApp, "File(", "")
efiApp := strings.ReplaceAll(am.efiApp, "File(", "")
efiApp, _ = strings.CutSuffix(efiApp, ")")
params := [][]byte{ params := [][]byte{
[]byte(fmt.Sprintf("%s=%s", keyID, am.id.String())), []byte(fmt.Sprintf("%s=%s", keyID, am.id.String())),
[]byte(fmt.Sprintf("%s=%s", keyEfiApp, am.efiApp)), []byte(fmt.Sprintf("%s=%s", keyEfiApp, efiApp)),
} }
param_bytes := bytes.Join(params, commaByte) param_bytes := bytes.Join(params, commaByte)
return bytes.Join([][]byte{action, param_bytes}, spaceByte), nil return bytes.Join([][]byte{action, param_bytes}, spaceByte), nil

View file

@ -20,7 +20,6 @@ type templateBootOption struct {
ID string ID string
Name string Name string
Path string Path string
DiskID string
Selected bool Selected bool
} }
@ -65,9 +64,8 @@ func (uc *UIController) serveUI(w http.ResponseWriter, r *http.Request) (int, in
for id, bo := range clt.Options { for id, bo := range clt.Options {
tplBO = append(tplBO, templateBootOption{ tplBO = append(tplBO, templateBootOption{
Name: bo.Name, Name: bo.Name,
Path: bo.Path, Path: bo.DevicePath,
ID: id, ID: id,
DiskID: bo.DiskID,
Selected: id == clt.SelectedOption, Selected: id == clt.SelectedOption,
}) })
sort.Slice(tplBO, func(i, j int) bool { sort.Slice(tplBO, func(i, j int) bool {

View file

@ -78,7 +78,7 @@ func (l *UDPListener) handleBootRequest(msg bootprotocol.Message, subLogger logr
requestLogger.Errorf("Failed to get config for client: %s", err.Error()) requestLogger.Errorf("Failed to get config for client: %s", err.Error())
return bootprotocol.Deny(msg.ID(), "unknown server error") return bootprotocol.Deny(msg.ID(), "unknown server error")
} }
return bootprotocol.Accept(msg.ID(), bootOption.Path) return bootprotocol.Accept(msg.ID(), bootOption.DevicePath)
} }
func (l *UDPListener) handleClient(msg *udpMessage) error { func (l *UDPListener) handleClient(msg *udpMessage) error {