• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

k8snetworkplumbingwg / sriov-network-operator / 10058808149

23 Jul 2024 12:22PM UTC coverage: 43.964% (+0.6%) from 43.351%
10058808149

Pull #659

github

web-flow
Merge f199eb95f into 588abb449
Pull Request #659: Configure IB VFs' GUIDs using a statically provided GUID pool

212 of 280 new or added lines in 13 files covered. (75.71%)

2 existing lines in 1 file now uncovered.

6526 of 14844 relevant lines covered (43.96%)

0.48 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.76
/pkg/host/internal/infiniband/infiniband.go
1
package infiniband
2

3
import (
4
        "errors"
5
        "fmt"
6
        "io/fs"
7
        "net"
8

9
        "github.com/vishvananda/netlink"
10
        "sigs.k8s.io/controller-runtime/pkg/log"
11

12
        "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/consts"
13
        netlinkLibPkg "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/host/internal/lib/netlink"
14
        "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/host/types"
15
)
16

17
// New creates and returns an InfinibandInterface object, that handles IB VF GUID configuration
18
func New(netlinkLib netlinkLibPkg.NetlinkLib, kernelHelper types.KernelInterface, networkHelper types.NetworkInterface) (types.InfinibandInterface, error) {
1✔
19
        guidPool, err := newIbGUIDPool(consts.InfinibandGUIDConfigFilePath, netlinkLib, networkHelper)
1✔
20
        if err != nil {
2✔
21
                // if config file doesn't exist, fallback to the random GUID generation
1✔
22
                if errors.Is(err, fs.ErrNotExist) {
2✔
23
                        log.Log.Info("infiniband.New(): ib guid config doesn't exist, continuing without it", "config path", consts.InfinibandGUIDConfigFilePath)
1✔
24
                        return &infiniband{guidPool: nil, netlinkLib: netlinkLib, kernelHelper: kernelHelper}, nil
1✔
25
                }
1✔
26

NEW
27
                return nil, fmt.Errorf("failed to create the ib guid pool: %w", err)
×
28
        }
29

30
        return &infiniband{guidPool: guidPool, netlinkLib: netlinkLib, kernelHelper: kernelHelper}, nil
1✔
31
}
32

33
type infiniband struct {
34
        guidPool     ibGUIDPool
35
        netlinkLib   netlinkLibPkg.NetlinkLib
36
        kernelHelper types.KernelInterface
37
}
38

39
// ConfigureVfGUID configures and sets a GUID for an IB VF device
40
func (i *infiniband) ConfigureVfGUID(vfAddr string, pfAddr string, vfID int, pfLink netlink.Link) error {
1✔
41
        log.Log.Info("ConfigureVfGUID(): configure vf guid", "vfAddr", vfAddr, "pfAddr", pfAddr, "vfID", vfID)
1✔
42

1✔
43
        guid := generateRandomGUID()
1✔
44

1✔
45
        if i.guidPool != nil {
2✔
46
                guidFromPool, err := i.guidPool.GetVFGUID(pfAddr, vfID)
1✔
47
                if err != nil {
1✔
NEW
48
                        log.Log.Info("ConfigureVfGUID(): failed to get GUID from IB GUID pool", "address", vfAddr, "error", err)
×
NEW
49
                        return err
×
NEW
50
                }
×
51
                guid = guidFromPool
1✔
52
        }
53
        log.Log.Info("ConfigureVfGUID(): set vf guid", "address", vfAddr, "guid", guid)
1✔
54

1✔
55
        return i.applyVfGUIDToInterface(guid, vfAddr, vfID, pfLink)
1✔
56
}
57

58
func (i *infiniband) applyVfGUIDToInterface(guid net.HardwareAddr, vfAddr string, vfID int, pfLink netlink.Link) error {
1✔
59
        if err := i.netlinkLib.LinkSetVfNodeGUID(pfLink, vfID, guid); err != nil {
1✔
NEW
60
                return err
×
NEW
61
        }
×
62
        if err := i.netlinkLib.LinkSetVfPortGUID(pfLink, vfID, guid); err != nil {
1✔
NEW
63
                return err
×
NEW
64
        }
×
65

66
        return nil
1✔
67
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc