[ovs-dev] WE NEED YOUR PRODUCTS

2019-12-05 Thread John Lewis & Partners
-- 
Dear Sir,

We are Located in the united kingdom, the famous brand John Lewis PLC, is
UK's largest multi-channel retailer with over 45 shops furnished with
European products. We are looking for new products to attract new customers
and also retain our existing ones, create new partnerships with companies
dealing with different kinds of goods.

Please send us your catalog through email to speed up and to learn more
about your company's products and wholesale quote. We hope to be able to
order with you and start long-term friendly, respectable and solid business
partnership. We count on the reliability for both sides. We commit
ourselves to a successful and professional processing for a good
cooperation in all ranges.

Could you also send to us all information required to become one of your
regular distributors in Europe and worldwide? Please, we would appreciate
if you could send us your stock availability via email. We will also
pleased to receive any offers or proposals from other product available and
ready (Stocks and rates).

Payment: Our Payment Terms is within 15 days net in Europe and 30 days net
in UK as we operate with all our suppliers.

Best Regards,

PATRICK LEWIS
PURCHASING DIRECTOR
PURCHASING DEPARTMENT
customer service: 08006112981
Directline: +44 7709293519
Fax : +44 020 7629 7711
www.johnlewis.com
-Loaded-
Registered in England and Wales Registered No: 0233462 - VAT No : GB
232457280 This e-mail is confidential and intended only for the addresses
shown. If you are not an intended recipient, please be advised that any
use, dissemination, forwarding or copying of this e-mail is strictly
prohibited. Internet e-mails are not necessarily secure and John Lewis Plc
Uk does not accept responsibility for changes made to this message after it
was sent. Please note that incoming and outgoing electronic mail messages
may be monitored. Should you receive this transmission in error, notify the
sender immediately.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH] Use batch process recv for tap and raw socket in netdev datapath

2019-12-05 Thread yang_y_yi
From: Yi Yang 

Current netdev_linux_rxq_recv_tap and netdev_linux_rxq_recv_sock
just receive single packet, that is very inefficient, per my test
case which adds two tap ports or veth ports into OVS bridge
(datapath_type=netdev) and use iperf3 to do performance test
between two ports (they are set into different network name space).

The result is as below:

  tap:  295 Mbits/sec
  veth: 207 Mbits/sec

After I change netdev_linux_rxq_recv_tap and
netdev_linux_rxq_recv_sock to use batch process, the performance
is boosted by about 7 times, here is the result:

  tap:  1.96 Gbits/sec
  veth: 1.47 Gbits/sec

Undoubtedly this is a huge improvement although it can't match
OVS kernel datapath yet.

FYI: here is thr result for OVS kernel datapath:

  tap:  37.2 Gbits/sec
  veth: 36.3 Gbits/sec

Note: performance result is highly related with your test machine
, you shouldn't expect the same results on your test machine.

Signed-off-by: Yi Yang 
---
 lib/netdev-linux.c | 166 ++---
 1 file changed, 108 insertions(+), 58 deletions(-)

diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index f8e59ba..9cb45d5 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -1151,90 +1151,146 @@ auxdata_has_vlan_tci(const struct tpacket_auxdata *aux)
 return aux->tp_vlan_tci || aux->tp_status & TP_STATUS_VLAN_VALID;
 }
 
+/*
+ * Receive packets from raw socket in batch process for better performance,
+ * it can receive NETDEV_MAX_BURST packets at most once, the received
+ * packets are added into *batch. The return value is 0 or errno.
+ *
+ * It also used recvmmsg to reduce multiple syscalls overhead;
+ */
 static int
-netdev_linux_rxq_recv_sock(int fd, struct dp_packet *buffer)
+netdev_linux_batch_rxq_recv_sock(int fd, int mtu,
+ struct dp_packet_batch *batch)
 {
 size_t size;
 ssize_t retval;
-struct iovec iov;
+struct iovec iovs[NETDEV_MAX_BURST];
 struct cmsghdr *cmsg;
 union {
 struct cmsghdr cmsg;
 char buffer[CMSG_SPACE(sizeof(struct tpacket_auxdata))];
-} cmsg_buffer;
-struct msghdr msgh;
-
-/* Reserve headroom for a single VLAN tag */
-dp_packet_reserve(buffer, VLAN_HEADER_LEN);
-size = dp_packet_tailroom(buffer);
-
-iov.iov_base = dp_packet_data(buffer);
-iov.iov_len = size;
-msgh.msg_name = NULL;
-msgh.msg_namelen = 0;
-msgh.msg_iov = 
-msgh.msg_iovlen = 1;
-msgh.msg_control = _buffer;
-msgh.msg_controllen = sizeof cmsg_buffer;
-msgh.msg_flags = 0;
+} cmsg_buffers[NETDEV_MAX_BURST];
+struct mmsghdr mmsgs[NETDEV_MAX_BURST];
+struct dp_packet *buffers[NETDEV_MAX_BURST];
+int i;
+
+for (i = 0; i < NETDEV_MAX_BURST; i++) {
+ buffers[i] = dp_packet_new_with_headroom(VLAN_ETH_HEADER_LEN + mtu,
+  DP_NETDEV_HEADROOM);
+ /* Reserve headroom for a single VLAN tag */
+ dp_packet_reserve(buffers[i], VLAN_HEADER_LEN);
+ size = dp_packet_tailroom(buffers[i]);
+ iovs[i].iov_base = dp_packet_data(buffers[i]);
+ iovs[i].iov_len = size;
+ mmsgs[i].msg_hdr.msg_name = NULL;
+ mmsgs[i].msg_hdr.msg_namelen = 0;
+ mmsgs[i].msg_hdr.msg_iov = [i];
+ mmsgs[i].msg_hdr.msg_iovlen = 1;
+ mmsgs[i].msg_hdr.msg_control = _buffers[i];
+ mmsgs[i].msg_hdr.msg_controllen = sizeof cmsg_buffers[i];
+ mmsgs[i].msg_hdr.msg_flags = 0;
+}
 
 do {
-retval = recvmsg(fd, , MSG_TRUNC);
+retval = recvmmsg(fd, mmsgs, NETDEV_MAX_BURST, MSG_TRUNC, NULL);
 } while (retval < 0 && errno == EINTR);
 
 if (retval < 0) {
-return errno;
-} else if (retval > size) {
-return EMSGSIZE;
+/* Save -errno to retval temporarily */
+retval = -errno;
+goto free_buffers;
 }
 
