55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
// ParseMTU parses the mtu option
|
|
func ParseMTU(mtu string) (int, error) {
|
|
if mtu == "" {
|
|
return 0, nil // default
|
|
}
|
|
m, err := strconv.Atoi(mtu)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if m < 0 {
|
|
return 0, fmt.Errorf("mtu %d is less than zero", m)
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// ParseVlan parses the vlan option
|
|
func ParseVlan(vlan string) (int, error) {
|
|
if vlan == "" {
|
|
return 0, nil // default
|
|
}
|
|
v, err := strconv.Atoi(vlan)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
if v < 0 || v > 4094 {
|
|
return 0, fmt.Errorf("vlan ID %d must be between 0 and 4094", v)
|
|
}
|
|
return v, nil
|
|
}
|
|
|
|
// ParseIsolate parses the isolate option
|
|
func ParseIsolate(isolate string) (string, error) {
|
|
switch isolate {
|
|
case "":
|
|
return "false", nil
|
|
case "strict":
|
|
return isolate, nil
|
|
default:
|
|
// isolate option accepts "strict" and Rust boolean values "true" or "false"
|
|
optIsolateBool, err := strconv.ParseBool(isolate)
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to parse isolate option: %w", err)
|
|
}
|
|
// Rust boolean only support "true" or "false" while go can parse 1 and 0 as well so we need to change it
|
|
return strconv.FormatBool(optIsolateBool), nil
|
|
}
|
|
}
|