]>
Commit | Line | Data |
---|---|---|
0fb42626 AF |
1 | #!/bin/bash |
2 | ||
3 | # Copyright (c) 2011 Alexey I. Froloff. | |
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 | ||
17 | . /etc/init.d/functions | |
18 | ||
19 | cd /etc/sysconfig/network-scripts | |
20 | . ./network-functions | |
21 | ||
22 | [ -f ../network ] && . ../network | |
23 | ||
24 | CONFIG=${1} | |
cfa9bf12 | 25 | TIMEOUT=10 |
0fb42626 AF |
26 | |
27 | need_config ${CONFIG} | |
28 | ||
29 | source_config | |
30 | ||
31 | OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${REAL_DEVICETYPE}" | |
32 | ||
33 | if [ ! -x ${OTHERSCRIPT} ]; then | |
34 | OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-eth" | |
35 | fi | |
36 | ||
5b56f96a | 37 | check_recursion () |
3214851c TG |
38 | { |
39 | [ -n "${UPPEDSTACK}" ] && for _r in ${UPPEDSTACK}; do | |
40 | [ "$_r" = "$1" ] && return 1 | |
41 | done | |
42 | ||
43 | return 0 | |
44 | } | |
45 | ||
5b56f96a GS |
46 | ifup_ovs_bridge () |
47 | { | |
48 | if ovs-vsctl br-exists "${OVS_BRIDGE}"; then :; else | |
49 | /sbin/ifup "${OVS_BRIDGE}" | |
50 | fi | |
51 | } | |
52 | ||
3214851c TG |
53 | if [ -z "${UPPEDSTACK}" ]; then |
54 | UPPEDSTACK="${DEVICE}" | |
55 | fi | |
56 | ||
57 | [ -n "${OVSREQUIRES}" ] && for _i in ${OVSREQUIRES}; do | |
58 | if ( check_recursion "$_i" ); then | |
59 | UPPEDSTACK="${UPPEDSTACK} $_i" /sbin/ifup "$_i" | |
60 | fi | |
61 | done | |
62 | ||
b49c106e FL |
63 | SERVICE_UNIT=/usr/lib/systemd/system/openvswitch-nonetwork.service |
64 | if [ -f $SERVICE_UNIT ] && [ -x /usr/bin/systemctl ]; then | |
65 | if ! systemctl --quiet is-active openvswitch-nonetwork.service; then | |
66 | systemctl start openvswitch-nonetwork.service | |
67 | fi | |
68 | else | |
69 | if [ ! -f /var/lock/subsys/openvswitch ]; then | |
70 | /sbin/service openvswitch start | |
71 | fi | |
72 | fi | |
60245300 | 73 | |
0fb42626 | 74 | case "$TYPE" in |
f6bf8880 | 75 | OVSBridge|OVSUserBridge) |
5b56f96a GS |
76 | # If bridge already exists and is up, it has been configured through |
77 | # other cases like OVSPort, OVSIntPort and OVSBond. If it is down or | |
78 | # it does not exist, create it. It is possible for a bridge to exist | |
79 | # because it remained in the OVSDB for some reason, but it won't be up. | |
f6bf8880 PM |
80 | if [ "${TYPE}" = "OVSUserBridge" ]; then |
81 | DATAPATH="netdev" | |
82 | fi | |
5b56f96a GS |
83 | if check_device_down "${DEVICE}"; then |
84 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS \ | |
32aa4689 | 85 | ${OVS_EXTRA+-- $OVS_EXTRA} \ |
f6bf8880 PM |
86 | ${STP+-- set bridge "$DEVICE" stp_enable="${STP}"} \ |
87 | ${DATAPATH+-- set bridge "$DEVICE" datapath_type="$DATAPATH"} | |
5b56f96a GS |
88 | else |
89 | OVSBRIDGECONFIGURED="yes" | |
90 | fi | |
91 | ||
d40fc57d LKS |
92 | # If MACADDR is provided in the interface configuration file, |
93 | # we need to set it using ovs-vsctl; setting it with the "ip" | |
94 | # command in ifup-eth does not make the change persistent. | |
95 | if [ -n "$MACADDR" ]; then | |
96 | ovs-vsctl -t ${TIMEOUT} -- set bridge "$DEVICE" \ | |
97 | other-config:hwaddr="$MACADDR" | |
98 | fi | |
99 | ||
5b56f96a GS |
100 | # When dhcp is enabled, the assumption is that there will be a port to |
101 | # attach (otherwise, we can't reach out for dhcp). So, we do not | |
102 | # configure the bridge through rhel's ifup infrastructure unless | |
103 | # it is being configured after the port has been configured. | |
104 | # The "OVSINTF" is set only after the port is configured. | |
5442edb9 | 105 | if [ "${OVSBOOTPROTO}" = "dhcp" ] && [ -n "${OVSINTF}" ]; then |
b4b6a39a GS |
106 | case " ${OVSDHCPINTERFACES} " in |
107 | *" ${OVSINTF} "*) | |
5442edb9 GS |
108 | BOOTPROTO=dhcp ${OTHERSCRIPT} ${CONFIG} |
109 | ;; | |
110 | esac | |
111 | fi | |
5b56f96a GS |
112 | |
113 | # When dhcp is not enabled, it is possible that someone may want | |
114 | # a standalone bridge (i.e it may not have any ports). Configure it. | |
115 | if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ] && \ | |
116 | [ "${OVSBRIDGECONFIGURED}" != "yes" ]; then | |
5442edb9 GS |
117 | ${OTHERSCRIPT} ${CONFIG} |
118 | fi | |
79416011 | 119 | exit 0 |
0fb42626 AF |
120 | ;; |
121 | OVSPort) | |
5b56f96a | 122 | ifup_ovs_bridge |
0fb42626 | 123 | ${OTHERSCRIPT} ${CONFIG} ${2} |
24496b4a FL |
124 | # The port might be already in the database but not yet |
125 | # in the datapath. So, remove the stale interface first. | |
126 | ovs-vsctl -t ${TIMEOUT} \ | |
127 | -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE" \ | |
128 | -- add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA} | |
b4b6a39a | 129 | OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE" |
0fb42626 AF |
130 | ;; |
131 | OVSIntPort) | |
5b56f96a | 132 | ifup_ovs_bridge |
cfa9bf12 | 133 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- $OVS_EXTRA} |
490db96e FL |
134 | if [ -n "${OVSDHCPINTERFACES}" ]; then |
135 | for _iface in ${OVSDHCPINTERFACES}; do | |
136 | /sbin/ifup ${_iface} | |
137 | done | |
138 | fi | |
139 | BOOTPROTO="${OVSBOOTPROTO}" ${OTHERSCRIPT} ${CONFIG} ${2} | |
0fb42626 AF |
140 | ;; |
141 | OVSBond) | |
5b56f96a | 142 | ifup_ovs_bridge |
0fb42626 AF |
143 | for _iface in $BOND_IFACES; do |
144 | /sbin/ifup ${_iface} | |
145 | done | |
5e3a8607 | 146 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA} |
b4b6a39a | 147 | OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE" |
0fb42626 | 148 | ;; |
7b75828b EB |
149 | OVSTunnel) |
150 | ifup_ovs_bridge | |
151 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=$OVS_TUNNEL_TYPE $OVS_TUNNEL_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA} | |
7b75828b | 152 | ;; |
d7aab661 JK |
153 | OVSPatchPort) |
154 | ifup_ovs_bridge | |
155 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=patch options:peer="${OVS_PATCH_PEER}" ${OVS_EXTRA+-- $OVS_EXTRA} | |
156 | ;; | |
f6bf8880 PM |
157 | OVSDPDKPort) |
158 | ifup_ovs_bridge | |
159 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdk ${OVS_EXTRA+-- $OVS_EXTRA} | |
160 | ;; | |
161 | OVSDPDKRPort) | |
162 | ifup_ovs_bridge | |
163 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkr ${OVS_EXTRA+-- $OVS_EXTRA} | |
164 | ;; | |
165 | OVSDPDVhostPort) | |
166 | ifup_ovs_bridge | |
167 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkvhost ${OVS_EXTRA+-- $OVS_EXTRA} | |
168 | ;; | |
169 | OVSDPDKVhostUserPort) | |
170 | ifup_ovs_bridge | |
171 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=dpdkvhostuser ${OVS_EXTRA+-- $OVS_EXTRA} | |
172 | ;; | |
0fb42626 AF |
173 | *) |
174 | echo $"Invalid OVS interface type $TYPE" | |
175 | exit 1 | |
176 | ;; | |
177 | esac |