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)
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)
link, err := execGetLink(req)

View File

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