[ovs-dev] make m2rollouicietyo; ./believe.sn YROTHR levietriwellyyjn.onion.pet FAUSTEIN .... A THREE HOUR TOUR .... AL TRE AUR TIR

2019-05-28 Thread Root User
make m2rollouicietyo;./believe.sn 

A THREE HOUR TOUR  AL TRE AUR TIR 

wget http://prescott.gq/lists/lt.php?id=YUgFBw5TVk9QV1MdU1IFVFcBVw orcaz
SITORY "we see it yo..." >> n ... as
"you || cityo"



VAROIT KASISNETANYADESH

אבל: יִתְגַּדַּל וְיִתְקַדַּשׁ שְׁמֵהּ
רַבָּא. [קהל: אמן]

בְּעָלְמָא דִּי בְרָא כִרְעוּתֵהּ
וְיַמְלִיךְ מַלְכוּתֵהּ בְּחַיֵּיכון
וּבְיומֵיכון וּבְחַיֵּי דְכָל בֵּית
יִשרָאֵל בַּעֲגָלָא וּבִזְמַן קָרִיב,
וְאִמְרוּ אָמֵן: [קהל: אמן]

קהל ואבל: יְהֵא שְׁמֵהּ רַבָּא מְבָרַךְ
לְעָלַם וּלְעָלְמֵי עָלְמַיָּא:

אבל: יִתְבָּרַךְ וְיִשְׁתַּבַּח
וְיִתְפָּאַר וְיִתְרומַם וְיִתְנַשּא
וְיִתְהַדָּר וְיִתְעַלֶּה וְיִתְהַלָּל
שְׁמֵהּ דְּקֻדְשָׁא. בְּרִיךְ הוּא. [קהל:
בריך הוא:]

לְעֵלָּא מִן כָּל בִּרְכָתָא בעשי”ת:
לְעֵלָּא לְעֵלָּא מִכָּל וְשִׁירָתָא
תֻּשְׁבְּחָתָא וְנֶחֱמָתָא דַּאֲמִירָן
בְּעָלְמָא. וְאִמְרוּ אָמֵן: [קהל: אמן]

יְהֵא שְׁלָמָא רַבָּא מִן שְׁמַיָּא
וְחַיִּים עָלֵינוּ וְעַל כָּל יִשרָאֵל.
וְאִמְרוּ אָמֵן: [קהל:אמן]

עושה שָׁלום בעשי”ת: הַשָּׁלום
בִּמְרומָיו הוּא יַעֲשה שָׁלום עָלֵינוּ
וְעַל כָּל יִשרָאֵל וְאִמְרוּ אָמֵן:
[קהל: אמן]



ONO? SO BE IT.

When I grew up and fell inz love

I asked my swethiart, what lies ahead

Will we have rainbows

Day after day

Here's what my setheart said



Que será, será

Whatever will be, will be

The future's not ours to see

Que será, será

What will be, we'll be



Die Arbeiter von Wien - Wikipedia


Wie auch die Lüge uns schmähend umkreist,

alles besiegend erhebt sich der Geist.

Kerker und Eisen zerbricht seine Macht,

wenn wir uns rüsten zur letzten Schlacht.

So flieg, du flammende, du rote Fahne,

voran dem Wege, den wir ziehn.

Wir sind der Zukunft getreue Kämpfer,

wir sind die Arbeiter von Wien.



As the lie also orbits us,

the spirit rises, defeating everything.

Dungeon and iron breaks his power,

when we prepare for the last battle.



So fly, you flaming, you red flag,

ahead of the way we go.

We are faithful fighters for the future,

we are the Arbiters of the Geneva Co(n)vent.



levietriwellyyjn.onion.pet



UATZ'D EDAKARI ATZAII TAR E FLEX I C N O







FINAL WINTER SINAMUS W/XOFNOX





subscription options


contact adam





-- powered by the viewers and listeners like you and the  ... and also
post-traumatic angst  --


___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH RFC] netdev-dpdk: add af_xdp support.

2019-05-28 Thread William Tu
The patch adds support for using DPDK's AF_XDP PMD.
Base on DPDK 19.08-rc0:
  commit c6a53a6bcd0ae52afe0a6d58b059af577c9408b3
  Author: Thomas Monjalon 
  Date:   Tue May 14 18:04:37 2019 +0200

  version: 19.08-rc0

An AF_XDP PMD can be created by:

  $ ovs-vsctl add-port br0 afxdp-p0 -- set int afxdp-p0 type=dpdk \
   options:dpdk-devargs=net_af_xdp,iface=enp2s0,queue=0

  $ ovs-vsctl show
  Port "afxdp-p0"
Interface "afxdp-p0"
  type: dpdk
  options: {dpdk-devargs="net_af_xdp,iface=enp2s0,queue=0"}

The performance of physical device loopback shows around 7Mpps with 64B pkt.

  $ ovs-ofctl add-flow br0 "in_port=afxdp-p0, \
   
actions=set_field:14->in_port,set_field:a0:36:9f:33:b1:40->dl_src,afxdp-p0"

Note: I have to set e_RTE_METER_GREEN to 0 to pass compile.

