Giter Club home page Giter Club logo

netbricks's Introduction

NetBricks is a Rust based framework for NFV development. Please refer to the paper for information about the architecture and design. Currently NetBricks requires a relatively modern Linux version.

Building

NetBricks can be built either using a Rust nightly build or using Rust built from the current Git head. In the later case we also build musl and statically link to things. Below we provide basic instructions for both.

Finally, in addition to the above options, NetBricks can also be built within a Docker container. In this case, you do not need to install any of the dependencies, and the final product can be run the same. However to run NetBricks you still need to be on a machine that is correctly configured to run DPDK (see here for more details), and you still need to install Rust nightly (for libraries). Please see the container build instructions for more information.

Using Rust Nightly

First obtain Rust nightly. I use rustup, in which case the following works

curl https://sh.rustup.rs -sSf | sh  # Install rustup
source $HOME/.cargo/env
rustup install nightly
rustup default nightly

Then clone this repository and run build.sh

./build.sh

This should download DPDK, and build all of NetBricks.

Using Rust from Git

The instructions for doing so are simple, however building takes significantly longer in this case (and consumes tons of memory), so do this only if you have lots of time and memory. Building is as simple as

export RUST_STATIC=1
./build.sh

Dependencies

Building NetBricks requires the following dependency packages (on Debian):

apt-get install libgnutls30 libgnutls-openssl-dev libcurl4-gnutls-dev libnuma-dev libpcap-dev

NetBricks also supports using SCTP as a control protocol. SCTP support requires the use of libsctp (this is an optional dependency) which can be installed on Debian using:

apt-get install libsctp-dev

Tuning

Changing some Linux parameters, including disabling C-State, and P-State; and isolating CPUs can greatly benefit NF performance. In addition to these boot-time settings, runtime settings (e.g., disabling uncore frequency scaling and setting the appropriate flags for Linux power management QoS) can greatly improve performance. The energy.sh in scripts/tuning will set these parameter appropriately, and it is recommended you run this before running the system.

Container Build

You must have Docker installed. Once this is done, just run

./build.sh build_container 

This will build and copy the binaries over to the target subdirectory. As noted above, you can run it if you have a DPDK compatible machine.

Example NFs

This repository includes a set of example NFs under the test directory. A complete list of example can be found by running

./build.sh run

The build script can be used to run these examples as

./build.sh run <example name> <options>

Passing -h will provide a list of options. All of these examples accept one or more ports as input. Ports can be specified as one of:

  • PCI ID of a NIC
  • dpdk:<PMD spec> where PMD spec can be something like dpdk:eth_pcap0,rx_pcap=$HOME/tcpflow/tests/udp.pcap,tx_pcap=out.pcap which specifies a PCAP file should be used. See DPDK source for other PMD drivers that are available.
  • ovs:<integer> to connect to an OpenVSwitch DPDK ring port (dpdkr).
  • bess:<port name> to connect to a BESS ZeroCopyVPort

Future Work

Support for futures for control plane functionality.

netbricks's People

Contributors

apanda avatar dimbleby avatar keonjang avatar levaitamas avatar melvinw avatar ncarter100 avatar nebgnahz avatar oli-obk avatar sangjinhan avatar shwang avatar tkms1122 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netbricks's Issues

compilation errors on build

on Ubuntu 18.04 LTS, using Rust nightly,

error[E0588]: packed type cannot transitively contain a `[repr(align)]` type
  --> framework/src/shared_state/directory.rs:13:1
   |
13 | / pub struct DirectoryHeader {
14 | |     entries: AtomicUsize,
15 | |     // Used to signal that snapshotting is in progress.
16 | |     current_version: AtomicUsize,
17 | |     committed_version: AtomicUsize,
18 | |     length: usize,
19 | | }
   | |_^

unit test failure?

I just get this one (the rest pass) while running netbricks on a container:


