From 0a740f48293efa6162accc385f06def13b15f49b Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Thu, 20 Dec 2012 15:32:03 -0800 Subject: ofproto-dpif: Implement patch ports in userspace. This commit moves responsibility for implementing patch ports from the datapath to ofproto-dpif. There are two main reasons to do this. The first is a matter of design: ofproto-dpif both has more information than the datapath, and is better suited to handle the complexity required to implement patch ports. The second is performance. My setup is a virtual machine with two basic learning bridges connected by patch ports. I used ovs-benchmark to ping the virtual router IP residing outside the VM. Over a 60 second run, "ovs-benchmark rate" improves from 14618.1 to 19311.9 transactions per second, or a 32% improvement. Similarly, "ovs-benchmark latency" improves from 6ms to 4ms. Signed-off-by: Ethan Jackson --- lib/netdev-vport.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/netdev-vport.h') diff --git a/lib/netdev-vport.h b/lib/netdev-vport.h index 31c119870..b372a7448 100644 --- a/lib/netdev-vport.h +++ b/lib/netdev-vport.h @@ -18,9 +18,9 @@ #define NETDEV_VPORT_H 1 #include -#include "openvswitch/types.h" struct dpif_linux_vport; +struct dpif_flow_stats; struct netdev; struct netdev_stats; @@ -30,7 +30,15 @@ const struct ofpbuf *netdev_vport_get_options(const struct netdev *); enum ovs_vport_type netdev_vport_get_vport_type(const struct netdev *); const char *netdev_vport_get_netdev_type(const struct dpif_linux_vport *); +bool netdev_vport_is_patch(const struct netdev *); int netdev_vport_get_stats(const struct netdev *, struct netdev_stats *); +const char *netdev_vport_patch_peer(const struct netdev *netdev); + +void netdev_vport_patch_inc_rx(const struct netdev *, + const struct dpif_flow_stats *); +void netdev_vport_patch_inc_tx(const struct netdev *, + const struct dpif_flow_stats *); + #endif /* netdev-vport.h */ -- cgit v1.2.1