mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Apply mtu size from bridge interface also in vif interface. This depends on a kernel change which allows arbitrary mtu sizes until the frontend driver has connected to the backend driver. Without this kernel change, the vif mtu size will be limited to 1500 even with this change to the vif-bridge script. Signed-off-by: Olaf Hering <olaf@aepfle.de> Acked-by: Ian Campbell <Ian.Campbell@eu.citrix.com> Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
113 lines
2.9 KiB
Bash
113 lines
2.9 KiB
Bash
#!/bin/bash
|
|
#============================================================================
|
|
# ${XEN_SCRIPT_DIR}/vif-bridge
|
|
#
|
|
# Script for configuring a vif in bridged mode.
|
|
# The hotplugging system will call this script if it is specified either in
|
|
# the device configuration given to Xend, or the default Xend configuration
|
|
# in ${XEN_CONFIG_DIR}/xend-config.sxp. If the script is specified in
|
|
# neither of those places, then this script is the default.
|
|
#
|
|
# Usage:
|
|
# vif-bridge (add|remove|online|offline)
|
|
#
|
|
# Environment vars:
|
|
# vif vif interface name (required).
|
|
# XENBUS_PATH path to this device's details in the XenStore (required).
|
|
#
|
|
# Read from the store:
|
|
# bridge bridge to add the vif to (optional). Defaults to searching for the
|
|
# bridge itself.
|
|
# ip list of IP networks for the vif, space-separated (optional).
|
|
#
|
|
# up:
|
|
# Enslaves the vif interface to the bridge and adds iptables rules
|
|
# for its ip addresses (if any).
|
|
#
|
|
# 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 | cut -d "
|
|
" -f 2 | cut -f 1)
|
|
|
|
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
|
|
#
|
|
# So if...
|
|
#
|
|
# - User asks for xenbrX
|
|
# - AND xenbrX doesn't exist
|
|
# - AND there is a ethX device which is a bridge
|
|
#
|
|
# ..then we translate xenbrX to ethX
|
|
#
|
|
# This lets old config files work without modification
|
|
#
|
|
if [ ! -e "/sys/class/net/$bridge" ] && [ -z "${bridge##xenbr*}" ]
|
|
then
|
|
if [ -e "/sys/class/net/eth${bridge#xenbr}/bridge" ]
|
|
then
|
|
bridge="eth${bridge#xenbr}"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
RET=0
|
|
ip link show $bridge 1>/dev/null 2>&1 || RET=1
|
|
if [ "$RET" -eq 1 ]
|
|
then
|
|
fatal "Could not find bridge device $bridge"
|
|
fi
|
|
|
|
case "$command" in
|
|
online)
|
|
setup_virtual_bridge_port "$dev"
|
|
mtu="`ip link show $bridge | awk '/mtu/ { print $5 }'`"
|
|
if [ -n "$mtu" ] && [ "$mtu" -gt 0 ]
|
|
then
|
|
ip link set $dev mtu $mtu || :
|
|
fi
|
|
add_to_bridge "$bridge" "$dev"
|
|
;;
|
|
|
|
offline)
|
|
do_without_error brctl delif "$bridge" "$dev"
|
|
do_without_error ifconfig "$dev" down
|
|
;;
|
|
|
|
add)
|
|
setup_virtual_bridge_port "$dev"
|
|
add_to_bridge "$bridge" "$dev"
|
|
;;
|
|
esac
|
|
|
|
if [ "$type_if" = vif ]; then
|
|
handle_iptable
|
|
fi
|
|
|
|
log debug "Successful vif-bridge $command for $dev, bridge $bridge."
|
|
if [ "$type_if" = vif -a "$command" = "online" ]
|
|
then
|
|
success
|
|
fi
|