Signed-off-by: William Tu 
---
 lib/netdev-dpdk.c | 38 --
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 47153dc60148..99697bc896ca 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -380,6 +380,8 @@ struct netdev_dpdk {
 
 /* If true, device was attached by rte_eth_dev_attach(). */
 bool attached;
+/* If true, device was hop plugged by rte_eal_hotplug_add(). */
+bool hotplugged;
 /* If true, rte_eth_dev_start() was successfully called */
 bool started;
 struct eth_addr hwaddr;
@@ -1376,6 +1378,14 @@ netdev_dpdk_destruct(struct netdev *netdev)
 rte_eth_dev_stop(dev->port_id);
 dev->started = false;
 
+if (dev->hotplugged) {
+int ret;
+ret = rte_eal_hotplug_remove("vdev", "net_af_xdp");
+if (ret) {
+VLOG_ERR("%s unplugged error %d", __func__, ret);
+}
+}
+
 if (dev->attached) {
 /* Retrieve eth device data before closing it.
  * FIXME: avoid direct access to DPDK internal array rte_eth_devices.
@@ -1648,6 +1658,26 @@ netdev_dpdk_lookup_by_port_id(dpdk_port_t port_id)
 }
 
 static dpdk_port_t
+netdev_dpdk_get_af_xdp_port(const char *vdev_args)
+{
+const char vdev_name[] = "net_af_xdp";
+dpdk_port_t port_id;
+
+if (rte_eal_hotplug_add("vdev", vdev_name, vdev_args) < 0) {
+VLOG_WARN("Cannot hotplug AF_XDP device: %s\n", vdev_args);
+return DPDK_ETH_PORT_ID_INVALID;
+}
+
+if (rte_eth_dev_get_port_by_name(vdev_name, _id) != 0) {
+rte_eal_hotplug_remove("vdev", vdev_name);
+VLOG_WARN("Cannot get AF_XDP port_id, device: %s\n", vdev_args);
+return DPDK_ETH_PORT_ID_INVALID;
+}
+
+return port_id;
+}
+
+static dpdk_port_t
 netdev_dpdk_get_port_by_mac(const char *mac_str)
 {
 dpdk_port_t port_id;
@@ -1705,7 +1735,11 @@ netdev_dpdk_process_devargs(struct netdev_dpdk *dev,
 {
 dpdk_port_t new_port_id;
 
-if (strncmp(devargs, "class=eth,mac=", 14) == 0) {
+if (strncmp(devargs, "net_af_xdp", 10) == 0) {
+new_port_id = netdev_dpdk_get_af_xdp_port([11]);
+dev->hotplugged = true;
+VLOG_INFO("Device '%s' hotplugged to DPDK", devargs);
+} else if (strncmp(devargs, "class=eth,mac=", 14) == 0) {
 new_port_id = netdev_dpdk_get_port_by_mac([14]);
 } else {
 new_port_id = netdev_dpdk_get_port_by_devargs(devargs);
@@ -2031,7 +2065,7 @@ netdev_dpdk_policer_pkt_handle(struct rte_meter_srtcm 
*meter,
 uint32_t pkt_len = rte_pktmbuf_pkt_len(pkt) - sizeof(struct ether_hdr);
 
 return rte_meter_srtcm_color_blind_check(meter, profile, time, pkt_len) ==
- e_RTE_METER_GREEN;
+ 0; /* e_RTE_METER_GREEN */
 }
 
 static int
-- 
2.7.4

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [patch v1] tests: Include ovn-macros for system testsuites.

2019-05-28 Thread Aaron Conole
Darrell Ball  writes:

> On Sat, May 25, 2019 at 2:19 PM 0-day Robot  wrote:
>
>  Bleep bloop.  Greetings Darrell Ball, I am a robot and I have tried out your 
> patch.
>  Thanks for your contribution.
>
>  I encountered some error that I wasn't expecting.  See the details below.
>
>  build:
>sysconfdir='/usr/local/etc' \
>bindir='/usr/local/bin' \
>sbindir='/usr/local/sbin'
>  mv northd/ovn-northd.8.tmp northd/ovn-northd.8
>  printf '\043 Generated automatically -- do not modify!-*- 
> buffer-read-only: t -*-\n' > version.py.tmp && \
>  echo 'VERSION = "2.11.90"' >> version.py.tmp && \
>  if cmp -s version.py.tmp python/ovs/version.py; then touch 
> python/ovs/version.py; rm version.py.tmp; else
>  mv version.py.tmp python/ovs/version.py; fi
>  :;{ \
>echo '# Signature of the current package.' && \
>echo 'm4_define([AT_PACKAGE_NAME],  [openvswitch])' && \
>echo 'm4_define([AT_PACKAGE_TARNAME],   [openvswitch])' && \
>echo 'm4_define([AT_PACKAGE_VERSION],   [2.11.90])' && \
>echo 'm4_define([AT_PACKAGE_STRING],[openvswitch 2.11.90])' && \
>echo 'm4_define([AT_PACKAGE_BUGREPORT], [b...@openvswitch.org])'; \
>  } >'./package.m4'
>  /bin/sh 
> /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN/build-aux/missing 
> autom4te
>  --language=autotest -I '.' -o tests/testsuite.tmp tests/testsuite.at
>  mv tests/testsuite.tmp tests/testsuite
>  /bin/sh 
> /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN/build-aux/missing 
> autom4te
>  --language=autotest -I '.' -o tests/system-kmod-testsuite.tmp 
> tests/system-kmod-testsuite.at
>  /usr/bin/m4:tests/system-kmod-testsuite.at:22: cannot open 
> `tests/ovn-macros.at': No such file or
>  directory
>  autom4te: /usr/bin/m4 failed with exit status: 1
>  make[2]: *** [tests/system-kmod-testsuite] Error 1
>  make[2]: Leaving directory 
> `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN'
>  make[1]: *** [all-recursive] Error 1
>  make[1]: Leaving directory 
> `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN'
>  make: *** [all] Error 2
>
> I did not find issues in any testing, so not sure why the bot is failing.

This happened because the bot had an invalid regex for detecting OVN
patches.  I think I've fixed it now.  Sorry for the noise.

>  
>  Please check this out.  If you feel there has been an error, please email 
> acon...@bytheb.org
>
>  Thanks,
>  0-day Robot
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCHv10] netdev-afxdp: add new netdev type for AF_XDP.

2019-05-28 Thread William Tu
The patch introduces experimental AF_XDP support for OVS netdev.
AF_XDP, the Address Family of the eXpress Data Path, is a new Linux socket
type built upon the eBPF and XDP technology.  It is aims to have comparable
performance to DPDK but cooperate better with existing kernel's networking
stack.  An AF_XDP socket receives and sends packets from an eBPF/XDP program
attached to the netdev, by-passing a couple of Linux kernel's subsystems
As a result, AF_XDP socket shows much better performance than AF_PACKET
For more details about AF_XDP, please see linux kernel's
Documentation/networking/af_xdp.rst. Note that by default, this feature is
not compiled in.

Signed-off-by: William Tu 
---
v1->v2:
- add a list to maintain unused umem elements
- remove copy from rx umem to ovs internal buffer
- use hugetlb to reduce misses (not much difference)
- use pmd mode netdev in OVS (huge performance improve)
- remove malloc dp_packet, instead put dp_packet in umem

v2->v3:
- rebase on the OVS master, 7ab4b0653784
  ("configure: Check for more specific function to pull in pthread library.")
- remove the dependency on libbpf and dpif-bpf.
  instead, use the built-in XDP_ATTACH feature.
- data structure optimizations for better performance, see[1]
- more test cases support
v3: https://mail.openvswitch.org/pipermail/ovs-dev/2018-November/354179.html

v3->v4:
- Use AF_XDP API provided by libbpf
- Remove the dependency on XDP_ATTACH kernel patch set
- Add documentation, bpf.rst

v4->v5:
- rebase to master
- remove rfc, squash all into a single patch
- add --enable-afxdp, so by default, AF_XDP is not compiled
- add options: xdpmode=drv,skb
- add multiple queue and multiple PMD support, with options: n_rxq
- improve documentation, rename bpf.rst to af_xdp.rst

v5->v6
- rebase to master, commit 0cdd5b13de91b98
- address errors from sparse and clang
- pass travis-ci test
- address feedback from Ben
- fix issues reported by 0-day robot
- improved documentation

v6-v7
- rebase to master, commit abf11558c1515bf3b1
- address feedbacks from Ilya, Ben, and Eelco, see:
  https://www.mail-archive.com/ovs-dev@openvswitch.org/msg32357.html
- add XDP mode change, implement get/set_config, reconfigure
- Fix reconfiguration/crash issue caused by libbpf, see patch:
  [PATCH bpf 0/2] libbpf: fixes for AF_XDP teardown
- perf optimization for batching umem_push/pop
- perf optimization for batching kick_tx
- test build with dpdk
- fix/refactor atomic operation
- make AF_XDP x86 specific, otherwise fail at build time
- lots of code refactoring
- add PVP setup in documentation

v7-v8:
- Address feedback from Ilya at:
  https://patchwork.ozlabs.org/patch/1095019/
- add netdev-linux-private.h
- fix afxdp reconfigure issue
- sort include headers
- remove unnecessary OVS_UNUSED
- coding style fixes
- error case handling and memory leak

v8-v9:
- rebase to master 180bbbed3a3867d52
- Address review feedback from Ben, Ilya and Eelco, at:
  https://patchwork.ozlabs.org/patch/1097740/
- == From Ilya ==
- Optimize the reconfiguration logic
- Implement .rxq_recv and .send for afxdp
- Remove system-afxdp-traffic.at, reuse existing code
- Use Ilya's rdtsc code
- remove --disable-system
- == From Eelco ==
- Fix bug when remove br0, util(revalidator49)|EMER|lib/poll-loop.c:111:
  assertion !fd != !wevent failed
- Fix bug and use default value from libbpf, ex: XSK_RING_PROD__DEFAULT...
- Clear xdp program when receive signal, ctrl+c
- Add options to vswitch.xml, set xdpmode default to skb-mode
- No support for ARM and PPC, now x86_64 only
- remove redundant header includes and function/macro definitions
- remove some ifdef HAVE_AF_XDP
- == From others/both about afxdp rx and tx ==
- Several umem push/pop error handling improvement/fixes
- add lock to address concurrent_txq case
- improve error handling
- add stats
- Things that are not done yet
- MTU limitation
- n_txq_desc/n_rxq_desc option.

v9-v10
- remove x86_64 limitation, suggested by Ben and Eelco
- add xmalloc_pagealign, free_pagealign
- minor refector
---
 Documentation/automake.mk |   1 +
 Documentation/index.rst   |   1 +
 Documentation/intro/install/afxdp.rst | 433 +
 Documentation/intro/install/index.rst |   1 +
 acinclude.m4  |  35 ++
 configure.ac  |   1 +
 lib/automake.mk   |  14 +
 lib/dp-packet.c   |  28 ++
 lib/dp-packet.h   |  18 +-
 lib/dpif-netdev-perf.h|  28 ++
 lib/netdev-afxdp.c| 850 ++
 lib/netdev-afxdp.h|  74 +++
 lib/netdev-linux-private.h| 139 ++
 lib/netdev-linux.c| 121 ++---
 lib/netdev-provider.h |   3 +
 lib/netdev.c  |  11 +
 lib/spinlock.h|  70 +++
 lib/util.c|  43 ++
 lib/util.h|   5 +
 

Re: [ovs-dev] [patch v1] tests: Include ovn-macros for system testsuites.

2019-05-28 Thread Darrell Ball
On Sat, May 25, 2019 at 2:19 PM 0-day Robot  wrote:

> Bleep bloop.  Greetings Darrell Ball, I am a robot and I have tried out
> your patch.
> Thanks for your contribution.
>
> I encountered some error that I wasn't expecting.  See the details below.
>
>
> build:
>   sysconfdir='/usr/local/etc' \
>   bindir='/usr/local/bin' \
>   sbindir='/usr/local/sbin'
> mv northd/ovn-northd.8.tmp northd/ovn-northd.8
> printf '\043 Generated automatically -- do not modify!-*-
> buffer-read-only: t -*-\n' > version.py.tmp && \
> echo 'VERSION = "2.11.90"' >> version.py.tmp && \
> if cmp -s version.py.tmp python/ovs/version.py; then touch
> python/ovs/version.py; rm version.py.tmp; else mv version.py.tmp
> python/ovs/version.py; fi
> :;{ \
>   echo '# Signature of the current package.' && \
>   echo 'm4_define([AT_PACKAGE_NAME],  [openvswitch])' && \
>   echo 'm4_define([AT_PACKAGE_TARNAME],   [openvswitch])' && \
>   echo 'm4_define([AT_PACKAGE_VERSION],   [2.11.90])' && \
>   echo 'm4_define([AT_PACKAGE_STRING],[openvswitch 2.11.90])' && \
>   echo 'm4_define([AT_PACKAGE_BUGREPORT], [b...@openvswitch.org])'; \
> } >'./package.m4'
> /bin/sh
> /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN/build-aux/missing
> autom4te --language=autotest -I '.' -o tests/testsuite.tmp tests/
> testsuite.at
> mv tests/testsuite.tmp tests/testsuite
> /bin/sh
> /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN/build-aux/missing
> autom4te --language=autotest -I '.' -o tests/system-kmod-testsuite.tmp
> tests/system-kmod-testsuite.at
> /usr/bin/m4:tests/system-kmod-testsuite.at:22: cannot open `tests/
> ovn-macros.at': No such file or directory
> autom4te: /usr/bin/m4 failed with exit status: 1
> make[2]: *** [tests/system-kmod-testsuite] Error 1
> make[2]: Leaving directory
> `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN'
> make[1]: *** [all-recursive] Error 1
> make[1]: Leaving directory
> `/var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN'
> make: *** [all] Error 2
>
>
>
I did not find issues in any testing, so not sure why the bot is failing.




> Please check this out.  If you feel there has been an error, please email
> acon...@bytheb.org
>
> Thanks,
> 0-day Robot
>
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [patch v2 3/3] conntrack: Add 'conn_lookup()' api.

2019-05-28 Thread Darrell Ball
The new api incorporates the hash calculation which can be a
distraction.

Signed-off-by: Darrell Ball 
---

v2: Newly introduced patch.

 lib/conntrack.c | 49 +++--
 1 file changed, 23 insertions(+), 26 deletions(-)

diff --git a/lib/conntrack.c b/lib/conntrack.c
index e9d6720..67c3a58 100644
--- a/lib/conntrack.c
+++ b/lib/conntrack.c
@@ -428,6 +428,14 @@ conn_key_lookup(struct conntrack *ct, const struct 
conn_key *key,
 return found;
 }
 
+static bool
+conn_lookup(struct conntrack *ct, const struct conn_key *key,
+long long now, struct conn **conn_out, bool *reply)
+{
+uint32_t hash = conn_key_hash(key, ct->hash_basis);
+return conn_key_lookup(ct, key, hash, now, conn_out, reply);
+}
+
 static void
 write_ct_md(struct dp_packet *pkt, uint16_t zone, const struct conn *conn,
 const struct conn_key *key, const struct alg_exp_node *alg_exp)
@@ -784,10 +792,8 @@ conn_seq_skew_set(struct conntrack *ct, const struct conn 
*conn_in,
 OVS_NO_THREAD_SAFETY_ANALYSIS
 {
 struct conn *conn;
-bool reply;
-uint32_t hash = conn_key_hash(_in->key, ct->hash_basis);
 ovs_mutex_unlock(_in->lock);
-conn_key_lookup(ct, _in->key, hash, now, , );
+conn_lookup(ct, _in->key, now, , NULL);
 ovs_mutex_lock(_in->lock);
 
 if (conn && seq_skew) {
@@ -956,8 +962,7 @@ conn_update_state(struct conntrack *ct, struct dp_packet 
*pkt,
 break;
 case CT_UPDATE_NEW:
 ovs_mutex_lock(>ct_lock);
-uint32_t hash = conn_key_hash(>key, ct->hash_basis);
-if (conn_key_lookup(ct, >key, hash, now, NULL, NULL)) {
+if (conn_lookup(ct, >key, now, NULL, NULL)) {
 conn_clean(ct, conn);
 }
 ovs_mutex_unlock(>ct_lock);
@@ -1042,9 +1047,7 @@ check_orig_tuple(struct conntrack *ct, struct dp_packet 
*pkt,
 
 key.dl_type = ctx_in->key.dl_type;
 key.zone = pkt->md.ct_zone;
-uint32_t hash = conn_key_hash(, ct->hash_basis);
-bool reply;
-conn_key_lookup(ct, , hash, now, conn, );
+conn_lookup(ct, , now, conn, NULL);
 return *conn ? true : false;
 }
 
@@ -1092,13 +1095,11 @@ process_one(struct conntrack *ct, struct dp_packet *pkt,
 bool create_new_conn = false;
 conn_key_lookup(ct, >key, ctx->hash, now, >conn, >reply);
 struct conn *conn = ctx->conn;
-uint32_t hash;
 
 /* Delete found entry if in wrong direction. 'force' implies commit. */
 if (OVS_UNLIKELY(force && ctx->reply && conn)) {
 ovs_mutex_lock(>ct_lock);
-hash = conn_key_hash(>key, ct->hash_basis);
-if (conn_key_lookup(ct, >key, hash, now, NULL, NULL)) {
+if (conn_lookup(ct, >key, now, NULL, NULL)) {
 conn_clean(ct, conn);
 }
 ovs_mutex_unlock(>ct_lock);
@@ -1110,7 +,7 @@ process_one(struct conntrack *ct, struct dp_packet *pkt,
 
 ctx->reply = true;
 struct conn *rev_conn = conn;  /* Save for debugging. */
-hash = conn_key_hash(>rev_key, ct->hash_basis);
+uint32_t hash = conn_key_hash(>rev_key, ct->hash_basis);
 conn_key_lookup(ct, >key, hash, now, , >reply);
 
 if (!conn) {
@@ -1165,8 +1166,7 @@ process_one(struct conntrack *ct, struct dp_packet *pkt,
 ovs_rwlock_unlock(>resources_lock);
 
 ovs_mutex_lock(>ct_lock);
-hash = conn_key_hash(>key, ct->hash_basis);
-if (!conn_key_lookup(ct, >key, hash, now, NULL, NULL)) {
+if (!conn_lookup(ct, >key, now, NULL, NULL)) {
 conn = conn_not_found(ct, pkt, ctx, commit, now, nat_action_info,
   helper, alg_exp, ct_alg_ctl);
 }
@@ -2057,10 +2057,8 @@ nat_select_range_tuple(struct conntrack *ct, const 
struct conn *conn,
 nat_conn->rev_key.src.port = htons(port);
 }
 
-uint32_t conn_hash = conn_key_hash(_conn->rev_key,
-   ct->hash_basis);
-bool found = conn_key_lookup(ct, _conn->rev_key, conn_hash,
- time_msec(), NULL, NULL);
+bool found = conn_lookup(ct, _conn->rev_key, time_msec(),
+ NULL, NULL);
 if (!found) {
 return true;
 } else if (pat_enabled && !all_ports_tried) {
@@ -2353,18 +2351,17 @@ int
 conntrack_flush_tuple(struct conntrack *ct, const struct ct_dpif_tuple *tuple,
   uint16_t zone)
 {
-struct conn_lookup_ctx ctx;
 int error = 0;
+struct conn_key key;
+struct conn *conn;
 
-memset(, 0, sizeof(ctx));
-tuple_to_conn_key(tuple, zone, );
-ctx.hash = conn_key_hash(, ct->hash_basis);
+memset(, 0, sizeof(key));
+tuple_to_conn_key(tuple, zone, );
 ovs_mutex_lock(>ct_lock);
-conn_key_lookup(ct, , ctx.hash, time_msec(), ,
-);
+conn_lookup(ct, , time_msec(), , NULL);
 
-if (ctx.conn && 

[ovs-dev] [patch v2 1/3] conntrack: Don't re-add cleaned 'conn' to expiry list.

2019-05-28 Thread Darrell Ball
When a 'conn' entry is cleaned up from an expiry list, we don't
want to put it back during an update.  Hence, we detect and block this.

Fixes: 967bb5c5cd90 ("conntrack: Add rcu support.")
Signed-off-by: Darrell Ball 
---

v2: No change.

 lib/conntrack-private.h | 11 +++
 lib/conntrack.c |  2 ++
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/conntrack-private.h b/lib/conntrack-private.h
index 51b7d7f..bcfbe10 100644
--- a/lib/conntrack-private.h
+++ b/lib/conntrack-private.h
@@ -102,11 +102,12 @@ struct conn {
 /* Mutable data. */
 struct ovs_mutex lock; /* Guards all mutable fields. */
 ovs_u128 label;
-uint32_t mark;
 long long expiration;
+uint32_t mark;
 int seq_skew;
 bool seq_skew_dir; /* TCP sequence skew direction due to NATTing of FTP
 * control messages; true if reply direction. */
+bool cleaned; /* True if cleaned from expiry lists. */
 
 /* Immutable data. */
 bool alg_related; /* True if alg data connection. */
@@ -218,9 +219,11 @@ conn_update_expiration(struct conntrack *ct, struct conn 
*conn,
 
 ovs_mutex_lock(>ct_lock);
 ovs_mutex_lock(>lock);
-conn->expiration = now + ct_timeout_val[tm];
-ovs_list_remove(>exp_node);
-ovs_list_push_back(>exp_lists[tm], >exp_node);
+if (!conn->cleaned) {
+conn->expiration = now + ct_timeout_val[tm];
+ovs_list_remove(>exp_node);
+ovs_list_push_back(>exp_lists[tm], >exp_node);
+}
 ovs_mutex_unlock(>lock);
 ovs_mutex_unlock(>ct_lock);
 
diff --git a/lib/conntrack.c b/lib/conntrack.c
index d7d48a4..c57d9fd 100644
--- a/lib/conntrack.c
+++ b/lib/conntrack.c
@@ -343,6 +343,7 @@ conn_clean(struct conntrack *ct, struct conn *conn)
 cmap_remove(>conns, >nat_conn->cm_node, hash);
 }
 ovs_list_remove(>exp_node);
+conn->cleaned = true;
 ovsrcu_postpone(delete_conn, conn);
 atomic_count_dec(>n_conn);
 }
@@ -354,6 +355,7 @@ conn_clean_one(struct conntrack *ct, struct conn *conn)
 conn_clean_cmn(ct, conn);
 if (conn->conn_type == CT_CONN_TYPE_DEFAULT) {
 ovs_list_remove(>exp_node);
+conn->cleaned = true;
 atomic_count_dec(>n_conn);
 }
 ovsrcu_postpone(delete_conn_one, conn);
-- 
1.9.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [patch v2 2/3] conntrack: Fix missed 'conn' lookup checks.

2019-05-28 Thread Darrell Ball
Whenever a 'conn' entry is removed or added, we need to reverify it's
existence status under lock protection.  There were some cases that
were missed, so fix them.

Fixes: 967bb5c5cd90 ("conntrack: Add rcu support.")
Signed-off-by: Darrell Ball 
---

v2: No change.

 lib/conntrack.c | 20 +++-
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/lib/conntrack.c b/lib/conntrack.c
index c57d9fd..e9d6720 100644
--- a/lib/conntrack.c
+++ b/lib/conntrack.c
@@ -956,7 +956,10 @@ conn_update_state(struct conntrack *ct, struct dp_packet 
*pkt,
 break;
 case CT_UPDATE_NEW:
 ovs_mutex_lock(>ct_lock);
-conn_clean(ct, conn);
+uint32_t hash = conn_key_hash(>key, ct->hash_basis);
+if (conn_key_lookup(ct, >key, hash, now, NULL, NULL)) {
+conn_clean(ct, conn);
+}
 ovs_mutex_unlock(>ct_lock);
 create_new_conn = true;
 break;
@@ -1089,11 +1092,15 @@ process_one(struct conntrack *ct, struct dp_packet *pkt,
 bool create_new_conn = false;
 conn_key_lookup(ct, >key, ctx->hash, now, >conn, >reply);
 struct conn *conn = ctx->conn;
+uint32_t hash;
 
 /* Delete found entry if in wrong direction. 'force' implies commit. */
 if (OVS_UNLIKELY(force && ctx->reply && conn)) {
 ovs_mutex_lock(>ct_lock);
-conn_clean(ct, conn);
+hash = conn_key_hash(>key, ct->hash_basis);
+if (conn_key_lookup(ct, >key, hash, now, NULL, NULL)) {
+conn_clean(ct, conn);
+}
 ovs_mutex_unlock(>ct_lock);
 conn = NULL;
 }
@@ -1103,7 +1110,7 @@ process_one(struct conntrack *ct, struct dp_packet *pkt,
 
 ctx->reply = true;
 struct conn *rev_conn = conn;  /* Save for debugging. */
-uint32_t hash = conn_key_hash(>rev_key, ct->hash_basis);
+hash = conn_key_hash(>rev_key, ct->hash_basis);
 conn_key_lookup(ct, >key, hash, now, , >reply);
 
 if (!conn) {
@@ -1158,8 +1165,11 @@ process_one(struct conntrack *ct, struct dp_packet *pkt,
 ovs_rwlock_unlock(>resources_lock);
 
 ovs_mutex_lock(>ct_lock);
-conn = conn_not_found(ct, pkt, ctx, commit, now, nat_action_info,
-  helper, alg_exp, ct_alg_ctl);
+hash = conn_key_hash(>key, ct->hash_basis);
+if (!conn_key_lookup(ct, >key, hash, now, NULL, NULL)) {
+conn = conn_not_found(ct, pkt, ctx, commit, now, nat_action_info,
+  helper, alg_exp, ct_alg_ctl);
+}
 ovs_mutex_unlock(>ct_lock);
 }
 
-- 
1.9.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v9 4/5] dpif-netdev: refactor generic implementation

2019-05-28 Thread Ilya Maximets
Not a full review. See inline.

Best regards, Ilya Maximets.

On 08.05.2019 18:13, Harry van Haaren wrote:
> This commit refactors the generic implementation. The
> goal of this refactor is to simply the code to enable
> "specialization" of the functions at compile time.
> 
> Given compile-time optimizations, the compiler is able
> to unroll loops, and create optimized code sequences due
> to compile time knowledge of loop-trip counts.
> 
> In order to enable these compiler optimizations, we must
> refactor the code to pass the loop-trip counts to functions
> as compile time constants.
> 
> This patch allows the number of miniflow-bits set per "unit"
> in the miniflow to be passed around as a function argument.
> 
> Note that this patch does NOT yet take advantage of doing so,
> this is only a refactor to enable it in the next patches.
> 
> Signed-off-by: Harry van Haaren 
> 
> ---
> 
> v9:
> - Use count_1bits in favour of __builtin_popcount (Ilya)
> - Use ALWAYS_INLINE instead of __attribute__ synatx (Ilya)
> 
> v8:
> - Rework block_cache and mf_masks to avoid variable-lenght array
>   due to compiler issues. Provisioning for worst case is not a
>   good solution due to magnitue of over-provisioning required.
> - Rework netdev_flatten function removing unused parameter
> ---
>  lib/dpif-netdev-lookup-generic.c | 239 ---
>  lib/dpif-netdev.c|  79 +-
>  lib/dpif-netdev.h|  20 ++-
>  3 files changed, 283 insertions(+), 55 deletions(-)
> 
> diff --git a/lib/dpif-netdev-lookup-generic.c 
> b/lib/dpif-netdev-lookup-generic.c
> index 2e4003408..901d28ff0 100644
> --- a/lib/dpif-netdev-lookup-generic.c
> +++ b/lib/dpif-netdev-lookup-generic.c
> @@ -28,67 +28,204 @@
>  #include "packets.h"
>  #include "pvector.h"
>  
> -/* Returns a hash value for the bits of 'key' where there are 1-bits in
> - * 'mask'. */
> -static inline uint32_t
> -netdev_flow_key_hash_in_mask(const struct netdev_flow_key *key,
> - const struct netdev_flow_key *mask)
> +VLOG_DEFINE_THIS_MODULE(dpif_lookup_generic);
> +
> +/* netdev_flow_key_flatten_unit:
> + * Given a packet, table and mf_masks, this function iterates over each bit
> + * set in the subtable, and calculates the appropriate metadata to store in 
> the
> + * blocks_scratch[].
> + *
> + * The results of the blocks_scratch[] can be used for hashing, and later for
> + * verification of if a rule matches the given packet.
> + */
> +static inline void
> +netdev_flow_key_flatten_unit(const uint64_t * restrict pkt_blocks,
> + const uint64_t * restrict tbl_blocks,
> + const uint64_t * restrict mf_masks,
> + uint64_t * restrict blocks_scratch,
> + const uint64_t pkt_mf_bits,
> + const uint32_t count)
>  {
> -const uint64_t *p = miniflow_get_values(>mf);
> -uint32_t hash = 0;
> -uint64_t value;
> +uint32_t i;
> +for (i = 0; i < count; i++) {
> +uint64_t mf_mask = mf_masks[i];
> +/* Calculate the block index for the packet metadata */
> +uint64_t idx_bits = mf_mask & pkt_mf_bits;
> +const uint32_t pkt_idx = count_1bits(idx_bits);
>  
> -NETDEV_FLOW_KEY_FOR_EACH_IN_FLOWMAP (value, key, mask->mf.map) {
> -hash = hash_add64(hash, value & *p);
> -p++;
> +/* check if the packet has the subtable miniflow bit set. If yes, the
> + * block at the above pkt_idx will be stored, otherwise it is masked
> + * out to be zero.
> + */
> +uint64_t pkt_has_mf_bit = (mf_mask + 1) & pkt_mf_bits;
> +uint64_t no_bit = ((!pkt_has_mf_bit) > 0) - 1;
> +
> +/* mask packet block by table block, and mask to zero if packet
> + * doesn't actually contain this block of metadata
> + */
> +blocks_scratch[i] = pkt_blocks[pkt_idx] & tbl_blocks[i] & no_bit;
>  }
> +}
> +
> +/* netdev_flow_key_flatten:
> + * This function takes a packet, and subtable and writes an array of uint64_t
> + * blocks. The blocks contain the metadata that the subtable matches on, in
> + * the same order as the subtable, allowing linear iteration over the blocks.
> + *
> + * To calculate the blocks contents, the netdev_flow_key_flatten_unit 
> function
> + * is called twice, once for each "unit" of the miniflow. This call can be
> + * inlined by the compiler for performance.
> + *
> + * Note that the u0_count and u1_count variables can be compile-time 
> constants,
> + * allowing the loop in the inlined flatten_unit() function to be 
> compile-time
> + * unrolled, or possibly removed totally by unrolling by the loop iterations.
> + * The compile time optimizations enabled by this design improves 
> performance.
> + */
> +static inline void
> +netdev_flow_key_flatten(const struct netdev_flow_key * restrict key,
> +const struct netdev_flow_key * 

Re: [ovs-dev] [PATCH] checkpatch: Ignore "sparse" headers.

2019-05-28 Thread Aaron Conole
Ilya Maximets  writes:

> Signed-off-by: Ilya Maximets 
> ---
>  utilities/checkpatch.py | 5 +
>  1 file changed, 5 insertions(+)
>
> diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
> index 441eaa807..ae86937c8 100755
> --- a/utilities/checkpatch.py
> +++ b/utilities/checkpatch.py
> @@ -839,6 +839,11 @@ def ovs_checkpatch_parse(text, filename, author=None, 
> committer=None):
>  continue
>  if current_file.startswith('include/linux'):
>  continue
> +# "sparse" includes could be copy-pasted from different sources
> +# like DPDK or Linux and could contain workarounds not suitable
> +# for a common style.
> +if current_file.startswith('include/sparse'):
> +continue
>  run_checks(current_file, cmp_line, lineno)
>  
>  run_file_checks(text)

Makes sense.

Acked-by: Aaron Conole 
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH 2/3] sparse: Re-allow sparse builds with dpdk.

2019-05-28 Thread Ilya Maximets
On 28.05.2019 19:16, 0-day Robot wrote:
> Bleep bloop.  Greetings Ilya Maximets, I am a robot and I have tried out your 
> patch.
> Thanks for your contribution.
> 
> I encountered some error that I wasn't expecting.  See the details below.
> 
> 
> checkpatch:
> WARNING: Line has non-spaces leading whitespace
> #79 FILE: include/sparse/rte_flow.h:507:
>   rte_be16_t inner_type; /**< Inner EtherType or TPID. */
> 
> WARNING: Line has non-spaces leading whitespace
> #87 FILE: include/sparse/rte_flow.h:513:
>   .tci = RTE_BE16(0x0fff),
> 
> WARNING: Line has non-spaces leading whitespace
> #88 FILE: include/sparse/rte_flow.h:514:
>   .inner_type = RTE_BE16(0x),
> 
> WARNING: Line has non-spaces leading whitespace
> #112 FILE: include/sparse/rte_flow.h:1090:
>   enum rte_eth_hash_function func; /**< RSS hash function to apply. */
> 
> WARNING: Line has non-spaces leading whitespace
> #113 FILE: include/sparse/rte_flow.h:1091:
>   /**
> 
> WARNING: Line has non-spaces leading whitespace
> #114 FILE: include/sparse/rte_flow.h:1092:
>* Packet encapsulation level RSS hash @p types apply to.
> 
> WARNING: Line has non-spaces leading whitespace
> #115 FILE: include/sparse/rte_flow.h:1093:
>*
> 
> WARNING: Line has non-spaces leading whitespace
> #116 FILE: include/sparse/rte_flow.h:1094:
>* - @p 0 requests the default behavior. Depending on the packet
> 
> WARNING: Line has non-spaces leading whitespace
> #117 FILE: include/sparse/rte_flow.h:1095:
>*   type, it can mean outermost, innermost, anything in between or
> 
> WARNING: Line has non-spaces leading whitespace
> #118 FILE: include/sparse/rte_flow.h:1096:
>*   even no RSS.
> 
> WARNING: Line has non-spaces leading whitespace
> #119 FILE: include/sparse/rte_flow.h:1097:
>*
> 
> WARNING: Line has non-spaces leading whitespace
> #120 FILE: include/sparse/rte_flow.h:1098:
>*   It basically stands for the innermost encapsulation level RSS
> 
> WARNING: Line has non-spaces leading whitespace
> #121 FILE: include/sparse/rte_flow.h:1099:
>*   can be performed on according to PMD and device capabilities.
> 
> WARNING: Line has non-spaces leading whitespace
> #122 FILE: include/sparse/rte_flow.h:1100:
>*
> 
> WARNING: Line has non-spaces leading whitespace
> #123 FILE: include/sparse/rte_flow.h:1101:
>* - @p 1 requests RSS to be performed on the outermost packet
> 
> WARNING: Line has non-spaces leading whitespace
> #124 FILE: include/sparse/rte_flow.h:1102:
>*   encapsulation level.
> 
> WARNING: Line has non-spaces leading whitespace
> #125 FILE: include/sparse/rte_flow.h:1103:
>*
> 
> WARNING: Line has non-spaces leading whitespace
> #126 FILE: include/sparse/rte_flow.h:1104:
>* - @p 2 and subsequent values request RSS to be performed on the
> 
> WARNING: Line has non-spaces leading whitespace
> #127 FILE: include/sparse/rte_flow.h:1105:
>*   specified inner packet encapsulation level, from outermost to
> 
> WARNING: Line has non-spaces leading whitespace
> #128 FILE: include/sparse/rte_flow.h:1106:
>*   innermost (lower to higher values).
> 
> WARNING: Line has non-spaces leading whitespace
> #129 FILE: include/sparse/rte_flow.h:1107:
>*
> 
> WARNING: Line has non-spaces leading whitespace
> #130 FILE: include/sparse/rte_flow.h:1108:
>* Values other than @p 0 are not necessarily supported.
> 
> WARNING: Line has non-spaces leading whitespace
> #131 FILE: include/sparse/rte_flow.h:1109:
>*
> 
> WARNING: Line has non-spaces leading whitespace
> #132 FILE: include/sparse/rte_flow.h:1110:
>* Requesting a specific RSS level on unrecognized traffic results
> 
> WARNING: Line has non-spaces leading whitespace
> #133 FILE: include/sparse/rte_flow.h::
>* in undefined behavior. For predictable results, it is recommended
> 
> WARNING: Line has non-spaces leading whitespace
> #134 FILE: include/sparse/rte_flow.h:1112:
>* to make the flow rule pattern match packet headers up to the
> 
> WARNING: Line has non-spaces leading whitespace
> #135 FILE: include/sparse/rte_flow.h:1113:
>* requested encapsulation level so that only matching traffic goes
> 
> WARNING: Line has non-spaces leading whitespace
> #136 FILE: include/sparse/rte_flow.h:1114:
>* through.
> 
> WARNING: Line has non-spaces leading whitespace
> #137 FILE: include/sparse/rte_flow.h:1115:
>*/
> 
> WARNING: Line has non-spaces leading whitespace
> #138 FILE: include/sparse/rte_flow.h:1116:
>   uint32_t level;
> 
> WARNING: Line has non-spaces leading whitespace
> #139 FILE: include/sparse/rte_flow.h:1117:
>   uint64_t types; /**< Specific RSS hash types (see ETH_RSS_*). */
> 
> WARNING: Line has non-spaces leading whitespace
> #140 FILE: include/sparse/rte_flow.h:1118:
>   uint32_t key_len; /**< Hash key length in bytes. */
> 
> WARNING: Line has non-spaces leading whitespace
> #141 FILE: 

Re: [ovs-dev] [PATCH 2/3] sparse: Re-allow sparse builds with dpdk.

2019-05-28 Thread 0-day Robot
Bleep bloop.  Greetings Ilya Maximets, I am a robot and I have tried out your 
patch.
Thanks for your contribution.

I encountered some error that I wasn't expecting.  See the details below.


checkpatch:
WARNING: Line has non-spaces leading whitespace
#79 FILE: include/sparse/rte_flow.h:507:
rte_be16_t inner_type; /**< Inner EtherType or TPID. */

WARNING: Line has non-spaces leading whitespace
#87 FILE: include/sparse/rte_flow.h:513:
.tci = RTE_BE16(0x0fff),

WARNING: Line has non-spaces leading whitespace
#88 FILE: include/sparse/rte_flow.h:514:
.inner_type = RTE_BE16(0x),

WARNING: Line has non-spaces leading whitespace
#112 FILE: include/sparse/rte_flow.h:1090:
enum rte_eth_hash_function func; /**< RSS hash function to apply. */

WARNING: Line has non-spaces leading whitespace
#113 FILE: include/sparse/rte_flow.h:1091:
/**

WARNING: Line has non-spaces leading whitespace
#114 FILE: include/sparse/rte_flow.h:1092:
 * Packet encapsulation level RSS hash @p types apply to.

WARNING: Line has non-spaces leading whitespace
#115 FILE: include/sparse/rte_flow.h:1093:
 *

WARNING: Line has non-spaces leading whitespace
#116 FILE: include/sparse/rte_flow.h:1094:
 * - @p 0 requests the default behavior. Depending on the packet

WARNING: Line has non-spaces leading whitespace
#117 FILE: include/sparse/rte_flow.h:1095:
 *   type, it can mean outermost, innermost, anything in between or

WARNING: Line has non-spaces leading whitespace
#118 FILE: include/sparse/rte_flow.h:1096:
 *   even no RSS.

WARNING: Line has non-spaces leading whitespace
#119 FILE: include/sparse/rte_flow.h:1097:
 *

WARNING: Line has non-spaces leading whitespace
#120 FILE: include/sparse/rte_flow.h:1098:
 *   It basically stands for the innermost encapsulation level RSS

WARNING: Line has non-spaces leading whitespace
#121 FILE: include/sparse/rte_flow.h:1099:
 *   can be performed on according to PMD and device capabilities.

WARNING: Line has non-spaces leading whitespace
#122 FILE: include/sparse/rte_flow.h:1100:
 *

WARNING: Line has non-spaces leading whitespace
#123 FILE: include/sparse/rte_flow.h:1101:
 * - @p 1 requests RSS to be performed on the outermost packet

WARNING: Line has non-spaces leading whitespace
#124 FILE: include/sparse/rte_flow.h:1102:
 *   encapsulation level.

WARNING: Line has non-spaces leading whitespace
#125 FILE: include/sparse/rte_flow.h:1103:
 *

WARNING: Line has non-spaces leading whitespace
#126 FILE: include/sparse/rte_flow.h:1104:
 * - @p 2 and subsequent values request RSS to be performed on the

WARNING: Line has non-spaces leading whitespace
#127 FILE: include/sparse/rte_flow.h:1105:
 *   specified inner packet encapsulation level, from outermost to

WARNING: Line has non-spaces leading whitespace
#128 FILE: include/sparse/rte_flow.h:1106:
 *   innermost (lower to higher values).

WARNING: Line has non-spaces leading whitespace
#129 FILE: include/sparse/rte_flow.h:1107:
 *

WARNING: Line has non-spaces leading whitespace
#130 FILE: include/sparse/rte_flow.h:1108:
 * Values other than @p 0 are not necessarily supported.

WARNING: Line has non-spaces leading whitespace
#131 FILE: include/sparse/rte_flow.h:1109:
 *

WARNING: Line has non-spaces leading whitespace
#132 FILE: include/sparse/rte_flow.h:1110:
 * Requesting a specific RSS level on unrecognized traffic results

WARNING: Line has non-spaces leading whitespace
#133 FILE: include/sparse/rte_flow.h::
 * in undefined behavior. For predictable results, it is recommended

WARNING: Line has non-spaces leading whitespace
#134 FILE: include/sparse/rte_flow.h:1112:
 * to make the flow rule pattern match packet headers up to the

WARNING: Line has non-spaces leading whitespace
#135 FILE: include/sparse/rte_flow.h:1113:
 * requested encapsulation level so that only matching traffic goes

WARNING: Line has non-spaces leading whitespace
#136 FILE: include/sparse/rte_flow.h:1114:
 * through.

WARNING: Line has non-spaces leading whitespace
#137 FILE: include/sparse/rte_flow.h:1115:
 */

WARNING: Line has non-spaces leading whitespace
#138 FILE: include/sparse/rte_flow.h:1116:
uint32_t level;

WARNING: Line has non-spaces leading whitespace
#139 FILE: include/sparse/rte_flow.h:1117:
uint64_t types; /**< Specific RSS hash types (see ETH_RSS_*). */

WARNING: Line has non-spaces leading whitespace
#140 FILE: include/sparse/rte_flow.h:1118:
uint32_t key_len; /**< Hash key length in bytes. */

WARNING: Line has non-spaces leading whitespace
#141 FILE: include/sparse/rte_flow.h:1119:
uint32_t queue_num; /**< Number of entries in @p queue. */

WARNING: Line has non-spaces leading whitespace
#142 FILE: include/sparse/rte_flow.h:1120:
const uint8_t *key; /**< Hash key. */

WARNING: Line has 

[ovs-dev] [PATCH 3/3] travis: Use enable-Werror knob.

2019-05-28 Thread Ilya Maximets
Unlike manual injecting of "-Werror" to CFLAGS,  '--enable-Werror'
enables failure on "sparse" and flake8 warnings. At least we wasn't
notified about flake8 warnings previously.

Signed-off-by: Ilya Maximets 
---
 .travis/linux-build.sh | 9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
index c6d9ae120..79ba4009e 100755
--- a/.travis/linux-build.sh
+++ b/.travis/linux-build.sh
@@ -4,9 +4,9 @@ set -o errexit
 set -x
 
 KERNELSRC=""
-CFLAGS="-Werror"
+CFLAGS=""
 SPARSE_FLAGS=""
-EXTRA_OPTS=""
+EXTRA_OPTS="--enable-Werror"
 TARGET="x86_64-native-linuxapp-gcc"
 
 function install_kernel()
@@ -47,7 +47,7 @@ function install_kernel()
 
 KERNELSRC=$(pwd)
 if [ ! "$DPDK" ] && [ ! "$DPDK_SHARED" ]; then
-EXTRA_OPTS="--with-linux=$(pwd)"
+EXTRA_OPTS="${EXTRA_OPTS} --with-linux=$(pwd)"
 fi
 echo "Installed kernel source in $(pwd)"
 cd ..
@@ -100,9 +100,6 @@ if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
 fi
 EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/dpdk-$DPDK_VER/build"
 fi
-if [ "$CC" != "clang" ]; then
-SPARSE_FLAGS="$SPARSE_FLAGS -Wsparse-error"
-fi
 
 OPTS="$EXTRA_OPTS $*"
 
-- 
2.17.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH 2/3] sparse: Re-allow sparse builds with dpdk.

2019-05-28 Thread Ilya Maximets
Few structures from rte_flow.h updated to the version from DPDK 18.11
to fix incorrect structure definitions.

rte_lcore.h and rte_vect.h "sparse" headers removed because not needed
and only produce type-mismatch issues.

Enabled -Werror for sparse builds with DPDK to prevent regressions.

Signed-off-by: Ilya Maximets 
---
 .travis/linux-build.sh |  4 +--
 include/sparse/automake.mk |  2 --
 include/sparse/rte_flow.h  | 55 +++---
 include/sparse/rte_lcore.h | 23 
 include/sparse/rte_vect.h  | 23 
 5 files changed, 47 insertions(+), 60 deletions(-)
 delete mode 100644 include/sparse/rte_lcore.h
 delete mode 100644 include/sparse/rte_vect.h

diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
index 62344689e..c6d9ae120 100755
--- a/.travis/linux-build.sh
+++ b/.travis/linux-build.sh
@@ -99,8 +99,8 @@ if [ "$DPDK" ] || [ "$DPDK_SHARED" ]; then
 CFLAGS="$CFLAGS -Wno-cast-align"
 fi
 EXTRA_OPTS="$EXTRA_OPTS --with-dpdk=$(pwd)/dpdk-$DPDK_VER/build"
-elif [ "$CC" != "clang" ]; then
-# DPDK headers currently trigger sparse errors
+fi
+if [ "$CC" != "clang" ]; then
 SPARSE_FLAGS="$SPARSE_FLAGS -Wsparse-error"
 fi
 
diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
index 274d52577..f65c27255 100644
--- a/include/sparse/automake.mk
+++ b/include/sparse/automake.mk
@@ -17,9 +17,7 @@ noinst_HEADERS += \
 include/sparse/netpacket/packet.h \
 include/sparse/pthread.h \
 include/sparse/rte_atomic.h \
-include/sparse/rte_lcore.h \
 include/sparse/rte_memcpy.h \
-include/sparse/rte_vect.h \
 include/sparse/sys/socket.h \
 include/sparse/sys/sysmacros.h \
 include/sparse/sys/types.h \
diff --git a/include/sparse/rte_flow.h b/include/sparse/rte_flow.h
index a36ab45e7..02fa523b4 100644
--- a/include/sparse/rte_flow.h
+++ b/include/sparse/rte_flow.h
@@ -48,6 +48,7 @@
 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -497,19 +498,20 @@ static const struct rte_flow_item_eth 
rte_flow_item_eth_mask = {
  *
  * Matches an 802.1Q/ad VLAN tag.
  *
- * This type normally follows either RTE_FLOW_ITEM_TYPE_ETH or
- * RTE_FLOW_ITEM_TYPE_VLAN.
+ * The corresponding standard outer EtherType (TPID) values are
+ * ETHER_TYPE_VLAN or ETHER_TYPE_QINQ. It can be overridden by the preceding
+ * pattern item.
  */
 struct rte_flow_item_vlan {
-   rte_be16_t tpid; /**< Tag protocol identifier. */
rte_be16_t tci; /**< Tag control information. */
+   rte_be16_t inner_type; /**< Inner EtherType or TPID. */
 };
 
 /** Default mask for RTE_FLOW_ITEM_TYPE_VLAN. */
 #ifndef __cplusplus
 static const struct rte_flow_item_vlan rte_flow_item_vlan_mask = {
-   .tpid = RTE_BE16(0x),
-   .tci = RTE_BE16(0x),
+   .tci = RTE_BE16(0x0fff),
+   .inner_type = RTE_BE16(0x),
 };
 #endif
 
@@ -1074,16 +1076,49 @@ struct rte_flow_action_dup {
  * Similar to QUEUE, except RSS is additionally performed on packets to
  * spread them among several queues according to the provided parameters.
  *
+ * Unlike global RSS settings used by other DPDK APIs, unsetting the
+ * @p types field does not disable RSS in a flow rule. Doing so instead
+ * requests safe unspecified "best-effort" settings from the underlying PMD,
+ * which depending on the flow rule, may result in anything ranging from
+ * empty (single queue) to all-inclusive RSS.
+ *
  * Note: RSS hash result is stored in the hash.rss mbuf field which overlaps
  * hash.fdir.lo. Since the MARK action sets the hash.fdir.hi field only,
  * both can be requested simultaneously.
- *
- * Terminating by default.
  */
 struct rte_flow_action_rss {
-   const struct rte_eth_rss_conf *rss_conf; /**< RSS parameters. */
-   uint16_t num; /**< Number of entries in queue[]. */
-   uint16_t queue[]; /**< Queues indices to use. */
+   enum rte_eth_hash_function func; /**< RSS hash function to apply. */
+   /**
+* Packet encapsulation level RSS hash @p types apply to.
+*
+* - @p 0 requests the default behavior. Depending on the packet
+*   type, it can mean outermost, innermost, anything in between or
+*   even no RSS.
+*
+*   It basically stands for the innermost encapsulation level RSS
+*   can be performed on according to PMD and device capabilities.
+*
+* - @p 1 requests RSS to be performed on the outermost packet
+*   encapsulation level.
+*
+* - @p 2 and subsequent values request RSS to be performed on the
+*   specified inner packet encapsulation level, from outermost to
+*   innermost (lower to higher values).
+*
+* Values other than @p 0 are not necessarily supported.
+*
+* Requesting a specific RSS level on unrecognized traffic results
+* in undefined behavior. For predictable results, it is 

[ovs-dev] [PATCH 1/3] acinclude: Add vector defines to sparse.

2019-05-28 Thread Ilya Maximets
By adding compiler default flags for vector instructions to
cgcc we'll be able to check the same sources that we're building.
Also, this will allow to avoid re-defining these flags and
types specifically for "sparse" includes.

"sparse" headers "bmi2intrin.h" and "emmintrin.h" dropped as
not needed anymore.

Signed-off-by: Ilya Maximets 
---
 acinclude.m4| 10 ++
 include/sparse/automake.mk  |  2 --
 include/sparse/bmi2intrin.h | 25 -
 include/sparse/emmintrin.h  | 27 ---
 4 files changed, 10 insertions(+), 54 deletions(-)
 delete mode 100644 include/sparse/bmi2intrin.h
 delete mode 100644 include/sparse/emmintrin.h

diff --git a/acinclude.m4 b/acinclude.m4
index cf9cc8b8b..08686044f 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1140,6 +1140,16 @@ AC_DEFUN([OVS_CHECK_SPARSE_TARGET],
  [x86], [SPARSEFLAGS= CGCCFLAGS="-target=i86 -target=host_os_specs"],
  [x86_64], [SPARSEFLAGS=-m64 CGCCFLAGS="-target=x86_64 
-target=host_os_specs"],
  [SPARSEFLAGS= CGCCFLAGS=])
+
+   dnl Get the the default defines for vector instructions from compiler to
+   dnl allow "sparse" correctly check the same code that will be built.
+   dnl Required for checking DPDK headers.
+   AC_MSG_CHECKING([vector options for cgcc])
+   VECTOR=$($CC -dM -E - < /dev/null | grep -E "MMX|SSE|AVX" | \
+cut -c 9- | sed 's/ /=/' | sed 's/^/-D/' | tr '\n' ' ')
+   AC_MSG_RESULT([$VECTOR])
+   CGCCFLAGS="$CGCCFLAGS $VECTOR"
+
AC_SUBST([SPARSEFLAGS])
AC_SUBST([CGCCFLAGS])])
 
diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk
index 8d96d0346..274d52577 100644
--- a/include/sparse/automake.mk
+++ b/include/sparse/automake.mk
@@ -11,8 +11,6 @@ noinst_HEADERS += \
 include/sparse/arpa/inet.h \
 include/sparse/bits/floatn.h \
 include/sparse/assert.h \
-include/sparse/bmi2intrin.h \
-include/sparse/emmintrin.h \
 include/sparse/math.h \
 include/sparse/netinet/in.h \
 include/sparse/netinet/ip6.h \
diff --git a/include/sparse/bmi2intrin.h b/include/sparse/bmi2intrin.h
deleted file mode 100644
index 3ee37bb72..0
--- a/include/sparse/bmi2intrin.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2015 Nicira, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CHECKER__
-#error "Use this header only with sparse.  It is not a correct implementation."
-#endif
-
-/* Sparse doesn't know the __int128 type used by GCC 4.9 *intrin.h headers.
- * We cannot use a typedef because the type is used with a qualifier
- * ('unsigned __int128') */
-#define __int128 int
-#include_next 
-#undef __int128
diff --git a/include/sparse/emmintrin.h b/include/sparse/emmintrin.h
deleted file mode 100644
index 3810f55a2..0
--- a/include/sparse/emmintrin.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright (c) 2015 Nicira, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __CHECKER__
-#error "Use this header only with sparse.  It is not a correct implementation."
-#endif
-
-/* GCC 4.8 *intrin.h headers do not work if these are not defined */
-#define __SSE2__
-#define __SSE__
-#define __MMX__
-#include_next 
-#undef __MMX__
-#undef __SSE__
-#undef __SSE2__
-- 
2.17.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH 0/3] Fix sparse build with DPDK and --enable-Werror on Travis.

2019-05-28 Thread Ilya Maximets
This patch-set fixed broken "sparse" build with DPDK
and uses "--enable-Werror" to prevent regressions and
also catch flake8 warnings that was ignored previously.

Ilya Maximets (3):
  acinclude: Add vector defines to sparse.
  sparse: Re-allow sparse builds with dpdk.
  travis: Use enable-Werror knob.

 .travis/linux-build.sh  |  9 ++
 acinclude.m4| 10 +++
 include/sparse/automake.mk  |  4 ---
 include/sparse/bmi2intrin.h | 25 -
 include/sparse/emmintrin.h  | 27 --
 include/sparse/rte_flow.h   | 55 ++---
 include/sparse/rte_lcore.h  | 23 
 include/sparse/rte_vect.h   | 23 
 8 files changed, 58 insertions(+), 118 deletions(-)
 delete mode 100644 include/sparse/bmi2intrin.h
 delete mode 100644 include/sparse/emmintrin.h
 delete mode 100644 include/sparse/rte_lcore.h
 delete mode 100644 include/sparse/rte_vect.h

-- 
2.17.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH] checkpatch: Ignore "sparse" headers.

2019-05-28 Thread Ilya Maximets
Signed-off-by: Ilya Maximets 
---
 utilities/checkpatch.py | 5 +
 1 file changed, 5 insertions(+)

diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
index 441eaa807..ae86937c8 100755
--- a/utilities/checkpatch.py
+++ b/utilities/checkpatch.py
@@ -839,6 +839,11 @@ def ovs_checkpatch_parse(text, filename, author=None, 
committer=None):
 continue
 if current_file.startswith('include/linux'):
 continue
+# "sparse" includes could be copy-pasted from different sources
+# like DPDK or Linux and could contain workarounds not suitable
+# for a common style.
+if current_file.startswith('include/sparse'):
+continue
 run_checks(current_file, cmp_line, lineno)
 
 run_file_checks(text)
-- 
2.17.1

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] El estrés: Nuestro principal enemigo ¿o aliado?

2019-05-28 Thread =?utf-8?Q?=C2=BFCuenta_con_un_ambiente_laboral_adecuado??=
Cursos Esenciales - Webinar Interactivo – Miércoles 05 de Junio

Felicidad, empoderamiento y productividad laboral

¿Eres feliz en tu trabajo? Contar con un ambiente laboral adecuado y que 
fomente el bienestar de los empleados
ha pasado de ser un valor añadido, a una necesidad en las empresas.

Desarrollaremos, en los participantes, la conciencia del manejo positivo de los 
problemas y cargas laborales así como de felicidad laboral.  

Temas a tratar:

• Neuroliderazgo y su influencia en la productividad.
• Nuestro principal enemigo ¿o aliado?: el estrés.
• Claves para ser feliz: Entorno laboral + Motivación + Empoderamiento

Para mayor información, responder sobre este correo con la palabra 
Productividad + los siguientes datos:

NOMBRE:
TELÉFONO:
EMPRESA:
EMAIL ALTERNO: 

Llamanos al (045) 55 1554 6630
www.Innovalearn.mx 
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] Purchase_rfq

2019-05-28 Thread aishatu
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v3] ovn-controller: Fix parsing of OVN tunnel IDs

2019-05-28 Thread Aaron Conole
Aaron Conole  writes:

> Numan Siddique  writes:
>
>> On Mon, May 27, 2019, 4:01 PM Dumitru Ceara  wrote:
>>
>>  On Mon, May 27, 2019 at 11:57 AM 0-day Robot  wrote:
>>  >
>>  > Bleep bloop.  Greetings Dumitru Ceara, I am a robot and I have tried out 
>> your patch.
>>  > Thanks for your contribution.
>>  >
>>  > I encountered some error that I wasn't expecting.  See the details below.
>>  >
>>  >
>>  > git-am:
>>  > fatal: sha1 information is lacking or useless (ovn/controller/bfd.c).
>>  > Repository lacks necessary blobs to fall back on 3-way merge.
>>  > Cannot fall back to three-way merge.
>>  > Patch failed at 0001 ovn-controller: Fix parsing of OVN tunnel IDs
>>  > The copy of the patch that failed is found in:
>>  >
>> /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN/.git/rebase-apply/patch
>>  > When you have resolved this problem, run "git am --resolved".
>>  > If you prefer to skip this patch, run "git am --skip" instead.
>>  > To restore the original branch and stop patching, run "git am --abort".
>>  >
>>  >
>>  > Please check this out.  If you feel there has been an error,
>>  > please email acon...@bytheb.org
>>  >
>>  > Thanks,
>>  > 0-day Robot
>>
>>  Hi Aaron,
>>
>>  I'm not sure what the problem is here. Can it be related to what the
>>  bot is doing?
>>
>>  For the v3 version I had updated the master branch and rebased the dev
>>  branch; then I generated the patch from my dev branch with:
>>  git format-patch -M master --subject-prefix="PATCH v3"  -o _patch/
>>
>>  If i apply the patch with "git am" everything seems to work fine:
>>  $ git checkout -b test origin/master
>>  $ git am _patch/0001-ovn-controller-Fix-parsing-of-OVN-tunnel-IDs.patch
>>  Applying: ovn-controller: Fix parsing of OVN tunnel IDs
>>  $ git log --oneline -1
>>  8c559d4 ovn-controller: Fix parsing of OVN tunnel IDs
>>  $ git --version
>>  git version 1.8.3.1
>>
>> Looks like the bot is trying to apply the patches to the ovn-org/ovn repo.
>
> I'll double check - I thought I had a regex that was correctly
> separating it.

Should be all set.

>> Aaron is it possible to change the bot to apply the patches to the
>> new repo only if "ovn" is with in the [*ovn*] ?
>
> That's the intention.
>
>> Right now we use  -  "[PATCH ..]ovn: ... " for OVN related patches in the 
>> openvswitch repo.
>
> Right.
>
>> Thanks
>> Numan
>>
>>  If I use git-pw it also seems to work fine:
>>  $ git checkout -b test2 origin/master
>>  Branch test2 set up to track remote branch master from origin.
>>  Switched to a new branch 'test2'
>>  $ git-pw patch apply 1105697
>>  Starting new HTTPS connection (1): patchwork.ozlabs.org
>>  Starting new HTTPS connection (1): patchwork.ozlabs.org
>>  Applying: ovn-controller: Fix parsing of OVN tunnel IDs
>>  $ git log --oneline -1
>>  aa83849 ovn-controller: Fix parsing of OVN tunnel IDs
>>
>>  Thanks,
>>  Dumitru
>>  ___
>>  dev mailing list
>>  d...@openvswitch.org
>>  https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> ___
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v2] dpif-netdev: Fix unsafe access to pmd polling lists.

2019-05-28 Thread Aaron Conole
Ilya Maximets  writes:

> All accesses to 'pmd->poll_list' should be guarded by
> 'pmd->port_mutex'. Additionally fixed inappropriate usage
> of 'HMAP_FOR_EACH_SAFE' (hmap doesn't change in a loop)
> and dropped not needed local variable 'proc_cycles'.
>
> CC: Nitin Katiyar 
> Fixes: 5bf84282482a ("Adding support for PMD auto load balancing")
> Signed-off-by: Ilya Maximets 
> Acked-by: Kevin Traynor 
> ---

Acked-by: Aaron Conole 
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCH v3] ovn-controller: Fix parsing of OVN tunnel IDs

2019-05-28 Thread Aaron Conole
Numan Siddique  writes:

> On Mon, May 27, 2019, 4:01 PM Dumitru Ceara  wrote:
>
>  On Mon, May 27, 2019 at 11:57 AM 0-day Robot  wrote:
>  >
>  > Bleep bloop.  Greetings Dumitru Ceara, I am a robot and I have tried out 
> your patch.
>  > Thanks for your contribution.
>  >
>  > I encountered some error that I wasn't expecting.  See the details below.
>  >
>  >
>  > git-am:
>  > fatal: sha1 information is lacking or useless (ovn/controller/bfd.c).
>  > Repository lacks necessary blobs to fall back on 3-way merge.
>  > Cannot fall back to three-way merge.
>  > Patch failed at 0001 ovn-controller: Fix parsing of OVN tunnel IDs
>  > The copy of the patch that failed is found in:
>  >
> /var/lib/jenkins/jobs/upstream_build_from_pw/workspace/OVN/.git/rebase-apply/patch
>  > When you have resolved this problem, run "git am --resolved".
>  > If you prefer to skip this patch, run "git am --skip" instead.
>  > To restore the original branch and stop patching, run "git am --abort".
>  >
>  >
>  > Please check this out.  If you feel there has been an error, please email 
> acon...@bytheb.org
>  >
>  > Thanks,
>  > 0-day Robot
>
>  Hi Aaron,
>
>  I'm not sure what the problem is here. Can it be related to what the
>  bot is doing?
>
>  For the v3 version I had updated the master branch and rebased the dev
>  branch; then I generated the patch from my dev branch with:
>  git format-patch -M master --subject-prefix="PATCH v3"  -o _patch/
>
>  If i apply the patch with "git am" everything seems to work fine:
>  $ git checkout -b test origin/master
>  $ git am _patch/0001-ovn-controller-Fix-parsing-of-OVN-tunnel-IDs.patch
>  Applying: ovn-controller: Fix parsing of OVN tunnel IDs
>  $ git log --oneline -1
>  8c559d4 ovn-controller: Fix parsing of OVN tunnel IDs
>  $ git --version
>  git version 1.8.3.1
>
> Looks like the bot is trying to apply the patches to the ovn-org/ovn repo.

I'll double check - I thought I had a regex that was correctly
separating it.

> Aaron is it possible to change the bot to apply the patches to the new repo 
> only if "ovn" is with in the [*ovn*] ?

That's the intention.

> Right now we use  -  "[PATCH ..]ovn: ... " for OVN related patches in the 
> openvswitch repo.

Right.

> Thanks
> Numan
>
>  If I use git-pw it also seems to work fine:
>  $ git checkout -b test2 origin/master
>  Branch test2 set up to track remote branch master from origin.
>  Switched to a new branch 'test2'
>  $ git-pw patch apply 1105697
>  Starting new HTTPS connection (1): patchwork.ozlabs.org
>  Starting new HTTPS connection (1): patchwork.ozlabs.org
>  Applying: ovn-controller: Fix parsing of OVN tunnel IDs
>  $ git log --oneline -1
>  aa83849 ovn-controller: Fix parsing of OVN tunnel IDs
>
>  Thanks,
>  Dumitru
>  ___
>  dev mailing list
>  d...@openvswitch.org
>  https://mail.openvswitch.org/mailman/listinfo/ovs-dev
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev