From 396f2842e5f805646cdf5a777c609737cb85e4f7 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 26 Apr 2026 15:04:45 +0200 Subject: [PATCH] f-21: code: use ebtable parse Signed-off-by: GnomeZworc --- internal/subnet/create.go | 24 +++++------------------- internal/subnet/delete.go | 26 ++++++++++++-------------- 2 files changed, 17 insertions(+), 33 deletions(-) diff --git a/internal/subnet/create.go b/internal/subnet/create.go index d376d7f..496c257 100644 --- a/internal/subnet/create.go +++ b/internal/subnet/create.go @@ -3,11 +3,11 @@ package subnet import ( "fmt" "net" - "os/exec" "strconv" "strings" "git.g3e.fr/syonad/two/internal/dhcp" + "git.g3e.fr/syonad/two/internal/ebtables" "git.g3e.fr/syonad/two/internal/netif" "git.g3e.fr/syonad/two/internal/netns" "git.g3e.fr/syonad/two/pkg/db/kv" @@ -136,25 +136,11 @@ func CreateSubnet(db *badger.DB, subnetName string) error { return fmt.Errorf("add route in netns: %w", err) } - // ebtables : drop ARP Request vers la gateway sur ce bridge - if err := exec.Command("ebtables", "-A", "FORWARD", - "--out-interface", bridge, - "-p", "arp", - "--arp-op", "Request", - "--arp-ip-dst", gatewayIP.String(), - "-j", "DROP").Run(); err != nil { - return fmt.Errorf("ebtables arp rule: %w", err) + if err := ebtables.DropARPToGateway(bridge, gatewayIP.String()); err != nil { + return err } - - // ebtables : drop trafic DHCP sur ce bridge - if err := exec.Command("ebtables", "-A", "FORWARD", - "--out-interface", bridge, - "-p", "IPv4", - "--ip-protocol", "udp", - "--ip-source-port", "67:68", - "--ip-destination-port", "67:68", - "-j", "DROP").Run(); err != nil { - return fmt.Errorf("ebtables dhcp rule: %w", err) + if err := ebtables.DropDHCP(bridge); err != nil { + return err } // génération de la config dnsmasq et démarrage du service diff --git a/internal/subnet/delete.go b/internal/subnet/delete.go index 650aa6f..8ce91ff 100644 --- a/internal/subnet/delete.go +++ b/internal/subnet/delete.go @@ -3,9 +3,9 @@ package subnet import ( "fmt" "os" - "os/exec" "strings" + "git.g3e.fr/syonad/two/internal/ebtables" "git.g3e.fr/syonad/two/internal/netif" "git.g3e.fr/syonad/two/internal/netns" "git.g3e.fr/syonad/two/pkg/db/kv" @@ -33,6 +33,11 @@ func DeleteSubnet(db *badger.DB, subnetName string) error { return fmt.Errorf("get vxlan_id: %w", err) } + gatewayIP, err := kv.GetFromDB(db, "subnet/"+subnetName+"/gateway_ip") + if err != nil { + return fmt.Errorf("get gateway_ip: %w", err) + } + subnetID := strings.SplitN(subnetName, "-", 2)[1] bridge := "br-" + subnetID vxlanIface := "vxlan-" + vxlanIDStr @@ -55,19 +60,12 @@ func DeleteSubnet(db *badger.DB, subnetName string) error { } // suppression des règles ebtables - exec.Command("ebtables", "-D", "FORWARD", - "--out-interface", bridge, - "-p", "arp", - "--arp-op", "Request", - "-j", "DROP").Run() - - exec.Command("ebtables", "-D", "FORWARD", - "--out-interface", bridge, - "-p", "IPv4", - "--ip-protocol", "udp", - "--ip-source-port", "67:68", - "--ip-destination-port", "67:68", - "-j", "DROP").Run() + if err := ebtables.DeleteARPToGateway(bridge, gatewayIP); err != nil { + return fmt.Errorf("delete ebtables arp rule: %w", err) + } + if err := ebtables.DeleteDHCP(bridge); err != nil { + return fmt.Errorf("delete ebtables dhcp rule: %w", err) + } // suppression du bridge dans le netns VPC if err := netns.Call(vpcName, func() error {