]>
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 AF |
74 | case "$TYPE" in |
75 | OVSBridge) | |
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. | |
80 | if check_device_down "${DEVICE}"; then | |
81 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-br "$DEVICE" $OVS_OPTIONS \ | |
32aa4689 GS |
82 | ${OVS_EXTRA+-- $OVS_EXTRA} \ |
83 | ${STP+-- set bridge "$DEVICE" stp_enable="${STP}"} | |
5b56f96a GS |
84 | else |
85 | OVSBRIDGECONFIGURED="yes" | |
86 | fi | |
87 | ||
88 | # When dhcp is enabled, the assumption is that there will be a port to | |
89 | # attach (otherwise, we can't reach out for dhcp). So, we do not | |
90 | # configure the bridge through rhel's ifup infrastructure unless | |
91 | # it is being configured after the port has been configured. | |
92 | # The "OVSINTF" is set only after the port is configured. | |
5442edb9 | 93 | if [ "${OVSBOOTPROTO}" = "dhcp" ] && [ -n "${OVSINTF}" ]; then |
b4b6a39a GS |
94 | case " ${OVSDHCPINTERFACES} " in |
95 | *" ${OVSINTF} "*) | |
5442edb9 GS |
96 | BOOTPROTO=dhcp ${OTHERSCRIPT} ${CONFIG} |
97 | ;; | |
98 | esac | |
99 | fi | |
5b56f96a GS |
100 | |
101 | # When dhcp is not enabled, it is possible that someone may want | |
102 | # a standalone bridge (i.e it may not have any ports). Configure it. | |
103 | if [ "${OVSBOOTPROTO}" != "dhcp" ] && [ -z "${OVSINTF}" ] && \ | |
104 | [ "${OVSBRIDGECONFIGURED}" != "yes" ]; then | |
5442edb9 GS |
105 | ${OTHERSCRIPT} ${CONFIG} |
106 | fi | |
79416011 | 107 | exit 0 |
0fb42626 AF |
108 | ;; |
109 | OVSPort) | |
5b56f96a | 110 | ifup_ovs_bridge |
0fb42626 | 111 | ${OTHERSCRIPT} ${CONFIG} ${2} |
cfa9bf12 | 112 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA} |
b4b6a39a | 113 | OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE" |
0fb42626 AF |
114 | ;; |
115 | OVSIntPort) | |
5b56f96a | 116 | ifup_ovs_bridge |
cfa9bf12 | 117 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=internal ${OVS_EXTRA+-- $OVS_EXTRA} |
490db96e FL |
118 | if [ -n "${OVSDHCPINTERFACES}" ]; then |
119 | for _iface in ${OVSDHCPINTERFACES}; do | |
120 | /sbin/ifup ${_iface} | |
121 | done | |
122 | fi | |
123 | BOOTPROTO="${OVSBOOTPROTO}" ${OTHERSCRIPT} ${CONFIG} ${2} | |
0fb42626 AF |
124 | ;; |
125 | OVSBond) | |
5b56f96a | 126 | ifup_ovs_bridge |
0fb42626 AF |
127 | for _iface in $BOND_IFACES; do |
128 | /sbin/ifup ${_iface} | |
129 | done | |
5e3a8607 | 130 | ovs-vsctl -t ${TIMEOUT} -- --may-exist add-bond "$OVS_BRIDGE" "$DEVICE" ${BOND_IFACES} $OVS_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA} |
b4b6a39a | 131 | OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE" |
0fb42626 | 132 | ;; |
7b75828b EB |
133 | OVSTunnel) |
134 | ifup_ovs_bridge | |
135 | 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} | |
136 | ${OTHERSCRIPT} ${CONFIG} ${2} | |
137 | ;; | |
d7aab661 JK |
138 | OVSPatchPort) |
139 | ifup_ovs_bridge | |
140 | 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} | |
141 | ;; | |
0fb42626 AF |
142 | *) |
143 | echo $"Invalid OVS interface type $TYPE" | |
144 | exit 1 | |
145 | ;; | |
146 | esac |