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

k8snetworkplumbingwg / sriov-network-operator / 9958277243

16 Jul 2024 01:58PM UTC coverage: 43.08% (+2.2%) from 40.88%
9958277243

Pull #691

github

web-flow
Merge a80193974 into 4daeeded6
Pull Request #691: [software-bridges 3/x] Add bridge package

648 of 856 new or added lines in 6 files covered. (75.7%)

6266 of 14545 relevant lines covered (43.08%)

0.47 hits per line

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

89.13
/pkg/host/internal/bridge/bridge.go
1
package bridge
2

3
import (
4
        "context"
5

6
        "sigs.k8s.io/controller-runtime/pkg/log"
7

8
        sriovnetworkv1 "github.com/k8snetworkplumbingwg/sriov-network-operator/api/v1"
9
        "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/host/internal/bridge/ovs"
10
        ovsStorePkg "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/host/internal/bridge/ovs/store"
11
        "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/host/types"
12
)
13

14
type bridge struct {
15
        ovs ovs.Interface
16
}
17

18
// New return default implementation of the BridgeInterface
NEW
19
func New() types.BridgeInterface {
×
NEW
20
        return &bridge{
×
NEW
21
                ovs: ovs.New(ovsStorePkg.New()),
×
NEW
22
        }
×
NEW
23
}
×
24

25
// DiscoverBridges returns information about managed bridges on the host
26
func (b *bridge) DiscoverBridges() (sriovnetworkv1.Bridges, error) {
1✔
27
        log.Log.V(2).Info("DiscoverBridges(): discover managed bridges")
1✔
28
        discoveredOVSBridges, err := b.ovs.GetOVSBridges(context.Background())
1✔
29
        if err != nil {
2✔
30
                log.Log.Error(err, "DiscoverBridges(): failed to discover managed OVS bridges")
1✔
31
                return sriovnetworkv1.Bridges{}, err
1✔
32
        }
1✔
33
        return sriovnetworkv1.Bridges{OVS: discoveredOVSBridges}, nil
1✔
34
}
35

36
// ConfigureBridge configure managed bridges for the host
37
func (b *bridge) ConfigureBridges(bridgesSpec sriovnetworkv1.Bridges, bridgesStatus sriovnetworkv1.Bridges) error {
1✔
38
        log.Log.V(1).Info("ConfigureBridges(): configure bridges")
1✔
39
        if len(bridgesSpec.OVS) == 0 && len(bridgesStatus.OVS) == 0 {
2✔
40
                // there are no reported OVS bridges in the status and the spec doesn't contains bridges.
1✔
41
                // no need to validated configuration
1✔
42
                log.Log.V(2).Info("ConfigureBridges(): configuration is not required")
1✔
43
                return nil
1✔
44
        }
1✔
45
        for _, curBr := range bridgesStatus.OVS {
2✔
46
                found := false
1✔
47
                for _, desiredBr := range bridgesSpec.OVS {
2✔
48
                        if curBr.Name == desiredBr.Name {
2✔
49
                                found = true
1✔
50
                                break
1✔
51
                        }
52
                }
53
                if !found {
2✔
54
                        if err := b.ovs.RemoveOVSBridge(context.Background(), curBr.Name); err != nil {
2✔
55
                                log.Log.Error(err, "ConfigureBridges(): failed to remove OVS bridge", "bridge", curBr.Name)
1✔
56
                                return err
1✔
57
                        }
1✔
58
                }
59
        }
60
        // create bridges, existing bridges will be updated only if the new config doesn't match current config
61
        for i := range bridgesSpec.OVS {
2✔
62
                desiredBr := bridgesSpec.OVS[i]
1✔
63
                if err := b.ovs.CreateOVSBridge(context.Background(), &desiredBr); err != nil {
2✔
64
                        log.Log.Error(err, "ConfigureBridges(): failed to create OVS bridge", "bridge", desiredBr.Name)
1✔
65
                        return err
1✔
66
                }
1✔
67
        }
68
        return nil
1✔
69
}
70

71
// DetachInterfaceFromManagedBridge detach interface from a managed bridge,
72
// this step is required before applying some configurations to PF, e.g. changing of eSwitch mode.
73
// The function detach interface from managed bridges only.
74
func (b *bridge) DetachInterfaceFromManagedBridge(pciAddr string) error {
1✔
75
        log.Log.V(1).Info("DetachInterfaceFromManagedBridge(): detach interface", "pciAddr", pciAddr)
1✔
76
        if err := b.ovs.RemoveInterfaceFromOVSBridge(context.Background(), pciAddr); err != nil {
2✔
77
                log.Log.Error(err, "DetachInterfaceFromManagedBridge(): failed to detach interface from OVS bridge", "pciAddr", pciAddr)
1✔
78
                return err
1✔
79
        }
1✔
80
        return nil
1✔
81
}
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