From fc62d5a524e50de92270c92ad657900c43366cf1 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 11 Jan 2026 18:37:31 +0100 Subject: [PATCH 01/15] f-14: package: add a new package Signed-off-by: GnomeZworc --- go.mod | 2 ++ go.sum | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/go.mod b/go.mod index 26bd137..7430e72 100644 --- a/go.mod +++ b/go.mod @@ -25,6 +25,8 @@ require ( github.com/spf13/pflag v1.0.10 // indirect github.com/spf13/viper v1.21.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/vishvananda/netlink v1.3.1 // indirect + github.com/vishvananda/netns v0.0.5 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel v1.37.0 // indirect go.opentelemetry.io/otel/metric v1.37.0 // indirect diff --git a/go.sum b/go.sum index 0d19489..73d16f3 100644 --- a/go.sum +++ b/go.sum @@ -39,6 +39,10 @@ github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/vishvananda/netlink v1.3.1 h1:3AEMt62VKqz90r0tmNhog0r/PpWKmrEShJU0wJW6bV0= +github.com/vishvananda/netlink v1.3.1/go.mod h1:ARtKouGSTGchR8aMwmkzC0qiNPrrWO5JS/XMVl45+b4= +github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY= +github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= @@ -51,6 +55,8 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -- 2.49.1 From 15a913643edab26206c4a444691150edb79022ea Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 11 Jan 2026 18:38:02 +0100 Subject: [PATCH 02/15] f-14: code: add a new package internal #14 Signed-off-by: GnomeZworc --- internal/netif/veth.go | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 internal/netif/veth.go diff --git a/internal/netif/veth.go b/internal/netif/veth.go new file mode 100644 index 0000000..0056c60 --- /dev/null +++ b/internal/netif/veth.go @@ -0,0 +1,48 @@ +package netif + +import ( + "fmt" + "runtime" + + "github.com/vishvananda/netlink" + "github.com/vishvananda/netns" +) + +func CreateVethToNetns(rootIf, nsIf, netnsPath string, mtu int) error { + // Obligatoire : netns lié au thread + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + // Ouvrir le netns cible + ns, err := netns.GetFromPath(netnsPath) + if err != nil { + return fmt.Errorf("open netns: %w, %s", err, netnsPath) + } + defer ns.Close() + + // Créer le veth dans le netns courant + veth := &netlink.Veth{ + LinkAttrs: netlink.LinkAttrs{ + Name: rootIf, + MTU: mtu, + }, + PeerName: nsIf, + } + + if err := netlink.LinkAdd(veth); err != nil { + return fmt.Errorf("link add: %w", err) + } + + // Récupérer l'interface peer + peer, err := netlink.LinkByName(nsIf) + if err != nil { + return fmt.Errorf("peer not found: %w", err) + } + + // Déplacer le peer dans le netns cible + if err := netlink.LinkSetNsFd(peer, int(ns)); err != nil { + return fmt.Errorf("set ns: %w", err) + } + + return nil +} -- 2.49.1 From 5a38e09b85dbca1b228e94de0f13671eae26d4ec Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 11 Jan 2026 18:38:59 +0100 Subject: [PATCH 03/15] f-14: bin: add a new binarie for test #14 Signed-off-by: GnomeZworc --- cmd/vpc/main.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 cmd/vpc/main.go diff --git a/cmd/vpc/main.go b/cmd/vpc/main.go new file mode 100644 index 0000000..d18dabd --- /dev/null +++ b/cmd/vpc/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "flag" + "fmt" + "os" + + "git.g3e.fr/syonad/two/internal/netif" +) + +var ( + netns = flag.String("netns", "", "Network namespace à faire") + name = flag.String("name", "", "interface name") + action = flag.String("action", "", "Action a faire") +) + +func main() { + flag.Parse() + + switch *action { + case "create": + err := netif.CreateVethToNetns("veth"+*name+"ext", "veth"+*name+"int", "/var/run/netns/"+*netns, 9000) + if err != nil { + fmt.Println(err) + } + default: + fmt.Printf("Available commande:\n - create\n - delete\n - check\n") + os.Exit(1) + } +} -- 2.49.1 From 9420a9f7b4e881fbeeda3769592391f4ab49dcfc Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Tue, 13 Jan 2026 10:53:43 +0100 Subject: [PATCH 04/15] f-14: code: add create bridge code #14 Signed-off-by: GnomeZworc --- internal/netif/bridge.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 internal/netif/bridge.go diff --git a/internal/netif/bridge.go b/internal/netif/bridge.go new file mode 100644 index 0000000..d6dea70 --- /dev/null +++ b/internal/netif/bridge.go @@ -0,0 +1,38 @@ +package netif + +import ( + "fmt" + "os" + + "github.com/vishvananda/netlink" +) + +func setBridgeSTP(bridge string, enable bool) error { + path := fmt.Sprintf("/sys/class/net/%s/bridge/stp_state", bridge) + + val := "0" + if enable { + val = "1" + } + + return os.WriteFile(path, []byte(val), 0644) +} + +func CreateBridge(name string, mtu int, stp bool) error { + br := &netlink.Bridge{ + LinkAttrs: netlink.LinkAttrs{ + Name: name, + MTU: mtu, + }, + } + + if err := netlink.LinkAdd(br); err != nil { + return err + } + + if err := netlink.LinkSetUp(br); err != nil { + return err + } + + return setBridgeSTP(name, stp) +} -- 2.49.1 From fd4c7e9a3a6133c0f8f547d65a0b5239a3a63ca3 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Thu, 15 Jan 2026 22:54:22 +0100 Subject: [PATCH 05/15] f-14: code: add an up and down ip #14 Signed-off-by: GnomeZworc --- internal/netif/upDown.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 internal/netif/upDown.go diff --git a/internal/netif/upDown.go b/internal/netif/upDown.go new file mode 100644 index 0000000..6d27cc2 --- /dev/null +++ b/internal/netif/upDown.go @@ -0,0 +1,21 @@ +package netif + +import ( + "github.com/vishvananda/netlink" +) + +func LinkSetUp(name string) error { + link, err := netlink.LinkByName(name) + if err != nil { + return err + } + return netlink.LinkSetUp(link) +} + +func LinkSetDown(name string) error { + link, err := netlink.LinkByName(name) + if err != nil { + return err + } + return netlink.LinkSetDown(link) +} -- 2.49.1 From db222b383cd9b4b17e5676e3dd507ccb27a1fe70 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 16 Jan 2026 22:15:23 +0100 Subject: [PATCH 06/15] f-14: code: add delete interface function #14 Signed-off-by: GnomeZworc --- internal/netif/delete.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 internal/netif/delete.go diff --git a/internal/netif/delete.go b/internal/netif/delete.go new file mode 100644 index 0000000..9b06c55 --- /dev/null +++ b/internal/netif/delete.go @@ -0,0 +1,13 @@ +package netif + +import ( + "github.com/vishvananda/netlink" +) + +func DeleteLink(name string) error { + link, err := netlink.LinkByName(name) + if err != nil { + return err + } + return netlink.LinkDel(link) +} -- 2.49.1 From d3b471b24aefe303c98dae259c5e44719e65cf56 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 17 Jan 2026 20:59:05 +0100 Subject: [PATCH 07/15] f-14: code: add set master bridge #14 Signed-off-by: GnomeZworc --- internal/netif/bridge.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/netif/bridge.go b/internal/netif/bridge.go index d6dea70..daf21ec 100644 --- a/internal/netif/bridge.go +++ b/internal/netif/bridge.go @@ -36,3 +36,17 @@ func CreateBridge(name string, mtu int, stp bool) error { return setBridgeSTP(name, stp) } + +func BridgeSetMaster(iface, bridge string) error { + link, err := netlink.LinkByName(iface) + if err != nil { + return err + } + + br, err := netlink.LinkByName(bridge) + if err != nil { + return err + } + + return netlink.LinkSetMaster(link, br) +} -- 2.49.1 From 9fb4d10d270c1ea50a9dc11dabd67d20c90dc374 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 18 Jan 2026 22:28:38 +0100 Subject: [PATCH 08/15] f-14: code: add create and delete vpc #14 Signed-off-by: GnomeZworc --- internal/vpc/create.go | 60 ++++++++++++++++++++++++++++++++++++++++++ internal/vpc/delete.go | 18 +++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 internal/vpc/create.go create mode 100644 internal/vpc/delete.go diff --git a/internal/vpc/create.go b/internal/vpc/create.go new file mode 100644 index 0000000..55896ba --- /dev/null +++ b/internal/vpc/create.go @@ -0,0 +1,60 @@ +package vpc + +import ( + "git.g3e.fr/syonad/two/internal/netif" + "git.g3e.fr/syonad/two/internal/netns" +) + +func CreateVPC(name string) error { + // missing + // search data in db + // change state in db + + // create netns + if err := netns.Create(name); err != nil { + return err + } + + // create veth public for this netns + if err := netif.CreateVethToNetns(name+"-ext", "veth-"+name+"-int", "/var/run/netns/"+name, 9000); err != nil { + return err + } + + // create public bridge in netns + if err := netns.Call(name, func() error { + return netif.CreateBridge("br-public", 1500, false) + }); err != nil { + return err + } + + // set veth to ext public bridge + if err := netif.BridgeSetMaster(name+"-ext", "br-public"); err != nil { + return err + } + + // set veth to int public bridge + if err := netns.Call(name, func() error { + return netif.BridgeSetMaster("veth-"+name+"-int", "br-public") + }); err != nil { + return err + } + + // set set ext veth up + if err := netif.LinkSetUp(name + "-ext"); err != nil { + return nil + } + // set set int veth up + if err := netns.Call(name, func() error { + return netif.LinkSetUp("veth-" + name + "-int") + }); err != nil { + return err + } + // set set int bridge up + if err := netns.Call(name, func() error { + return netif.LinkSetUp("br-public") + }); err != nil { + return err + } + + return nil +} diff --git a/internal/vpc/delete.go b/internal/vpc/delete.go new file mode 100644 index 0000000..3daea61 --- /dev/null +++ b/internal/vpc/delete.go @@ -0,0 +1,18 @@ +package vpc + +import ( + "git.g3e.fr/syonad/two/internal/netif" + "git.g3e.fr/syonad/two/internal/netns" +) + +func DeleteVPC(name string) error { + if err := netif.DeleteLink(name + "-ext"); err != nil { + return err + } + + if err := netns.Delete(name); err != nil { + return err + } + + return nil +} -- 2.49.1 From d050568638e6bd5642a2d3dcb494a9f8984f7a01 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 18 Jan 2026 22:30:38 +0100 Subject: [PATCH 09/15] f-14: bin: update bin #14 Signed-off-by: GnomeZworc --- cmd/vpc/main.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cmd/vpc/main.go b/cmd/vpc/main.go index d18dabd..6d70f79 100644 --- a/cmd/vpc/main.go +++ b/cmd/vpc/main.go @@ -5,7 +5,7 @@ import ( "fmt" "os" - "git.g3e.fr/syonad/two/internal/netif" + "git.g3e.fr/syonad/two/internal/vpc" ) var ( @@ -19,8 +19,11 @@ func main() { switch *action { case "create": - err := netif.CreateVethToNetns("veth"+*name+"ext", "veth"+*name+"int", "/var/run/netns/"+*netns, 9000) - if err != nil { + if err := vpc.CreateVPC(*name); err != nil { + fmt.Println(err) + } + case "delete": + if err := vpc.DeleteVPC(*name); err != nil { fmt.Println(err) } default: -- 2.49.1 From 0b797d1c0c3c2389aa581122a3bed9e1bebd6e6a Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 18 Jan 2026 22:32:21 +0100 Subject: [PATCH 10/15] f-14: bin: remove netns bin #14 Signed-off-by: GnomeZworc --- .forgejo/workflows/prerelease.yml | 1 - cmd/netns/main.go | 40 ------------------------------- 2 files changed, 41 deletions(-) delete mode 100644 cmd/netns/main.go diff --git a/.forgejo/workflows/prerelease.yml b/.forgejo/workflows/prerelease.yml index 42d3a75..ee046e2 100644 --- a/.forgejo/workflows/prerelease.yml +++ b/.forgejo/workflows/prerelease.yml @@ -37,7 +37,6 @@ jobs: - metadata - metacli - agent - - netns uses: ./.forgejo/workflows/build.yml with: tag: ${{ needs.set-release-target.outputs.release_cible }} diff --git a/cmd/netns/main.go b/cmd/netns/main.go deleted file mode 100644 index e1729f7..0000000 --- a/cmd/netns/main.go +++ /dev/null @@ -1,40 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "os" - - "git.g3e.fr/syonad/two/internal/netns" -) - -var ( - netns_name = flag.String("netns", "", "Network namespace à faire") - action = flag.String("action", "", "Action a faire") -) - -func main() { - flag.Parse() - - switch *action { - case "create": - err := netns.Create(*netns_name) - if err != nil { - fmt.Println(err) - } - case "delete": - err := netns.Delete(*netns_name) - if err != nil { - fmt.Println(err) - } - case "check": - if netns.Exist(*netns_name) { - fmt.Printf("netns %s exist\n", *netns_name) - } else { - fmt.Printf("netns %s do not exist\n", *netns_name) - } - default: - fmt.Printf("Available commande:\n - create\n - delete\n - check\n") - os.Exit(1) - } -} -- 2.49.1 From 6f40b3e9219bdc6f1d34a466fae5dd062d35b038 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 18 Jan 2026 22:32:49 +0100 Subject: [PATCH 11/15] f-14: code: add vpc in prerelease bin #14 Signed-off-by: GnomeZworc --- .forgejo/workflows/prerelease.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/prerelease.yml b/.forgejo/workflows/prerelease.yml index ee046e2..f20ca66 100644 --- a/.forgejo/workflows/prerelease.yml +++ b/.forgejo/workflows/prerelease.yml @@ -37,6 +37,7 @@ jobs: - metadata - metacli - agent + - vpc uses: ./.forgejo/workflows/build.yml with: tag: ${{ needs.set-release-target.outputs.release_cible }} -- 2.49.1 From 2ea3c6dd14ba65e99e902747356d608b422ef4e5 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 19 Jan 2026 22:41:39 +0100 Subject: [PATCH 12/15] f-14: fix: rename interface name Signed-off-by: GnomeZworc --- internal/vpc/create.go | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/internal/vpc/create.go b/internal/vpc/create.go index 55896ba..5ff5fa5 100644 --- a/internal/vpc/create.go +++ b/internal/vpc/create.go @@ -16,42 +16,36 @@ func CreateVPC(name string) error { } // create veth public for this netns - if err := netif.CreateVethToNetns(name+"-ext", "veth-"+name+"-int", "/var/run/netns/"+name, 9000); err != nil { + if err := netif.CreateVethToNetns("veth"+name+"ext", "vethpublicint", "/var/run/netns/"+name, 9000); err != nil { return err } // create public bridge in netns if err := netns.Call(name, func() error { - return netif.CreateBridge("br-public", 1500, false) + return netif.CreateBridge("br-public", 1500) }); err != nil { return err } // set veth to ext public bridge - if err := netif.BridgeSetMaster(name+"-ext", "br-public"); err != nil { + if err := netif.BridgeSetMaster("veth"+name+"ext", "br-public"); err != nil { return err } // set veth to int public bridge if err := netns.Call(name, func() error { - return netif.BridgeSetMaster("veth-"+name+"-int", "br-public") + return netif.BridgeSetMaster("vethpublicint", "br-public") }); err != nil { return err } // set set ext veth up - if err := netif.LinkSetUp(name + "-ext"); err != nil { + if err := netif.LinkSetUp("veth" + name + "ext"); err != nil { return nil } // set set int veth up if err := netns.Call(name, func() error { - return netif.LinkSetUp("veth-" + name + "-int") - }); err != nil { - return err - } - // set set int bridge up - if err := netns.Call(name, func() error { - return netif.LinkSetUp("br-public") + return netif.LinkSetUp("vethpublicint") }); err != nil { return err } -- 2.49.1 From 44f01c23735da8c6e97e2f30072bd8ad6fbbd11e Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 19 Jan 2026 22:42:13 +0100 Subject: [PATCH 13/15] f-14: clean: remove not used setBridgeSTP Signed-off-by: GnomeZworc --- internal/netif/bridge.go | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/internal/netif/bridge.go b/internal/netif/bridge.go index daf21ec..a4754a3 100644 --- a/internal/netif/bridge.go +++ b/internal/netif/bridge.go @@ -1,24 +1,10 @@ package netif import ( - "fmt" - "os" - "github.com/vishvananda/netlink" ) -func setBridgeSTP(bridge string, enable bool) error { - path := fmt.Sprintf("/sys/class/net/%s/bridge/stp_state", bridge) - - val := "0" - if enable { - val = "1" - } - - return os.WriteFile(path, []byte(val), 0644) -} - -func CreateBridge(name string, mtu int, stp bool) error { +func CreateBridge(name string, mtu int) error { br := &netlink.Bridge{ LinkAttrs: netlink.LinkAttrs{ Name: name, @@ -34,7 +20,7 @@ func CreateBridge(name string, mtu int, stp bool) error { return err } - return setBridgeSTP(name, stp) + return nil } func BridgeSetMaster(iface, bridge string) error { -- 2.49.1 From f9c1cd7d328f13df2c0574691b0eaae46fba24c4 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 26 Jan 2026 20:10:56 +0100 Subject: [PATCH 14/15] f-14: code: add db usage in vpc creation #14 Signed-off-by: GnomeZworc --- cmd/vpc/main.go | 26 ++++++++++++--- internal/vpc/create.go | 73 +++++++++++++++++++++++------------------- 2 files changed, 62 insertions(+), 37 deletions(-) diff --git a/cmd/vpc/main.go b/cmd/vpc/main.go index 6d70f79..8f98a46 100644 --- a/cmd/vpc/main.go +++ b/cmd/vpc/main.go @@ -5,21 +5,39 @@ import ( "fmt" "os" + configuration "git.g3e.fr/syonad/two/internal/config/agent" "git.g3e.fr/syonad/two/internal/vpc" + "git.g3e.fr/syonad/two/pkg/db/kv" + "github.com/dgraph-io/badger/v4" ) var ( - netns = flag.String("netns", "", "Network namespace à faire") - name = flag.String("name", "", "interface name") - action = flag.String("action", "", "Action a faire") + netns = flag.String("netns", "", "Network namespace à faire") + name = flag.String("name", "", "interface name") + action = flag.String("action", "", "Action a faire") + conf_file = flag.String("conf", "/etc/two/agent.yml", "configuration file") ) +var DB *badger.DB + func main() { flag.Parse() + conf, err := configuration.LoadConfig(*conf_file) + if err != nil { + fmt.Println(err) + return + } + + DB = kv.InitDB(kv.Config{ + Path: conf.Database.Path, + }, false) + defer DB.Close() + switch *action { case "create": - if err := vpc.CreateVPC(*name); err != nil { + kv.AddInDB(DB, "vpc/"+*name+"/state", "creating") + if err := vpc.CreateVPC(DB, *name); err != nil { fmt.Println(err) } case "delete": diff --git a/internal/vpc/create.go b/internal/vpc/create.go index 5ff5fa5..3c3ad87 100644 --- a/internal/vpc/create.go +++ b/internal/vpc/create.go @@ -3,52 +3,59 @@ package vpc import ( "git.g3e.fr/syonad/two/internal/netif" "git.g3e.fr/syonad/two/internal/netns" + "git.g3e.fr/syonad/two/pkg/db/kv" + + "github.com/dgraph-io/badger/v4" ) -func CreateVPC(name string) error { +func CreateVPC(db *badger.DB, name string) error { // missing // search data in db // change state in db // create netns - if err := netns.Create(name); err != nil { + if state, err := kv.GetFromDB(db, "vpc/"+name+"/state"); err != nil { return err - } + } else if state == "creating" { + if err := netns.Create(name); err != nil { + return err + } - // create veth public for this netns - if err := netif.CreateVethToNetns("veth"+name+"ext", "vethpublicint", "/var/run/netns/"+name, 9000); err != nil { - return err - } + // create veth public for this netns + if err := netif.CreateVethToNetns("veth"+name+"ext", "vethpublicint", "/var/run/netns/"+name, 9000); err != nil { + return err + } - // create public bridge in netns - if err := netns.Call(name, func() error { - return netif.CreateBridge("br-public", 1500) - }); err != nil { - return err - } + // create public bridge in netns + if err := netns.Call(name, func() error { + return netif.CreateBridge("br-public", 1500) + }); err != nil { + return err + } - // set veth to ext public bridge - if err := netif.BridgeSetMaster("veth"+name+"ext", "br-public"); err != nil { - return err - } + // set veth to ext public bridge + if err := netif.BridgeSetMaster("veth"+name+"ext", "br-public"); err != nil { + return err + } - // set veth to int public bridge - if err := netns.Call(name, func() error { - return netif.BridgeSetMaster("vethpublicint", "br-public") - }); err != nil { - return err - } + // set veth to int public bridge + if err := netns.Call(name, func() error { + return netif.BridgeSetMaster("vethpublicint", "br-public") + }); err != nil { + return err + } - // set set ext veth up - if err := netif.LinkSetUp("veth" + name + "ext"); err != nil { - return nil + // set set ext veth up + if err := netif.LinkSetUp("veth" + name + "ext"); err != nil { + return nil + } + // set set int veth up + if err := netns.Call(name, func() error { + return netif.LinkSetUp("vethpublicint") + }); err != nil { + return err + } + kv.AddInDB(db, "vpc/"+name+"/state", "created") } - // set set int veth up - if err := netns.Call(name, func() error { - return netif.LinkSetUp("vethpublicint") - }); err != nil { - return err - } - return nil } -- 2.49.1 From 0b9714ce10d5a445b653f39fa2cdd6384ced86c3 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Tue, 27 Jan 2026 22:24:47 +0100 Subject: [PATCH 15/15] f-14: code: add delete operation #14 Signed-off-by: GnomeZworc --- cmd/vpc/main.go | 9 ++++++++- internal/vpc/delete.go | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/cmd/vpc/main.go b/cmd/vpc/main.go index 8f98a46..52d8133 100644 --- a/cmd/vpc/main.go +++ b/cmd/vpc/main.go @@ -41,9 +41,16 @@ func main() { fmt.Println(err) } case "delete": - if err := vpc.DeleteVPC(*name); err != nil { + kv.AddInDB(DB, "vpc/"+*name+"/state", "deleting") + if err := vpc.DeleteVPC(DB, *name); err != nil { fmt.Println(err) } + if state, err := kv.GetFromDB(DB, "vpc/"+*name+"/state"); err != nil { + fmt.Println(err) + os.Exit(1) + } else if state == "deleted" { + kv.DeleteInDB(DB, "vpc/"+*name) + } default: fmt.Printf("Available commande:\n - create\n - delete\n - check\n") os.Exit(1) diff --git a/internal/vpc/delete.go b/internal/vpc/delete.go index 3daea61..a05e807 100644 --- a/internal/vpc/delete.go +++ b/internal/vpc/delete.go @@ -3,15 +3,23 @@ package vpc import ( "git.g3e.fr/syonad/two/internal/netif" "git.g3e.fr/syonad/two/internal/netns" + "git.g3e.fr/syonad/two/pkg/db/kv" + + "github.com/dgraph-io/badger/v4" ) -func DeleteVPC(name string) error { - if err := netif.DeleteLink(name + "-ext"); err != nil { +func DeleteVPC(db *badger.DB, name string) error { + if state, err := kv.GetFromDB(db, "vpc/"+name+"/state"); err != nil { return err - } + } else if state == "deleting" { + if err := netif.DeleteLink(name + "-ext"); err != nil { + return err + } - if err := netns.Delete(name); err != nil { - return err + if err := netns.Delete(name); err != nil { + return err + } + kv.AddInDB(db, "vpc/"+name+"/state", "deleted") } return nil -- 2.49.1