func()

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
}