The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7014

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===

From 4775cb0aed7c8551ceb3858e1a0432ea04968a22 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 12 Mar 2020 10:17:24 -0400
Subject: [PATCH 1/3] lxd/firewall/nft: Flush chain on delete
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/firewall/drivers/drivers_nftables.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/firewall/drivers/drivers_nftables.go 
b/lxd/firewall/drivers/drivers_nftables.go
index 3c8a7d5fbe..1a40c6d236 100644
--- a/lxd/firewall/drivers/drivers_nftables.go
+++ b/lxd/firewall/drivers/drivers_nftables.go
@@ -429,7 +429,7 @@ func (d Nftables) removeChains(families []string, 
chainSuffix string, chains ...
        for _, family := range families {
                for _, item := range ruleset {
                        if item.Type == "chain" && item.Family == family && 
item.Table == nftablesNamespace && shared.StringInSlice(item.Name, fullChains) {
-                               _, err = shared.RunCommand("nft", "delete", 
"chain", family, nftablesNamespace, item.Name)
+                               _, err = shared.RunCommand("nft", "flush", 
"chain", family, nftablesNamespace, item.Name, ";", "delete", "chain", family, 
nftablesNamespace, item.Name)
                                if err != nil {
                                        return errors.Wrapf(err, "Failed 
deleting nftables chain %q (%s)", item.Name, family)
                                }

From e3d94b0c656164f56766f1f245d7a8bcad530812 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 12 Mar 2020 10:56:27 -0400
Subject: [PATCH 2/3] lxd/firewall/nft: Handle json errors
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/firewall/drivers/drivers_nftables.go | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lxd/firewall/drivers/drivers_nftables.go 
b/lxd/firewall/drivers/drivers_nftables.go
index 1a40c6d236..a4acc3a9f9 100644
--- a/lxd/firewall/drivers/drivers_nftables.go
+++ b/lxd/firewall/drivers/drivers_nftables.go
@@ -63,7 +63,7 @@ func (d Nftables) Compat() (bool, bool) {
        ruleset, err := d.nftParseRuleset()
        if err != nil {
                logger.Errorf("Firewall nftables unable to parse existing 
ruleset: %v", err)
-               return true, false
+               return false, false
        }
 
        for _, item := range ruleset {
@@ -122,6 +122,11 @@ func (d Nftables) nftParseRuleset() ([]nftGenericItem, 
error) {
                }
        }
 
+       err = cmd.Wait()
+       if err != nil {
+               return nil, err
+       }
+
        return items, nil
 }
 

From 5e74bfa79ef58755f83a93e5678a11a49c25ee6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 12 Mar 2020 10:56:42 -0400
Subject: [PATCH 3/3] lxd/firewall/nft: Refuse to run on old kernels
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/firewall/drivers/drivers_nftables.go | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/lxd/firewall/drivers/drivers_nftables.go 
b/lxd/firewall/drivers/drivers_nftables.go
index a4acc3a9f9..203a4b1410 100644
--- a/lxd/firewall/drivers/drivers_nftables.go
+++ b/lxd/firewall/drivers/drivers_nftables.go
@@ -6,6 +6,7 @@ import (
        "fmt"
        "net"
        "os/exec"
+       "strconv"
        "strings"
        "text/template"
 
@@ -39,8 +40,26 @@ func (d Nftables) String() string {
 
 // Compat returns whether the host is compatible with this driver and whether 
the driver backend is in use.
 func (d Nftables) Compat() (bool, bool) {
+       // Get the kernel version.
+       uname, err := shared.Uname()
+       if err != nil {
+               return false, false
+       }
+
+       // We require a 5.x kernel to avoid weird conflicts with xtables.
+       if len(uname.Release) > 1 {
+               verInt, err := strconv.Atoi(uname.Release[0:1])
+               if err != nil {
+                       return false, false
+               }
+
+               if verInt < 5 {
+                       return false, false
+               }
+       }
+
        // Check if nftables nft command exists, if not use xtables.
-       _, err := exec.LookPath("nft")
+       _, err = exec.LookPath("nft")
        if err != nil {
                return false, false
        }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to