summaryrefslogtreecommitdiffstats
path: root/recipes-networking/openvswitchdpdk/files/ovs-ctl-dpdk.patch
blob: bbe7a3217d946253ec517ee2e080d04ad8d24f5c (plain)
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