sriovnet

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 6, 2023 License: Apache-2.0 Imports: 17 Imported by: 7

README

License Go Report Card Build Test Coverage Status

sriovnet

Go library to configure SRIOV networking devices

Local build and test

You can use go get command:

go get github.com/k8snetworkplumbingwg/sriovnet

Example:

package main

import (
    "fmt"

    "github.com/k8snetworkplumbingwg/sriovnet"
)

func main() {
	var vfList[10] *sriovnet.VfObj

	err1 := sriovnet.EnableSriov("ib0")
	if err1 != nil {
		return
	}

	handle, err2 := sriovnet.GetPfNetdevHandle("ib0")
	if err2 != nil {
		return
	}
	err3 := sriovnet.ConfigVfs(handle, false)
	if err3 != nil {
		return
	}
	for i := 0; i < 10; i++ {
		vfList[i], _ = sriovnet.AllocateVf(handle)
	}
	for _, vf := range handle.List {
		fmt.Printf("after allocation vf = %v\n", vf)
	}
	for i := 0; i < 10; i++ {
		if vfList[i] == nil {
			continue
		}
		sriovnet.FreeVf(handle, vfList[i])
	}
	for _, vf := range handle.List {
		fmt.Printf("after free vf = %v\n", vf)
	}
}

Documentation

Index

Constants

View Source
const (
	NetSysDir = "/sys/class/net"
	PciSysDir = "/sys/bus/pci/devices"
	AuxSysDir = "/sys/bus/auxiliary/devices"
)
View Source
const (
	PORT_FLAVOUR_PHYSICAL = iota
	PORT_FLAVOUR_CPU
	PORT_FLAVOUR_DSA
	PORT_FLAVOUR_PCI_PF
	PORT_FLAVOUR_PCI_VF
	PORT_FLAVOUR_VIRTUAL
	PORT_FLAVOUR_UNUSED
	PORT_FLAVOUR_PCI_SF
	PORT_FLAVOUR_UNKNOWN = 0xffff
)

Keep things consistent with netlink lib constants nolint:revive,stylecheck

Variables

This section is empty.

Functions

func BindVf

func BindVf(handle *PfNetdevHandle, vf *VfObj) error

func ConfigVfs

func ConfigVfs(handle *PfNetdevHandle, privileged bool) error

func DisableSriov

func DisableSriov(pfNetdevName string) error

func EnableSriov

func EnableSriov(pfNetdevName string) error

func FreeVf

func FreeVf(handle *PfNetdevHandle, vf *VfObj)

func FreeVfByNetdevName

func FreeVfByNetdevName(handle *PfNetdevHandle, vfIndex int) error

func GetAuxNetDevicesFromPci

func GetAuxNetDevicesFromPci(pciAddr string) ([]string, error)

GetAuxNetDevicesFromPci returns a list of auxiliary devices names for the specified PCI network device

func GetNetDevicesFromAux

func GetNetDevicesFromAux(auxDev string) ([]string, error)

GetNetDeviceFromAux gets auxiliary device name (e.g 'mlx5_core.sf.2') and returns the correlate netdevice

func GetNetDevicesFromPci

func GetNetDevicesFromPci(pciAddress string) ([]string, error)

GetNetDevicesFromPci gets a PCI address (e.g '0000:03:00.1') and returns the correlate list of netdevices

func GetPciFromNetDevice

func GetPciFromNetDevice(name string) (string, error)

GetPciFromNetDevice returns the PCI address associated with a network device name

func GetPfPciFromAux

func GetPfPciFromAux(auxDev string) (string, error)

GetPfPciFromAux retrieves the parent PF PCI address of the provided auxiliary device in D.T.f format

func GetPfPciFromVfPci

func GetPfPciFromVfPci(vfPciAddress string) (string, error)

GetPfPciFromVfPci retrieves the parent PF PCI address of the provided VF PCI address in D:B:D.f format

func GetPortIndexFromRepresentor

func GetPortIndexFromRepresentor(repNetDev string) (int, error)

GetPortIndexFromRepresentor finds the index of a representor from its network device name. Supports VF and SF. For multiple port flavors, the same ID could be returned, i.e.

pf0vf10 and pf0sf10

will return the same port ID. To further differentiate the ports, use GetRepresentorPortFlavour

func GetRepresentorPeerMacAddress

func GetRepresentorPeerMacAddress(netdev string) (net.HardwareAddr, error)

GetRepresentorPeerMacAddress returns the MAC address of the peer netdev associated with the given representor netdev Note:

