Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-4.9
xen
xen.0e7c69bd3c0b35a677d73843b39522787ccf5a3f.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xen.0e7c69bd3c0b35a677d73843b39522787ccf5a3f.patch of Package xen
From: Steven Haigh <netwiz@crc.id.au> Date: Wed, 18 Dec 2019 12:15:23 +1100 Subject: 0e7c69bd3c0b35a677d73843b39522787ccf5a3f tools/hotplug: Use ip on systems where brctl is not available Newer distros like CentOS 8 do not have brctl available. As such, we can't use it to configure networking anymore. This patch will fall back to 'ip' or 'bridge' commands if brctl is not available in the working PATH. This would be a likely backport candidate to any version expected to be built on CentOS 8 etc. Signed-off-by: Steven Haigh <netwiz@crc.id.au> Acked-by: Wei Liu <wl@xen.org> --- tools/hotplug/Linux/colo-proxy-setup | 30 ++++++--- tools/hotplug/Linux/vif-bridge | 16 +++-- tools/hotplug/Linux/vif2 | 12 +++- tools/hotplug/Linux/xen-network-common.sh | 16 +++-- 4 files changed, 55 insertions(+), 19 deletions(-) --- a/tools/hotplug/Linux/colo-proxy-setup +++ b/tools/hotplug/Linux/colo-proxy-setup @@ -67,43 +67,57 @@ function teardown_primary() do_without_error tc qdisc del dev $vifname root handle 1: prio do_without_error iptables -t mangle -D PREROUTING -m physdev --physdev-in \ $vifname -j PMYCOLO --index $index do_without_error ip6tables -t mangle -D PREROUTING -m physdev --physdev-in \ $vifname -j PMYCOLO --index $index do_without_error arptables -F do_without_error rmmod xt_PMYCOLO } function setup_secondary() { - do_without_error brctl delif $bridge $vifname - do_without_error brctl addbr $forwardbr - do_without_error brctl addif $forwardbr $vifname - do_without_error brctl addif $forwardbr $forwarddev + if which brctl >&/dev/null; then + do_without_error brctl delif $bridge $vifname + do_without_error brctl addbr $forwardbr + do_without_error brctl addif $forwardbr $vifname + do_without_error brctl addif $forwardbr $forwarddev + else + do_without_error ip link set $vifname nomaster + do_without_error ip link add name $forwardbr type bridge + do_without_error ip link set $vifname master $forwardbr + do_without_error ip link set $forwarddev master $forwardbr + fi do_without_error ip link set dev $forwardbr up do_without_error modprobe xt_SECCOLO iptables -t mangle -I PREROUTING -m physdev --physdev-in \ $vifname -j SECCOLO --index $index ip6tables -t mangle -I PREROUTING -m physdev --physdev-in \ $vifname -j SECCOLO --index $index } function teardown_secondary() { - do_without_error brctl delif $forwardbr $forwarddev - do_without_error brctl delif $forwardbr $vifname - do_without_error brctl delbr $forwardbr - do_without_error brctl addif $bridge $vifname + if which brctl >&/dev/null; then + do_without_error brctl delif $forwardbr $forwarddev + do_without_error brctl delif $forwardbr $vifname + do_without_error brctl delbr $forwardbr + do_without_error brctl addif $bridge $vifname + else + do_without_error ip link set $forwarddev nomaster + do_without_error ip link set $vifname nomaster + do_without_error ip link delete $forwardbr type bridge + do_without_error ip link set $vifname master $bridge + fi do_without_error iptables -t mangle -D PREROUTING -m physdev --physdev-in \ $vifname -j SECCOLO --index $index do_without_error ip6tables -t mangle -D PREROUTING -m physdev --physdev-in \ $vifname -j SECCOLO --index $index do_without_error rmmod xt_SECCOLO } case "$command" in setup) if [ "$mode" = "primary" ] then --- a/tools/hotplug/Linux/vif-bridge +++ b/tools/hotplug/Linux/vif-bridge @@ -22,28 +22,30 @@ # # down: # Removes the vif interface from the bridge and removes the iptables # rules for its ip addresses (if any). #============================================================================ dir=$(dirname "$0") . "$dir/vif-common.sh" bridge=${bridge:-} bridge=$(xenstore_read_default "$XENBUS_PATH/bridge" "$bridge") -if [ -z "$bridge" ] -then - bridge=$(brctl show | awk 'NR==2{print$1}') - +if [ -z "$bridge" ]; then + if which brctl >&/dev/null; then + bridge=$(brctl show | awk 'NR==2{print$1}') + else + bridge=$(bridge link | cut -d" " -f7) + fi if [ -z "$bridge" ] then fatal "Could not find bridge, and none was specified" fi else # # Old style bridge setup with netloop, used to have a bridge name # of xenbrX, enslaving pethX and vif0.X, and then configuring # eth0. # # New style bridge setup does not use netloop, so the bridge name # is ethX and the physical device is enslaved pethX @@ -73,25 +75,29 @@ if [ "$RET" -eq 1 ] then fatal "Could not find bridge device $bridge" fi case "$command" in online) setup_virtual_bridge_port "$dev" set_mtu "$bridge" "$dev" add_to_bridge "$bridge" "$dev" ;; offline) - do_without_error brctl delif "$bridge" "$dev" + if which brctl >&/dev/null; then + do_without_error brctl delif "$bridge" "$dev" + else + do_without_error ip link set "$dev" nomaster + fi do_without_error ifconfig "$dev" down ;; add) setup_virtual_bridge_port "$dev" set_mtu "$bridge" "$dev" add_to_bridge "$bridge" "$dev" ;; esac handle_iptable --- a/tools/hotplug/Linux/vif2 +++ b/tools/hotplug/Linux/vif2 @@ -1,28 +1,36 @@ #!/bin/bash dir=$(dirname "$0") . "$dir/xen-hotplug-common.sh" . "$dir/xen-network-common.sh" bridge=$(xenstore_read_default "$XENBUS_PATH/bridge" "$bridge") if [ -z "$bridge" ] then - nr_bridges=$(($(brctl show | cut -f 1 | grep -v "^$" | wc -l) - 1)) + if which brctl >&/dev/null; then + nr_bridges=$(($(brctl show | cut -f 1 | grep -v "^$" | wc -l) - 1)) + else + nr_bridges=$(bridge link | wc -l) + fi if [ "$nr_bridges" != 1 ] then fatal "no bridge specified, and don't know which one to use ($nr_bridges found)" fi - bridge=$(brctl show | cut -d " + if which brctl >&/dev/null; then + bridge=$(brctl show | cut -d " " -f 2 | cut -f 1) + else + bridge=$(bridge link | cut -d" " -f6) + fi fi command="$1" shift case "$command" in "online") if [ "$bridge" != "-" ] then setup_virtual_bridge_port "$vif" add_to_bridge "$bridge" "$vif" else --- a/tools/hotplug/Linux/xen-network-common.sh +++ b/tools/hotplug/Linux/xen-network-common.sh @@ -102,41 +102,49 @@ setup_physical_bridge_port() { _setup_bridge_port $1 0 } setup_virtual_bridge_port() { _setup_bridge_port $1 1 } # Usage: create_bridge bridge create_bridge () { local bridge=$1 # Don't create the bridge if it already exists. if [ ! -e "/sys/class/net/${bridge}/bridge" ]; then - brctl addbr ${bridge} - brctl stp ${bridge} off - brctl setfd ${bridge} 0 + if which brctl >&/dev/null; then + brctl addbr ${bridge} + brctl stp ${bridge} off + brctl setfd ${bridge} 0 + else + ip link add name ${bridge} type bridge stp_state 0 forward_delay 0 + fi fi } # Usage: add_to_bridge bridge dev add_to_bridge () { local bridge=$1 local dev=$2 # Don't add $dev to $bridge if it's already on a bridge. if [ -e "/sys/class/net/${bridge}/brif/${dev}" ]; then ip link set dev ${dev} up || true return fi - brctl addif ${bridge} ${dev} + if which brctl >&/dev/null; then + brctl addif ${bridge} ${dev} + else + ip link set ${dev} master ${bridge} + fi ip link set dev ${dev} up } # Usage: set_mtu bridge dev set_mtu () { local bridge=$1 local dev=$2 mtu="`ip link show dev ${bridge}| awk '/mtu/ { print $5 }'`" if [ -n "$mtu" ] && [ "$mtu" -gt 0 ] then ip link set dev ${dev} mtu $mtu || : fi
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor