#!/usr/bin/wsrunxslt /config/wsxmlconf/machine.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
	Script for bringing up a bridged interface
	Copyright (C) 2004 Networks Associates Technology Inc.
	All rights reserved.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="param_0">eth0</xsl:param>

<xsl:template match="/">
    <xsl:for-each select="/PolicySet/GlobalSettings[@name='machine']/Policy[@name='system_variables']/PolicyStatement/Settings[@name='stp-settings']">
       <xsl:call-template name="setup-bridge"/>
    </xsl:for-each>
</xsl:template>

<xsl:template name="setup-bridge">
<xsl:text>
if [ -f $NETAWSS/.profile.vars ]; then 
    . $NETAWSS/.profile.vars 
else 
    . /var/NAIENV/.profile.vars 
fi 
set -a
PATH=$wsPATH:$PATH
shopt -s extglob
xwsconf=$XMLCONFDIR/WebShield.xml
. ${WSMGMT}/shvars-xmlconf > /dev/null 2>&amp;1

PATH=/sbin:/usr/sbin:$PATH

dev=</xsl:text><xsl:value-of select='$param_0'/><xsl:text>

ibr()
{
    # what's our MTU
    MTU=$(
	    unset MTU
	    cfg=/etc/sysconfig/network-scripts/ifcfg-$1
	    [[ -s "$cfg" ]] &amp;&amp; . "$cfg"
	    echo $MTU
	)
    [[ $MTU != *([0-9]) || $MTU -lt 576 || $MTU -gt 1500 ]] &amp;&amp; MTU=''

    # should be down or absent anyway
    ifconfig $1 down 2>/dev/null

    # remove the transparency driver
    /sbin/rmmod wsnat > /dev/null 2>&amp;1

    brctl delbr $1 2>/dev/null
    # up the NICs
    ifconfig eth0 0.0.0.0 up ${MTU:+mtu $MTU}
    ifconfig eth1 0.0.0.0 up ${MTU:+mtu $MTU}

    # construct the bridge
    brctl addbr $1
    brctl addif $1 eth0
    brctl addif $1 eth1
</xsl:text>
    <xsl:call-template name='set_bridge_parameter'>
         <xsl:with-param name='set'>setfd</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='ForwardingDelay']/@value"/></xsl:with-param>
    </xsl:call-template>

    <xsl:call-template name='set_bridge_parameter'>
         <xsl:with-param name='set'>sethello</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='HelloTime']/@value"/></xsl:with-param>
    </xsl:call-template>

    <xsl:call-template name='set_bridge_parameter'>
         <xsl:with-param name='set'>setmaxage</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='MaxAge']/@value"/></xsl:with-param>
    </xsl:call-template>

    <xsl:call-template name='set_bridge_parameter'>
         <xsl:with-param name='set'>setbridgeprio</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='Priority']/@value"/></xsl:with-param>
    </xsl:call-template>

    <xsl:call-template name='set_bridge_parameter'>
         <xsl:with-param name='set'>setgcint</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='GarbageCollect']/@value"/></xsl:with-param>
    </xsl:call-template>

    <xsl:call-template name='set_bridge_parameter'>
         <xsl:with-param name='set'>setageing</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='AgeingTime']/@value"/></xsl:with-param>
    </xsl:call-template>

    <xsl:call-template name='set_stp'>
         <xsl:with-param name='set'>stp</xsl:with-param>
         <xsl:with-param name='get'><xsl:value-of select="Attr[@name='Enabled']/@value='1'"/></xsl:with-param>
    </xsl:call-template>
<xsl:text>

}

case $dev in
    (ibr*([0-9])) ibr $dev;;
esac
</xsl:text>
</xsl:template>

<xsl:template name="set_bridge_parameter">
    <xsl:param name='set'/>
    <xsl:param name='get'/>
    <xsl:text>    brctl </xsl:text><xsl:value-of select="$set"/><xsl:text> ${1} </xsl:text><xsl:value-of select='$get'/><xsl:text>&#10;</xsl:text>
</xsl:template>

<xsl:template name="set_stp">
    <xsl:param name='set'/>
    <xsl:param name='get'/>
    <xsl:choose>
         <xsl:when test="$get='true'">
         <xsl:text>    brctl stp ${1} on&#10;</xsl:text>
         </xsl:when>
         <xsl:otherwise>
         <xsl:text>    brctl stp ${1} off&#10;</xsl:text>
         </xsl:otherwise>
    </xsl:choose>
</xsl:template>

</xsl:stylesheet>
