From 79e91b25c1ee99611f4f40f84cab34e92e3467c3 Mon Sep 17 00:00:00 2001 From: Jacob Weinstock Date: Wed, 25 Jan 2023 21:03:49 -0700 Subject: [PATCH] Update vlan checking: Hook creates the vlan interface so we don't need to create it here. Signed-off-by: Jacob Weinstock --- actions/writefile/v1/main.go | 41 ++++++++---------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/actions/writefile/v1/main.go b/actions/writefile/v1/main.go index d2a5ff2..018c2a7 100644 --- a/actions/writefile/v1/main.go +++ b/actions/writefile/v1/main.go @@ -14,6 +14,7 @@ import ( "os/exec" "path" "path/filepath" + "regexp" "runtime" "strconv" "strings" @@ -23,7 +24,6 @@ import ( "github.com/insomniacslk/dhcp/dhcpv4" "github.com/insomniacslk/dhcp/dhcpv4/nclient4" log "github.com/sirupsen/logrus" - "github.com/vishvananda/netlink" "github.com/vishvananda/netns" ) @@ -109,9 +109,9 @@ func main() { log.Errorf("Invalid DHCP_TIMEOUT: %s, using default: %v", t, timeout) } } - if name, template, err := vlanEnabled("/proc/cmdline"); err == nil { + if n, template, err := vlanEnabled("/proc/cmdline"); err == nil { netplanTemplate = template - ifname = name + ifname = n } contents, err = dhcpAndWriteNetplan(ifname, timeout, netplanTemplate) if err != nil { @@ -415,36 +415,13 @@ func ensureDir(mountPath, path string, mode os.FileMode, uid, gid int) error { } func vlanEnabled(f string) (ifname, netplanTemplate string, err error) { - cmdline, err := ioutil.ReadFile(f) - if err != nil { - return "", "", fmt.Errorf("failed to read /proc/cmdline: %w", err) - } - var vlan int - if vlan, err = getVLANID(string(cmdline)); err == nil { - // create new interface with vlan id - l := netlink.NewLinkAttrs() - parent := determineNetIF() - n, err := net.InterfaceByName(parent) - if err != nil { - return "", "", err - } - - ifname = fmt.Sprintf(parent+".%d", vlan) - l.Name = ifname - l.ParentIndex = n.Index - link := &netlink.Vlan{LinkAttrs: l, VlanId: vlan, VlanProtocol: netlink.VLAN_PROTOCOL_8021Q} - // creat vlan interface - if err = netlink.LinkAdd(link); err != nil { - return "", "", err - } - // set interface up - if err = netlink.LinkSetUp(link); err != nil { - return "", "", err - } - } else { - return "", "", err + ifname = determineNetIF() + // want "eth0.X", where X is between 1 and 4096 + // This interface will exist if Hook creates it. Hook will create it if "vlan_id" is set in /proc/cmdline. + exp := `^eth0.(409[0-6]|(40[0-8]|[1-3]\d\d|[1-9]\d|[1-9])\d|[1-9])$` + if match, err := regexp.MatchString(exp, ifname); err != nil || !match { + return "", "", fmt.Errorf("failed to match interface name %s with regex %s: %w", ifname, exp, err) } - netplanTemplate = `network: version: 2 renderer: networkd -- 2.34.1