This method functionality is currently supported only on DPUs.
Currently only netdev representors with PORT_FLAVOUR_PCI_PF are supported

func GetSfIndexByAuxDev

func GetSfIndexByAuxDev(auxDev string) (int, error)

GetSfIndexByAuxDev gets a SF device name (e.g 'mlx5_core.sf.2') and returns the correlate SF index.

func GetSfRepresentor

func GetSfRepresentor(uplink string, sfNum int) (string, error)

func GetSfRepresentorDPU

func GetSfRepresentorDPU(pfID, sfIndex string) (string, error)

GetSfRepresentorDPU returns SF representor on DPU for a host SF identified by pfID and sfIndex

func GetUplinkRepresentor

func GetUplinkRepresentor(pciAddress string) (string, error)

GetUplinkRepresentor gets a VF or PF PCI address (e.g '0000:03:00.4') and returns the uplink represntor netdev name for that VF or PF.

func GetUplinkRepresentorFromAux

func GetUplinkRepresentorFromAux(auxDev string) (string, error)

GetUplinkRepresentorFromAux gets auxiliary device name (e.g 'mlx5_core.sf.2') and returns the uplink representor netdev name for device.

func GetVfDefaultMacAddr

func GetVfDefaultMacAddr(vfNetdevName string) (string, error)

func GetVfIndexByPciAddress

func GetVfIndexByPciAddress(vfPciAddress string) (int, error)

GetVfIndexByPciAddress gets a VF PCI address (e.g '0000:03:00.4') and returns the correlate VF index.

func GetVfNetdevName

func GetVfNetdevName(handle *PfNetdevHandle, vf *VfObj) string

func GetVfPciDevList

func GetVfPciDevList(pfNetdevName string) ([]string, error)

func GetVfRepresentor

func GetVfRepresentor(uplink string, vfIndex int) (string, error)

func GetVfRepresentorDPU

func GetVfRepresentorDPU(pfID, vfIndex string) (string, error)

GetVfRepresentorDPU returns VF representor on DPU for a host VF identified by pfID and vfIndex

func IsSriovEnabled

func IsSriovEnabled(netdevName string) bool

func IsSriovSupported

func IsSriovSupported(netdevName string) bool

func IsVfPciVfioBound

func IsVfPciVfioBound(pciAddr string) bool

func SetPFLinkUp

func SetPFLinkUp(pfNetdevName string) error

func SetRepresentorPeerMacAddress

func SetRepresentorPeerMacAddress(netdev string, mac net.HardwareAddr) error

SetRepresentorPeerMacAddress sets the given MAC addresss of the peer netdev associated with the given representor netdev. Note: This method functionality is currently supported only for DPUs. Currently only netdev representors with PORT_FLAVOUR_PCI_VF are supported

func SetVfDefaultGUID

func SetVfDefaultGUID(handle *PfNetdevHandle, vf *VfObj) error

func SetVfDefaultMacAddress

func SetVfDefaultMacAddress(handle *PfNetdevHandle, vf *VfObj) error

func SetVfPrivileged

func SetVfPrivileged(handle *PfNetdevHandle, vf *VfObj, privileged bool) error

func SetVfVlan

func SetVfVlan(handle *PfNetdevHandle, vf *VfObj, vlan int) error

func UnbindVf

func UnbindVf(handle *PfNetdevHandle, vf *VfObj) error

Types

type PfNetdevHandle

type PfNetdevHandle struct {
	PfNetdevName string

	List []*VfObj
	// contains filtered or unexported fields
}

func GetPfNetdevHandle

func GetPfNetdevHandle(pfNetdevName string) (*PfNetdevHandle, error)

type PortFlavour

type PortFlavour uint16

func GetRepresentorPortFlavour

func GetRepresentorPortFlavour(netdev string) (PortFlavour, error)

GetRepresentorPortFlavour returns the representor port flavour Note: this method does not support old representor names used by old kernels e.g <vf_num> and will return PORT_FLAVOUR_UNKNOWN for such cases.

type VfObj

type VfObj struct {
	Index      int
	PciAddress string
	Bound      bool
	Allocated  bool
}

func AllocateVf

func AllocateVf(handle *PfNetdevHandle) (*VfObj, error)

func AllocateVfByMacAddress

func AllocateVfByMacAddress(handle *PfNetdevHandle, vfMacAddress string) (*VfObj, error)

type VfObject

type VfObject struct {
	NetdevName string
	PCIDevName string
}

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL