From 1b6242fc583a6b871304fb995af6dc211b58f69b Mon Sep 17 00:00:00 2001 From: Adrian Dudau Date: Thu, 26 Jun 2014 13:48:23 +0200 Subject: initial commit for Enea Linux 4.0 Migrated from the internal git server on the daisy-enea branch Signed-off-by: Adrian Dudau --- .../files/0001-openvswitchdpdk-enabled-ptest.patch | 380 +++++++++++++++++++++ .../openvswitchdpdk/files/configure-fix.patch | 12 + .../files/makefile-install-rule.patch | 22 ++ .../files/openvswitchdpdk-controller | 279 +++++++++++++++ .../files/openvswitchdpdk-controller-setup | 29 ++ .../openvswitchdpdk/files/openvswitchdpdk-switch | 110 ++++++ .../files/openvswitchdpdk-switch-setup | 16 + .../openvswitchdpdk/files/ovs-ctl-dpdk.patch | 123 +++++++ .../openvswitchdpdk/files/qemu-makefile.patch | 26 ++ .../openvswitchdpdk/files/qemu-options-hx.patch | 30 ++ .../openvswitchdpdk/files/qemu-pixman-config.patch | 26 ++ recipes-networking/openvswitchdpdk/files/run-ptest | 8 + .../openvswitchdpdk/openvswitchdpdk_0.10.0.bb | 248 ++++++++++++++ 13 files changed, 1309 insertions(+) create mode 100644 recipes-networking/openvswitchdpdk/files/0001-openvswitchdpdk-enabled-ptest.patch create mode 100644 recipes-networking/openvswitchdpdk/files/configure-fix.patch create mode 100644 recipes-networking/openvswitchdpdk/files/makefile-install-rule.patch create mode 100755 recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller create mode 100644 recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller-setup create mode 100644 recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch create mode 100644 recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch-setup create mode 100644 recipes-networking/openvswitchdpdk/files/ovs-ctl-dpdk.patch create mode 100644 recipes-networking/openvswitchdpdk/files/qemu-makefile.patch create mode 100644 recipes-networking/openvswitchdpdk/files/qemu-options-hx.patch create mode 100644 recipes-networking/openvswitchdpdk/files/qemu-pixman-config.patch create mode 100644 recipes-networking/openvswitchdpdk/files/run-ptest create mode 100644 recipes-networking/openvswitchdpdk/openvswitchdpdk_0.10.0.bb (limited to 'recipes-networking/openvswitchdpdk') diff --git a/recipes-networking/openvswitchdpdk/files/0001-openvswitchdpdk-enabled-ptest.patch b/recipes-networking/openvswitchdpdk/files/0001-openvswitchdpdk-enabled-ptest.patch new file mode 100644 index 0000000..10f0df8 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/0001-openvswitchdpdk-enabled-ptest.patch @@ -0,0 +1,380 @@ +From 1ea34b3e5bf1d386b9931f11dee89bc03f224852 Mon Sep 17 00:00:00 2001 +From: Radu Patriu +Date: Tue, 6 May 2014 13:02:10 +0000 +Subject: [PATCH] openvswitchdpdk: enabled ptest + +Signed-off-by: Radu Patriu +--- + openvswitch/Makefile.am | 1 + + openvswitch/test.mk | 47 ++++++++++++++++++++++++++++++++++++ + openvswitch/tests/dpdk-datapath.at | 48 ++++++++++++++++++------------------- + openvswitch/tests/dpdk-link.at | 2 +- + openvswitch/tests/dpif-dpdk.at | 30 +++++++++++------------ + openvswitch/tests/flowgen.pl | 0 + openvswitch/tests/netdev-dpdk.at | 2 +- + openvswitch/tests/ofproto-macros.at | 2 +- + openvswitch/tests/ovs-vport.at | 10 ++++---- + 9 files changed, 95 insertions(+), 47 deletions(-) + create mode 100644 openvswitch/test.mk + mode change 100644 => 100755 openvswitch/tests/flowgen.pl + +diff --git a/openvswitch/Makefile.am b/openvswitch/Makefile.am +index d0edfa2..107ca89 100644 +--- a/openvswitch/Makefile.am ++++ b/openvswitch/Makefile.am +@@ -311,3 +311,4 @@ include xenserver/automake.mk + include python/automake.mk + include python/compat/automake.mk + include tutorial/automake.mk ++include test.mk +\ No newline at end of file +diff --git a/openvswitch/test.mk b/openvswitch/test.mk +new file mode 100644 +index 0000000..10f3629 +--- /dev/null ++++ b/openvswitch/test.mk +@@ -0,0 +1,47 @@ ++TEST_DEST ?= ${prefix}/lib/openvswitchdpdk/ptest ++TEST_ROOT ?= ${prefix}/lib/openvswitchdpdk/ptest ++TEST_DEPEND = ++ ++if HAVE_OPENSSL ++TEST_DEPEND += $(TESTPKI_FILES) ++endif ++ ++test-install: $(TEST_DEPEND) ++ @list='$(noinst_PROGRAMS) $(EXTRA_DIST) $(dist_check_SCRIPTS) $(TEST_DEPEND) tests/atlocal tests/atconfig' ;\ ++ install -d $(TEST_DEST)/tests ;\ ++ install -d $(TEST_DEST)/python ;\ ++ install -d $(TEST_DEST)/python/ovs ;\ ++ install -d $(TEST_DEST)/python/ovs/db ;\ ++ install -d $(TEST_DEST)/python/ovs/unixctl ;\ ++ install -d $(TEST_DEST)/vswitchd ;\ ++ install vswitchd/vswitch.ovsschema $(TEST_DEST)/vswitchd ;\ ++ install -d $(TEST_DEST)/debian ;\ ++ install debian/ovs-monitor-ipsec $(TEST_DEST)/debian ;\ ++ install -d $(TEST_DEST)/build-aux ;\ ++ install build-aux/check-structs $(TEST_DEST)/build-aux ;\ ++ install -d $(TEST_DEST)/xenserver ;\ ++ install xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_interface-reconfigure $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_InterfaceReconfigure.py $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py $(TEST_DEST)/xenserver ;\ ++ for p in $$list ; do \ ++ echo $$p ;\ ++ p=$${p#./} ;\ ++ pre=$${p#tests\/} ;\ ++ if test $$pre != $$p ; then \ ++ echo installing $$p to $(TEST_DEST)/tests/$$pre ;\ ++ install $$p $(TEST_DEST)/tests/$$pre ;\ ++ continue ;\ ++ fi ;\ ++ pre=$${p#python\/ovs\/} ;\ ++ if test $$pre != $$p ; then \ ++ echo installing $$p to $(TEST_DEST)/python/ovs/$$pre ;\ ++ install $$p $(TEST_DEST)/python/ovs/$$pre ;\ ++ continue ;\ ++ fi; \ ++ done ;\ ++ sed -i 's|abs_builddir=.*|abs_builddir='"'"'$(TEST_ROOT)/tests'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_srcdir=.*|abs_srcdir='"'"'$(TEST_ROOT)/tests'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_top_srcdir=.*|abs_top_srcdir='"'"'$(TEST_ROOT)'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_top_builddir=.*|abs_top_builddir='"'"'$(TEST_ROOT)'"'"'|g' $(TEST_DEST)/tests/atconfig +diff --git a/openvswitch/tests/dpdk-datapath.at b/openvswitch/tests/dpdk-datapath.at +index 5472ae3..16c5f3d 100644 +--- a/openvswitch/tests/dpdk-datapath.at ++++ b/openvswitch/tests/dpdk-datapath.at +@@ -28,47 +28,47 @@ + m4_define([OVDK_CHECK_ACTION_EXECUTE], + [AT_BANNER([action_execute unit tests - dpdk datapath]) + AT_SETUP([execute an output action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_output], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_output], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute an output action with invalid parameters]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_output__invalid_params], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_output__invalid_params], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a corrupt action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_output__corrupt_action], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_output__corrupt_action], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a drop action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_drop], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_drop], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a pop VLAN action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_pop_vlan], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_pop_vlan], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a set ethernet action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_set_ethernet], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_set_ethernet], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a set ipv4 action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_set_ipv4], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_set_ipv4], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a push VLAN vid action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_push_vlan__vid], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_push_vlan__vid], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute a push VLAN pcp action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_push_vlan__pcp], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_push_vlan__pcp], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute multiple actions with three output actions]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_multiple_actions__three_output], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_multiple_actions__three_output], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([execute multiple actions with a pop vlan and output action]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_multiple_actions__pop_vlan_and_output], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- action_execute_multiple_actions__pop_vlan_and_output], [0], [ignore], []) + AT_CLEANUP + ]) + +@@ -77,31 +77,31 @@ AT_CLEANUP + m4_define([OVDK_CHECK_FLOW_TABLE], + [AT_BANNER([flow table unit tests - dpdk datapath]) + AT_SETUP([add a flow to the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_add_flow], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_add_flow], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([delete a flow from the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_del_flow], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_del_flow], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([delete all flows from the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_del_all], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_del_all], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([get a flow from the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_get_flow], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_get_flow], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([modify a flow in the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_mod_flow], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_mod_flow], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([get the first flow from the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_get_first_flow], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_get_first_flow], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([get the next flow from the flow table]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_get_next_flow], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- flow_table_get_next_flow], [0], [ignore], []) + AT_CLEANUP + ]) + +@@ -110,27 +110,27 @@ AT_CLEANUP + m4_define([OVDK_CHECK_STATS], + [AT_BANNER([stats unit tests - dpdk datapath]) + AT_SETUP([increment stats for all vports]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vport_xxx_increment], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vport_xxx_increment], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([get stats for all vports]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vport_xxx_get], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vport_xxx_get], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([clear stats for all vports]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vport_xxx_clear], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vport_xxx_clear], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([increment stats for the vswitch]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vswitch_increment], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vswitch_increment], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([get stats for the vswitch]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vswitch_get], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vswitch_get], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([clear stats for the vswitch]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vswitch_clear], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-datapath -c 1 -n 4 -- stats_vswitch_clear], [0], [ignore], []) + AT_CLEANUP + ]) + +diff --git a/openvswitch/tests/dpdk-link.at b/openvswitch/tests/dpdk-link.at +index accfde9..c119668 100644 +--- a/openvswitch/tests/dpdk-link.at ++++ b/openvswitch/tests/dpdk-link.at +@@ -29,7 +29,7 @@ + m4_define([CHECK_DPDK_LINK], + [AT_BANNER([dpdk-link tests]) + AT_SETUP([Check negative cases for dpdk-link.c]) +-AT_CHECK([sudo -E $srcdir/test-dpdk-link -c 1 -n 4], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpdk-link -c 1 -n 4], [0], [ignore], []) + AT_CLEANUP + ]) + +diff --git a/openvswitch/tests/dpif-dpdk.at b/openvswitch/tests/dpif-dpdk.at +index 55b3505..b62d146 100644 +--- a/openvswitch/tests/dpif-dpdk.at ++++ b/openvswitch/tests/dpif-dpdk.at +@@ -2,63 +2,63 @@ m4_define([CHECK_DPIF_DPDK], + + [AT_BANNER([Test dpif-dpdk.c ]) + AT_SETUP([Test dpif_dpdk_get_stats]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_get_stats], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_get_stats], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_add]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_add], [0], [ignore], [ignore]) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_add], [0], [ignore], [ignore]) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_del]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_del], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_del], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_query_by_number]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_query_by_number], [0], [ignore], [ignore]) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_query_by_number], [0], [ignore], [ignore]) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_query_by_name]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_query_by_name], [0], [ignore], [ignore]) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_query_by_name], [0], [ignore], [ignore]) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_get_max_ports]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_get_max_ports], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_get_max_ports], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_dump_start]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_dump_start], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_dump_start], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_dump_next]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_dump_next], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_dump_next], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_dump_done]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_dump_done], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_dump_done], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_poll]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_poll], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_poll], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_port_poll_wait]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_poll_wait], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_port_poll_wait], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_flow_put]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_put], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_put], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_flow_del]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_del], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_del], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_flow_dump_start]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_dump_start], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_dump_start], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([Test dpif_dpdk_flow_dump_next]) +-AT_CHECK([sudo -E $srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_dump_next], [0], [ignore], []) ++AT_CHECK([$srcdir/test-dpif-dpdk -c 1 -n 4 -- --dpif_dpdk_flow_dump_next], [0], [ignore], []) + AT_CLEANUP + ]) + CHECK_DPIF_DPDK([]) +diff --git a/openvswitch/tests/flowgen.pl b/openvswitch/tests/flowgen.pl +old mode 100644 +new mode 100755 +diff --git a/openvswitch/tests/netdev-dpdk.at b/openvswitch/tests/netdev-dpdk.at +index df4cd89..d314e3c 100644 +--- a/openvswitch/tests/netdev-dpdk.at ++++ b/openvswitch/tests/netdev-dpdk.at +@@ -3,7 +3,7 @@ m4_define([CHECK_DPIF_DPDK], + [AT_BANNER([Test netdev-dpdk.c ]) + + AT_SETUP([Test netdev_dpdk_change_seq]) +-AT_CHECK([sudo -E $srcdir/test-netdev-dpdk --netdev_dpdk_test_change_seq], [0], [ignore], []) ++AT_CHECK([$srcdir/test-netdev-dpdk --netdev_dpdk_test_change_seq], [0], [ignore], []) + AT_CLEANUP + + ]) +diff --git a/openvswitch/tests/ofproto-macros.at b/openvswitch/tests/ofproto-macros.at +index 839d41f..ef291dd 100644 +--- a/openvswitch/tests/ofproto-macros.at ++++ b/openvswitch/tests/ofproto-macros.at +@@ -73,7 +73,7 @@ m4_define([OVS_VSWITCHD_START], + AT_CHECK([ovs-vsctl --no-wait init]) + + dnl Start ovs-vswitchd. +- AT_CHECK([ovs-vswitchd --detach --no-chdir --pidfile --enable-dummy$3 --disable-system --log-file -vvconn -vofproto_dpif], [0], [], [stderr]) ++ AT_CHECK([ovs-vswitchd -c 1 -n 4 -- --detach --no-chdir --pidfile --enable-dummy$3 --disable-system --log-file -vvconn -vofproto_dpif], [0], [ignore], [stderr]) + AT_CAPTURE_FILE([ovs-vswitchd.log]) + AT_CHECK([[sed < stderr ' + /vlog|INFO|opened log file/d +diff --git a/openvswitch/tests/ovs-vport.at b/openvswitch/tests/ovs-vport.at +index 5f6857c..19d87cc 100644 +--- a/openvswitch/tests/ovs-vport.at ++++ b/openvswitch/tests/ovs-vport.at +@@ -6,23 +6,23 @@ m4_define([OVDK_CHECK_LIBVPORT], + [AT_BANNER([libvport/ovs-vport unit tests - dpdk datapath]) + + AT_SETUP([check vports are valid]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- valid_vport], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- valid_vport], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([check client rings are found]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- vport_client_lookup], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- vport_client_lookup], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([check kni fifos are found]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- vport_kni_lookup], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- vport_kni_lookup], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([check packet mempool is found]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- lookup_packet_mempool], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- lookup_packet_mempool], [0], [ignore], []) + AT_CLEANUP + + AT_SETUP([check port names are valid]) +-AT_CHECK([sudo -E $srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- is_vport_name_valid], [0], [ignore], []) ++AT_CHECK([$srcdir/dpdk/test-ovs-vport -c 1 -n 4 -- is_vport_name_valid], [0], [ignore], []) + AT_CLEANUP + + ]) +-- +1.8.5.2 + diff --git a/recipes-networking/openvswitchdpdk/files/configure-fix.patch b/recipes-networking/openvswitchdpdk/files/configure-fix.patch new file mode 100644 index 0000000..187e8a0 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/configure-fix.patch @@ -0,0 +1,12 @@ +Index: files/configure.ac +=================================================================== +--- files.orig/openvswitch/configure.ac 2014-03-26 16:49:44.000000000 +0200 ++++ files/openvswitch/configure.ac 2014-04-18 16:47:28.163114309 +0300 +@@ -47,6 +47,7 @@ + AC_SEARCH_LIBS([clock_gettime], [rt]) + AC_SEARCH_LIBS([timer_create], [rt]) + AC_SEARCH_LIBS([pthread_sigmask], [pthread]) ++AC_SEARCH_LIBS([dlopen], [dl]) + AC_FUNC_STRERROR_R + + OVS_CHECK_ESX diff --git a/recipes-networking/openvswitchdpdk/files/makefile-install-rule.patch b/recipes-networking/openvswitchdpdk/files/makefile-install-rule.patch new file mode 100644 index 0000000..2609870 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/makefile-install-rule.patch @@ -0,0 +1,22 @@ +Index: dpdk-ovs/openvswitch/datapath/dpdk/Makefile +=================================================================== +--- dpdk-ovs.orig/openvswitch/datapath/dpdk/Makefile 2014-04-18 14:06:01.219379540 +0300 ++++ dpdk-ovs/openvswitch/datapath/dpdk/Makefile 2014-04-22 16:24:27.009689498 +0300 +@@ -77,3 +77,6 @@ + + clean-vport_ut: + $(MAKE) -f Makefile.vport_ut clean ++ ++install: ++ +Index: dpdk-ovs/openvswitch/datapath/dpdk/fd_link/Makefile +=================================================================== +--- dpdk-ovs.orig/openvswitch/datapath/dpdk/fd_link/Makefile 2014-04-18 14:06:01.219379540 +0300 ++++ dpdk-ovs/openvswitch/datapath/dpdk/fd_link/Makefile 2014-04-22 16:24:24.185689575 +0300 +@@ -53,3 +53,6 @@ + + check-recursive: + $(warning "This target is not implemented") ++ ++install: ++ diff --git a/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller new file mode 100755 index 0000000..fdd5a46 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller @@ -0,0 +1,279 @@ +#!/bin/sh +# +# Copyright (c) 2011 Nicira Networks Inc. +# Copyright (c) 2007, 2009 Javier Fernandez-Sanguino +# +# This is free software; you may redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2, +# or (at your option) any later version. +# +# This is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License with +# the Debian operating system, in /usr/share/common-licenses/GPL; if +# not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA +# +### BEGIN INIT INFO +# Provides: openvswitch-controller +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $remote_fs +# Should-Start: $named +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Open vSwitch controller +### END INIT INFO + +INSTALLPREFIX= + +if [ -n "$INSTALLPREFIX" ] +then + PATH=$INSTALLPREFIX/sbin:$INSTALLPREFIX/bin:$PATH +fi + +DAEMON=$INSTALLPREFIX/bin/ovs-controller # Introduce the server's location here +NAME=ovs-controller # Introduce the short server's name here +DESC=ovs-controller # Introduce a short description here +LOGDIR=$INSTALLPREFIX/var/log/openvswitch # Log directory to use + +PIDFILE=$INSTALLPREFIX/var/run/openvswitch/$NAME.pid + +test -x $DAEMON || exit 0 + +. /lib/lsb/init-functions + +# Default options, these can be overriden by the information +# at /etc/default/openvswitchdpdk-controller +DAEMON_OPTS="" # Additional options given to the server + +DODTIME=10 # Time to wait for the server to die, in seconds + # If this value is set too low you might not + # let some servers to die gracefully and + # 'restart' will not work + +LOGFILE=$LOGDIR/$NAME.log # Server logfile +#DAEMONUSER= # User to run the daemons as. If this value + # is set start-stop-daemon will chuid the server + +# Include defaults if available +default=/etc/default/openvswitchdpdk-controller +if [ -f $default ] ; then + . $default +fi + +# Check that the user exists (if we set a user) +# Does the user exist? +if [ -n "$DAEMONUSER" ] ; then + if getent passwd | grep -q "^$DAEMONUSER:"; then + # Obtain the uid and gid + DAEMONUID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $3}'` + DAEMONGID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $4}'` + else + log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist." + exit 1 + fi +fi + + +set -e + +running_pid() { +# Check if a given process pid's cmdline matches a given name + pid=$1 + name=$2 + [ -z "$pid" ] && return 1 + [ ! -d /proc/$pid ] && return 1 + cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` + # Is this the expected server + [ "$cmd" != "$name" ] && return 1 + return 0 +} + +running() { +# Check if the process is running looking at /proc +# (works for all users) + + # No pidfile, probably no daemon present + [ ! -f "$PIDFILE" ] && return 1 + pid=`cat $PIDFILE` + running_pid $pid $DAEMON || return 1 + return 0 +} + +start_server() { + if [ -z "$LISTEN" ]; then + echo "$default: No connection methods configured, controller disabled" >&2 + exit 0 + fi + + if [ ! -d $INSTALLPREFIX/var/run/openvswitch ]; then + install -d -m 755 -o root -g root $INSTALLPREFIX/var/run/openvswitch + fi + + SSL_OPTS= + case $LISTEN in + *ssl*) + : ${PRIVKEY:=$INSTALLPREFIX/etc/openvswitch-controller/privkey.pem} + : ${CERT:=$INSTALLPREFIX/etc/openvswitch-controller/cert.pem} + : ${CACERT:=$INSTALLPREFIX/etc/openvswitch-controller/cacert.pem} + if test ! -e "$PRIVKEY" || test ! -e "$CERT" || + test ! -e "$CACERT"; then + if test ! -e "$PRIVKEY"; then + echo "$PRIVKEY: private key missing" >&2 + fi + if test ! -e "$CERT"; then + echo "$CERT: certificate for private key missing" >&2 + fi + if test ! -e "$CACERT"; then + echo "$CACERT: CA certificate missing" >&2 + fi + exit 1 + fi + SSL_OPTS="--private-key=$PRIVKEY --certificate=$CERT --ca-cert=$CACERT" + ;; + esac + +# Start the process using the wrapper + if [ -z "$DAEMONUSER" ] ; then + start-stop-daemon --start --pidfile $PIDFILE \ + --exec $DAEMON -- --detach --pidfile=$PIDFILE \ + $LISTEN $DAEMON_OPTS $SSL_OPTS + errcode=$? + else +# if we are using a daemonuser then change the user id + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --chuid $DAEMONUSER --exec $DAEMON -- \ + --detach --pidfile=$PIDFILE $LISTEN $DAEMON_OPTS \ + $SSL_OPTS + errcode=$? + fi + return $errcode +} + +stop_server() { +# Stop the process using the wrapper + if [ -z "$DAEMONUSER" ] ; then + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --exec $DAEMON + errcode=$? + else +# if we are using a daemonuser then look for process that match + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --user $DAEMONUSER --exec $DAEMON + errcode=$? + fi + + return $errcode +} + +reload_server() { + [ ! -f "$PIDFILE" ] && return 1 + pid=`cat $PIDFILE` # This is the daemon's pid + # Send a SIGHUP + kill -1 $pid + return $? +} + +force_stop() { +# Force the process to die killing it manually + [ ! -e "$PIDFILE" ] && return + if running ; then + kill -15 $pid + # Is it really dead? + sleep "$DODTIME" + if running ; then + kill -9 $pid + sleep "$DODTIME" + if running ; then + echo "Cannot kill $NAME (pid=$pid)!" + exit 1 + fi + fi + fi + rm -f $PIDFILE +} + + +case "$1" in + start) + log_begin_msg "Starting $DESC " "$NAME" + # Check if it's running first + if running ; then + log_warning_msg "apparently already running" + log_end_msg 0 + exit 0 + fi + if start_server && running ; then + # It's ok, the server started and is running + log_end_msg 0 + else + # Either we could not start it or it is not running + # after we did + # NOTE: Some servers might die some time after they start, + # this code does not try to detect this and might give + # a false positive (use 'status' for that) + log_end_msg 1 + fi + ;; + stop) + log_begin_msg "Stopping $DESC" "$NAME" + if running ; then + # Only stop the server if we see it running + stop_server + log_end_msg $? + else + # If it's not running don't do anything + log_warning_msg "apparently not running" + log_end_msg 0 + exit 0 + fi + ;; + force-stop) + # First try to stop gracefully the program + $0 stop + if running; then + # If it's still running try to kill it more forcefully + log_begin_msg "Stopping (force) $DESC" "$NAME" + force_stop + log_end_msg $? + fi + ;; + restart|force-reload) + log_begin_msg "Restarting $DESC" "$NAME" + stop_server + # Wait some sensible amount, some server need this + [ -n "$DODTIME" ] && sleep $DODTIME + start_server + running + log_end_msg $? + ;; + status) + + log_begin_msg "Checking status of $DESC" "$NAME" + if running ; then + log_begin_msg "running" + log_end_msg 0 + else + log_warning_msg "apparently not running" + log_end_msg 1 + exit 1 + fi + ;; + # Use this if the daemon cannot reload + reload) + log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" + log_warning_msg "cannot re-read the config file (use restart)." + ;; + *) + N=/etc/init.d/openvswitchdpdk-controller + echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller-setup b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller-setup new file mode 100644 index 0000000..507a85e --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-controller-setup @@ -0,0 +1,29 @@ +# This is a POSIX shell fragment -*- sh -*- + +# LISTEN: What OpenFlow connection methods should the controller listen on? +# +# This is a space-delimited list of connection methods: +# +# * "pssl:[PORT]": Listen for SSL connections on the specified PORT +# (default: 6633). The private key, certificate, and CA certificate +# must be specified below. +# +# * "ptcp:[PORT]": Listen for TCP connections on the specified PORT +# (default: 6633). Not recommended for security reasons. +# +LISTEN="ptcp:" + +# PRIVKEY: Name of file containing controller's private key. +# Required if SSL enabled. +PRIVKEY=$INSTALLPREFIX/etc/openvswitch-controller/privkey.pem + +# CERT: Name of file containing certificate for private key. +# Required if SSL enabled. +CERT=$INSTALLPREFIX/etc/openvswitch-controller/cert.pem + +# CACERT: Name of file containing switch CA certificate. +# Required if SSL enabled. +CACERT=$INSTALLPREFIX/etc/openvswitch-controller/cacert.pem + +# Additional options to pass to controller, e.g. "--hub" +DAEMON_OPTS="" diff --git a/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch new file mode 100644 index 0000000..051d4d7 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch @@ -0,0 +1,110 @@ +#! /bin/sh +# +# Copyright (C) 2011 Nicira Networks, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +### BEGIN INIT INFO +# Provides: openvswitch-switch +# Required-Start: $network $named $remote_fs $syslog +# Required-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Open vSwitch switch +### END INIT INFO + + +INSTALLPREFIX= + +if [ -n "$INSTALLPREFIX" ] +then + PATH=$INSTALLPREFIX/sbin:$INSTALLPREFIX/bin:$PATH +fi + +(test -x $INSTALLPREFIX/sbin/ovs-vswitchd && test -x $INSTALLPREFIX/sbin/ovsdb-server) || exit 0 + +. $INSTALLPREFIX/share/openvswitch/scripts/ovs-lib +test -e /etc/default/openvswitchdpdk-switch && . /etc/default/openvswitchdpdk-switch + +if test X"$BRCOMPAT" = Xyes && test ! -x $INSTALLPREFIX/sbin/ovs-brcompatd; then + BRCOMPAT=no + log_warning_msg "ovs-brcompatd missing, disabling bridge compatibility" +fi + +ovs_ctl () { + set $INSTALLPREFIX/share/openvswitch/scripts/ovs-ctl "$@" + if test X"$BRCOMPAT" = Xyes; then + set "$@" --brcompat + fi + "$@" +} + +load_kmod () { + ovs_ctl load-kmod || exit $? +} + +start () { + if ovs_ctl load-kmod; then + : + else + echo "Module has probably not been built for this kernel." + if ! test -d $INSTALLPREFIX/share/doc/openvswitch-datapath-source; then + echo "Install the openvswitch-datapath-source package, then read" + else + echo "For instructions, read" + fi + echo "$INSTALLPREFIX/share/doc/openvswitch-datapath-source/README.Debian" + fi + set ovs_ctl ${1-start} --system-id=random + if test X"$FORCE_COREFILES" != X; then + set "$@" --force-corefiles="$FORCE_COREFILES" + fi + "$@" || exit $? + + ovs_ctl --protocol=gre enable-protocol +} + +stop () { + ovs_ctl stop +} + +case $1 in + start) + start + ;; + stop | force-stop) + stop + ;; + reload | force-reload) + # The OVS daemons keep up-to-date. + ;; + restart) + stop + start + ;; + status) + ovs_ctl status + ;; + force-reload-kmod) + start force-reload-kmod + ;; + load-kmod) + load_kmod + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod|load-kmod}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch-setup b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch-setup new file mode 100644 index 0000000..84cea1f --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/openvswitchdpdk-switch-setup @@ -0,0 +1,16 @@ +# This is a POSIX shell fragment -*- sh -*- + +# FORCE_COREFILES: If 'yes' then core files will be enabled. +# FORCE_COREFILES=yes + +# BRCOMPAT: If 'yes' and the openvswitch-brcompat package is installed, then +# Linux bridge compatibility will be enabled. +# BRCOMPAT=yes + +#modify according to platform +export OVS_DPDK_PARAMS=${OVS_DPDK_PARAMS:-"@OVS_DPDK_PARAMS_DEFAULT"} +export OVS_VSWITCHD_PARAMS=${OVS_VSWITCHD_PARAMS:-"@OVS_VSWITCHD_PARAMS_DEFAULT"} +#for debugging redirect to a regular file - this should be done temporary +#if permanent logging is required a service like logrotate is recommended to limit the size of the log file +export OVS_DPDK_LOG=${OVS_DPDK_LOG:-"@OVS_DPDK_LOG_DEFAULT"} + diff --git a/recipes-networking/openvswitchdpdk/files/ovs-ctl-dpdk.patch b/recipes-networking/openvswitchdpdk/files/ovs-ctl-dpdk.patch new file mode 100644 index 0000000..bbe7a32 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/ovs-ctl-dpdk.patch @@ -0,0 +1,123 @@ +Add ovs-vswitchd dpdk parameters and ovs_dpdk daemon calls. + +Signed-off-by: Radu Patriu +Upstream-Status: Pending + +Index: git/openvswitch/utilities/ovs-ctl.in +=================================================================== +--- git.orig/openvswitch/utilities/ovs-ctl.in 2014-05-22 14:48:48.505319435 +0300 ++++ git/openvswitch/utilities/ovs-ctl.in 2014-05-22 15:05:46.437302665 +0300 +@@ -13,6 +13,15 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + ++#OVS_DPDK_PARAMS_DEFAULT to be replaced by install script ++OVS_DPDK_PARAMS=${OVS_DPDK_PARAMS:-"@OVS_DPDK_PARAMS_DEFAULT"} ++ ++#OVS_VSWITCHD_PARAMS_DEFAULT to be replaced by install script ++OVS_VSWITCHD_PARAMS=${OVS_VSWITCHD_PARAMS:-"@OVS_VSWITCHD_PARAMS_DEFAULT"} ++ ++#OVS_DPDK_LOG_DEFAULT to be replaced by install script ++OVS_DPDK_LOG=${OVS_DPDK_LOG:-"@OVS_DPDK_LOG_DEFAULT"} ++ + case $0 in + */*) dir0=`echo "$0" | sed 's,/[^/]*$,,'` ;; + *) dir0=./ ;; +@@ -106,7 +115,7 @@ + set_system_ids () { + set ovs_vsctl set Open_vSwitch . + +- OVS_VERSION=`ovs-vswitchd --version | sed 's/.*) //;1q'` ++ OVS_VERSION=`ovs-vswitchd -c 0x01 -n 4 --proc-type=auto -m 4 -- --version | sed -n 's/ovs-vswitchd (Open vSwitch) \(.*\)/\1/p'` + set "$@" ovs-version="$OVS_VERSION" + + case $SYSTEM_ID in +@@ -215,9 +224,39 @@ + db:Open_vSwitch,Open_vSwitch,manager_options + } + ++start_dpdk () { ++ if daemon_is_running ovs_dpdk; then ++ log_success_msg "ovs_dpdk is already running" ++ else ++ modprobe uio ++ test -e /sys/module/igb_uio || insmod $datadir/../openvswitchdpdk/kmod/igb_uio.ko ++ test -e /sys/module/rte_kni || insmod $datadir/../openvswitchdpdk/kmod/rte_kni.ko ++ rm -f $rundir/ovs_dpdk.pid ++ start-stop-daemon --start --quiet --background --make-pidfile --pidfile $rundir/ovs_dpdk.pid --exec /bin/sh -- -c "exec ovs_dpdk $OVS_DPDK_PARAMS >> $OVS_DPDK_LOG 2>&1" ++ #wait for ovs_dpdk to initialize before starting ovs-vswitchd ++ sleep 10 ++ fi ++} ++ ++stop_dpdk () { ++ pid=`cat "$rundir/ovs_dpdk.pid"` ++ rtemaps=`test -e /proc/$pid/maps && cat /proc/$pid/maps | grep -o '/.*rtemap_.*$'` ++ ++ stop_daemon ovs_dpdk ++ ++ #try to clean ++ for rtemap in $rtemaps ++ do ++ rm -f $rtemap ++ done ++ rm -f $rundir/ovs_dpdk.pid ++} ++ + start_forwarding () { + check_force_cores + ++ start_dpdk ++ + insert_mod_if_required || return 1 + + if daemon_is_running ovs-vswitchd; then +@@ -230,9 +269,9 @@ + ulimit -n 7500 + + # Start ovs-vswitchd. +- set ovs-vswitchd unix:"$DB_SOCK" ++ set ovs-vswitchd $OVS_VSWITCHD_PARAMS -- unix:"$DB_SOCK" + set "$@" -vconsole:emer -vsyslog:err -vfile:info +- if test X"$MLOCKALL" != Xno; then ++ if test -"$MLOCKALL" != Xno; then + set "$@" --mlockall + fi + start_daemon "$OVS_VSWITCHD_PRIORITY" "$OVS_VSWITCHD_WRAPPER" "$@" +@@ -249,6 +288,7 @@ + + stop_forwarding () { + stop_daemon ovs-vswitchd ++ stop_dpdk + } + + ## ----------------- ## +@@ -505,8 +545,10 @@ + MLOCKALL=yes + OVSDB_SERVER_PRIORITY=-10 + OVS_VSWITCHD_PRIORITY=-10 ++ OVS_DPDK_PRIORITY=-10 + OVSDB_SERVER_WRAPPER= + OVS_VSWITCHD_WRAPPER= ++ OVS_DPDK_WRAPPER= + + DB_FILE=$dbdir/conf.db + DB_SOCK=$rundir/db.sock +@@ -601,6 +643,8 @@ + data files: @pkgdatadir@ (--pkgdatadir, OVS_PKGDATADIR) + user binaries: @bindir@ (--bindir, OVS_BINDIR) + system binaries: @sbindir@ (--sbindir, OVS_SBINDIR) ++ ovs_dpdk params: OVS_DPDK_PARAMS (env only) ++ ovs-vswitchd dpdk params: OVS_VSWITCHD_PARAMS (env only) + + Please report bugs to bugs@openvswitch.org (see REPORTING-BUGS for details). + EOF +@@ -622,7 +666,7 @@ + } + + daemons () { +- echo ovsdb-server ovs-vswitchd ++ echo ovsdb-server ovs-vswitchd ovs_dpdk + } + + set_defaults diff --git a/recipes-networking/openvswitchdpdk/files/qemu-makefile.patch b/recipes-networking/openvswitchdpdk/files/qemu-makefile.patch new file mode 100644 index 0000000..0ef50da --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/qemu-makefile.patch @@ -0,0 +1,26 @@ +From 7f073eec0d100bddaba59c693505713974a2d4bb Mon Sep 17 00:00:00 2001 +From: Huimin She +Date: Tue, 22 Apr 2014 22:58:11 +0200 +Subject: [PATCH] Add -ldl to qemu Makefile + +Signed-off-by: Huimin She +--- + qemu/Makefile.target | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/qemu/Makefile.target b/qemu/Makefile.target +index 760da1e..72b58d7 100644 +--- a/qemu/Makefile.target ++++ b/qemu/Makefile.target +@@ -117,7 +117,7 @@ obj-$(CONFIG_HAVE_GET_MEMORY_MAPPING) += memory_mapping.o + obj-$(CONFIG_HAVE_CORE_DUMP) += dump.o + obj-$(CONFIG_NO_GET_MEMORY_MAPPING) += memory_mapping-stub.o + obj-$(CONFIG_NO_CORE_DUMP) += dump-stub.o +-LIBS+=-lz ++LIBS+=-lz -ldl + + # xen support + obj-$(CONFIG_XEN) += xen-all.o xen-mapcache.o +-- +1.8.3.2 + diff --git a/recipes-networking/openvswitchdpdk/files/qemu-options-hx.patch b/recipes-networking/openvswitchdpdk/files/qemu-options-hx.patch new file mode 100644 index 0000000..d847d9e --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/qemu-options-hx.patch @@ -0,0 +1,30 @@ +diff --git a/qemu/qemu-options.hx b/qemu/qemu-options.hx +index 9d7131a..1000d49 100644 +--- a/qemu/qemu-options.hx ++++ b/qemu/qemu-options.hx +@@ -2075,18 +2075,13 @@ QEMU supports using either local sheepdog devices or remote networked + devices. + + Syntax for specifying a sheepdog device +-@table @list +-``sheepdog:'' +- +-``sheepdog::'' +- +-``sheepdog::'' +- +-``sheepdog:::'' +- +-``sheepdog::::'' +- +-``sheepdog::::'' ++@table @code ++@item sheepdog: ++@item sheepdog:: ++@item sheepdog:: ++@item sheepdog::: ++@item sheepdog:::: ++@item sheepdog:::: + @end table + + Example diff --git a/recipes-networking/openvswitchdpdk/files/qemu-pixman-config.patch b/recipes-networking/openvswitchdpdk/files/qemu-pixman-config.patch new file mode 100644 index 0000000..266b42a --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/qemu-pixman-config.patch @@ -0,0 +1,26 @@ +From 1976f44e3b14653421f67d7d050586348f3d3fa1 Mon Sep 17 00:00:00 2001 +From: Huimin She +Date: Tue, 29 Apr 2014 10:00:30 +0200 +Subject: [PATCH] Add --host for qemu/pixman configure + +Signed-off-by: Huimin She +--- + qemu/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/qemu/Makefile b/qemu/Makefile +index 0d9099a..88b470f 100644 +--- a/qemu/Makefile ++++ b/qemu/Makefile +@@ -131,7 +131,7 @@ subdir-pixman: pixman/Makefile + $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C pixman V="$(V)" all,) + + pixman/Makefile: $(SRC_PATH)/pixman/configure +- (cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static) ++ (cd pixman; CFLAGS="$(CFLAGS) -fPIC $(extra_cflags) $(extra_ldflags)" $(SRC_PATH)/pixman/configure $(AUTOCONF_HOST) --disable-gtk --disable-shared --enable-static --host $(HOST_SYS)) + + $(SRC_PATH)/pixman/configure: + (cd $(SRC_PATH)/pixman; autoreconf -v --install) +-- +1.8.3.2 + diff --git a/recipes-networking/openvswitchdpdk/files/run-ptest b/recipes-networking/openvswitchdpdk/files/run-ptest new file mode 100644 index 0000000..3bf83b6 --- /dev/null +++ b/recipes-networking/openvswitchdpdk/files/run-ptest @@ -0,0 +1,8 @@ +#!/bin/sh + +INSTALLPREFIX= + +PATH=$INSTALLPREFIX/sbin:$INSTALLPREFIX/bin:$PATH + +./tests/testsuite --am-fmt -C tests AUTOTEST_PATH=utilities:vswitchd:ovsdb:tests + diff --git a/recipes-networking/openvswitchdpdk/openvswitchdpdk_0.10.0.bb b/recipes-networking/openvswitchdpdk/openvswitchdpdk_0.10.0.bb new file mode 100644 index 0000000..d6cde8d --- /dev/null +++ b/recipes-networking/openvswitchdpdk/openvswitchdpdk_0.10.0.bb @@ -0,0 +1,248 @@ +SUMMARY = "DPDK vSwitch" +DESCRIPTION = "DPDK vSwitch is a fork of Open vSwitch. It re-creates the kernel forwarding module (data plane) \ +by building the switching logic on top of the DPDK library to significantly boost packet switching throughput" +HOMEPAGE = "https://01.org/packet-processing" +SECTION = "networking" +LICENSE = "Apache-2 & GPLv2 & LGPLv2.1 & BSD" +LIC_FILES_CHKSUM = "file://openvswitch/COPYING;md5=eef486aeb68ddde5446062140eeda540 \ + file://qemu/COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \ + file://qemu/COPYING.LIB;md5=79ffa0ec772fa86740948cb7327a0cc7 \ + file://guest/ovs_client/ovs_client.c;beginline=1;endline=33;md5=8485efe01bb0513caf69f8bbec5617a0 \ + " +PV = "0.10.0" + +PACKAGES =+ "${PN}-controller ${PN}-switch ${PN}-pki ${PN}-qemu" + +DEPENDS += "dpdk virtual/kernel libtool glib-2.0 expect fuse python perl" + +RDEPENDS_${PN} += "util-linux-uuidgen util-linux-libuuid coreutils \ + python perl perl-module-strict sed gawk grep ${PN}-switch ${PN}-controller" +RRECOMMENDS_${PN} += "kernel-module-openvswitch kernel-module-uio kernel-module-pci-stub" + +RDEPENDS_${PN}-ptest += "python-logging python-syslog python-argparse python-io \ + python-fcntl python-shell python-lang python-xml python-math \ + python-datetime python-netclient python sed ${PN}" + +RDEPENDS_${PN}-pki = "${PN}" +ALLOW_EMPTY_${PN}-pki = "1" + +RDEPENDS_${PN}-controller += "${PN} lsb ${PN}-pki" +RDEPENDS_${PN}-switch = "${PN} openssl procps util-linux-uuidgen" + +OVS_PREFIX = "/opt/${PN}" + +FILES_${PN}-controller = "${sysconfdir}/init.d/openvswitchdpdk-controller \ + ${sysconfdir}/default/openvswitchdpdk-controller \ + ${OVS_PREFIX}/bin/ovs-controller \ + " + +FILES_${PN}-doc += "/share/man" + +FILES_${PN} += "/share" + +FILES_${PN}-switch = "${sysconfdir}/init.d/openvswitchdpdk-switch \ + ${sysconfdir}/default/openvswitchdpdk-switch" + +FILES_${PN}-qemu = "${QEMU_INSTALL_PATH}" + +inherit module-base update-rc.d + +INITSCRIPT_PACKAGES = "${PN}-switch ${PN}-controller" +INITSCRIPT_NAME_${PN}-switch = "openvswitchdpdk-switch" +#to enable at startup use bbappend recipe with INITSCRIPT_PARAMS_${PN}-switch = "defaults 71" +INITSCRIPT_PARAMS_${PN}-switch = "stop 20 5 2 . stop 20 0 1 6 ." + +INITSCRIPT_NAME_${PN}-controller = "openvswitchdpdk-controller" +#to enable at startup use bbappend recipe with INITSCRIPT_PARAMS_${PN}-controller = "defaults 72" +INITSCRIPT_PARAMS_${PN}-controller = "stop 20 5 2 . stop 20 0 1 6 ." + +# Release 0.10.0 +SRCREV = "28318e4004a9010b8bc15ff7e8ac5d886ea47857" +SRC_URI = "git://github.com/01org/dpdk-ovs;branch=master \ + file://configure-fix.patch \ + file://makefile-install-rule.patch \ + file://qemu-makefile.patch \ + file://openvswitchdpdk-switch \ + file://openvswitchdpdk-switch-setup \ + file://openvswitchdpdk-controller \ + file://openvswitchdpdk-controller-setup \ + file://qemu-pixman-config.patch \ + file://qemu-options-hx.patch \ + file://0001-openvswitchdpdk-enabled-ptest.patch \ + file://run-ptest \ + file://ovs-ctl-dpdk.patch \ + " + +S = "${WORKDIR}/git" +B = "${S}" +OVS_S_DIR = "${S}/openvswitch" +QEMU_S_DIR = "${S}/qemu" + +# Install this modified qemu to a different place than the normal qemu +QEMU_INSTALL_PATH = "/opt/dpdk-ovs-qemu" + +SRC_URI[md5sum] = "8d354e5f730292f126f29f85448cfc2d" +SRC_URI[sha256sum] = "6256f9ca96716686030e4456e97eacc2f31b3169e65a1455f73ffafd78f7828a" + +export RTE_SDK = "${STAGING_DIR_HOST}/opt/dpdk" +export RTE_TARGET = "x86_64-ivshmem-linuxapp-gcc" + +OVS_CONFIG_OPTS = "--build=${BUILD_SYS} \ + --host=${HOST_SYS} \ + --target=${TARGET_SYS} \ + --prefix=${OVS_PREFIX} \ + --disable-silent-rules \ + --disable-ssl \ + " + +QEMU_CONFIG_OPTS = "--prefix=${QEMU_INSTALL_PATH} \ + --with-confsuffix="" \ + --mandir=${QEMU_INSTALL_PATH}/share/man \ + --docdir=${QEMU_INSTALL_PATH}/share/doc \ + --datadir=${QEMU_INSTALL_PATH}/share \ + --sysconfdir=${QEMU_INSTALL_PATH}/usr/etc \ + --bindir=${QEMU_INSTALL_PATH}/bin \ + --libdir=${QEMU_INSTALL_PATH}/lib \ + --libexecdir=${QEMU_INSTALL_PATH}/libexec \ + --includedir=${QEMU_INSTALL_PATH}/include \ + --localstatedir=${QEMU_INSTALL_PATH}/var \ + --enable-kvm \ + --dpdkdir=${RTE_SDK} \ + --extra-cflags="-Wno-poison-system-directories" \ + --target-list=x86_64-softmmu \ + --disable-strip \ + " + +PACKAGESPLITFUNCS_prepend = "split_ovs_packages " + +#append OVS_PREFIX to all FILES_* in PACKAGES except for ptest, qemu, switch +# and controller(includes exception, see FILES_${PN}-controller) packages +python split_ovs_packages () { + pkgs = d.getVar('PACKAGES', True) + for pkg in pkgs.split(): + if (pkg.endswith('-ptest') or pkg.endswith('-qemu') or + pkg.endswith('-switch') or pkg.endswith('-controller')): + continue + files = d.getVar('FILES_%s' % pkg, True) + if files is None: + continue + files = [d.getVar('OVS_PREFIX', True) + file for file in files.split()] + files = ' '.join(files) + d.setVar('FILES_%s' % pkg, files) +} + +do_configure () { + cd ${OVS_S_DIR} && ./boot.sh && ./configure ${OVS_CONFIG_OPTS} + cd ${QEMU_S_DIR} && ./configure ${QEMU_CONFIG_OPTS} +} + +do_compile () { + cd ${OVS_S_DIR} && oe_runmake + cd ${S}/guest/ovs_client && oe_runmake + cd ${S}/guest/kni/kni_client && oe_runmake + + # unset the environment variables, so that oe_runmake will not override them + unset bindir mandir docdir sysconfdir datadir libdir libexecdir includedir localstatedir + cd ${QEMU_S_DIR} && oe_runmake +} + +#use simple quotes in the definition of the following "OVS_" prefixed variables +OVS_DPDK_PARAMS_DEFAULT = "-c 0x0f -n 4 --proc-type=primary --huge-dir /mnt/huge -- -p 0x03 -k 2 -n 4 --stats=1 --vswitchd=1 --client_switching_core=0 --config='(0,0,2),(1,0,3)'" +OVS_VSWITCHD_PARAMS_DEFAULT = "-c 0x10 -n 4 --proc-type=secondary" +#for debugging redirect to a regular file - this should be done temporary +#if permanent logging is required a service like logrotate is recommended to limit the size of the log file +OVS_DPDK_LOG_DEFAULT = "/dev/null" + +do_install () { + cd ${OVS_S_DIR} && oe_runmake DESTDIR=${D} install + install ${OVS_S_DIR}/datapath/dpdk/build/app/ovs_dpdk ${D}/${OVS_PREFIX}${base_bindir} + install -d ${D}/${OVS_PREFIX}/share/${PN}/kmod + install -m 644 ${OVS_S_DIR}/datapath/dpdk/fd_link/fd_link.ko ${D}/${OVS_PREFIX}/share/${PN}/kmod + install -m 644 ${RTE_SDK}/${RTE_TARGET}/kmod/*.ko ${D}/${OVS_PREFIX}/share/${PN}/kmod + install ${S}/guest/kni/kni_client/build/kni_client ${D}/${OVS_PREFIX}${base_bindir} + install ${S}/guest/ovs_client/build/ovs_client ${D}/${OVS_PREFIX}${base_bindir} + + install -d ${D}/${sysconfdir}/default/ + install -m 660 ${WORKDIR}/openvswitchdpdk-switch-setup ${D}/${sysconfdir}/default/openvswitchdpdk-switch + install -m 660 ${WORKDIR}/openvswitchdpdk-controller-setup ${D}/${sysconfdir}/default/openvswitchdpdk-controller + + install -d ${D}/${sysconfdir}/init.d/ + install -m 755 ${WORKDIR}/openvswitchdpdk-controller ${D}/${sysconfdir}/init.d/openvswitchdpdk-controller + sed -i 's|INSTALLPREFIX=|INSTALLPREFIX=${OVS_PREFIX}|g' ${D}/${sysconfdir}/init.d/openvswitchdpdk-controller + install -m 755 ${WORKDIR}/openvswitchdpdk-switch ${D}/${sysconfdir}/init.d/openvswitchdpdk-switch + sed -i 's|INSTALLPREFIX=|INSTALLPREFIX=${OVS_PREFIX}|g' ${D}/${sysconfdir}/init.d/openvswitchdpdk-switch + + # Add DPDK default parameters to /etc/default/openvswitchdpdk-switch + sed -i "s|@OVS_DPDK_PARAMS_DEFAULT|${OVS_DPDK_PARAMS_DEFAULT}|g" ${D}/${sysconfdir}/default/openvswitchdpdk-switch + sed -i "s|@OVS_VSWITCHD_PARAMS_DEFAULT|${OVS_VSWITCHD_PARAMS_DEFAULT}|g" ${D}/${sysconfdir}/default/openvswitchdpdk-switch + sed -i "s|@OVS_DPDK_LOG_DEFAULT|${OVS_DPDK_LOG_DEFAULT}|g" ${D}/${sysconfdir}/default/openvswitchdpdk-switch + + # Add DPDK default parameters to ovs-ctl + sed -i "s|@OVS_DPDK_PARAMS_DEFAULT|${OVS_DPDK_PARAMS_DEFAULT}|g" ${D}/${OVS_PREFIX}/share/openvswitch/scripts/ovs-ctl + sed -i "s|@OVS_VSWITCHD_PARAMS_DEFAULT|${OVS_VSWITCHD_PARAMS_DEFAULT}|g" ${D}/${OVS_PREFIX}/share/openvswitch/scripts/ovs-ctl + sed -i "s|@OVS_DPDK_LOG_DEFAULT|${OVS_DPDK_LOG_DEFAULT}|g" ${D}/${OVS_PREFIX}/share/openvswitch/scripts/ovs-ctl + + install -d ${D}/${OVS_PREFIX}${sysconfdir}/openvswitch-controller + + # unset the environment variables, so that oe_runmake will not override them + unset bindir mandir docdir sysconfdir datadir libdir libexecdir includedir localstatedir + + export STRIP="true" + install -d ${D}/${QEMU_INSTALL_PATH}/bin + cd ${QEMU_S_DIR} && oe_runmake DESTDIR=${D} install + + # silence QA error: architecture did not match + rm -f ${D}/${QEMU_INSTALL_PATH}/share/openbios* + rm -f ${D}/${QEMU_INSTALL_PATH}/share/palcode-clipper +} + +pkg_postinst_${PN}-pki () { + # can't do this offline + if [ "x$D" != "x" ]; then + exit 1 + fi + if test ! -d $D/${OVS_PREFIX}/share/${PN}/pki; then + ${OVS_PREFIX}/${base_bindir}/ovs-pki init --dir=$D/${OVS_PREFIX}/share/${PN}/pki + fi +} + +pkg_postinst_${PN}-controller () { + # can't do this offline + if [ "x$D" != "x" ]; then + exit 1 + fi + + if test ! -d $D/${OVS_PREFIX}/share/${PN}/pki; then + ${OVS_PREFIX}/${base_bindir}/ovs-pki init --dir=$D/${OVS_PREFIX}/share/${PN}/pki + fi + + cd $D/${OVS_PREFIX}${sysconfdir}/openvswitch-controller + if ! test -e cacert.pem; then + ln -s $D/${OVS_PREFIX}/share/${PN}/pki/switchca/cacert.pem cacert.pem + fi + if ! test -e privkey.pem || ! test -e cert.pem; then + oldumask=$(umask) + umask 077 + ${OVS_PREFIX}/${base_bindir}/ovs-pki req+sign --dir=$D/${OVS_PREFIX}/share/${PN}/pki tmp controller >/dev/null + mv tmp-privkey.pem privkey.pem + mv tmp-cert.pem cert.pem + mv tmp-req.pem req.pem + chmod go+r cert.pem req.pem + umask $oldumask + fi +} + +inherit ptest + +EXTRA_OEMAKE += "TEST_DEST=${D}${PTEST_PATH} TEST_ROOT=${PTEST_PATH}" + +do_install_ptest() { + cd ${OVS_S_DIR} && oe_runmake test-install + sed -i 's|INSTALLPREFIX=|INSTALLPREFIX=${OVS_PREFIX}|g' ${D}${PTEST_PATH}/run-ptest +} + +# for qemu/pixman configuration +export HOST_SYS + +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" +INSANE_SKIP_${PN} = "installed-vs-shipped" -- cgit v1.2.3-54-g00ecf