Link: Fix LinkByName with long (>15 char) name by using altnames

This commit is contained in:
steiler 2024-02-29 10:35:23 +01:00 committed by Alessandro Boch
parent 124bb8e721
commit 8ac83962db
2 changed files with 41 additions and 44 deletions

View File

@ -1867,6 +1867,9 @@ func (h *Handle) LinkByName(name string) (Link, error) {
req.AddData(attr) req.AddData(attr)
nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(name)) nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(name))
if len(name) > 15 {
nameData = nl.NewRtAttr(unix.IFLA_ALT_IFNAME, nl.ZeroTerminated(name))
}
req.AddData(nameData) req.AddData(nameData)
link, err := execGetLink(req) link, err := execGetLink(req)

View File

@ -10,6 +10,8 @@ import (
"net" "net"
"os" "os"
"os/exec" "os/exec"
"sort"
"strings"
"syscall" "syscall"
"testing" "testing"
"time" "time"
@ -1899,14 +1901,15 @@ func TestLinkAltName(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
err = LinkAddAltName(link, "altname") altNames := []string{"altname", "altname2", "some_longer_altname"}
if err != nil { sort.Strings(altNames)
t.Fatalf("Could not add altname: %v", err) altNamesStr := strings.Join(altNames, ",")
}
err = LinkAddAltName(link, "altname2") for _, altname := range altNames {
if err != nil { err = LinkAddAltName(link, altname)
t.Fatalf("Could not add altname: %v", err) if err != nil {
t.Fatalf("Could not add %s: %v", altname, err)
}
} }
link, err = LinkByName("bar") link, err = LinkByName("bar")
@ -1914,49 +1917,40 @@ func TestLinkAltName(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
altNameExist := false sort.Strings(link.Attrs().AltNames)
altName2Exist := false linkAltNamesStr := strings.Join(link.Attrs().AltNames, ",")
for _, altName := range link.Attrs().AltNames {
if altName == "altname" {
altNameExist = true
} else if altName == "altname2" {
altName2Exist = true
}
} if altNamesStr != linkAltNamesStr {
if !altNameExist { t.Fatalf("Expected %s AltNames, got %s", altNamesStr, linkAltNamesStr)
t.Fatal("Could not find altname")
} }
if !altName2Exist { for _, altname := range altNames {
t.Fatal("Could not find altname2") link, err = LinkByName(altname)
} if err != nil {
t.Fatal(err)
link, err = LinkByName("altname")
if err != nil {
t.Fatal(err)
}
err = LinkDelAltName(link, "altname")
if err != nil {
t.Fatalf("Could not delete altname: %v", err)
}
link, err = LinkByName("bar")
if err != nil {
t.Fatal(err)
}
altNameExist = false
for _, altName := range link.Attrs().AltNames {
if altName == "altname" {
altNameExist = true
break
} }
} }
if altNameExist {
t.Fatal("altname still exist") for idx, altName := range altNames {
err = LinkDelAltName(link, altName)
if err != nil {
t.Fatalf("Could not delete %s: %v", altName, err)
}
link, err = LinkByName("bar")
if err != nil {
t.Fatal(err)
}
sort.Strings(link.Attrs().AltNames)
linkAltNamesStr := strings.Join(link.Attrs().AltNames, ",")
altNamesStr := strings.Join(altNames[idx+1:], ",")
if linkAltNamesStr != altNamesStr {
t.Fatalf("Expected %s AltNames, got %s", altNamesStr, linkAltNamesStr)
}
} }
} }
func TestLinkSetARP(t *testing.T) { func TestLinkSetARP(t *testing.T) {