All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Chen <chen.zhang@intel.com>
To: "Jason Wang" <jasowang@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eric Blake" <eblake@redhat.com>
Cc: Zhang Chen <chen.zhang@intel.com>,
	qemu-dev <qemu-devel@nongnu.org>,
	Li Zhijian <lizhijian@cn.fujitsu.com>
Subject: [PATCH for 7.0 V10 1/6] qapi/net: Add IPFlowSpec and QMP command for filter passthrough
Date: Fri, 12 Nov 2021 11:11:07 +0800	[thread overview]
Message-ID: <20211112031112.9303-2-chen.zhang@intel.com> (raw)
In-Reply-To: <20211112031112.9303-1-chen.zhang@intel.com>

Since the real user scenario does not need to monitor all traffic.
Add passthrough-filter-add and passthrough-filter-del to maintain
a network passthrough list in object with network packet processing
function. Add IPFlowSpec struct for all QMP commands.
Most the fields of IPFlowSpec are optional,except object-name.

Signed-off-by: Zhang Chen <chen.zhang@intel.com>
---
 net/net.c     | 10 +++++++
 qapi/net.json | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 83 insertions(+)

diff --git a/net/net.c b/net/net.c
index f0d14dbfc1..5d0d5914fb 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1215,6 +1215,16 @@ void qmp_netdev_del(const char *id, Error **errp)
     }
 }
 
+void qmp_passthrough_filter_add(IPFlowSpec *spec, Error **errp)
+{
+    /* TODO implement setup passthrough rule */
+}
+
+void qmp_passthrough_filter_del(IPFlowSpec *spec, Error **errp)
+{
+    /* TODO implement delete passthrough rule */
+}
+
 static void netfilter_print_info(Monitor *mon, NetFilterState *nf)
 {
     char *str;
diff --git a/qapi/net.json b/qapi/net.json
index 7fab2e7cd8..5194aedcf5 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -7,6 +7,7 @@
 ##
 
 { 'include': 'common.json' }
+{ 'include': 'sockets.json' }
 
 ##
 # @set_link:
@@ -696,3 +697,75 @@
 ##
 { 'event': 'FAILOVER_NEGOTIATED',
   'data': {'device-id': 'str'} }
+
+##
+# @IPFlowSpec:
+#
+# IP flow specification.
+#
+# @protocol: Transport layer protocol like TCP/UDP, etc. This will be
+#            passed to getprotobyname(3).
+#
+# @object-name: The @object-name means a QEMU object with network
+#               packet processing function, for example colo-compare,
+#               filter-redirector, filter-mirror, etc. QOM path to
+#               a QOM object that implements their own passthrough
+#               work in the original data processing flow. What is
+#               exposed to the outside world is an operable
+#               passthrough list.
+#
+# @source: Source address and port.
+#
+# @destination: Destination address and port.
+#
+# Since: 7.0
+##
+{ 'struct': 'IPFlowSpec',
+  'data': { '*protocol': 'str', 'object-name': 'str',
+    '*source': 'InetSocketAddressBase',
+    '*destination': 'InetSocketAddressBase' } }
+
+##
+# @passthrough-filter-add:
+#
+# Add an entry to the QOM object own network passthrough list.
+# Absent protocol, host addresses and ports match anything.
+#
+# Returns: Nothing on success
+#
+# Since: 7.0
+#
+# Example:
+#
+# -> { "execute": "passthrough-filter-add",
+#      "arguments": { "protocol": "tcp", "object-name": "object0",
+#      "source": {"host": "192.168.1.1", "port": "1234"},
+#      "destination": {"host": "192.168.1.2", "port": "4321"} } }
+# <- { "return": {} }
+#
+##
+{ 'command': 'passthrough-filter-add', 'boxed': true,
+     'data': 'IPFlowSpec' }
+
+##
+# @passthrough-filter-del:
+#
+# Delete an entry from the QOM object own network passthrough list.
+# Deletes the entry with exactly this protocol, host addresses
+# and ports.
+#
+# Returns: Nothing on success
+#
+# Since: 7.0
+#
+# Example:
+#
+# -> { "execute": "passthrough-filter-del",
+#      "arguments": { "protocol": "tcp", "object-name": "object0",
+#      "source": {"host": "192.168.1.1", "port": "1234"},
+#      "destination": {"host": "192.168.1.2", "port": "4321"} } }
+# <- { "return": {} }
+#
+##
+{ 'command': 'passthrough-filter-del', 'boxed': true,
+     'data': 'IPFlowSpec' }
-- 
2.25.1



  reply	other threads:[~2021-11-12  3:22 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-12  3:11 [PATCH for 7.0 V10 0/6] Add passthrough support to object with network processing function Zhang Chen
2021-11-12  3:11 ` Zhang Chen [this message]
2021-11-19 15:44   ` [PATCH for 7.0 V10 1/6] qapi/net: Add IPFlowSpec and QMP command for filter passthrough Markus Armbruster
2021-11-12  3:11 ` [PATCH for 7.0 V10 2/6] util/qemu-sockets.c: Add inet_parse_base to handle InetSocketAddressBase Zhang Chen
2021-11-19 15:47   ` Markus Armbruster
2021-11-12  3:11 ` [PATCH for 7.0 V10 3/6] hmp-commands: Add new HMP command for filter passthrough Zhang Chen
2021-11-12  3:11 ` [PATCH for 7.0 V10 4/6] net/colo-compare: Move data structure and define to .h file Zhang Chen
2021-11-12  3:11 ` [PATCH for 7.0 V10 5/6] net/colo-compare: Add passthrough list to CompareState Zhang Chen
2021-11-12  3:11 ` [PATCH for 7.0 V10 6/6] net/net.c: Add handler for passthrough filter command Zhang Chen
2021-11-19 16:02   ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211112031112.9303-2-chen.zhang@intel.com \
    --to=chen.zhang@intel.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=lizhijian@cn.fujitsu.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.