Skip to content

Commit

Permalink
Extend rdma manager API
Browse files Browse the repository at this point in the history
Extend RDMA manager API to facilitate RDMA device
renmae when moving it to/form container network namespace

- Add method to get available RDMA devices in the system
- Add method to rename RDMA device
  • Loading branch information
adrianchiris committed Apr 13, 2020
1 parent 5a45ab2 commit 707a515
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
29 changes: 29 additions & 0 deletions pkg/rdma/rdma.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@ func NewRdmaManager() RdmaManager {
type RdmaManager interface {
// Move RDMA device from current network namespace to network namespace
MoveRdmaDevToNs(rdmaDev string, netNs ns.NetNS) error
// Get RDMA devices in the current network namespace
GetRdmaDeviceList() ([]string, error)
// Get RDMA devices associated with the given PCI device in D:B:D.f format e.g 0000:04:00.0
GetRdmaDevsForPciDev(pciDev string) ([]string, error)
// Get RDMA subsystem namespace awareness mode ["exclusive" | "shared"]
GetSystemRdmaMode() (string, error)
// Set RDMA subsystem namespace awareness mode ["exclusive" | "shared"]
SetSystemRdmaMode(mode string) error
// Change RDMA device name
SetRdmaDevName(oldName string, newName string) error
}

type rdmaManagerNetlink struct {
Expand Down Expand Up @@ -57,3 +61,28 @@ func (rmn *rdmaManagerNetlink) GetSystemRdmaMode() (string, error) {
func (rmn *rdmaManagerNetlink) SetSystemRdmaMode(mode string) error {
return rmn.rdmaOps.RdmaSystemSetNetnsMode(mode)
}

// Change RDMA device name
func (rmn *rdmaManagerNetlink) SetRdmaDevName(oldName string, newName string) error {
rdmaLink, err := rmn.rdmaOps.RdmaLinkByName(oldName)
if err != nil {
return fmt.Errorf("cannot find RDMA link from name: %s", oldName)
}
err = rmn.rdmaOps.RdmaLinkSetName(rdmaLink, newName)
if err != nil {
return fmt.Errorf("failed to change RDMA device name from %s to %s. %v", oldName, newName, err)
}
return nil
}

func (rmn *rdmaManagerNetlink) GetRdmaDeviceList() ([]string, error) {
links, err := rmn.rdmaOps.GetRdmaLinkList()
if err != nil {
return nil, err
}
names := make([]string, len(links))
for _, link := range links {
names = append(names, link.Attrs.Name)
}
return names, nil
}
14 changes: 14 additions & 0 deletions pkg/rdma/rdma_ops.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@ type RdmaBasicOps interface {
RdmaLinkByName(name string) (*netlink.RdmaLink, error)
// Equivalent to netlink.RdmaLinkSetNsFd(...)
RdmaLinkSetNsFd(link *netlink.RdmaLink, fd uint32) error
// Equivalent to netlink.RdmaLinkSetName(...)
RdmaLinkSetName(link *netlink.RdmaLink, name string) error
// Equivalent to netlink.RdmaSystemGetNetnsMode(...)
RdmaSystemGetNetnsMode() (string, error)
// Equivalent to netlink.RdmaSystemSetNetnsMode(...)
RdmaSystemSetNetnsMode(newMode string) error
// Equivalent to rdmamap.GetRdmaDevicesForPcidev(...)
GetRdmaDevicesForPcidev(pcidevName string) []string
// Equivalent to netlink.RdmaLinkList()
GetRdmaLinkList() ([]*netlink.RdmaLink, error)
}

func newRdmaBasicOps() RdmaBasicOps {
Expand All @@ -36,6 +40,11 @@ func (rdma *rdmaBasicOpsImpl) RdmaLinkSetNsFd(link *netlink.RdmaLink, fd uint32)
return netlink.RdmaLinkSetNsFd(link, fd)
}

// Equivalent to netlink.RdmaLinkSetName(...)
func (rdma *rdmaBasicOpsImpl) RdmaLinkSetName(link *netlink.RdmaLink, name string) error {
return netlink.RdmaLinkSetName(link, name)
}

// Equivalent to netlink.RdmaSystemGetNetnsMode(...)
func (rdma *rdmaBasicOpsImpl) RdmaSystemGetNetnsMode() (string, error) {
return netlink.RdmaSystemGetNetnsMode()
Expand All @@ -50,3 +59,8 @@ func (rdma *rdmaBasicOpsImpl) RdmaSystemSetNetnsMode(newMode string) error {
func (rdma *rdmaBasicOpsImpl) GetRdmaDevicesForPcidev(pcidevName string) []string {
return rdmamap.GetRdmaDevicesForPcidev(pcidevName)
}

// Equivalent to netlink.RdmaLinkList()
func (rdma *rdmaBasicOpsImpl) GetRdmaLinkList() ([]*netlink.RdmaLink, error) {
return netlink.RdmaLinkList()
}

0 comments on commit 707a515

Please sign in to comment.