outscale / butterfly Goto Github PK
View Code? Open in Web Editor NEWButterfly connects Virtual Machines and control their traffic flow
License: GNU General Public License v3.0
Butterfly connects Virtual Machines and control their traffic flow
License: GNU General Public License v3.0
todo:
--dpdk-help is broken
We already have some tests with tcp/udp ports (#45), here we add a few more tests:
Here we would like to test rules based on members of security groups.
Test setup:
Check that:
Change setup:
Check that:
Change setup:
Check that:
If a SG contains one rule and this rule is removed. A new filter is built with this rule: ( )
This rule does not compile in NPF (but a rule containing only spaces build).
Currently, VNI is fixed a NIC creation.
If needed, we can add a call to dynamically change VNI (NicUpdateReq)
When exiting (normal or by signal), Butterfly should clean allocated hugepages by invoking pg_stop()
We would like to check if exotic protocol filtering like sctp are managed by Butterfly.
Butterfly will also be able to manage SCTP port ranges.
Note: this issue has already been 95% done with tests/scenario_34/ except that setup/test is not done
Initial setup:
Test that:
Change setup:
Test that:
Change setup:
Test that:
Change setup:
Test that:
The goal is to be able to launch all Butterfly tests using Jenkins (or other tool) at each Pull Request
rebase NPF to the last version in packetgraph
We detected a Butterfly crash located in vtep de-capsulation (see packetgraph's bug)
We would really need this feature from Packetgraph and integrate it in butterfly.
See vxlan-soe issue and IP frag issue
This scenario fails:
network_connect 0 1
server_start 0
client_add_nic 0 1 42
client_add_nic 0 2 42
qemu_start 1
qemu_start 2
ssh_ping 1 2
ssh_ping 2 1
qemu_stop 1
client_add_nic 0 1 42
qemu_start 1
ssh_ping 1 2
ssh_ping 2 1
qemu_stop 1
qemu_stop 2
server_stop 0
network_disconnect 0 1
return_result
check that iperf/iperf3 TCP and UDP tests works (not really for benchmarking)
We (at Outscale) have physical machines with Intel NICs to test DPDK capabilities.
We would like to easily run benchmarks tests without always hacking our test machines.
Script will build a packaged version of Butterfly and install it on remote machines before running benchmarks on the two machines.
Graph::nic_add create a lot of new brick, using shared_ptr, but there is no check to know if
the creation has been successful.
we should use that: http://www.cplusplus.com/reference/memory/shared_ptr/operator%20bool/
Just a reminder
We currently write butterfly server PID but we don't really use it.
We don't want to disallow launching several butterfly (usefull for testing) but we should warn the user through logs instead of failing dpdk init.
typedef std::shared_ptr<struct pg_brick> Brick
is not very explicit, because we don't understand we're dealing with a share_ptr, we need to find a more explicit name(BrickPtr).
BTW: in C++ typedef std::shared_ptr<struct pg_brick> Brick
and
typedef std::shared_ptr<pg_brick> Brick
is the same.
Those tests must be added to check if changing security groups change all rules
Instead of always installing the same software on test vm, we should:
And then update butterfly scripts (and packetgraph)
useful for debuging
this branch (last test) make VM machine stuck.
network_connect 0 1
server_start 0
client_add_nic 0 1 42
client_add_nic 0 2 42
qemu_start 1
qemu_start 2
ssh_ping 1 2
ssh_ping 2 1
client_del_nic 0 1
client_del_nic 0 2
ssh_no_ping 1 2
ssh_no_ping 2 1
client_add_nic 0 1 42
client_add_nic 0 2 42
ssh_no_ping 1 2
ssh_no_ping 2 1
qemu_stop 1
qemu_stop 2
qemu_start 1 <------ VM stuck here
qemu_start 2
ssh_ping 1 2
ssh_ping 2 1
server_stop 0
network_disconnect 0 1
return_result
VM don't produce any log, vnc socket is not created, we can't ssh it nor connect to console.
Maybe a particular state in message passed through socket to the new VM.
This should ease debug and can be used in API tests
We must dynamically tweak thread priorities to have a nice packet throughput
Initial setup:
Tests that:
Change setup:
Test that:
Change setup:
Test that:
The goal is to be able to get a server build ID when running a --help command.
This will permit to easily identify the commit from where the server where built
In graph.h there is struct using the linux style:
struct my_struct {...};
struct my_struct variable;
We should use google style instead:
struct MyStruct {...};
MyStruct variable;
iperf3 by default fragments IP packets (8k) in UDP. Firewall probably don't let those packets pass.
We can test it by removing -l 1400
from iperf3 tests
Note: if we support vhost offloading, fragmentation should not occurs anymore
We must check when VM disconnect so we can remove vhost nic and it's branch
Vhost-user performances are quite poor as it still need a packet copy between guest and host.
This ticket is a reminder to work in this issue (which is heavily related to packetgraph)
We should clean script usages with options and clear --help (like in benchmarks)
We should do this in:
In scenarios, we should add a test to check if you can communicate in TCP and UDP between two VMs:
We should also make the same tests with IPv6
We should add set -e
in tests/function.sh and check if errors are expected or not.
We should also do this in api/test
The goal is to run Butterfly benchmarks on Outscale's test servers for each commit on master.
nic_id in function request is never used.
Line 252 in d842c98
We currently have -r option for more details, we should have a --version to show butterfly's version
Option already exists in API (sniff_target_nic_id) and should be implemented.
We may use a combination of hub + diode + vhost bricks:
The goal is to provide some basic tests concerning security groups. We must test that:
Maybe we can replace dpdk options by defaults ones
The idea is to allocate bricks in the processing thread.
This should locally allocate memory for better performances (numa).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.