-dp_packet_set_size(buffer, dp_packet_size(buffer) + retval);
-
-for (cmsg = CMSG_FIRSTHDR(); cmsg; cmsg = CMSG_NXTHDR(, cmsg)) {
-const struct tpacket_auxdata *aux;
-
-if (cmsg->cmsg_level != SOL_PACKET
-|| cmsg->cmsg_type != PACKET_AUXDATA
-|| cmsg->cmsg_len < CMSG_LEN(sizeof(struct tpacket_auxdata))) {
-continue;
+for (i = 0; i < retval; i++) {
+if (mmsgs[i].msg_len < ETH_HEADER_LEN) {
+break;
 }
 
-aux = ALIGNED_CAST(struct tpacket_auxdata *, CMSG_DATA(cmsg));
-if (auxdata_has_vlan_tci(aux)) {
-struct eth_header *eth;
-bool double_tagged;
+dp_packet_set_size(buffers[i],
+   dp_packet_size(buffers[i]) + mmsgs[i].msg_len);
+
+for (cmsg = CMSG_FIRSTHDR([i].msg_hdr); cmsg;
+ cmsg = CMSG_NXTHDR([i].msg_hdr, cmsg)) {
+const struct tpacket_auxdata *aux;
 
-if (retval < ETH_HEADER_LEN) {
-return EINVAL;
+if (cmsg->cmsg_level != SOL_PACKET
+

Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread Ben Pfaff
On Thu, Dec 05, 2019 at 04:29:12PM -0800, Gregory Rose wrote:
> I tried building against the 5.4.2 kernel from kernel.org and found the inet
> frags issue that David pointed out
> To see if there were any other problems I then I ran 'make -i' but found
> nothing else.  It should just be
> a compat layer fixup for the inet frags issue.

Sounds great!

As a side note, I hadn't run into "make -i" before, but I build with
"make -k" as part of my standard "make" command.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCHv4] userspace: Add GTP-U support.

2019-12-05 Thread Ben Pfaff
On Thu, Dec 05, 2019 at 12:43:31PM -0800, William Tu wrote:
> GTP, GPRS Tunneling Protocol, is a group of IP-based communications
> protocols used to carry general packet radio service (GPRS) within
> GSM, UMTS and LTE networks.  GTP protocol has two parts: Signalling
> (GTP-Control, GTP-C) and User data (GTP-User, GTP-U). GTP-C is used
> for setting up GTP-U protocol, which is an IP-in-UDP tunneling
> protocol. Usually GTP is used in connecting between base station for
> radio, Serving Gateway (S-GW), and PDN Gateway (P-GW).
> 
> This patch implements GTP-U protocol for userspace datapath,
> supporting only required header fields and G-PDU message type.
> See spec in:
> https://tools.ietf.org/html/draft-hmm-dmm-5g-uplane-analysis-00
> 
> Signed-off-by: Yi Yang 
> Co-authored-by: Yi Yang 
> Signed-off-by: William Tu 

Thanks a lot!  I made another pass and noticed a few more things.

For some "flags" fields, where it's important to understand the flags,
we break out the flags for user comprehension.  For example, we do this
with TCP flags.  Do you have an idea whether the GTP-U flags are
important enough for this?  If so, then we'd need some additional
changes for parsing and formatting GTP-U flags.  If not, I suggest
changing formatting for them in meta-flow.h from "decimal" to
"hexadecimal" because it's easier to understand bit-mappings from hex to
binary in your head (my suggested patch does that).

I think that flow_get_metadata() should copy the new fields.

These new fields are marked writable.  Is it actually safe to let the
user change the flags field?  It seems to me that all of the bits here
are either fixed or indicate whether some following field is present, so
that changing it could break the interpretation of the packet.  Maybe
the flags should be read-only.

I think that format_flow_tunnel() in lib/match.c should format the new
fields.

The use of "? :" as in netdev_gtpu_build_header() is a GCC extension.  I
think that MSVC will reject it.

Doesn't tun_key_to_attr() need to support the new fields?

I'm pretty suspicious of the treatment of PT_GTPU_MSG packets.  I don't
know what can be done with them.  I bet they have not been tested.

I'm appending a few more minor suggestions.

Thanks again!

Ben

-8<--cut here-->8--

diff --git a/Documentation/faq/configuration.rst 
b/Documentation/faq/configuration.rst
index a9ac9354d0dc..4a98740c5d4d 100644
--- a/Documentation/faq/configuration.rst
+++ b/Documentation/faq/configuration.rst
@@ -227,9 +227,9 @@ Q: Does Open vSwitch support IPv6 GRE?
 
 Q: Does Open vSwitch support GTP-U?
 
-A: Yes. GTP-U (GPRS Tunnelling Protocol User Plane (GTPv1-U))
-is supported in userspace datapath. TEID is set by using tunnel
-key field.
+A: Yes. Starting with version 2.13, the Open vSwitch userspace
+datapath supports GTP-U (GPRS Tunnelling Protocol User Plane
+(GTPv1-U)). TEID is set by using tunnel key field.
 
 ::
 
diff --git a/include/openvswitch/meta-flow.h b/include/openvswitch/meta-flow.h
index d57a36468e19..b3457f231f9a 100644
--- a/include/openvswitch/meta-flow.h
+++ b/include/openvswitch/meta-flow.h
@@ -512,7 +512,7 @@ enum OVS_PACKED_ENUM mf_field_id {
  *
  * Type: u8.
  * Maskable: bitwise.
- * Formatting: decimal.
+ * Formatting: hexadecimal.
  * Prerequisites: none.
  * Access: read/write.
  * NXM: none.
diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c
index 7ae554c87964..bbce5e1f55cb 100644
--- a/lib/netdev-native-tnl.c
+++ b/lib/netdev-native-tnl.c
@@ -738,7 +738,7 @@ netdev_gtpu_pop_header(struct dp_packet *packet)
 
 tnl->gtpu_flags = gtph->md.flags;
 tnl->gtpu_msgtype = gtph->md.msgtype;
-tnl->tun_id = htonll(ntohl(get_16aligned_be32(>teid)));
+tnl->tun_id = be32_to_be64(get_16aligned_be32(>teid));
 
 if (tnl->gtpu_msgtype == GTPU_MSGTYPE_GPDU) {
 struct ip_header *ip;
diff --git a/lib/packets.h b/lib/packets.h
index 6a4d3fb87392..405ea9325c21 100644
--- a/lib/packets.h
+++ b/lib/packets.h
@@ -1498,12 +1498,14 @@ struct gtpu_metadata {
 uint8_t flags;
 uint8_t msgtype;
 };
+BUILD_ASSERT_DECL(sizeof(struct gtpu_metadata) == 2);
 
 struct gtpuhdr {
 struct gtpu_metadata md;
 ovs_be16 len;
 ovs_16aligned_be32 teid;
 };
+BUILD_ASSERT_DECL(sizeof(struct gtpuhdr) == 8);
 
 /* VXLAN protocol header */
 struct vxlanhdr {
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread David Ahern
On 12/5/19 5:29 PM, Gregory Rose wrote:
> 
> On 12/5/2019 3:22 PM, Gregory Rose wrote:
>>
>> On 12/5/2019 2:15 PM, Ben Pfaff wrote:
>>> On Thu, Dec 05, 2019 at 01:14:54PM -0800, Gregory Rose wrote:
 We try to keep our out of tree kernel modules compiling against recent
 kernels and will eventually add support for 5.4.  Right now our
 support is up to 5.0.
>>> My belief is that usually we're only 1-2 releases behind, 4 is more than
>>> I usually expect.  Have we been particularly pressed with other issues
>>> recently?
>>
>> No more than usual I guess.  I know my attention has definitely been
>> elsewhere lately.
>>
>> Let me look into it and scope the effort to pull us up to 5.4. The 5.0
>> kernel isn't even
>> listed at kernel.org with 4.19 being the latest LTS that we support. 
>> If 5.4 is going to be
>> LTS as well then it makes sense to support it.
> 
> I tried building against the 5.4.2 kernel from kernel.org and found the
> inet frags issue that David pointed out
> To see if there were any other problems I then I ran 'make -i' but found
> nothing else.  It should just be
> a compat layer fixup for the inet frags issue.
> 
> Maybe I can get a patch out for 5.4 support next week if no unforeseen
> complications
> arise.  Hopefully that can help David out in a timely manner as well.
> 

That would be a huge help. Thanks, Greg.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH v2 2/3] travis: Move x86-only addon packages to linux-prepare.sh

2019-12-05 Thread Lance Yang
To enable multiple CPU architectures support, it is necessary to move the
x86-only addon packages from .travis.yml file. Otherwise, the x86-only
addon packages will break the builds on some other CPU architectures.

Reviewed-by: Yanqin Wei 
Reviewed-by: Malvika Gupta 
Reviewed-by: Gavin Hu 
Reviewed-by: Ruifeng Wang 
Signed-off-by: Lance Yang 
---
 .travis.yml  | 2 --
 .travis/linux-prepare.sh | 3 ++-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 482efd2..2dc4d43 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,7 +14,6 @@ addons:
   apt:
 packages:
   - bc
-  - gcc-multilib
   - libssl-dev
   - llvm-dev
   - libjemalloc1
@@ -26,7 +25,6 @@ addons:
   - libelf-dev
   - selinux-policy-dev
   - libunbound-dev
-  - libunbound-dev:i386
   - libunwind-dev
 
 before_install: ./.travis/${TRAVIS_OS_NAME}-prepare.sh
diff --git a/.travis/linux-prepare.sh b/.travis/linux-prepare.sh
index 9e3ac0d..6421066 100755
--- a/.travis/linux-prepare.sh
+++ b/.travis/linux-prepare.sh
@@ -18,7 +18,8 @@ pip install --user --upgrade docutils
 if [ "$M32" ]; then
 # 32-bit and 64-bit libunwind can not be installed at the same time.
 # This will remove the 64-bit libunwind and install 32-bit version.
-sudo apt-get install -y libunwind-dev:i386
+sudo apt-get install -y \
+libunwind-dev:i386 libunbound-dev:i386 gcc-multilib
 fi
 
 # IPv6 is supported by kernel but disabled in TravisCI images:
-- 
2.7.4

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


[ovs-dev] [PATCH v2 1/3] dpif-netdev-perf: Fix using of unitialized last_tsc

2019-12-05 Thread Lance Yang
When compiling Open vSwitch on aarch64, the compiler will warn about
an uninitailized variable in lib/dpif-netdev-perf.c. If the clock_gettime
function in rdtsc_syscall fails, the member last_tsc of the unitialized
struct will be returned. In order to avoid the warnings, it is necessary to
initialize the variable before using.

Reviewed-by: Yanqin Wei 
Reviewed-by: Malvika Gupta 
Signed-off-by: Lance Yang 
---
 lib/dpif-netdev-perf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/dpif-netdev-perf.c b/lib/dpif-netdev-perf.c
index baf90b0..58728ab 100644
--- a/lib/dpif-netdev-perf.c
+++ b/lib/dpif-netdev-perf.c
@@ -76,7 +76,7 @@ pmd_perf_estimate_tsc_frequency(void)
 break;
 }
 }
-
+memset(, 0, sizeof s);
 start = cycles_counter_update();
 /* Using xnanosleep as it's interrupt resistant.
  * Sleeping only 100 ms to avoid holding the main thread for too long. */
-- 
2.7.4

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


[ovs-dev] [PATCH v2 3/3] travis: Enable OvS Travis CI for arm

2019-12-05 Thread Lance Yang
Enable part of travis jobs with gcc compiler for arm64 architecture

1. Add arm jobs into the matrix in .travis.yml configuration file
2. To enable OVS-DPDK jobs, set the build target according to
different CPU architectures
3. Temporarily disable sparse checker because of static code checking
failure on arm64

Successful travis build jobs report:
https://travis-ci.org/yzyuestc/ovs/builds/621037339

Reviewed-by: Yanqin Wei 
Reviewed-by: Jieqiang Wang 
Reviewed-by: Gavin Hu 
Signed-off-by: Lance Yang 
---
 .travis.yml| 18 ++
 .travis/linux-build.sh | 16 ++--
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 2dc4d43..f82e484 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -50,6 +50,24 @@ matrix:
 - os: osx
   compiler: clang
   env: OPTS="--disable-ssl"
+- arch: arm64
+  compiler: gcc
+  env: OPTS="--disable-ssl"
+- arch: arm64
+  compiler: gcc
+  env: KERNEL_LIST="5.0 4.20 4.19 4.18 4.17 4.16"
+- arch: arm64
+  compiler: gcc
+  env: KERNEL_LIST="4.15 4.14 4.9 4.4 3.16"
+- arch: arm64
+  compiler: gcc
+  env: DPDK=1 OPTS="--enable-shared"
+- arch: arm64
+  compiler: gcc
+  env: DPDK_SHARED=1
+- arch: arm64
+  compiler: gcc
+  env: DPDK_SHARED=1 OPTS="--enable-shared"
 
 script: ./.travis/${TRAVIS_OS_NAME}-build.sh $OPTS
 
diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh
index bb47b3e..ce6bfd1 100755
--- a/.travis/linux-build.sh
+++ b/.travis/linux-build.sh
@@ -6,7 +6,7 @@ set -x
 CFLAGS_FOR_OVS="-g -O2"
 SPARSE_FLAGS=""
 EXTRA_OPTS="--enable-Werror"
-TARGET="x86_64-native-linuxapp-gcc"
+TARGET=""
 
 function install_kernel()
 {
@@ -87,6 +87,16 @@ function install_dpdk()
 local DPDK_VER=$1
 local VERSION_FILE="dpdk-dir/travis-dpdk-cache-version"
 
+if [ -z "$TARGET" -a -z "$TRAVIS_ARCH" ] ||
+   [ "$TRAVIS_ARCH" == "amd64" ]; then
+TARGET="x86_64-native-linuxapp-gcc"
+elif [ "$TRAVIS_ARCH" == "aarch64" ]; then
+TARGET="arm64-armv8a-linuxapp-gcc"
+else
+echo "Target is unknown"
+exit 1
+fi
+
 if [ "${DPDK_VER##refs/*/}" != "${DPDK_VER}" ]; then
 # Avoid using cache for git tree build.
 rm -rf dpdk-dir
@@ -184,7 +194,9 @@ elif [ "$M32" ]; then
 # difference on 'configure' and 'make' stages.
 export CC="$CC -m32"
 else
-OPTS="--enable-sparse"
+if [ "$TRAVIS_ARCH" != "aarch64" ]; then
+OPTS="--enable-sparse"
+fi
 if [ "$AFXDP" ]; then
 # netdev-afxdp uses memset for 64M for umem initialization.
 SPARSE_FLAGS="${SPARSE_FLAGS} -Wno-memcpy-max-count"
-- 
2.7.4

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


[ovs-dev] [PATCH v2 0/3] Fix issues and enable Travis CI on arm

2019-12-05 Thread Lance Yang
To enable Travis CI on arm, these patches fix some issues and modify shell
scripts to support multi-arch CPU. These patches only enable part of the
travis jobs for arm. The other jobs will be enabled after related issues
are fixed. Regarding the patches to enable ppc64le builds on Travis CI
are under review, some codes or conflicts may need to be merged after
review.

Changes since v1:
- move the initialization code for pmd_perf_stats to an appropriate location
- remove cache split scripts
- merge two patches into a single one
- modify commit message to describe the issue more clearly

Lance Yang (3):
  [ovs-dev] [PATCH 1/3] dpif-netdev-perf: Fix using of unitialized last_tsc
  [ovs-dev] [PATCH 2/3] travis: Move x86-only addon packages to linux-prepare.sh
  [ovs-dev] [PATCH 3/3] travis: Enable OvS Travis CI for arm

 .travis.yml  | 20 ++--
 .travis/linux-build.sh   | 16 ++--
 .travis/linux-prepare.sh |  3 ++-
 lib/dpif-netdev-perf.c   |  2 +-
 4 files changed, 35 insertions(+), 6 deletions(-)

-- 
2.7.4

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


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread Gregory Rose


On 12/5/2019 3:22 PM, Gregory Rose wrote:


On 12/5/2019 2:15 PM, Ben Pfaff wrote:

On Thu, Dec 05, 2019 at 01:14:54PM -0800, Gregory Rose wrote:

We try to keep our out of tree kernel modules compiling against recent
kernels and will eventually add support for 5.4.  Right now our
support is up to 5.0.

My belief is that usually we're only 1-2 releases behind, 4 is more than
I usually expect.  Have we been particularly pressed with other issues
recently?


No more than usual I guess.  I know my attention has definitely been 
elsewhere lately.


Let me look into it and scope the effort to pull us up to 5.4. The 5.0 
kernel isn't even
listed at kernel.org with 4.19 being the latest LTS that we support.  
If 5.4 is going to be

LTS as well then it makes sense to support it.


I tried building against the 5.4.2 kernel from kernel.org and found the 
inet frags issue that David pointed out
To see if there were any other problems I then I ran 'make -i' but found 
nothing else.  It should just be

a compat layer fixup for the inet frags issue.

Maybe I can get a patch out for 5.4 support next week if no unforeseen 
complications

arise.  Hopefully that can help David out in a timely manner as well.

- Greg

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


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread Gregory Rose


On 12/5/2019 2:15 PM, Ben Pfaff wrote:

On Thu, Dec 05, 2019 at 01:14:54PM -0800, Gregory Rose wrote:

We try to keep our out of tree kernel modules compiling against recent
kernels and will eventually add support for 5.4.  Right now our
support is up to 5.0.

My belief is that usually we're only 1-2 releases behind, 4 is more than
I usually expect.  Have we been particularly pressed with other issues
recently?


No more than usual I guess.  I know my attention has definitely been 
elsewhere lately.


Let me look into it and scope the effort to pull us up to 5.4.  The 5.0 
kernel isn't even
listed at kernel.org with 4.19 being the latest LTS that we support.  If 
5.4 is going to be

LTS as well then it makes sense to support it.

Thanks,

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


[ovs-dev] 淘宝双12~先领内部优惠券~再买买买~省钱还返佣

2019-12-05 Thread william


  
 一句话不割~~~早上开会,又降工资,职工降百分之二十,领导降百分之三~~~真是穷谁不能穷领导,富谁不能富工人~~同意点左吧 
 
不想再收到此类邮件,点击退订?退订邮件
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] Donation

2019-12-05 Thread perna
You have a donation of 4,800,000.00 EURO, i won the America lottery worth 40 
million U.S Dollars in America and decided to donate a portion of it to five 
lucky people and charity homes in memory of my late wife who died of cancer. 
Contact me for more details at: infottc...@gmail.com
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread Ben Pfaff
On Thu, Dec 05, 2019 at 01:14:54PM -0800, Gregory Rose wrote:
> We try to keep our out of tree kernel modules compiling against recent
> kernels and will eventually add support for 5.4.  Right now our
> support is up to 5.0. 

My belief is that usually we're only 1-2 releases behind, 4 is more than
I usually expect.  Have we been particularly pressed with other issues
recently?
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread Gregory Rose


On 12/5/2019 1:19 PM, David Ahern wrote:

On 12/5/19 2:14 PM, Gregory Rose wrote:

We try to keep our out of tree kernel modules compiling against recent
kernels and
will eventually add support for 5.4.  Right now our support is up to
5.0.  However,
you can just build the user space code and not bother with building the
out of
tree kernel modules and then just use the built-in openvswitch kernel
module for 5.4.

Is there some specific need for the out of tree kernel modules to
compile on 5.4
right now?


sadly, it is for an out of tree module. STT. I guess I could try
bringing just that one into the kernel and try a build.


I guess it's worth a shot but there might be internal dependencies to 
the other OOT modules
and that could get messy.  Let me know how it goes.  Meanwhile, we'll 
look into adding support

for 5.4 but I can't commit to any timeline.

Good luck!

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


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread David Ahern
On 12/5/19 2:14 PM, Gregory Rose wrote:
> 
> We try to keep our out of tree kernel modules compiling against recent
> kernels and
> will eventually add support for 5.4.  Right now our support is up to
> 5.0.  However,
> you can just build the user space code and not bother with building the
> out of
> tree kernel modules and then just use the built-in openvswitch kernel
> module for 5.4.
> 
> Is there some specific need for the out of tree kernel modules to
> compile on 5.4
> right now?
> 

sadly, it is for an out of tree module. STT. I guess I could try
bringing just that one into the kernel and try a build.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread Gregory Rose

On 12/5/2019 11:52 AM, David Ahern wrote:

Hi:

I am trying to compile ovs code from github for the 5.4 kernel and the
module builds are failing (excerpt pasted below). Is anyone working on
moving the out of tree modules forward to 5.4 now that it is released
and targeted as an LTS?

Thanks,
David


Hi David,

We try to keep our out of tree kernel modules compiling against recent 
kernels and
will eventually add support for 5.4.  Right now our support is up to 
5.0.  However,
you can just build the user space code and not bother with building the 
out of
tree kernel modules and then just use the built-in openvswitch kernel 
module for 5.4.


Is there some specific need for the out of tree kernel modules to 
compile on 5.4

right now?

Thanks,

- Greg


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


[ovs-dev] [PATCHv4] userspace: Add GTP-U support.

2019-12-05 Thread William Tu
GTP, GPRS Tunneling Protocol, is a group of IP-based communications
protocols used to carry general packet radio service (GPRS) within
GSM, UMTS and LTE networks.  GTP protocol has two parts: Signalling
(GTP-Control, GTP-C) and User data (GTP-User, GTP-U). GTP-C is used
for setting up GTP-U protocol, which is an IP-in-UDP tunneling
protocol. Usually GTP is used in connecting between base station for
radio, Serving Gateway (S-GW), and PDN Gateway (P-GW).

This patch implements GTP-U protocol for userspace datapath,
supporting only required header fields and G-PDU message type.
See spec in:
https://tools.ietf.org/html/draft-hmm-dmm-5g-uplane-analysis-00

Signed-off-by: Yi Yang 
Co-authored-by: Yi Yang 
Signed-off-by: William Tu 
---
v3 -> v4:
  - applied Ben's doc revise
  - increment FLOW_WC_SEQ to 42
  - minor fixes
  - travis: https://travis-ci.org/williamtu/ovs-travis/builds/621289678

v2 -> v3:
  - pick up the code from v2, rebase to master
  - many fixes in code, docs, and add more tests
  - travis: https://travis-ci.org/williamtu/ovs-travis/builds/619799361

v1 -> v2:
  - Add new packet_type PT_GTPU_MSG to handle GTP-U signaling message,
GTP-U signaling message should be steered into a control plane handler
by explicit openflow entry in flow table.
  - Fix gtpu_flags and gptu_msgtype set issue.
  - Verify communication with kernel GTP implementation from Jiannan
Ouyang.
  - Fix unit test issue and make sure all the unit tests can pass.
  - This patch series add GTP-U tunnel support in DPDK userspace,
GTP-U is used for carrying user data within the GPRS core network and
between the radio access network and the core network. The user data
transported can be packets in any of IPv4, IPv6, or PPP formats.
---
 Documentation/faq/configuration.rst   |  13 +++
 Documentation/faq/releases.rst|   1 +
 NEWS  |   3 +
 datapath/linux/compat/include/linux/openvswitch.h |   2 +
 include/openvswitch/flow.h|   4 +-
 include/openvswitch/match.h   |   6 ++
 include/openvswitch/meta-flow.h   |  28 ++
 include/openvswitch/packets.h |   4 +-
 lib/dpif-netlink-rtnl.c   |   5 +
 lib/dpif-netlink.c|   5 +
 lib/flow.c|  22 +++--
 lib/flow.h|   2 +-
 lib/match.c   |  30 +-
 lib/meta-flow.c   |  38 
 lib/meta-flow.xml |  79 ++-
 lib/netdev-native-tnl.c   |  85 
 lib/netdev-native-tnl.h   |   8 ++
 lib/netdev-vport.c|  25 -
 lib/nx-match.c|   8 +-
 lib/odp-util.c| 114 +-
 lib/odp-util.h|   2 +-
 lib/ofp-match.c   |   2 +-
 lib/packets.h |  59 +++
 lib/tnl-ports.c   |   3 +
 ofproto/ofproto-dpif-rid.h|   2 +-
 ofproto/ofproto-dpif-xlate.c  |   6 +-
 ofproto/tunnel.c  |   3 +-
 tests/ofproto.at  |   4 +-
 tests/tunnel-push-pop.at  |  22 +
 tests/tunnel.at   |  78 +++
 vswitchd/vswitch.xml  |  24 +
 31 files changed, 658 insertions(+), 29 deletions(-)

diff --git a/Documentation/faq/configuration.rst 
b/Documentation/faq/configuration.rst
index ff3b71a5d4ef..a9ac9354d0dc 100644
--- a/Documentation/faq/configuration.rst
+++ b/Documentation/faq/configuration.rst
@@ -225,6 +225,19 @@ Q: Does Open vSwitch support IPv6 GRE?
 options:remote_ip=fc00:100::1 \
 options:packet_type=legacy_l2
 
+Q: Does Open vSwitch support GTP-U?
+
+A: Yes. GTP-U (GPRS Tunnelling Protocol User Plane (GTPv1-U))
+is supported in userspace datapath. TEID is set by using tunnel
+key field.
+
+::
+
+$ ovs-vsctl add-br br0
+$ ovs-vsctl add-port br0 gtpu0 -- \
+set int gtpu0 type=gtpu options:key= \
+options:remote_ip=172.31.1.1
+
 Q: How do I connect two bridges?
 
 A: First, why do you want to do this?  Two connected bridges are not much
diff --git a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst
index 6702c58a2b6f..4fa28a378603 100644
--- a/Documentation/faq/releases.rst
+++ b/Documentation/faq/releases.rst
@@ -130,6 +130,7 @@ Q: Are all features available with all datapaths?
 Tunnel - Geneve-IPv64.42.6  2.6  NO
 Tunnel - ERSPAN

[ovs-dev] compiling on v5.4 kernel

2019-12-05 Thread David Ahern
Hi:

I am trying to compile ovs code from github for the 5.4 kernel and the
module builds are failing (excerpt pasted below). Is anyone working on
moving the out of tree modules forward to 5.4 now that it is released
and targeted as an LTS?

Thanks,
David


/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:
In function 'inet_frag_evicting':
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:21:49:
error: 'struct inet_frag_queue' has no member named 'fragments'; did you
mean 'rb_fragments'?
  return (q_flags(q) & INET_FRAG_FIRST_IN) && q->fragments != NULL;
 ^
 rb_fragments
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:
At top level:
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:46:50:
warning: 'struct netns_frags' declared inside parameter list will not be
visible outside of this definition or declaration
 static inline void rpl_sub_frag_mem_limit(struct netns_frags *nf, int i)
  ^~~
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:
In function 'rpl_sub_frag_mem_limit':
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:48:19:
error: dereferencing pointer to incomplete type 'struct netns_frags'
  atomic_sub(i, >mem);
   ^~
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:
At top level:
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:52:50:
warning: 'struct netns_frags' declared inside parameter list will not be
visible outside of this definition or declaration
 static inline void rpl_add_frag_mem_limit(struct netns_frags *nf, int i)
  ^~~
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:
In function 'rpl_add_frag_mem_limit':
/home/dahern/oss/ovs.git/datapath/linux/compat/include/net/inet_frag.h:54:19:
error: dereferencing pointer to incomplete type 'struct netns_frags'
  atomic_add(i, >mem);
   ^~
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCHv3] userspace: Add GTP-U support.

2019-12-05 Thread William Tu
On Thu, Dec 05, 2019 at 09:26:06AM -0800, Ben Pfaff wrote:
> On Thu, Dec 05, 2019 at 05:41:45AM -0800, William Tu wrote:
> > One question I have in this patch is whether to increase FLOW_WC_SEQ.
> > And what's the purpose of this number?
> > 
> >  /* This sequence number should be incremented whenever anything involving 
> > flows
> >* or the wildcarding of flows changes.  This will cause build assertion
> >* failures in places which likely need to be updated. */
> >  #define FLOW_WC_SEQ 41
> > 
> > In this patch, the struct flow_tnl is modified but size does not increase,
> > so build assertion is passed.
> 
> The purpose is to trigger build assertions in all the places that are
> likely to require updates when a new field is added.  The change in size
> is just a way to trigger a reminder to update FLOW_WC_SEQ; not all new
> fields change the size, but many new fields do.
> 
> I recommend incrementing it, because the updates to the build assertions
> throughout the tree also help with review.
OK will do it.
Thank you
William
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Re: [ovs-dev] [PATCHv3] userspace: Add GTP-U support.

2019-12-05 Thread Ben Pfaff
On Thu, Dec 05, 2019 at 05:41:45AM -0800, William Tu wrote:
> One question I have in this patch is whether to increase FLOW_WC_SEQ.
> And what's the purpose of this number?
> 
>  /* This sequence number should be incremented whenever anything involving 
> flows
>* or the wildcarding of flows changes.  This will cause build assertion
>* failures in places which likely need to be updated. */
>  #define FLOW_WC_SEQ 41
> 
> In this patch, the struct flow_tnl is modified but size does not increase,
> so build assertion is passed.

The purpose is to trigger build assertions in all the places that are
likely to require updates when a new field is added.  The change in size
is just a way to trigger a reminder to update FLOW_WC_SEQ; not all new
fields change the size, but many new fields do.

I recommend incrementing it, because the updates to the build assertions
throughout the tree also help with review.
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH v2] dpif-netdev-perf: Accurate cycle counter update

2019-12-05 Thread Malvika Gupta
The accurate timing implementation in this patch gets the wall clock counter via
cntvct_el0 register access. This call is portable to all aarch64 architectures
and has been verified on an 64-bit arm server.

Suggested-by: Yanqin Wei 
Signed-off-by: Malvika Gupta 
Reviewed-by: Ilya Maximets 
---
v2:
- Updated patch subject to remove redundant words and enhance clarity.
- Modify code to write directly to s->last_tsc instead of writing to a local
  variable first and then assigning it to s->last_tsc.
---
 lib/dpif-netdev-perf.h | 4 
 1 file changed, 4 insertions(+)

diff --git a/lib/dpif-netdev-perf.h b/lib/dpif-netdev-perf.h
index ce369375b..72645b6b3 100644
--- a/lib/dpif-netdev-perf.h
+++ b/lib/dpif-netdev-perf.h
@@ -220,6 +220,10 @@ cycles_counter_update(struct pmd_perf_stats *s)
 asm volatile("rdtsc" : "=a" (l), "=d" (h));
 
 return s->last_tsc = ((uint64_t) h << 32) | l;
+#elif !defined(_MSC_VER) && defined(__aarch64__)
+asm volatile("mrs %0, cntvct_el0" : "=r" (s->last_tsc));
+
+return s->last_tsc;
 #elif defined(__linux__)
 return rdtsc_syscall(s);
 #else
-- 
2.17.1

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


Re: [ovs-dev] [PATCH 15/20] netdev-offload-dpdk-flow: Support offload of output action

2019-12-05 Thread Sriharsha Basavapatna via dev
On Wed, Dec 4, 2019 at 8:55 PM Eli Britstein  wrote:
>
>
> On 12/3/2019 5:19 PM, Sriharsha Basavapatna wrote:
> > On Wed, Nov 20, 2019 at 9:07 PM Eli Britstein  wrote:
> >> Signed-off-by: Eli Britstein 
> >> Reviewed-by: Oz Shlomo 
> >> ---
> >>   NEWS   |  2 +
> >>   lib/netdev-offload-dpdk-flow.c | 87 
> >> --
> >>   2 files changed, 85 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/NEWS b/NEWS
> >> index 88b818948..ca9c2b230 100644
> >> --- a/NEWS
> >> +++ b/NEWS
> >> @@ -10,6 +10,8 @@ Post-v2.12.0
> >>  if supported by libbpf.
> >>* Add option to enable, disable and query TCP sequence checking in
> >>  conntrack.
> >> +   - DPDK:
> >> + * Add hardware offload support for output actions.
> >>
> >>   v2.12.0 - 03 Sep 2019
> >>   -
> >> diff --git a/lib/netdev-offload-dpdk-flow.c 
> >> b/lib/netdev-offload-dpdk-flow.c
> >> index dbbc45e99..6e7efb315 100644
> >> --- a/lib/netdev-offload-dpdk-flow.c
> >> +++ b/lib/netdev-offload-dpdk-flow.c
> >> @@ -274,6 +274,28 @@ ds_put_flow_action(struct ds *s, const struct 
> >> rte_flow_action *actions)
> >>   } else {
> >>   ds_put_cstr(s, "  RSS = null\n");
> >>   }
> >> +} else if (actions->type == RTE_FLOW_ACTION_TYPE_COUNT) {
> >> +const struct rte_flow_action_count *count = actions->conf;
> >> +
> >> +ds_put_cstr(s, "rte flow count action:\n");
> >> +if (count) {
> >> +ds_put_format(s,
> >> +  "  Count: shared=%d, id=%d\n",
> >> +  count->shared, count->id);
> >> +} else {
> >> +ds_put_cstr(s, "  Count = null\n");
> >> +}
> >> +} else if (actions->type == RTE_FLOW_ACTION_TYPE_PORT_ID) {
> >> +const struct rte_flow_action_port_id *port_id = actions->conf;
> >> +
> >> +ds_put_cstr(s, "rte flow port-id action:\n");
> >> +if (port_id) {
> >> +ds_put_format(s,
> >> +  "  Port-id: original=%d, id=%d\n",
> >> +  port_id->original, port_id->id);
> >> +} else {
> >> +ds_put_cstr(s, "  Port-id = null\n");
> >> +}
> >>   } else {
> >>   ds_put_format(s, "unknown rte flow action (%d)\n", 
> >> actions->type);
> >>   }
> >> @@ -531,19 +553,76 @@ netdev_dpdk_flow_patterns_add(struct flow_patterns 
> >> *patterns,
> >>   return 0;
> >>   }
> >>
> >> +static void
> >> +netdev_dpdk_flow_add_count_action(struct flow_actions *actions)
> >> +{
> >> +struct rte_flow_action_count *count = xzalloc(sizeof *count);
> >> +
> >> +count->shared = 0;
> >> +/* Each flow has a single count action, so no need of id */
> >> +count->id = 0;
> >> +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_COUNT, count);
> >> +}
> >> +
> >> +static void
> >> +netdev_dpdk_flow_add_port_id_action(struct flow_actions *actions,
> >> +struct netdev *outdev)
> >> +{
> >> +struct rte_flow_action_port_id *port_id = xzalloc(sizeof *port_id);
> >> +
> >> +port_id->id = netdev_dpdk_get_port_id(outdev);
> >> +add_flow_action(actions, RTE_FLOW_ACTION_TYPE_PORT_ID, port_id);
> >> +}
> >> +
> >> +static int
> >> +netdev_dpdk_flow_add_output_action(struct flow_actions *actions,
> >> +   const struct nlattr *nla,
> >> +   struct offload_info *info)
> >> +{
> >> +struct netdev *outdev;
> >> +odp_port_t port;
> >> +
> >> +port = nl_attr_get_odp_port(nla);
> >> +outdev = netdev_ports_get(port, info->dpif_class);
> >> +if (outdev == NULL) {
> >> +VLOG_DBG_RL(_rl,
> >> +"Cannot find netdev for odp port %d", port);
> >> +return -1;
> >> +}
> >> +if (!netdev_dpdk_flow_api_supported(outdev)) {
> >> +VLOG_DBG_RL(_rl,
> >> +"Output to %s cannot be offloaded",
> >> +netdev_get_name(outdev));
> >> +return -1;
> >> +}
> >> +
> >> +netdev_dpdk_flow_add_count_action(actions);
> >> +netdev_dpdk_flow_add_port_id_action(actions, outdev);
> >> +netdev_close(outdev);
> >> +
> >> +return 0;
> >> +}
> >> +
> >>   int
> >>   netdev_dpdk_flow_actions_add(struct flow_actions *actions,
> >>struct nlattr *nl_actions,
> >>size_t nl_actions_len,
> >> - struct offload_info *info OVS_UNUSED)
> >> + struct offload_info *info)
> >>   {
> >>   struct nlattr *nla;
> >>   size_t left;
> >>
> >>   NL_ATTR_FOR_EACH_UNSAFE (nla, left, nl_actions, nl_actions_len) {
> >> -VLOG_DBG_RL(_rl,
> >> -"Unsupported action type %d", nl_attr_type(nla));
> >> -return -1;
> >> +if (nl_attr_type(nla) == OVS_ACTION_ATTR_OUTPUT &&
> >> +

Re: [ovs-dev] [PATCH 00/20] netdev datapath actions offload

2019-12-05 Thread Sriharsha Basavapatna via dev
On Thu, Dec 5, 2019 at 2:38 PM Eli Britstein  wrote:
>
>
> On 12/5/2019 9:55 AM, Sriharsha Basavapatna wrote:
> > Hi Eli,
> >
> > Any reason why tnl_pop is not included in this patch set ?
> >
> > Thanks,
> > -Harsha
>
> Currently offloading of vports does not work. Ilya works on that
> together with Ophir.
>
> However, the decap process in OVS-DPDK is much more complex. It consists
> of 2 flows - tnl_pop on the PF, and tunnel flow on the vport.
>
> So, offloading it will be not as straight forward as simple output, drop
> or encap (clone) in this series.
>
> In HW, once we do "VXLAN_DECAP", the outer header is lost. As the outer
> header is required in the vport flow, we won't be able to do the decap
> in the tnl_pop flow.
>
> Instead it will be in the vport flow.
>
> Furthermore, as those are 2 different flows, we must be able to cope
> with a scenario that only the tnl_pop flow exist and hit, and the vport
> flow doesn't.
>
> In this case, we must be able to handle this HW miss, and proceed the
> processing in SW.
>
> Those are all covered in the next series we work on, and will submit it
> once the current output series is accepted.
>
Ok, thanks.
-Harsha
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] Re. Guten Tag

2019-12-05 Thread Mr. David Raymond
Liebste Geliebte,

Ich bin David Raymon. Ein portugiesischer Staatsbьrger. Ich habe gesucht und 
Ihre E-Mail gesehen. Also habe ich beschlossen, Ihnen zu schreiben, ob Ihre 
E-Mail echt ist. Bei mir wurde Speiserцhrenkrebs diagnostiziert. Es hat alle 
Formen der medizinischen Behandlung verunreinigt, und jetzt habe ich nur noch 
ein paar Monate zu leben.

Ich bin sehr reich, war aber nie groЯzьgig; Ich habe den grцЯten Teil meines 
Vermцgens meinen unmittelbaren Familienmitgliedern gegeben. Ich habe 
beschlossen, Almosen an Wohltдtigkeitsorganisationen zu spenden. Ich kann das 
aus gesundheitlichen Grьnden nicht mehr selbst machen. Ich habe einmal 
Familienmitglieder gebeten, etwas Geld an
Wohltдtigkeitsorganisationen zu spenden. Sie haben dies abgelehnt und das Geld 
behalten. Ich habe eine riesige Bareinlage von achtzehn Millionen Dollar bei 
einer Sicherheitsfirma in Amerika. Ich mцchte, dass Sie mir helfen, diese 
Kaution zu sammeln und an Wohltдtigkeitsorganisationen zu senden. Sie werden 
30% dieser Mittel fьr Ihre Unterstьtzung in Anspruch nehmen. Ich mцchte Sie 
bitten, den Erhalt dieser E-Mail so bald wie mцglich zu bestдtigen und sie mit 
absoluter Vertraulichkeit und Aufrichtigkeit zu behandeln.

Bitte antworten Sie aus Sicherheitsgrьnden auf meine private E-Mail-Adresse 
fabiano.ron5...@gmail.com

David Raymon

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


Re: [ovs-dev] [PATCH ovn] system-ovn.at: check HAVE_TCPDUMP in "2 LSs IGMP" test

2019-12-05 Thread Dumitru Ceara
On Thu, Dec 5, 2019 at 11:42 AM Lorenzo Bianconi
 wrote:
>
> Do not run "2 LSs IGMP" unitest if tcpdump is not currently installed on
> the machine
>
> Signed-off-by: Lorenzo Bianconi 

Thanks Lorenzo for the patch. It looks good to me.

Acked-by: Dumitru Ceara 

> ---
>  tests/system-ovn.at | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> index dbff58f24..bf598aec5 100644
> --- a/tests/system-ovn.at
> +++ b/tests/system-ovn.at
> @@ -3128,6 +3128,7 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port 
> patch-.*/d
>  AT_CLEANUP
>
>  AT_SETUP([ovn -- 2 LSs IGMP])
> +AT_SKIP_IF([test $HAVE_TCPDUMP = no])
>  AT_KEYWORDS([ovnigmp])
>
>  ovn_start
> --
> 2.21.0
>

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


Re: [ovs-dev] [PATCHv5] netdev-afxdp: Enable loading XDP program.

2019-12-05 Thread Eelco Chaudron




On 23 Nov 2019, at 1:26, William Tu wrote:


Now netdev-afxdp always forwards all packets to userspace because
it is using libbpf's default XDP program, see 'xsk_load_xdp_prog'.
There are some cases when users want to keep packets in kernel instead
of sending to userspace, for example, management traffic such as SSH
should be processed in kernel.

The patch enables loading the user-provided XDP program by
  $ovs-vsctl -- set int afxdp-p0 options:xdp-obj=

So users can implement their filtering logic or traffic steering idea
in their XDP program, and rest of the traffic passes to AF_XDP socket
handled by OVS.


Did a quick test (no review) and found that we run into a repeat loop 
with best-effort mode:



2019-12-05T14:28:05.687Z|100465|bridge|WARN|could not open network 
device tapVM (No such device)
2019-12-05T14:28:05.688Z|100466|netdev_afxdp|ERR|best-effort mode and 
xdp-obj can't be set together
2019-12-05T14:28:05.688Z|100467|netdev|WARN|eno1: could not set 
configuration (Invalid argument)
2019-12-05T14:28:05.688Z|100468|netdev_afxdp|INFO|eno1: Removing xdp 
program.
2019-12-05T14:28:05.689Z|100469|netdev_afxdp|INFO|Removed XDP program 
ID: 0
2019-12-05T14:28:05.691Z|100470|bridge|WARN|could not open network 
device tapVM (No such device)
2019-12-05T14:28:05.692Z|100471|netdev_afxdp|ERR|best-effort mode and 
xdp-obj can't be set together
2019-12-05T14:28:05.692Z|100472|netdev|WARN|eno1: could not set 
configuration (Invalid argument)
2019-12-05T14:28:05.692Z|100473|netdev_afxdp|INFO|eno1: Removing xdp 
program.
2019-12-05T14:28:05.693Z|100474|netdev_afxdp|INFO|Removed XDP program 
ID: 0
2019-12-05T14:28:05.695Z|100475|bridge|WARN|could not open network 
device tapVM (No such device)
2019-12-05T14:28:05.696Z|100476|netdev_afxdp|ERR|best-effort mode and 
xdp-obj can't be set together
2019-12-05T14:28:05.696Z|100477|netdev|WARN|eno1: could not set 
configuration (Invalid argument)
2019-12-05T14:28:05.696Z|100478|netdev_afxdp|INFO|eno1: Removing xdp 
program.
2019-12-05T14:28:05.697Z|100479|netdev_afxdp|INFO|Removed XDP program 
ID: 0
2019-12-05T14:28:05.699Z|100480|bridge|WARN|could not open network 
device tapVM (No such device)
2019-12-05T14:28:05.700Z|100481|netdev_afxdp|ERR|best-effort mode and 
xdp-obj can't be set together
2019-12-05T14:28:05.700Z|100482|netdev|WARN|eno1: could not set 
configuration (Invalid argument)
2019-12-05T14:28:05.701Z|100483|netdev_afxdp|INFO|eno1: Removing xdp 
program.


Loop also happens when I configure a non existing object:

2019-12-05T14:31:17.562Z|311021|netdev_afxdp|ERR|Invalid xdp-obj 
'/root/af_xdp_kernie.o': No such file or directory.
2019-12-05T14:31:17.562Z|311022|netdev|WARN|eno1: could not set 
configuration (Invalid argument)
2019-12-05T14:31:17.562Z|311023|netdev_afxdp|INFO|eno1: Removing xdp 
program.
2019-12-05T14:31:17.562Z|311024|netdev_afxdp|INFO|Removed XDP program 
ID: 0
2019-12-05T14:31:17.565Z|311025|bridge|WARN|could not open network 
device tapVM (No such device)
2019-12-05T14:31:17.566Z|311026|netdev_afxdp|ERR|Invalid xdp-obj 
'/root/af_xdp_kernie.o': No such file or directory.
2019-12-05T14:31:17.566Z|311027|netdev|WARN|eno1: could not set 
configuration (Invalid argument)
2019-12-05T14:31:17.566Z|311028|netdev_afxdp|INFO|eno1: Removing xdp 
program.
2019-12-05T14:31:17.566Z|311029|netdev_afxdp|INFO|Removed XDP program 
ID: 0
2019-12-05T14:31:17.569Z|311030|bridge|WARN|could not open network 
device tapVM (No such device)
2019-12-05T14:31:17.570Z|311031|netdev_afxdp|ERR|Invalid xdp-obj 
'/root/af_xdp_kernie.o': No such file or directory.
2019-12-05T14:31:17.570Z|311032|netdev|WARN|eno1: could not set 
configuration (Invalid argument)




Signed-off-by: William Tu 
---
v5:
- rebase to master
Feedbacks from Eelco:
- Remove xdp-obj="__default__" case, to remove xdp-obj, use
  ovs-vsctl remove int  options xdp-obj
- Fix problem of xdp program not unloading
  verify by bpftool.
- use xdp-obj instead of xdpobj
- Limitation: xdp-obj doesn't work when using best-effort-mode
  because best-effort mode tried to probe mode by setting up 
queue,

  and loading xdp-obj requires knwoing mode in advance.
  (to support it, we might need to use the
  XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD as in v3)

Testing
- I place two xdp binary here
  https://drive.google.com/open?id=1QCCdNE-5CwlKCFV6Upg9mOPnnbVkUwA5
  [xdpsock_pass.o] Working one, which forwards packets to 
dpif-netdev

  [xdpsock_invalid.o] invalid one, which has no map

v4:
Feedbacks from Eelco.
- First load the program, then configure xsk.
  Let API take care of xdp prog and map loading, don't set
  XSK_LIBBPF_FLAGS__INHIBIT_PROG_LOAD.
- When loading custom xdp, need to close(prog_fd) and 
close(map_fd)

  to release the resources
- make sure prog and map is unloaded by bpftool.
- update doc, afxdp.rst
- Tested-at: 
https://travis-ci.org/williamtu/ovs-travis/builds/608986781


v3:
Feedbacks 

Re: [ovs-dev] [PATCH] netdev-afxdp: Add delay when reconfiguring xsk.

2019-12-05 Thread William Tu
On Wed, Dec 4, 2019 at 10:06 PM William Tu  wrote:
>
> The patch works around an error when reconfigure the netdev-afxdp
> device into different modes. Currently, when OVS destroy xsk, the
> xsk_destruct() in linux kernel calls xdp_put_umem() and defers
> calling xdp_umem_release_deferred().
>
> This creates an -EBUSY error when xsk_socket__create() calls
>   xsk_bind()
> xdp_umem_assign_dev()
>   xdp_get_umem_from_qid()
>
> And this is because xdp_clear_umem_at_qid() is deferred so not
> clearing umem yet. The issue can be reproduced by just changing
> xdp-mode multiple times, ex:
>   ovs-vsctl -- set interface afxdp-p0 \
> options:n_rxq=1 type="afxdp" options:xdp-mode=best-effort
>   ovs-vsctl -- set interface afxdp-p0 \
> options:n_rxq=1 type="afxdp" options:xdp-mode=generic
>
> The patch fixes it by adding a delay, hopefully the umem has
> been properly cleanup.
>
> Signed-off-by: William Tu 
> ---
>  lib/netdev-afxdp.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/lib/netdev-afxdp.c b/lib/netdev-afxdp.c
> index ca2dfd005b9f..84897f1fd025 100644
> --- a/lib/netdev-afxdp.c
> +++ b/lib/netdev-afxdp.c
> @@ -661,6 +661,9 @@ netdev_afxdp_reconfigure(struct netdev *netdev)
>  struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
>  int err = 0;
>
> +/* Time for umem to be released in kernel. */
> +xnanosleep(50);
> +
>  ovs_mutex_lock(>mutex);
>
>  if (netdev->n_rxq == dev->requested_n_rxq
> --
> 2.7.4
>
Now I think it's a bad solution. Let me work on other way
to fix it.

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


Re: [ovs-dev] [PATCHv3] userspace: Add GTP-U support.

2019-12-05 Thread William Tu
On Wed, Dec 4, 2019 at 9:10 PM Ben Pfaff  wrote:
>
> On Wed, Dec 04, 2019 at 06:37:38PM -0800, William Tu wrote:
> > On Wed, Dec 4, 2019 at 3:49 PM Ben Pfaff  wrote:
> > >
> > > On Mon, Dec 02, 2019 at 02:19:29PM -0800, William Tu wrote:
> > > > GTP, GPRS Tunneling Protocol, is a group of IP-based communications
> > > > protocols used to carry general packet radio service (GPRS) within
> > > > GSM, UMTS and LTE networks.  GTP protocol has two parts: Signalling
> > > > (GTP-Control, GTP-C) and User data (GTP-User, GTP-U). GTP-C is used
> > > > for setting up GTP-U protocol, which is an IP-in-UDP tunneling
> > > > protocol. Usually GTP is used in connecting between base station for
> > > > radio, Serving Gateway (S-GW), and PDN Gateway (P-GW).
> > > >
> > > > This patch implements GTP-U protocol for userspace datapath,
> > > > supporting only required header fields and G-PDU message type.
> > > > See spec in:
> > > > https://tools.ietf.org/html/draft-hmm-dmm-5g-uplane-analysis-00
> > > >
> > > > Signed-off-by: Yi Yang 
> > > > Co-authored-by: Yi Yang 
> > > > Signed-off-by: William Tu 
> > >
> > > Seems reasonable.
> > >
> > > Is there a larger goal here or are you just interested in the protocol?
> > >
> > Hi Ben,
> >
> > People compare vSwitch features and I always see OVS doesn't
> > support GTP-U. Other vSwitches such as VPP/tungsten vrouter all
> > support it. Since we have GTP-U v2 patch a year ago, so I'm
> > thinking about finishing it.
>
> OK!  That makes sense.  Thanks for doing the work!

Hi Ben,
One question I have in this patch is whether to increase FLOW_WC_SEQ.
And what's the purpose of this number?

 /* This sequence number should be incremented whenever anything involving flows
   * or the wildcarding of flows changes.  This will cause build assertion
   * failures in places which likely need to be updated. */
 #define FLOW_WC_SEQ 41

In this patch, the struct flow_tnl is modified but size does not increase,
so build assertion is passed.
--- a/include/openvswitch/packets.h
+++ b/include/openvswitch/packets.h
@@ -43,7 +43,9 @@ struct flow_tnl {
 uint32_t erspan_idx;
 uint8_t erspan_dir;
 uint8_t erspan_hwid;
-uint8_t pad1[6]; /* Pad to 64 bits. */
+uint8_t gtpu_flags;
+uint8_t gtpu_msgtype;
+uint8_t pad1[4]; /* Pad to 64 bits. */
 struct tun_metadata metadata;
 };

Thanks

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


Re: [ovs-dev] [PATCH v3 00/10] Add support for offloading CT datapath rules to TC

2019-12-05 Thread Paul Blakey

On 12/4/2019 2:26 PM, Simon Horman wrote:
> On Wed, Dec 04, 2019 at 08:10:10AM +, Paul Blakey wrote:
>> On 12/3/2019 6:41 PM, Simon Horman wrote:
>>> On Tue, Dec 03, 2019 at 03:45:24PM +0200, Roi Dayan wrote:
 The following patchset introduces hardware offload of OVS connection
 tracking datapath rules.

 OVS uses ct() and recirc() (recirculation) actions and 
 recirc_id()/ct_state()
 matches to support connection tracking.

 The datapath rules are in the form of:

 recirc_id(0),in_port(dev1),eth_type(0x0800),ct_state(-trk) 
 actions:ct(),recirc(2)
 recirc_id(2),in_port(dev1),eth_type(0x0800),ct_state(+trk+est) actions:4

 This patchset will translate ct_state() and recirc_id() matches to tc
 ct_state and chain matches respectively. The datapath actions ct() and 
 recirc()
 will be translated to tc actions ct and goto chain respectively.

 The tc equivalent commands for the above rules are:

 $ tc filter add dev dev1 ingress \
   prio 1 chain 0 proto ip \
   flower tcp ct_state -trk \
   action ct pipe \
   action goto chain 2
   
 $ tc filter add dev dev1 ingress \
   prio 1 chain 2 proto ip \
   flower tcp ct_state +trk+est \
   action mirred egress redirect dev dev2
>>> Hi Roi,
>>>
>>> I understand that this patchset handles adding rules as described above.
>>> But do we also need a patchset to enable offload of NF flowtable,
>>> so conntrack entries are offloaded?
>> Yes it would be added to tc, then a upcoming kernel patchset you
>> describe will actually offloaded this via act ct  -> nf flow table
>> offload like what nft currently does.
>>
>> We will submitting that to linux kernel soon.
> Thanks, my follow-up question is what is the run-time effect of applying
> this patch-set (and all corresponding kernel patches) but not the follow-up
> described above? Are flows offloaded/not-offloaded in a manner that
> allows the system to work as it would (offload aside) without this
> patchset?

You mean if it would be just in tc (the nf flow table -> driver part 
doesn't exists/enabled or driver doesn't support it)?

Then tc will handle the connection tracking, similar to OvS, and there 
should be no issues.

It will just be not hardware offloaded, same as if we set the ovs tc 
policy to software only.


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


[ovs-dev] SEO Продвижение

2019-12-05 Thread светуха
Гарантированное продвижение сайта в ТОП 3 

vt...@mail.ru

+7(904) 925-89-94

Наши направления:

SEOПродвижение,

Повышение трафика на сайт,

Раскрутка по поисковой видимости, Продвижение по запросам,

Работы по оптимизации,

Техподдержка сайта.

Отправить заявку

Составление семантического ядра, Составление списка минус слов, Настройка 
таргетинга по ГЕО, времени, возрасту,

Подключение системы статистики и аналитики,

Работы по увеличению конверсии сайта или лендинга

Отправить заявку

Написание УТП для объявления,

Парсинг объявлений,

Размещение объявлений ,

Регистрация аккаунтов с переадресацией, Обход блокировок,

Рандомизация текста и фото,

Работа по всем городам и категориям

Отправить заявку
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev


[ovs-dev] [PATCH v3 ovn 2/2] northd: add logical flows for dhcpv6 pfd parsing

2019-12-05 Thread Lorenzo Bianconi
Introduce logical flows in ovn router pipeline in order to parse dhcpv6
advertise/reply from IPv6 prefix delegation router.
Do not overwrite ipv6_ra_pd_list info in options column of SB port_binding
table written by ovn-controller

Signed-off-by: Lorenzo Bianconi 
---
 northd/ovn-northd.c |  69 +++-
 ovn-nb.xml  |  17 +++
 tests/atlocal.in|   5 +-
 tests/system-ovn.at | 109 
 4 files changed, 198 insertions(+), 2 deletions(-)

diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index f0847d81e..8c50218ee 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -2644,6 +2644,8 @@ ovn_port_update_sbrec(struct northd_context *ctx,
   struct sset *active_ha_chassis_grps)
 {
 sbrec_port_binding_set_datapath(op->sb, op->od->sb);
+const char *ipv6_pd_list = NULL;
+
 if (op->nbrp) {
 /* If the router is for l3 gateway, it resides on a chassis
  * and its port type is "l3gateway". */
@@ -2766,6 +2768,12 @@ ovn_port_update_sbrec(struct northd_context *ctx,
 smap_add(, "l3gateway-chassis", chassis_name);
 }
 }
+
+ipv6_pd_list = smap_get(>sb->options, "ipv6_ra_pd_list");
+if (ipv6_pd_list) {
+smap_add(, "ipv6_ra_pd_list", ipv6_pd_list);
+}
+
 sbrec_port_binding_set_options(op->sb, );
 smap_destroy();
 
@@ -2815,6 +2823,12 @@ ovn_port_update_sbrec(struct northd_context *ctx,
 smap_add_format(,
 "qdisc_queue_id", "%d", queue_id);
 }
+
+ipv6_pd_list = smap_get(>sb->options, "ipv6_ra_pd_list");
+if (ipv6_pd_list) {
+smap_add(, "ipv6_ra_pd_list", ipv6_pd_list);
+}
+
 sbrec_port_binding_set_options(op->sb, );
 smap_destroy();
 if (ovn_is_known_nb_lsp_type(op->nbsp->type)) {
@@ -2864,6 +2878,12 @@ ovn_port_update_sbrec(struct northd_context *ctx,
 if (chassis) {
 smap_add(, "l3gateway-chassis", chassis);
 }
+
+ipv6_pd_list = smap_get(>sb->options, "ipv6_ra_pd_list");
+if (ipv6_pd_list) {
+smap_add(, "ipv6_ra_pd_list", ipv6_pd_list);
+}
+
 sbrec_port_binding_set_options(op->sb, );
 smap_destroy();
 } else {
@@ -7833,7 +7853,36 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap 
*ports,
 free(snat_ips);
 }
 
-/* Logical router ingress table 3: IP Input for IPv6. */
+/* DHCPv6 reply handling */
+HMAP_FOR_EACH (op, key_node, ports) {
+if (!op->nbrp) {
+continue;
+}
+
+if (op->derived) {
+continue;
+}
+
+struct lport_addresses lrp_networks;
+if (!extract_lrp_networks(op->nbrp, _networks)) {
+continue;
+}
+
+for (size_t i = 0; i < lrp_networks.n_ipv6_addrs; i++) {
+ds_clear();
+ds_clear();
+ds_put_format(, "ip6.dst == %s && udp.src == 547 &&"
+  " udp.dst == 546",
+  lrp_networks.ipv6_addrs[i].addr_s);
+ds_put_format(, "reg0 = 0; handle_dhcpv6_reply { "
+  "eth.dst <-> eth.src; ip6.dst <-> ip6.src; "
+  "outport <-> inport; output; };");
+ovn_lflow_add(lflows, op->od, S_ROUTER_IN_IP_INPUT, 100,
+  ds_cstr(), ds_cstr());
+}
+}
+
+/* Logical router ingress table 1: IP Input for IPv6. */
 HMAP_FOR_EACH (op, key_node, ports) {
 if (!op->nbrp) {
 continue;
@@ -8634,6 +8683,24 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap 
*ports,
 continue;
 }
 
+struct smap options;
+/* enable IPv6 prefix delegation */
+bool prefix_delegation = smap_get_bool(>nbrp->options,
+   "prefix_delegation", false);
+if (prefix_delegation) {
+smap_clone(, >sb->options);
+smap_add(, "ipv6_prefix_delegation", "true");
+sbrec_port_binding_set_options(op->sb, );
+smap_destroy();
+}
+
+if (smap_get_bool(>nbrp->options, "prefix", false)) {
+smap_clone(, >sb->options);
+smap_add(, "ipv6_prefix", "true");
+sbrec_port_binding_set_options(op->sb, );
+smap_destroy();
+}
+
 const char *address_mode = smap_get(
 >nbrp->ipv6_ra_configs, "address_mode");
 
diff --git a/ovn-nb.xml b/ovn-nb.xml
index 5ae52bbde..d7fddcae2 100644
--- a/ovn-nb.xml
+++ b/ovn-nb.xml
@@ -2142,6 +2142,23 @@
   to true.
 
   
+
+  
+
+  If set to true, enable IPv6 prefix delegation state
+  machine on this logical router port 

[ovs-dev] [PATCH v3 ovn 1/2] controller: add ipv6 prefix delegation state machine

2019-12-05 Thread Lorenzo Bianconi
Introduce IPv6 Prefix delegation state machine according to RFC 3633
https://tools.ietf.org/html/rfc3633.
Add handle_dhcpv6_reply controller action to parse advertise/reply from
IPv6 delegation server. Advertise/reply are parsed running respectively:
- pinctrl_parse_dhcv6_advt
- pinctrl_parse_dhcv6_reply
The IPv6 requesting router starts sending dhcpv6 solicit through the logical
router port marked with ipv6_prefix_delegation set to true.
An IPv6 prefix will be requested for each logical router port marked
with "prefix" set to true in option column of logical router port table.
Save IPv6 prefix received by IPv6 delegation router in the options columns of
SB port binding table in order to be reused by Router Advertisement framework
run by ovn logical router pipeline.
IPv6 Prefix delegation state machine is enabled on Gateway Router or on
a Gateway Router Port

Signed-off-by: Lorenzo Bianconi 
---
 controller/pinctrl.c  | 607 ++
 include/ovn/actions.h |   8 +-
 lib/actions.c |  22 ++
 lib/ovn-l7.h  |  19 ++
 ovn-sb.xml|   8 +
 tests/ovn.at  |   6 +
 utilities/ovn-trace.c |   3 +
 7 files changed, 672 insertions(+), 1 deletion(-)

diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index c886b21d9..0ef3aef31 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -270,6 +270,19 @@ static void pinctrl_ip_mcast_handle_igmp(
 const struct match *md,
 struct ofpbuf *userdata);
 
+static void init_ipv6_prefixd(void);
+static void destroy_ipv6_prefixd(void);
+static void ipv6_prefixd_wait(long long int timeout);
+static void
+prepare_ipv6_prefix_req(struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
+struct ovsdb_idl_index *sbrec_port_binding_by_name,
+const struct hmap *local_datapaths,
+const struct sbrec_chassis *chassis,
+const struct sset *active_tunnels)
+OVS_REQUIRES(pinctrl_mutex);
+static void
+send_ipv6_prefix_msg(struct rconn *swconn, long long int *send_prefixd_time)
+OVS_REQUIRES(pinctrl_mutex);
 static bool may_inject_pkts(void);
 
 static void init_put_vport_bindings(void);
@@ -457,6 +470,7 @@ pinctrl_init(void)
 init_put_mac_bindings();
 init_send_garps_rarps();
 init_ipv6_ras();
+init_ipv6_prefixd();
 init_buffered_packets_map();
 init_event_table();
 ip_mcast_snoop_init();
@@ -544,6 +558,57 @@ set_actions_and_enqueue_msg(struct rconn *swconn,
 ofpbuf_uninit();
 }
 
+static struct shash ipv6_prefixd;
+
+enum {
+PREFIX_SOLICIT,
+PREFIX_PENDING,
+PREFIX_DONE,
+};
+
+struct ipv6_prefixd_state {
+long long int next_announce;
+struct in6_addr ipv6_addr;
+struct eth_addr ea;
+struct eth_addr cmac;
+int64_t port_key;
+int64_t metadata;
+struct in6_addr prefix;
+unsigned plife_time;
+unsigned vlife_time;
+unsigned aid;
+unsigned t1;
+unsigned t2;
+int8_t plen;
+int state;
+};
+
+static void
+init_ipv6_prefixd(void)
+{
+shash_init(_prefixd);
+}
+
+static void
+ipv6_prefixd_delete(struct ipv6_prefixd_state *pfd)
+{
+if (pfd) {
+free(pfd);
+}
+}
+
+static void
+destroy_ipv6_prefixd(void)
+{
+struct shash_node *iter, *next;
+SHASH_FOR_EACH_SAFE (iter, next, _prefixd) {
+struct ipv6_prefixd_state *pfd = iter->data;
+ipv6_prefixd_delete(pfd);
+shash_delete(_prefixd, iter);
+}
+shash_destroy(_prefixd);
+}
+
 struct buffer_info {
 struct ofpbuf ofpacts;
 struct dp_packet *p;
@@ -967,6 +1032,254 @@ pinctrl_handle_tcp_reset(struct rconn *swconn, const 
struct flow *ip_flow,
 dp_packet_uninit();
 }
 
+static void
+pinctrl_parse_dhcv6_advt(struct rconn *swconn, const struct flow *ip_flow,
+ struct dp_packet *pkt_in, const struct match *md,
+ struct ofpbuf *userdata)
+{
+struct udp_header *udp_in = dp_packet_l4(pkt_in);
+unsigned char *in_dhcpv6_data = (unsigned char *)(udp_in + 1);
+size_t dlen = MIN(ntohs(udp_in->udp_len), dp_packet_l4_size(pkt_in));
+uint8_t *data, *end = (uint8_t *)udp_in + dlen;
+int len = 0;
+
+data = xmalloc(dlen);
+if (!data) {
+return;
+}
+
+in_dhcpv6_data += 4;
+
+while (in_dhcpv6_data < end) {
+struct dhcpv6_opt_header *in_opt =
+ (struct dhcpv6_opt_header *)in_dhcpv6_data;
+int opt_len = sizeof *in_opt + ntohs(in_opt->len);
+
+if (dlen < opt_len + len) {
+goto out;
+}
+
+switch (ntohs(in_opt->code)) {
+case DHCPV6_OPT_IA_PD: {
+int orig_len = len, hdr_len = 0, size = sizeof *in_opt + 12;
+
+memcpy([len], in_opt, size);
+in_opt = (struct dhcpv6_opt_header *)(in_dhcpv6_data + size);
+len += size;
+
+while (size < opt_len) {
+int flen = sizeof *in_opt + ntohs(in_opt->len);
+
+   

[ovs-dev] [PATCH v3 ovn 0/2] Add IPv6 Prefix delegation (RFC3633)

2019-12-05 Thread Lorenzo Bianconi
Introduce IPv6 Prefix delegation state machine according to RFC 3633
https://tools.ietf.org/html/rfc3633.
Add handle_dhcpv6_reply controller action to parse advertise/reply from
IPv6 delegation server.
Introduce logical flows in ovn router pipeline in order to parse dhcpv6
advertise/reply from IPv6 prefix delegation router.
This series relies on the following OVS commit:
https://github.com/openvswitch/ovs/commit/cec89046f72cb044b068ba6a4e30dbcc4292c4c1

Changes since v2:
- add unitest support in system-ovn.at

Changes since v1:
- rebase on top of ovn master branch
- request an IPv6 prefix for each 'downstream' logical router port marked with
  prefix set to true
- add missing documentation
- rename dhcp6_server_pkt in handle_dhcpv6_reply

Lorenzo Bianconi (2):
  controller: add ipv6 prefix delegation state machine
  northd: add logical flows for dhcpv6 pfd parsing

 controller/pinctrl.c  | 607 ++
 include/ovn/actions.h |   8 +-
 lib/actions.c |  22 ++
 lib/ovn-l7.h  |  19 ++
 northd/ovn-northd.c   |  69 -
 ovn-nb.xml|  17 ++
 ovn-sb.xml|   8 +
 tests/atlocal.in  |   5 +-
 tests/ovn.at  |   6 +
 tests/system-ovn.at   | 109 
 utilities/ovn-trace.c |   3 +
 11 files changed, 870 insertions(+), 3 deletions(-)

-- 
2.21.0

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


[ovs-dev] [PATCH ovn] system-ovn.at: check HAVE_TCPDUMP in "2 LSs IGMP" test

2019-12-05 Thread Lorenzo Bianconi
Do not run "2 LSs IGMP" unitest if tcpdump is not currently installed on
the machine

Signed-off-by: Lorenzo Bianconi 
---
 tests/system-ovn.at | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index dbff58f24..bf598aec5 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -3128,6 +3128,7 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port 
patch-.*/d
 AT_CLEANUP
 
 AT_SETUP([ovn -- 2 LSs IGMP])
+AT_SKIP_IF([test $HAVE_TCPDUMP = no])
 AT_KEYWORDS([ovnigmp])
 
 ovn_start
-- 
2.21.0

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


Re: [ovs-dev] [PATCH v2 1/1] dpdk: Update to use DPDK 19.11.

2019-12-05 Thread Stokes, Ian




On 12/5/2019 8:50 AM, David Marchand wrote:

On Wed, Dec 4, 2019 at 10:29 PM Stokes, Ian  wrote:

Thanks to all for helping with patches, reviewing and testing this
series throughout the year. It's definitely made the process of
upgrading DPDK easier.

I've pushed this to master as we seem to have the critical numbers of
acks and reviews.


Thanks Ian!

Should dpdk-latest be realigned to master?
There is no pressure on this anyway, we can work on master atm.


Yes, good point, I'll rebase and push.

Regards
Ian

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


Re: [ovs-dev] [PATCH 00/20] netdev datapath actions offload

2019-12-05 Thread Eli Britstein


On 12/5/2019 9:55 AM, Sriharsha Basavapatna wrote:
> Hi Eli,
>
> Any reason why tnl_pop is not included in this patch set ?
>
> Thanks,
> -Harsha

Currently offloading of vports does not work. Ilya works on that 
together with Ophir.

However, the decap process in OVS-DPDK is much more complex. It consists 
of 2 flows - tnl_pop on the PF, and tunnel flow on the vport.

So, offloading it will be not as straight forward as simple output, drop 
or encap (clone) in this series.

In HW, once we do "VXLAN_DECAP", the outer header is lost. As the outer 
header is required in the vport flow, we won't be able to do the decap 
in the tnl_pop flow.

Instead it will be in the vport flow.

Furthermore, as those are 2 different flows, we must be able to cope 
with a scenario that only the tnl_pop flow exist and hit, and the vport 
flow doesn't.

In this case, we must be able to handle this HW miss, and proceed the 
processing in SW.

Those are all covered in the next series we work on, and will submit it 
once the current output series is accepted.

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


Re: [ovs-dev] [PATCH v2 1/1] dpdk: Update to use DPDK 19.11.

2019-12-05 Thread David Marchand
On Wed, Dec 4, 2019 at 10:29 PM Stokes, Ian  wrote:
> Thanks to all for helping with patches, reviewing and testing this
> series throughout the year. It's definitely made the process of
> upgrading DPDK easier.
>
> I've pushed this to master as we seem to have the critical numbers of
> acks and reviews.

Thanks Ian!

Should dpdk-latest be realigned to master?
There is no pressure on this anyway, we can work on master atm.


-- 
David Marchand

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


[ovs-dev] Congratulation

2019-12-05 Thread Nations
Address: Ring Rd E, Accra
Hours: Closed · Opens 7:30AM
Phone: 30 221 5665

Attention:

Congratulation! United Nations has approved Two Million Dollars ($2m) for you 
as part of you compensation Please for more details get back to us for more 
details and direction to paying bank in West Africa Ghana.  

Thanks
Antуnio Guterres
Un Secretary General

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


Re: [ovs-dev] [PATCH ovn v8] ovn-controller: Fix use of dangling pointers in I-P runtime_data.

2019-12-05 Thread Dumitru Ceara
On Wed, Dec 4, 2019 at 10:27 PM Han Zhou  wrote:
>
>
>
> On Wed, Dec 4, 2019 at 8:28 AM Dumitru Ceara  wrote:
> >
> > The incremental processing engine might stop a run before the
> > en_runtime_data node is processed. In such cases the ed_runtime_data
> > fields might contain pointers to already deleted SB records. For
> > example, if a port binding corresponding to a patch port is removed from
> > the SB database and the incremental processing engine aborts before the
> > en_runtime_data node is processed then the corresponding local_datapath
> > hashtable entry in ed_runtime_data is stale and will store a pointer to
> > the already freed sbrec_port_binding record.
> >
> > This will cause invalid memory accesses in various places (e.g.,
> > pinctrl_run() -> prepare_ipv6_ras()).
> >
> > To fix the issue we introduce the engine_get_data() API which must be
> > called in order to safely access internal node data. If the node is in
> > state EN_STALE or EN_ABORTED, engine_get_data() returns NULL as the
> > references might be stale.
> >
> > This commit also adds an "is_valid()" method to engine nodes to allow
> > users to override the default behavior of determining if data is valid in a
> > node (e.g., for the ct-zones node the data is always safe to access).
> >
> > Also, all interactions with node data outside inc-proc-eng.c are now
> > performed through APIs and never by directly accessing the node->data
> > field. This makes it easier to ensure that we don't access invalid
> > (stale) data.
> >
> > CC: Han Zhou 
> > Fixes: ca278d98a4f5 ("ovn-controller: Initial use of incremental engine - 
> > quiet mode.")
> > Signed-off-by: Dumitru Ceara 
> >
> > ---
> > v8:
> > - First two patches were applied to master, so resending the last patch
> >   in the series as standalone patch.
> > - Address Han's comments:
> > - Remove internal_data from engine_node.
> > - Use the newly added engine_get_data() to make sure we access valid
> >   data outside the incremental processing engine.
> > - Remove data storage outside the nodes and have the init()
> >   callbacks allocate and initialize required memory.
> > - Also, for better data encapsulations:
> > - Remove all references of engine_node->data from ovn-controller.c
> >   and use inc-proc-eng APIs to access the data.
> > - Change all init/cleanup/run/change_handlers to use data supplied
> >   as argument.
> > - Use the newly added engine_get_input_data api to access input node
> >   data.
> > - At init time, use engine_get_internal_data() to initialize the
> >   callback arguments for the unix cmd handlers and to initialize
> >   ofctrl.
> > ---
> >  controller/ovn-controller.c | 457 
> > +++-
> >  lib/inc-proc-eng.c  |  59 +-
> >  lib/inc-proc-eng.h  | 115 ---
> >  3 files changed, 370 insertions(+), 261 deletions(-)
> >
> > diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c
> > index 64c44c9..5874776 100644
> > --- a/controller/ovn-controller.c
> > +++ b/controller/ovn-controller.c
> > @@ -739,26 +739,25 @@ struct ed_type_ofctrl_is_connected {
> >  bool connected;
> >  };
> >
> > -static void
> > -en_ofctrl_is_connected_init(struct engine_node *node)
> > +static void *
> > +en_ofctrl_is_connected_init(struct engine_node *node OVS_UNUSED,
> > +struct engine_arg *arg OVS_UNUSED)
> >  {
> > -struct ed_type_ofctrl_is_connected *data =
> > -(struct ed_type_ofctrl_is_connected *)node->data;
> > -data->connected = false;
> > +struct ed_type_ofctrl_is_connected *data = xzalloc(sizeof *data);
> > +return data;
> >  }
> >
> >  static void
> > -en_ofctrl_is_connected_cleanup(struct engine_node *node OVS_UNUSED)
> > +en_ofctrl_is_connected_cleanup(void *data OVS_UNUSED)
> >  {
> >  }
> >
> >  static void
> > -en_ofctrl_is_connected_run(struct engine_node *node)
> > +en_ofctrl_is_connected_run(struct engine_node *node, void *data)
> >  {
> > -struct ed_type_ofctrl_is_connected *data =
> > -(struct ed_type_ofctrl_is_connected *)node->data;
> > -if (data->connected != ofctrl_is_connected()) {
> > -data->connected = !data->connected;
> > +struct ed_type_ofctrl_is_connected *of_data = data;
> > +if (of_data->connected != ofctrl_is_connected()) {
> > +of_data->connected = !of_data->connected;
> >  engine_set_node_state(node, EN_UPDATED);
> >  return;
> >  }
> > @@ -773,21 +772,24 @@ struct ed_type_addr_sets {
> >  struct sset updated;
> >  };
> >
> > -static void
> > -en_addr_sets_init(struct engine_node *node)
> > +static void *
> > +en_addr_sets_init(struct engine_node *node OVS_UNUSED,
> > +  struct engine_arg *arg OVS_UNUSED)
> >  {
> > -struct ed_type_addr_sets *as = (struct ed_type_addr_sets *)node->data;
> > +struct ed_type_addr_sets *as = xzalloc(sizeof *as);
> > +
> >