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) + } +}