Sorin Vinturis | 28 May 23:00 2015

[PATCH v3 3/5] datapath-windows: Multiple NBLs support for ingress data path

Added support for creating and handling multiple NBLs with only one NB
for ingress data path.

Signed-off-by: Sorin Vinturis <svinturis at>
Reported-by: Alessandro Pilotti <apilotti at>
Acked-by: Nithin Raju <nithin <at>>
v3: Added acked.
 datapath-windows/ovsext/PacketIO.c | 90 +++++++++++++++++++++++++++++---------
 1 file changed, 70 insertions(+), 20 deletions(-)

diff --git a/datapath-windows/ovsext/PacketIO.c b/datapath-windows/ovsext/PacketIO.c
index ed629fd..6847f5f 100644
--- a/datapath-windows/ovsext/PacketIO.c
+++ b/datapath-windows/ovsext/PacketIO.c
 <at>  <at>  -44,6 +44,10  <at>  <at>  extern NDIS_STRING ovsExtFriendlyNameUC;
 static VOID OvsFinalizeCompletionList(OvsCompletionList *completionList);
 static VOID OvsCompleteNBLIngress(POVS_SWITCH_CONTEXT switchContext,
                     PNET_BUFFER_LIST netBufferLists, ULONG sendCompleteFlags);
+static NTSTATUS OvsCreateNewNBLsFromMultipleNBs(
+                    POVS_SWITCH_CONTEXT switchContext,
+                    PNET_BUFFER_LIST *curNbl,
+                    PNET_BUFFER_LIST *nextNbl);

 __inline VOID
 OvsInitCompletionList(OvsCompletionList *completionList,
 <at>  <at>  -237,6 +241,7  <at>  <at>  OvsStartNBLIngress(POVS_SWITCH_CONTEXT switchContext,
         OvsFlowKey key;
(Continue reading)

Russell Bryant | 28 May 22:37 2015

[PATCH ovn] controller: Drop unknown datapath log message.

This patch emits a log message that is encountered a lot under normal
circumstances.  For example, I'm seeing it almost 20,000 times in a
test run of the OpenStack test suite and hundreds of times while doing
basic tasting under ovs-sandbox.

ovn-controller keeps a hash of logical data paths that have ports
associated with them (logical_datapaths).  This message occurs when
looping through all Pipeline entries and a Pipeline's logical datapath
does not exist in this hash.  However, a logical switch with no ports
will have entries in the Pipeline table, but nothing in Bindings (and
not end up in the logical_datapaths hash).  Currently, this message
will be emitted 6 times for every logical switch without any logical
ports every time the ovn-controller main loop comes around and runs
this code.  Instead, the right thing to do to silently ignore the
pipeline entry, because there's nothing useful to be done with it.

Signed-off-by: Russell Bryant <rbryant <at>>
 ovn/controller/pipeline.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/ovn/controller/pipeline.c b/ovn/controller/pipeline.c
index 58412e6..8ee92dc 100644
--- a/ovn/controller/pipeline.c
+++ b/ovn/controller/pipeline.c
 <at>  <at>  -270,10 +270,6  <at>  <at>  pipeline_run(struct controller_ctx *ctx)
         const struct logical_datapath *ldp;
         ldp = ldp_lookup(&pipeline->logical_datapath);
         if (!ldp) {
-            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
(Continue reading)

Sorin Vinturis | 28 May 22:30 2015

[PATCH] datapath-windows: BSOD when disabling the extension

When the filter detach routine is called while there are packets
still in processing, the OvsUninitSwitchContext function call will
decrement the switch context reference count without releasing the
switch context structure. This behaviour is correct and expected,
but the BSOD is caused in this case because the gOvsSwitchContext
variable is set to NULL, which is wrong.

The gOvsSwitchContext global variable must be set to NULL only when
the switch context structure is actually released.

Signed-off-by: Sorin Vinturis <svinturis <at>>
Reported-by: Sorin Vinturis <svinturis <at>>
 datapath-windows/ovsext/Switch.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/datapath-windows/ovsext/Switch.c b/datapath-windows/ovsext/Switch.c
index f877854..99a306d 100644
--- a/datapath-windows/ovsext/Switch.c
+++ b/datapath-windows/ovsext/Switch.c
 <at>  <at>  -201,6 +201,7  <at>  <at>  OvsCreateSwitch(NDIS_HANDLE ndisFilterHandle,
     status = OvsInitSwitchContext(switchContext);
     if (status != NDIS_STATUS_SUCCESS) {
         OvsFreeMemoryWithTag(switchContext, OVS_SWITCH_POOL_TAG);
+        switchContext = NULL;
         goto create_switch_done;

 <at>  <at>  -240,7 +241,6  <at>  <at>  OvsExtDetach(NDIS_HANDLE filterModuleContext)
(Continue reading)

Daniele Di Proietto | 28 May 15:19 2015

[PATCH] dpif-netdev: Fix non-pmd thread queue id.

Non pmd threads have a core_id == UINT32_MAX, while queue ids used by
netdevs range from 0 to the number of CPUs.  Therefore core ids cannot
be used directly to select a queue.

This commit introduces a simple mapping to fix the problem: non pmd
threads use queue 0, pmd threads on core 0 to N use queues 1 to N+1

Fixes: d5c199ea7ff7 ("netdev-dpdk: Properly support non pmd threads.")

Reported-by: 차은호 <eunho.cha <at>
Signed-off-by: Daniele Di Proietto <diproiettod <at>>
 lib/dpif-netdev.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 76d1003..de700f7 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
 <at>  <at>  -1068,7 +1068,7  <at>  <at>  do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
         /* There can only be ovs_numa_get_n_cores() pmd threads,
          * so creates a txq for each. */
-        error = netdev_set_multiq(netdev, n_cores, dp->n_dpdk_rxqs);
+        error = netdev_set_multiq(netdev, n_cores + 1, dp->n_dpdk_rxqs);
         if (error && (error != EOPNOTSUPP)) {
             VLOG_ERR("%s, cannot set multiq", devname);
             return errno;
 <at>  <at>  -2402,7 +2402,8  <at>  <at>  dpif_netdev_pmd_set(struct dpif *dpif, unsigned int n_rxqs, const char *cmask)
(Continue reading)

Lewis Kelly | 28 May 11:53 2015

hungry for a f&ck friend

Send me a F#ckFriends request so we can hook up

My usename is HorNyChik77

my profile is here CANT WAIT

dev mailing list
dev <at>
Zang MingJie | 28 May 06:07 2015

[PATCH] bash_completion shouldn't modify user environment

Signed-off-by: Zang MingJie <zealot0630 <at>>
 utilities/ovs-appctl-bashcomp.bash | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/utilities/ovs-appctl-bashcomp.bash b/utilities/ovs-appctl-bashcomp.bash
index 67a268e..f7fb830 100755
--- a/utilities/ovs-appctl-bashcomp.bash
+++ b/utilities/ovs-appctl-bashcomp.bash
 <at>  <at>  -598,9 +598,6  <at>  <at>  _ovs_command_complete() {
   return 0

-# Needed for the sorting of completions in display.
-export LC_ALL=C
 # Debug mode.
 if [ "$1" = "debug" ]; then
 <at>  <at>  -624,4 +621,4  <at>  <at>  else
     complete -F _ovs_command_complete ovs-ofctl
     complete -F _ovs_command_complete ovs-dpctl
     complete -F _ovs_command_complete ovsdb-tool
\ No newline at end of file


(Continue reading)

Russell Bryant | 27 May 21:59 2015

[PATCH ovn] controller: Fix crash on binding with no chassis.

The current code crashes when it encounters a binding that does not
yet have a chassis set.  This patch restores the intended behavior of
ignoring it in that case.

Signed-off-by: Russell Bryant <rbryant <at>>
 ovn/controller/physical.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
index dc2fcee..dce0c2f 100644
--- a/ovn/controller/physical.c
+++ b/ovn/controller/physical.c
 <at>  <at>  -115,6 +115,9  <at>  <at>  physical_run(struct controller_ctx *ctx)

         bool local = ofport != 0;
         if (!local) {
+            if (!binding->chassis) {
+                continue;
+            }
             ofport = u16_to_ofp(simap_get(&chassis_to_ofport,
             if (!ofport) {


dev mailing list
dev <at>
(Continue reading)

Joe Stringer | 27 May 20:19 2015

[PATCH] ofp-actions: Improve conjunction error message.

Signed-off-by: Joe Stringer <joestringer <at>>
 lib/ofp-actions.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
index 2240b86..e18229d 100644
--- a/lib/ofp-actions.c
+++ b/lib/ofp-actions.c
 <at>  <at>  -5721,8 +5721,9  <at>  <at>  ofpacts_verify(const struct ofpact ofpacts[], size_t ofpacts_len,
         if (a->type == OFPACT_CONJUNCTION) {
             OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
                 if (a->type != OFPACT_CONJUNCTION) {
-                    VLOG_WARN("when %s action is present, it must be the only "
-                              "kind of action used", ofpact_name(a->type));
+                    VLOG_WARN("when conjunction action is present, it must be "
+                              "the only kind of action used (saw '%s' action)",
+                              ofpact_name(a->type));
                     return OFPERR_NXBAC_BAD_CONJUNCTION;


dev mailing list
dev <at>
Jesse Gross | 27 May 19:48 2015

[PATCH 1/4] odp-util: Correctly generate wildcards when formating nested attributes.

When formatting netlink attributes if no mask is present a wildcarded
attribute is synthesized for the purposes of later processing. In
the case of nested attributes this must be done recursively, filling
in the correct attributes at each level rather than just generating
a set of zeros of the correct size. This is done already but it
always uses the attribute type for the top level keys - this corresponds
to nested ENCAP attributes. However, we have several levels of potentially
nested attributes for tunnels that each have their own types.

This uses an approach similar to the kernel where we have sets of
tables for the type of each attribute linked together by pointers.
This allows the mask generation function to automatically traverse
the nested attributes and always get the right types.

Signed-off-by: Jesse Gross <jesse <at>>
 lib/odp-util.c | 151 ++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 86 insertions(+), 65 deletions(-)

diff --git a/lib/odp-util.c b/lib/odp-util.c
index 4845d28..09a1ff2 100644
--- a/lib/odp-util.c
+++ b/lib/odp-util.c
 <at>  <at>  -1208,45 +1208,73  <at>  <at>  odp_actions_from_string(const char *s, const struct simap *port_names,
     return 0;
+struct attr_len_tbl {
+    int len;
(Continue reading)

Sorin Vinturis | 27 May 19:08 2015

[PATCH v2] datapath-windows: Removed memory barrier and master lock

There is no need to enforce Netlink serialization on transactions
sent from userspace. The access to the driver's shared resources
is synchronized anyway. Thus I have removed the master lock.

I also removed the memory barrier from filter dispatch routine. A
memory barrier is already in place in OvsReleaseSwitchContext
function, due to the use of InterlockedCompareExchange function.

Signed-off-by: Sorin Vinturis <svinturis <at>>
Acked-by: Eitan Eliahu <eliahue <at>>
v2: Added acked.
 datapath-windows/ovsext/Datapath.c |  9 ---------
 datapath-windows/ovsext/Datapath.h | 14 --------------
 2 files changed, 23 deletions(-)

diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c
index 7646f0a..e8aaf88 100644
--- a/datapath-windows/ovsext/Datapath.c
+++ b/datapath-windows/ovsext/Datapath.c
 <at>  <at>  -727,12 +727,6  <at>  <at>  OvsDeviceControl(PDEVICE_OBJECT deviceObject,
         goto exit;

-    /* Concurrent netlink operations are not supported. */
-    if (InterlockedCompareExchange((LONG volatile *)&instance->inUse, 1, 0)) {
-        status = STATUS_RESOURCE_IN_USE;
-        goto done;
-    }
(Continue reading)

Sorin Vinturis | 27 May 18:58 2015

[PATCH v9 0/3] datapath-windows: Multiple VXLAN tunnel support

This patch series adds support for custom VXLAN tunnel port and for multiple VXLAN tunnels.

Sorin Vinturis (3):
  [PATCH v9 1/3] datapath-windows: Support for custom VXLAN tunnel port
  [PATCH v9 2/3] datapath-windows: Support for multiple VXLAN tunnels
  [PATCH v9 3/3] datapath-Windows: document OVS tunnel filter callout
dev mailing list
dev <at>