#!/bin/sh #============================================================================ # Author: Fulup Ar Foll based on Xen original network bridge # Debug: ./fridu-in-axen.sh start brname=xen-br0 braddr=10.10.12.1 brmask=255.255.255.0 # Usage: xend-config.sxp add following line # (network-script 'fridu-in-axen.sh brname=xen-br0 braddr=10.10.12.1 brmask=255.255.255.0') # Bugs: /etc/init.d/xend stop does not call the script # Trace: /var/log/xen/script.log # =========================================================================== # # users(default gw) admin(10.0.0.0/16) # ---------------------- ------------------- # | | # internet(eth0=82.12.4.1) vpn(tun0=10.0.0.1) # | | # firewall+nating openvp+routing # +--------------------------+ # | # QoS # Port Forwarding # | # xen-bridge(10.0.1.1) # local dhcp+dns # +-------------+------------+ # | | | # 10.0.1.2 10.0.1.3 10.0.1.4 # Xen-VM-1 Xen-VM-2 Xen-VM3 # #============================================================================ dir=$(dirname "$0") . "$dir/xen-script-common.sh" . "$dir/xen-network-common.sh" findCommand "$@" evalVariables "$@" brname=${brname:-xen-gw} braddr=${braddr:-10.0.0.1} brmask=${brmask:-255.255.255.0} echo `date` $0 $* >>/var/log/xen/script.log ## # link_exists interface # # Returns 0 if the interface named exists (whether up or down), 1 otherwise. # link_exists() { if ip link show "$1" >/dev/null 2>/dev/null then return 0 else return 1 fi } # Usage: show_status dev brname # Print ifconfig and routes. show_status () { local dev=$1 local brname=$2 echo '============================================================' ip addr show ${dev} ip addr show ${brname} echo ' ' brctl show ${brname} echo ' ' ip route list echo ' ' route -n echo '============================================================' } op_start () { # make sure routing is avaliable echo 1 >/proc/sys/net/ipv4/ip_forward if link_exists "$brname"; then if ifconfig "$brname" >/dev/null 2>/dev/null; then echo "ERROR brname=$brname already exist" exit 1 fi; fi # create our bridge setup IP/mask and no mask create_bridge ${brname} ifconfig ${brname} ${braddr} netmask ${brmask} ip link set ${brname} arp on } op_stop () { if ! link_exists "$brname"; then echo "ERROR: brname=$brname not found add brname=xxx option" return fi ip link set ${brname} down brctl delbr ${brname} } case "$command" in start) op_start ;; stop) op_stop ;; status) show_status ${netdev} ${brname} ;; *) echo "ERROR syntax: $0 start|stop|status brname=xxx braddr=xx.xx.xx brmask=.... " >&2 exit 1 esac