in nri_device_injector/nri_device_injector.go [158:199]
func (d *device) toNRIDevice() (*api.LinuxDevice, error) {
var (
stat unix.Stat_t
)
if err := unix.Lstat(d.Path, &stat); err != nil {
return nil, fmt.Errorf("failed to get info from device path %s: %v", d.Path, err)
}
var (
devNumber = uint64(stat.Rdev)
major = unix.Major(devNumber)
minor = unix.Minor(devNumber)
mode = stat.Mode
devType string
)
switch mode & unix.S_IFMT {
case unix.S_IFBLK:
devType = blockDevice
case unix.S_IFCHR:
devType = charDevice
case unix.S_IFIFO:
devType = fifoDevice
default:
return nil, fmt.Errorf("invalid device type %v from device path %v", mode, d.Path)
}
apiDev := &api.LinuxDevice{
Path: d.Path,
Type: devType,
Major: int64(major),
Minor: int64(minor),
}
if d.FileMode != 0 {
apiDev.FileMode = api.FileMode(d.FileMode)
}
if d.UID != 0 {
apiDev.Uid = api.UInt32(d.UID)
}
if d.GID != 0 {
apiDev.Gid = api.UInt32(d.GID)
}
return apiDev, nil
}