From f817f221cf4209033ac359362f4c916e84138cab Mon Sep 17 00:00:00 2001 From: Evgenii Tereshkov Date: Sat, 27 Dec 2025 18:41:47 +0700 Subject: [PATCH 1/5] Add VLAN support Signed-off-by: Evgenii Tereshkov --- main.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/main.go b/main.go index 6b8d135..fd75084 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,8 @@ import ( "net/url" "os" "path/filepath" + "regexp" + "strconv" "strings" "unsafe" @@ -284,6 +286,23 @@ func hexIPLittle(h string) string { return fmt.Sprintf("%d.%d.%d.%d", b[3], b[2], b[1], b[0]) } +func getVID(name string) (int, string, error) { + re := regexp.MustCompile(`^([a-z0-9]+)\.(\d+)$`) + matches := re.FindStringSubmatch(name) + phy := "" + if len(matches) == 3 { + vid, err := strconv.Atoi(matches[2]) + phy = matches[1] + if err != nil || vid < 1 || vid > 4094 { + return 0, phy, fmt.Errorf("invalid VID: %s", matches[2]) + } + return vid, phy, nil + } else { + phy = name + } + return 0, phy, nil +} + /* ---------------- collect kernel arguments -------------------------------- */ func collectKernelArgs() []string { @@ -306,6 +325,7 @@ func collectKernelArgsSimple() []string { var out []string if netOn { dev = ask("Interface", dev) + vid, phy, _ := getVID(dev) ip = ask("IP address", ip) mask = ask("Netmask", mask) gw = ask("Gateway (or 'none')", gw) From 6f9d3b03b81c00eb5c73fef53e4445c6f168df03 Mon Sep 17 00:00:00 2001 From: Evgenii Tereshkov Date: Sat, 27 Dec 2025 18:58:13 +0700 Subject: [PATCH 2/5] fix1 Signed-off-by: Evgenii Tereshkov --- main.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index fd75084..25b54d6 100644 --- a/main.go +++ b/main.go @@ -286,10 +286,11 @@ func hexIPLittle(h string) string { return fmt.Sprintf("%d.%d.%d.%d", b[3], b[2], b[1], b[0]) } +var re = regexp.MustCompile(`^([a-z0-9]+)\.(\d+)$`) + func getVID(name string) (int, string, error) { - re := regexp.MustCompile(`^([a-z0-9]+)\.(\d+)$`) matches := re.FindStringSubmatch(name) - phy := "" + phy := name if len(matches) == 3 { vid, err := strconv.Atoi(matches[2]) phy = matches[1] @@ -297,8 +298,6 @@ func getVID(name string) (int, string, error) { return 0, phy, fmt.Errorf("invalid VID: %s", matches[2]) } return vid, phy, nil - } else { - phy = name } return 0, phy, nil } @@ -325,7 +324,10 @@ func collectKernelArgsSimple() []string { var out []string if netOn { dev = ask("Interface", dev) - vid, phy, _ := getVID(dev) + vid, phy, err := getVID(dev) + if err != nil { + log.Fatalf("%s", err) + } ip = ask("IP address", ip) mask = ask("Netmask", mask) gw = ask("Gateway (or 'none')", gw) From f0561090bccd4fbd26d6371326d5a88634f1b15e Mon Sep 17 00:00:00 2001 From: Evgenii Tereshkov Date: Sat, 27 Dec 2025 19:38:46 +0700 Subject: [PATCH 3/5] fix2 Signed-off-by: Evgenii Tereshkov --- main.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 25b54d6..37adb17 100644 --- a/main.go +++ b/main.go @@ -286,16 +286,19 @@ func hexIPLittle(h string) string { return fmt.Sprintf("%d.%d.%d.%d", b[3], b[2], b[1], b[0]) } -var re = regexp.MustCompile(`^([a-z0-9]+)\.(\d+)$`) +var vlanInterfaceRegex = regexp.MustCompile(`^([a-z0-9]+)\.(\d+)$`) func getVID(name string) (int, string, error) { - matches := re.FindStringSubmatch(name) + matches := vlanInterfaceRegex.FindStringSubmatch(name) phy := name if len(matches) == 3 { vid, err := strconv.Atoi(matches[2]) phy = matches[1] - if err != nil || vid < 1 || vid > 4094 { - return 0, phy, fmt.Errorf("invalid VID: %s", matches[2]) + if err != nil { + return 0, phy, fmt.Errorf("invalid VID in interface name: %q is not a valid integer", matches[2]) + } + if vid < 1 || vid > 4094 { + return 0, phy, fmt.Errorf("invalid VID in interface name: %d is out of the valid range (1-4094)", vid) } return vid, phy, nil } From c7d1d256ae45a924df5ed90c6967eb545ffa5619 Mon Sep 17 00:00:00 2001 From: Evgenii Tereshkov Date: Wed, 31 Dec 2025 21:31:29 +0700 Subject: [PATCH 4/5] fix3 Signed-off-by: Evgenii Tereshkov --- main.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main.go b/main.go index 37adb17..85c4f75 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,7 @@ var ( diskFlag string yesFlag bool modeFlag string + devFlag string ) func init() { @@ -44,6 +45,7 @@ func init() { flag.BoolVar(&yesFlag, "yes", false, "automatic yes to prompts") flag.StringVar(&modeFlag, "mode", "", "mode: boot or install") flag.StringVar(&modeFlag, "m", "", "mode: boot or install (shorthand)") + flag.StringVar(&devFlag, "override-interface", "", "override network interface name") } /* ------------------------------ helpers ----------------------------------- */ @@ -322,6 +324,9 @@ func collectKernelArgsSimple() []string { ip, mask, _ := ifaceAddr(dev) dev = prettyName(dev) hostname := getHostnameSimple() + if devFlag != "" { + dev = devFlag + } netOn := askYesNo("Add networking configuration?", true) var out []string From 93aea021d0dd59f9448bb19c2cd5495e79958623 Mon Sep 17 00:00:00 2001 From: Evgenii Tereshkov Date: Thu, 8 Jan 2026 01:09:24 +0700 Subject: [PATCH 5/5] fix4 Signed-off-by: Evgenii Tereshkov --- main.go | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/main.go b/main.go index 85c4f75..69cbe2a 100644 --- a/main.go +++ b/main.go @@ -15,8 +15,6 @@ import ( "net/url" "os" "path/filepath" - "regexp" - "strconv" "strings" "unsafe" @@ -288,25 +286,6 @@ func hexIPLittle(h string) string { return fmt.Sprintf("%d.%d.%d.%d", b[3], b[2], b[1], b[0]) } -var vlanInterfaceRegex = regexp.MustCompile(`^([a-z0-9]+)\.(\d+)$`) - -func getVID(name string) (int, string, error) { - matches := vlanInterfaceRegex.FindStringSubmatch(name) - phy := name - if len(matches) == 3 { - vid, err := strconv.Atoi(matches[2]) - phy = matches[1] - if err != nil { - return 0, phy, fmt.Errorf("invalid VID in interface name: %q is not a valid integer", matches[2]) - } - if vid < 1 || vid > 4094 { - return 0, phy, fmt.Errorf("invalid VID in interface name: %d is out of the valid range (1-4094)", vid) - } - return vid, phy, nil - } - return 0, phy, nil -} - /* ---------------- collect kernel arguments -------------------------------- */ func collectKernelArgs() []string { @@ -332,10 +311,6 @@ func collectKernelArgsSimple() []string { var out []string if netOn { dev = ask("Interface", dev) - vid, phy, err := getVID(dev) - if err != nil { - log.Fatalf("%s", err) - } ip = ask("IP address", ip) mask = ask("Netmask", mask) gw = ask("Gateway (or 'none')", gw)