1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
Add ovs-vswitchd dpdk parameters and ovs_dpdk daemon calls.
Signed-off-by: Radu Patriu <radu.patriu@enea.com>
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
|