---- native_include::bindgen_test_layout_max_align_t stdout ----
	thread 'native_include::bindgen_test_layout_max_align_t' panicked at 'assertion failed: `(left == right)`
  left: `24`,
 right: `32`: Size of: max_align_t', /opt/netbricks/target/release/build/e2d2-8829eb254440fd22/out/dpdk_bindings.rs:1535:438
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::_print
             at libstd/sys_common/backtrace.rs:71
   2: std::panicking::default_hook::{{closure}}
             at libstd/sys_common/backtrace.rs:59
             at libstd/panicking.rs:380
   3: std::panicking::default_hook
             at libstd/panicking.rs:390
   4: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:576
   5: std::panicking::begin_panic
             at libstd/panicking.rs:537
   6: std::panicking::begin_panic_fmt
             at libstd/panicking.rs:521
   7: e2d2::native_include::bindgen_test_layout_max_align_t
   8: <F as alloc::boxed::FnBox<A>>::call_box
             at libtest/lib.rs:1462
             at /checkout/src/libcore/ops/function.rs:223
             at /checkout/src/liballoc/boxed.rs:788
   9: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:102```

UDF and Packetize

Hi all,

Just a question. I'm trying to understand the inner working of the window stream UDF combined with the packetize abstraction to modify flows on the fly, as suggested in the paper. Is there an example of this? How will the re-packetization will be made regarding, eg. SEQ and ACKs? Will it re-do a 3-way handshake etc?
One example would be rewriting URLs in HTTP flows to use different CDNs.

Thanks for the light,
Tom

unresolved import `std::alloc::Opaque`

I am installing an old RUST build which has a few dependencies. While compiling e2d2 this is the error i get. Can i get around this error without moving to any other build?

Edit: This occurs on the latest build too.

error[E0432]: unresolved import std::alloc::Opaque
--> framework/src/allocators/cache_aligned.rs:1:47
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^ no Opaque in alloc

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:2:1
|
2 | #![feature(asm)]
| ^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:3:1
|
3 | #![feature(log_syntax)]
| ^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:4:1
|
4 | #![feature(box_syntax)]
| ^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:5:1
|
5 | #![feature(specialization)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:6:1
|
6 | #![feature(slice_concat_ext)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:7:1
|
7 | #![feature(fnbox)]
| ^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:8:1
|
8 | #![feature(alloc)]
| ^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:9:1
|
9 | #![feature(heap_api)]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:10:1
|
10 | #![feature(unique)]
| ^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:11:1
|
11 | #![feature(const_fn)]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:13:1
|
13 | #![feature(ptr_internals)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:15:1
|
15 | #![feature(allocator_api)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:17:1
|
17 | #![feature(integer_atomics)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 14 previous errors

Build fails in all three ways

When directly building by ./build.sh, it finally shows:
image

When building with RUST_STATIC=1, it shows:
image

When building in containers, it shows:
image

I am new to Rust, so I have not got any idea of how to fix them. Just want to run the NF successfully; any suggestions are highly appreciated!

missing field `dpdk_args` in initializer of `config::NetbricksConfiguration`

I am following the commands given in the readme file and I am getting the following error when I run

./build.sh build

_### error[E0063]: missing field dpdk_args in initializer of config::NetbricksConfiguration
_--> src/config/config_reader.rs:290:8
|
290 | Ok(NetbricksConfiguration {
| ^^^^^^^^^^^^^^^^^^^^^^ missing dpdk_args

error: aborting due to previous error

error: Could not compile e2d2.

To learn more, run the command again with --verbose.__

Am I missing something? Please help me in this regards.

Thanks.

when I am compiling e2d2 , there are some errors,

I use clang 3.9 on Ubuntu, when compiling e2d2 , there are errors like following:

SCTP library found
~/NetBricks/framework ~/NetBricks
Compiling e2d2 v0.2.0 (file:///home/luo/NetBricks/framework)
error[E0432]: unresolved import std::alloc::Alloc
--> framework/src/allocators/cache_aligned.rs:1:24
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^ no Alloc in alloc

error[E0432]: unresolved import std::alloc::Global
--> framework/src/allocators/cache_aligned.rs:1:31
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^ no Global in alloc

error[E0432]: unresolved import std::alloc::Layout
--> framework/src/allocators/cache_aligned.rs:1:39
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^ no Layout in alloc

error[E0432]: unresolved import std::alloc::Opaque
--> framework/src/allocators/cache_aligned.rs:1:47
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^ no Opaque in alloc

error[E0603]: module alloc is private
--> framework/src/allocators/cache_aligned.rs:1:18
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^

error[E0603]: module alloc is private
--> framework/src/allocators/cache_aligned.rs:1:24
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^

error[E0603]: module alloc is private
--> framework/src/allocators/cache_aligned.rs:1:31
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^

error[E0603]: module alloc is private
--> framework/src/allocators/cache_aligned.rs:1:39
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^

error[E0603]: module alloc is private
--> framework/src/allocators/cache_aligned.rs:1:47
|
1 | use std::alloc::{self, Alloc, Global, Layout, Opaque};
| ^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:2:1
|
2 | #![feature(asm)]
| ^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:3:1
|
3 | #![feature(log_syntax)]
| ^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:4:1
|
4 | #![feature(box_syntax)]
| ^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:5:1
|
5 | #![feature(specialization)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:6:1
|
6 | #![feature(slice_concat_ext)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:7:1
|
7 | #![feature(fnbox)]
| ^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:8:1
|
8 | #![feature(alloc)]
| ^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:9:1
|
9 | #![feature(heap_api)]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:10:1
|
10 | #![feature(unique)]
| ^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:11:1
|
11 | #![feature(const_fn)]
| ^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:13:1
|
13 | #![feature(ptr_internals)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:15:1
|
15 | #![feature(allocator_api)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0554]: #![feature] may not be used on the stable release channel
--> framework/src/lib.rs:17:1
|
17 | #![feature(integer_atomics)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to 22 previous errors

error: Could not compile e2d2.

To learn more, run the command again with --verbose.

Error while trying to build NetBricks (#[feature] may not be used on the stable release channel)

Hi,
I am getting following error while trying to build from the current master.

commit 2e30b8e3b701717bc009d3e18a725cbee25f9f92
   Compiling percent-encoding v1.0.0
   Compiling simd v0.1.1 (https://github.com/huonw/simd#0d85d25d)
   Compiling unreachable v1.0.0
   Compiling iovec v0.1.0
   Compiling time v0.1.38
   Compiling num_cpus v1.6.2
error[E0554]: #[feature] may not be used on the stable release channel
  --> /home/gabhijit/.cargo/git/checkouts/simd-a428b8cc9c1d1986/0d85d25/src/lib.rs:19:1

Rust and cargo version

NetBricks$ rustc --version
rustc 1.19.0 (0ade33941 2017-07-17)
NetBricks$ cargo --version
cargo 0.20.0 (a60d185c8 2017-07-13)
NetBricks$ 

I simply followed - git clone and ./build.sh. I already had rust installed, so didn't install nightly.

Any ideas?

-abhijit

packets might be just the right size

f8c0f11 reverts my fix at 0c7ae4d (among other things).

Was this intentional?

(If I recall correctly, we saw the assertion that I changed when hacking in some sort of support for ARP packets - then the packet size is exactly the packet size, there is no additional appended data).

a bug in ip.rs ?

Hello,
I was testing the module aclfw, however, I found it cannot work correctly when I wanted to filter a specified source port.
I looked up into the code of ip.rs used by aclfw.
code snap from ip rs
let port_as_u8 = self_as_u8.offset(self.length() as isize);, the offset value may be wrong. self.length() is the whole length of ip packet, not the ip header length.
So let dst_port = BigEndian::read_u16(&port_slice[..16]); gets the wrong value.
Also, port_slice[..16] may not be right.

Thanks!

Using EAL Parameters

Hi

I wanted to know if it is possible to use dpdk's EAL arguments with these functions. For example I want to use --socket-mem ,-b (blacklist ports), -n (memory channels), and --xen-dom0. I experimented a little bit but couldn't find anything. I think the -f 'config' command does not allow for these parameters either correct?

build.sh failure

#Hi all,
I was build the NetBricks using Rust nightly version. When I run build.sh, however when compiling e2d2 v0.2.0 and DPDK bindings, an error occurred. The log is as below. Thanks!

   Compiling e2d2 v0.2.0 (file:///home/tian/NetBricks/framework)
error: failed to run custom build command for `e2d2 v0.2.0 (file:///home/tian/NetBricks/framework)`
process didn't exit successfully: `/home/tian/NetBricks/target/release/build/e2d2-c9809f4dab260928/build-script-build` (exit code: 101)
--- stdout
cargo:rustc-link-search=native=/home/tian/NetBricks/3rdparty/dpdk/build/lib
cargo:rustc-link-search=native=/home/tian/NetBricks/target/native
Header path Some("/home/tian/NetBricks/framework/src/native_include/dpdk-headers.h")

--- stderr
thread 'main' panicked at 'Unable to find libclang: "couldn\'t find any of [\'libclang.so\', \'libclang.so.*\', \'libclang-*.so\'], set the LIBCLANG_PATH environment variable to a path where one of these files can be found (skipped: [])"', /checkout/src/libcore/result.rs:906:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.

When I use apt-get install libclang, errors are like this:

Compiling e2d2 v0.2.0 (file:///home/tian/NetBricks/framework)
error: failed to run custom build command for `e2d2 v0.2.0 (file:///home/tian/NetBricks/framework)`
process didn't exit successfully: `/home/tian/NetBricks/target/release/build/e2d2-c9809f4dab260928/build-script-build` (exit code: 101)
--- stdout
cargo:rustc-link-search=native=/home/tian/NetBricks/3rdparty/dpdk/build/lib
cargo:rustc-link-search=native=/home/tian/NetBricks/target/native
Header path Some("/home/tian/NetBricks/framework/src/native_include/dpdk-headers.h")

--- stderr
/usr/local/lib/clang/7.0.0/include/xmmintrin.h:2968:44: error: token is not a valid binary operator in a preprocessor subexpression
/usr/local/lib/clang/7.0.0/include/emmintrin.h:1414:10: error: invalid conversion between vector type '__m128' (vector of 4 'float' values) and integer type 'int' of different size
/usr/local/lib/clang/7.0.0/include/emmintrin.h:2280:66: error: cannot convert between vector values of different size ('__v16hu' (vector of 16 'unsigned short' values) and 'int')
/usr/local/lib/clang/7.0.0/include/emmintrin.h:2304:64: error: cannot convert between vector values of different size ('__v8su' (vector of 8 'unsigned int' values) and 'int')
/usr/local/lib/clang/7.0.0/include/xmmintrin.h:2968:44: error: token is not a valid binary operator in a preprocessor subexpression, err: true
/usr/local/lib/clang/7.0.0/include/emmintrin.h:1414:10: error: invalid conversion between vector type '__m128' (vector of 4 'float' values) and integer type 'int' of different size, err: true
/usr/local/lib/clang/7.0.0/include/emmintrin.h:2280:66: error: cannot convert between vector values of different size ('__v16hu' (vector of 16 'unsigned short' values) and 'int'), err: true
/usr/local/lib/clang/7.0.0/include/emmintrin.h:2304:64: error: cannot convert between vector values of different size ('__v8su' (vector of 8 'unsigned int' values) and 'int'), err: true
thread 'main' panicked at 'Unable to generate DPDK bindings: ()', /checkout/src/libcore/result.rs:906:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.

Support for OSX

Hello~
Do you have plan to support OSX platform? It causes error on build.sh.
(I changed nproc to sysctl -n hw.physicalcpu, but it still not work)

Error pops up while compiling etcdv3-rs

Hi All,

I try to build NetBricks on my machine, but the compiling error of etcdv3-rs keeps occurring.
Could you please provide me any hint to solve the problem. Thanks in advance.
Below is the error info:

SCTP library found
~/dev/NetBricks/framework ~/dev/NetBricks
Compiling etcdv3-rs v0.1.0 (https://github.com/apanda/etcdv3-rs#b99b7919)
error[E0599]: no method named and_then found for type hyper::client::FutureResponse in the current scope
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:34:51
|
34 | Box::new(self.client.request(put_request).and_then(
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a use for it:
candidate #1: use futures::future::Future;

error[E0277]: the trait bound futures::Future<Error=hyper::Error, Item=bool>: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:34:9
|
34 | Box::new(self.client.request(put_request).and_then(
| ^^^^^^^^ futures::Future<Error=hyper::Error, Item=bool> does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for futures::Future<Error=hyper::Error, Item=bool>
= note: required by <std::boxed::Box<T>>::new

error[E0599]: no method named and_then found for type hyper::client::FutureResponse in the current scope
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:55:18
|
55 | .and_then(|res| res.body().concat2())
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a use for it:
candidate #1: use futures::future::Future;

error[E0277]: the trait bound [u8]: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:56:28
|
56 | .and_then(|body| {
| ^^^^ [u8] does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for [u8]
= note: all local variables must have a statically known size

error[E0277]: the trait bound futures::Future<Error=hyper::Error, Item=std::option::Option<std::string::String>>: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:52:9
|
52 | Box::new(
| ^^^^^^^^ futures::Future<Error=hyper::Error, Item=std::option::Option<std::string::String>> does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for futures::Future<Error=hyper::Error, Item=std::option::Option<std::string::String>>
= note: required by <std::boxed::Box<T>>::new

error[E0599]: no method named and_then found for type hyper::client::FutureResponse in the current scope
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:82:18
|
82 | .and_then(|res| res.body().concat2())
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a use for it:
candidate #1: use futures::future::Future;

error[E0277]: the trait bound [u8]: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:83:28
|
83 | .and_then(|body| {
| ^^^^ [u8] does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for [u8]
= note: all local variables must have a statically known size

error[E0277]: the trait bound futures::Future<Error=hyper::Error, Item=std::vec::Vec<(std::string::String, std::string::String)>>: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:79:9
|
79 | Box::new(
| ^^^^^^^^ futures::Future<Error=hyper::Error, Item=std::vec::Vec<(std::string::String, std::string::String)>> does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for futures::Future<Error=hyper::Error, Item=std::vec::Vec<(std::string::String, std::string::String)>>
= note: required by <std::boxed::Box<T>>::new

error[E0599]: no method named and_then found for type hyper::client::FutureResponse in the current scope
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:118:18
|
118 | .and_then(|res| res.body().concat2())
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a use for it:
candidate #1: use futures::future::Future;

error[E0277]: the trait bound [u8]: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:119:28
|
119 | .and_then(|body| {
| ^^^^ [u8] does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for [u8]
= note: all local variables must have a statically known size

error[E0277]: the trait bound futures::Future<Error=hyper::Error, Item=etcd_proto::RangeResponse>: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:115:9
|
115 | Box::new(
| ^^^^^^^^ futures::Future<Error=hyper::Error, Item=etcd_proto::RangeResponse> does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for futures::Future<Error=hyper::Error, Item=etcd_proto::RangeResponse>
= note: required by <std::boxed::Box<T>>::new

error[E0599]: no method named and_then found for type hyper::client::FutureResponse in the current scope
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:145:53
|
145 | Box::new(self.client.request(watch_request).and_then(|res| {
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a use for it:
candidate #1: use futures::future::Future;

error[E0277]: the trait bound [u8]: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:146:41
|
146 | Ok(Box::new(res.body().map(|chunk| {
| ^^^^^ [u8] does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for [u8]
= note: all local variables must have a statically known size

error[E0277]: the trait bound futures::Future<Error=hyper::Error, Item=std::boxed::Box<futures::Stream<Item=etcd_proto::WatchResponse, Error=hyper::Error>>>: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:145:9
|
145 | Box::new(self.client.request(watch_request).and_then(|res| {
| ^^^^^^^^ futures::Future<Error=hyper::Error, Item=std::boxed::Box<futures::Stream<Item=etcd_proto::WatchResponse, Error=hyper::Error>>> does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for futures::Future<Error=hyper::Error, Item=std::boxed::Box<futures::Stream<Item=etcd_proto::WatchResponse, Error=hyper::Error>>>
= note: required by <std::boxed::Box<T>>::new

error[E0599]: no method named and_then found for type hyper::client::FutureResponse in the current scope
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:174:53
|
174 | Box::new(self.client.request(watch_request).and_then(|res| {
| ^^^^^^^^
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a use for it:
candidate #1: use futures::future::Future;

error[E0277]: the trait bound [u8]: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:175:41
|
175 | Ok(Box::new(res.body().map(|chunk| {
| ^^^^^ [u8] does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for [u8]
= note: all local variables must have a statically known size

error[E0277]: the trait bound futures::Future<Error=hyper::Error, Item=std::boxed::Box<futures::Stream<Item=etcd_proto::WatchResponse, Error=hyper::Error>>>: std::marker::Sized is not satisfied
--> /home/wenhao/.cargo/git/checkouts/etcdv3-rs-36c166c6e775c7cf/b99b791/src/etcd_actions.rs:174:9
|
174 | Box::new(self.client.request(watch_request).and_then(|res| {
| ^^^^^^^^ futures::Future<Error=hyper::Error, Item=std::boxed::Box<futures::Stream<Item=etcd_proto::WatchResponse, Error=hyper::Error>>> does not have a constant size known at compile-time
|
= help: the trait std::marker::Sized is not implemented for futures::Future<Error=hyper::Error, Item=std::boxed::Box<futures::Stream<Item=etcd_proto::WatchResponse, Error=hyper::Error>>>
= note: required by <std::boxed::Box<T>>::new

error: aborting due to 17 previous errors

Some errors occurred: E0277, E0599.
For more information about an error, try rustc --explain E0277.
error: Could not compile etcdv3-rs.

Problem building NetBricks

Hi, all. I am trying to build NetBrick from scratch. I followed the instructions and encountered a problem after running build.sh, the output is as follows:

sudo ./build.sh
DPDK found not building
Building rust
Done with deps
make: Entering directory '/home/tzhang/NetBricks/native'
make[1]: Nothing to be done for 'all'.
make: Leaving directory '/home/tzhang/NetBricks/native'
make: Entering directory '/home/tzhang/NetBricks/native'
cp libzcsi.so /home/tzhang/NetBricks/target/native
make: Leaving directory '/home/tzhang/NetBricks/native'
SCTP library found
~/NetBricks/framework ~/NetBricks
./build.sh: line 304: build: command not found

Could you help me find out the problem? Thanks a lot!!

Best regards,
Tianzhu

discrepancy between struct MBuf (mbuf.rs) and rte_mbuf(rte_mbuf.h) with DPDK 17.08

Hi, I just recognized that the Netbricks master branch uses:
pub struct MBuf {
buf_addr: *mut u8,
phys_addr: usize,
data_off: u16,
refcnt: u16,
nb_segs: u8,
port: u8,
...
}
However in the corresponding 17.08 DPDK header file rte_mbuf.h (see e.g.
http://dpdk.org/browse/dpdk/tree/lib/librte_mbuf/rte_mbuf.h?h=v17.08&id=02657b4adcb8af773e26ec061b01cd7abdd3f0b6) the struct rte_mbuf is using uint_16 for nb_segs and port:

    uint16_t nb_segs;         /**< Number of segments. */

/** Input port (16 bits to support more than 256 virtual ports). */
uint16_t port;

I am wondering how this can work. Please compare also my branch e2d2-0-1-1 in my fork.

Rainer

question to packet.rs

Hi,
first of all congratulations for this excellent work! I really like your approach of applying functions to packets vs. the traditional transporting packets to functions approach. I think this is absolutely the right way to go.

Just a question to your code in "packet.rs" line 312. In my view this statement "let header=self.payload();" hides the "header"-argument of the push_header function. I commented that line out and the code works fine for me. Or what is the intention of this line of code?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.