From 222aac80cba8905a2259aa2dd544f6478f792a20 Mon Sep 17 00:00:00 2001 From: Shirong Lu <73147033+happysnaker@users.noreply.github.com> Date: Thu, 2 Jul 2026 18:51:42 +0800 Subject: [PATCH] sysfs: add InfiniBandDevice API Signed-off-by: Shirong Lu <73147033+happysnaker@users.noreply.github.com> --- sysfs/class_infiniband.go | 6 ++++++ sysfs/class_infiniband_test.go | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/sysfs/class_infiniband.go b/sysfs/class_infiniband.go index 4a893ae6..702f9ec0 100644 --- a/sysfs/class_infiniband.go +++ b/sysfs/class_infiniband.go @@ -159,6 +159,12 @@ func (fs FS) InfiniBandClass() (InfiniBandClass, error) { return ibc, nil } +// InfiniBandDevice returns info for a single InfiniBand device read from +// /sys/class/infiniband/. +func (fs FS) InfiniBandDevice(name string) (*InfiniBandDevice, error) { + return fs.parseInfiniBandDevice(name) +} + // Parse one InfiniBand device. // Refer to https://www.kernel.org/doc/Documentation/ABI/stable/sysfs-class-infiniband func (fs FS) parseInfiniBandDevice(name string) (*InfiniBandDevice, error) { diff --git a/sysfs/class_infiniband_test.go b/sysfs/class_infiniband_test.go index 66a8fdee..002c94a7 100644 --- a/sysfs/class_infiniband_test.go +++ b/sysfs/class_infiniband_test.go @@ -344,3 +344,25 @@ func TestInfiniBandClass(t *testing.T) { t.Fatalf("unexpected InfiniBand class (-want +got):\n%s", diff) } } + +func TestInfiniBandDevice(t *testing.T) { + fs, err := NewFS(sysTestFixtures) + if err != nil { + t.Fatal(err) + } + + class, err := fs.InfiniBandClass() + if err != nil { + t.Fatal(err) + } + + got, err := fs.InfiniBandDevice("mlx5_0") + if err != nil { + t.Fatal(err) + } + + want := class["mlx5_0"] + if diff := cmp.Diff(want, *got); diff != "" { + t.Fatalf("unexpected InfiniBand device (-want +got):\n%s", diff) + } +}