[Qemu-devel] [PATCH] net/filter: Add filter order info for "info network"

Zhang Chen posted 1 patch 6 years, 5 months ago
Test docker-clang@ubuntu passed
Test FreeBSD passed
Test checkpatch passed
Test docker-mingw@fedora passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20190903082229.28609-1-chen.zhang@intel.com
Maintainers: Jason Wang <jasowang@redhat.com>
net/net.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
[Qemu-devel] [PATCH] net/filter: Add filter order info for "info network"
Posted by Zhang Chen 6 years, 5 months ago
From: Zhang Chen <chen.zhang@intel.com>

People need a way to know current filter order if they
want to dynamic add/remove netfilter.

For example:
(qemu) info network
.......
filters order:
 m0 ---> redire0 ---> redire1 ---> End
.......

Signed-off-by: Zhang Chen <chen.zhang@intel.com>
---
 net/net.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/net/net.c b/net/net.c
index 84aa6d8d00..496f4aa049 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1253,15 +1253,23 @@ void print_net_client(Monitor *mon, NetClientState *nc)
                    NetClientDriver_str(nc->info->type),
                    nc->info_str);
     if (!QTAILQ_EMPTY(&nc->filters)) {
-        monitor_printf(mon, "filters:\n");
-    }
-    QTAILQ_FOREACH(nf, &nc->filters, next) {
-        char *path = object_get_canonical_path_component(OBJECT(nf));
+        monitor_printf(mon, "filters order:\n");
+        QTAILQ_FOREACH(nf, &nc->filters, next) {
+            char *path = object_get_canonical_path_component(OBJECT(nf));
+
+            monitor_printf(mon, " %s --->", path);
+        }
+        monitor_printf(mon, " End\n");
+        monitor_printf(mon, "filters detail info:\n");
 
-        monitor_printf(mon, "  - %s: type=%s", path,
-                       object_get_typename(OBJECT(nf)));
-        netfilter_print_info(mon, nf);
-        g_free(path);
+        QTAILQ_FOREACH(nf, &nc->filters, next) {
+            char *path = object_get_canonical_path_component(OBJECT(nf));
+
+            monitor_printf(mon, "  - %s: type=%s", path,
+                           object_get_typename(OBJECT(nf)));
+            netfilter_print_info(mon, nf);
+            g_free(path);
+        }
     }
 }
 
-- 
2.17.GIT