]> git.proxmox.com Git - mirror_ovs.git/blame - utilities/ovs-kmod-ctl.in
rhel: Add option to enable AF_XDP on rpm package.
[mirror_ovs.git] / utilities / ovs-kmod-ctl.in
CommitLineData
15117123
AC
1#! /bin/sh
2# SPDX-License-Identifier: Apache-2.0
3# Copyright (C) 2018 Red Hat, Inc.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at:
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
333ea340
JP
17case $0 in
18 */*) dir0=`echo "$0" | sed 's,/[^/]*$,,'` ;;
19 *) dir0=./ ;;
20esac
21. "$dir0/ovs-lib" || exit 1
15117123
AC
22
23for dir in "$sbindir" "$bindir" /sbin /bin /usr/sbin /usr/bin; do
24 case :$PATH: in
25 *:$dir:*) ;;
26 *) PATH=$PATH:$dir ;;
27 esac
28done
29
30insert_mods () {
31 # Try loading openvswitch kernel module.
32 action "Inserting openvswitch module" modprobe openvswitch
33}
34
35insert_kmods_if_required() {
36 # If this kernel has no module support, expect we're done.
37 if test ! -e /proc/modules
38 then
39 log_success_msg "Kernel has no loadable module support. Skipping modprobe"
40 return 0
41 fi
42
43 # If openvswitch is already loaded then we're done.
44 test -e /sys/module/openvswitch && return 0
45
46 # Load openvswitch. If that's successful then we're done.
47 insert_mods && return 0
48
49 # If the bridge module is loaded, then that might be blocking
50 # openvswitch. Try to unload it, if there are no bridges.
51 test -e /sys/module/bridge || return 1
52 bridges=`echo /sys/class/net/*/bridge | sed 's,/sys/class/net/,,g;s,/bridge,,g'`
53 if test "$bridges" != "*"; then
54 log_warning_msg "not removing bridge module because bridges exist ($bridges)"
55 return 1
56 fi
57 action "removing bridge module" rmmod bridge || return 1
58
59 # Try loading openvswitch again.
60 insert_mods
61}
62
63remove_kmods() {
64 for vport in `awk '/^vport_/ { print $1 }' /proc/modules`; do
65 action "Removing $vport module" rmmod $vport
66 done
67
68 if test -e /sys/module/ip_gre; then
69 action "Forcing removal of ip_gre module" rmmod ip_gre
70 fi
71
72 if test -e /sys/module/gre; then
73 action "Forcing removal of gre module" rmmod gre
74 fi
75
76 if test -e /sys/module/openvswitch; then
77 action "Removing openvswitch module" rmmod openvswitch
78 fi
e95ce654
GR
79
80 # Older releases may be using the rtnetlink interface while a
81 # newer release will want to use the internal compat interface
82 # for geneve and vxlan.
83 if test -e /sys/class/net/genev_sys_6081; then
84 action "Removing geneve device" \
85 ip link del link genev_sys_6081 dev genev_sys_6081
86 fi
87 if test -e /sys/class/net/vxlan_sys_4789; then
88 action "Removing vxlan device" \
89 ip link del link vxlan_sys_4789 dev vxlan_sys_4789
90 fi
91
92 if test -e /sys/module/geneve; then
93 action "Forcing removal of geneve module" rmmod geneve
94 fi
95 if test -e /sys/module/vxlan; then
96 action "Forcing removal of vxlan module" rmmod vxlan
97 fi
15117123
AC
98}
99
100usage () {
101 cat <<EOF
102$0: controls Open vSwitch kernel modules
103usage: $0 [OPTIONS] COMMAND
104
105This program is intended to be invoked internally by Open vSwitch startup
106scripts. System administrators should not normally invoke it directly.
107
108Commands:
109 insert insert the Open vSwitch kernel modules
110 remove remove the Open vSwitch kernel modules
111
112Options:
113 -h, --help display this help message
114 -V, --version display version information
115
116Default directories with "configure" option and environment variable override:
117 logs: @LOGDIR@ (--with-logdir, OVS_LOGDIR)
118 pidfiles and sockets: @RUNDIR@ (--with-rundir, OVS_RUNDIR)
119 conf.db: @DBDIR@ (--with-dbdir, OVS_DBDIR)
120 system configuration: @sysconfdir@ (--sysconfdir, OVS_SYSCONFDIR)
121 data files: @pkgdatadir@ (--pkgdatadir, OVS_PKGDATADIR)
122 user binaries: @bindir@ (--bindir, OVS_BINDIR)
123 system binaries: @sbindir@ (--sbindir, OVS_SBINDIR)
124
125Please report bugs to bugs@openvswitch.org (see REPORTING-BUGS for details).
126EOF
127
128 exit 0
129}
130
131set_option () {
132 var=`echo "$option" | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`
133 eval set=\${$var+yes}
134 eval old_value=\$$var
135 if test X$set = X || \
136 (test $type = bool && \
137 test X"$old_value" != Xno && test X"$old_value" != Xyes); then
138 echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
139 return
140 fi
141 eval $var=\$value
142}
143
144extra_ids=
145command=
146for arg
147do
148 case $arg in
149 -h | --help)
150 usage
151 ;;
152 -V | --version)
153 echo "$0 (Open vSwitch) $VERSION"
154 exit 0
155 ;;
156 --[a-z]*=*)
157 option=`expr X"$arg" : 'X--\([^=]*\)'`
158 value=`expr X"$arg" : 'X[^=]*=\(.*\)'`
159 type=string
160 set_option
161 ;;
162 --no-[a-z]*)
163 option=`expr X"$arg" : 'X--no-\(.*\)'`
164 value=no
165 type=bool
166 set_option
167 ;;
168 --[a-z]*)
169 option=`expr X"$arg" : 'X--\(.*\)'`
170 value=yes
171 type=bool
172 set_option
173 ;;
174 -*)
175 echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
176 exit 1
177 ;;
178 *)
179 if test X"$command" = X; then
180 command=$arg
181 else
182 echo >&2 "$0: exactly one non-option argument required (use --help for help)"
183 exit 1
184 fi
185 ;;
186 esac
187done
188case $command in
189 remove)
190 remove_kmods
191 ;;
192 insert)
193 insert_kmods_if_required
194 ;;
195 help)
196 usage
197 ;;
198 '')
199 echo >&2 "$0: missing command name (use --help for help)"
200 exit 1
201 ;;
202 *)
203 echo >&2 "$0: unknown command \"$command\" (use --help for help)"
204 exit 1
205 ;;
206esac