Parcourir la source

fix(bridge): sync bridge IP deletions/additions between interface manager and persistent bridge store

Proxmox Router il y a 1 semaine
Parent
commit
677efbffa7
2 fichiers modifiés avec 32 ajouts et 4 suppressions
  1. 10 0
      internal/api/api.go
  2. 22 4
      internal/bridge/manager.go

+ 10 - 0
internal/api/api.go

@@ -412,6 +412,11 @@ func (s *Server) handleAddInterfaceIP(w http.ResponseWriter, r *http.Request) {
 		return
 		return
 	}
 	}
 
 
+	// If this interface is a bridge, also sync to BridgeManager persistent config
+	if s.bridgeMgr != nil {
+		_ = s.bridgeMgr.AddBridgeIP(name, req.IP)
+	}
+
 	writeJSON(w, http.StatusOK, map[string]any{"success": true, "name": name, "ip": req.IP})
 	writeJSON(w, http.StatusOK, map[string]any{"success": true, "name": name, "ip": req.IP})
 }
 }
 
 
@@ -428,6 +433,11 @@ func (s *Server) handleDeleteInterfaceIP(w http.ResponseWriter, r *http.Request)
 		return
 		return
 	}
 	}
 
 
+	// If this interface is a bridge, also delete from BridgeManager persistent config
+	if s.bridgeMgr != nil {
+		_ = s.bridgeMgr.DeleteBridgeIP(name, req.IP)
+	}
+
 	writeJSON(w, http.StatusOK, map[string]any{"success": true, "name": name, "ip": req.IP})
 	writeJSON(w, http.StatusOK, map[string]any{"success": true, "name": name, "ip": req.IP})
 }
 }
 
 

+ 22 - 4
internal/bridge/manager.go

@@ -208,11 +208,20 @@ func (m *BridgeManager) SetBridgeState(id string, disabled bool) error {
 	return nil
 	return nil
 }
 }
 
 
-func (m *BridgeManager) AddBridgeIP(id string, ipCIDR string) error {
+func (m *BridgeManager) AddBridgeIP(idOrName string, ipCIDR string) error {
 	m.mu.Lock()
 	m.mu.Lock()
 	defer m.mu.Unlock()
 	defer m.mu.Unlock()
 
 
-	b, ok := m.bridges[id]
+	b, ok := m.bridges[idOrName]
+	if !ok {
+		for _, br := range m.bridges {
+			if br.Name == idOrName {
+				b = br
+				ok = true
+				break
+			}
+		}
+	}
 	if !ok {
 	if !ok {
 		return fmt.Errorf("bridge not found")
 		return fmt.Errorf("bridge not found")
 	}
 	}
@@ -237,11 +246,20 @@ func (m *BridgeManager) AddBridgeIP(id string, ipCIDR string) error {
 	return nil
 	return nil
 }
 }
 
 
-func (m *BridgeManager) DeleteBridgeIP(id string, ipCIDR string) error {
+func (m *BridgeManager) DeleteBridgeIP(idOrName string, ipCIDR string) error {
 	m.mu.Lock()
 	m.mu.Lock()
 	defer m.mu.Unlock()
 	defer m.mu.Unlock()
 
 
-	b, ok := m.bridges[id]
+	b, ok := m.bridges[idOrName]
+	if !ok {
+		for _, br := range m.bridges {
+			if br.Name == idOrName {
+				b = br
+				ok = true
+				break
+			}
+		}
+	}
 	if !ok {
 	if !ok {
 		return fmt.Errorf("bridge not found")
 		return fmt.Errorf("bridge not found")
 	}
 	}