From 0f9803536f34aeb399a04e3712ae7d32663ce462 Mon Sep 17 00:00:00 2001 From: Balazs Nemeth Date: Tue, 21 Jan 2025 20:24:45 +0100 Subject: [PATCH] Flush ip before setting ip (#325) Signed-off-by: Balazs Nemeth --- ipu-plugin/pkg/ipuplugin/lifecycleservice.go | 7 +++++++ ipu-plugin/pkg/ipuplugin/ovsbridge.go | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/ipu-plugin/pkg/ipuplugin/lifecycleservice.go b/ipu-plugin/pkg/ipuplugin/lifecycleservice.go index c6284c91..46fa6d1d 100644 --- a/ipu-plugin/pkg/ipuplugin/lifecycleservice.go +++ b/ipu-plugin/pkg/ipuplugin/lifecycleservice.go @@ -49,6 +49,7 @@ type LifeCycleServiceServer struct { mode string p4rtbin string bridgeCtlr types.BridgeController + initialized bool // Currently, can only call initiliaze once } const ( @@ -85,6 +86,7 @@ func NewLifeCycleService(daemonHostIp, daemonIpuIp string, daemonPort int, mode mode: mode, p4rtbin: p4rtbin, bridgeCtlr: brCtlr, + initialized: false, } } @@ -893,6 +895,11 @@ func (s *FXPHandlerImpl) configureFXP(p4rtbin string, brCtlr types.BridgeControl } func (s *LifeCycleServiceServer) Init(ctx context.Context, in *pb.InitRequest) (*pb.IpPort, error) { + if s.initialized { + return nil, fmt.Errorf("Error during init call, already initialized") + } + s.initialized = true + InitHandlers() if in.DpuMode && s.mode != types.IpuMode || !in.DpuMode && s.mode != types.HostMode { diff --git a/ipu-plugin/pkg/ipuplugin/ovsbridge.go b/ipu-plugin/pkg/ipuplugin/ovsbridge.go index deef2f5d..6431d12e 100644 --- a/ipu-plugin/pkg/ipuplugin/ovsbridge.go +++ b/ipu-plugin/pkg/ipuplugin/ovsbridge.go @@ -100,6 +100,11 @@ func (b *ovsBridge) EnsureBridgeExists() error { log.Errorf("EnsureBridgeExists: error->%v from getInfrapodNamespace", err) return err } + // Flush any existing IP addresses from the bridge interface from any previous runs + flushIPCmd := []string{"net", "exec", netNs, "ip", "addr", "flush", "dev", b.bridgeName} + if err := utils.ExecOsCommand("ip", flushIPCmd...); err != nil { + return fmt.Errorf("error flushing IP addresses for bridge %s: %v", b.bridgeName, err) + } //assigning IP for bridge interface. ipAddr := ACC_VM_PR_IP cmdParams := []string{"net", "exec", netNs, "ip", "addr", "add", "dev", b.bridgeName, ipAddr}