#!/bin/sh

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH


#"load balancing (round-robin)"
#"fault-tolerance (active-backup)"
#"load balancing (xor)"
#"fault-tolerance (broadcast)"
#"IEEE 802.3ad Dynamic link aggregation"
#"transmit load balancing"
#"adaptive load balancing"

modulepath="/lib/modules/2.6.31.8/kernel"
modulewirelan1="atl1e.ko"
modulewirelan2="8139too.ko"
modulewirelesslan1="8712u.ko"
modulevlan="8021q.ko"
moduleipv6="ipv6.ko"
modulebonding="bonding.ko"

unloadwirelan1module()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulewirelan1%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		#delete module
		rmmod  -f "${modulewirelan1%%.ko}"
		if [ $? -eq 0 ]
		then
			return 0	
		else
			return 1 
		fi
	fi
}


loadwirelan1module()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulewirelan1%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		unloadwirelan1module	
	fi

	if [ -f "${modulepath}/drivers/net/atl1e/${modulewirelan1}" ];then
		#install module
		insmod ${modulepath}/drivers/net/atl1e/${modulewirelan1}
		if [ $? -eq 0 ]
		then
			return 0	
		fi
	fi
	
	return 1	
}

unloadwirelan2module()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulewirelan2%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		#delete module
		rmmod  -f "${modulewirelan2%%.ko}"
		if [ $? -eq 0 ]
		then
			return 0	
		else
			return 1 
		fi
	fi
}


loadwirelan2module()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulewirelan2%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		unloadwirelan2module	
	fi

	if [ -f "${modulepath}/drivers/net/8139/${modulewirelan2}" ];then
		#install module
		insmod ${modulepath}/drivers/net/8139/${modulewirelan2}
		if [ $? -eq 0 ]
		then
			return 0	
		fi
	fi
	return 1	
}
#####################
unloadwirelesslan1module()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulewirelesslan1%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		#delete module
		rmmod  -f "${modulewirelesslan1%%.ko}"
		if [ $? -eq 0 ]
		then
			return 0	
		else
			return 1 
		fi
	fi
}

loadwirelesslan1module()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulewirelesslan1%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		unloadwirelesslan1module
	fi
	
	if [ -f "${modulepath}/drivers/net/wireless/${modulewirelesslan1}" ];then
		#install module
		insmod ${modulepath}/drivers/net/wireless/${modulewirelesslan1}
		if [ $? -eq 0 ]
		then
			return 0	
		fi
	fi
	return 1	
}
#####################
unloadvlanmodule()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulevlan%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		#delete module
		rmmod  -f "${modulevlan%%.ko}"
		if [ $? -eq 0 ]
		then
			return 0	
		else
			return 1 
		fi
	fi
}


loadvlanmodule()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulevlan%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		unloadvlanmodule	
	fi

	if [ -f "${modulepath}/net/802/stp.ko" ];then
		#install module
		insmod ${modulepath}/net/802/stp.ko
	fi	
	
	if [ -f "${modulepath}/net/802/garp.ko" ];then
		#install module
		insmod ${modulepath}/net/802/garp.ko
	fi

	if [ -f "${modulepath}/net/8021q/${modulevlan}" ];then
		#install module
		insmod ${modulepath}/net/8021q/${modulevlan}
		if [ $? -eq 0 ]
		then
			return 0	
		fi
	fi
	return 1	
}

unloadbondingmodule()
{
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulebonding%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		#delete module
		rmmod  -f "${modulebonding%%.ko}"
		if [ $? -eq 0 ]
		then
			return 0	
		else
			return 1 
		fi
	fi
}


loadbondingmodule()
{
	mode=$1
	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${moduleipv6%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -le 0 ]
	then
		if [ -f "${modulepath}/net/ipv6/${moduleipv6}" ];then
			#install module
			insmod ${modulepath}/net/ipv6/${moduleipv6}	
		fi
	fi

	cnt="$(lsmod |grep -v "grep"|grep -v "func_common"|grep  "${modulebonding%%.ko}" |awk 'END{print FNR}')"
	if [ $cnt -gt 0 ]
	then
		unloadbondingmodule	
	fi

	echo modulebonding:$modulebonding	
	#echo mode:$mode
	if [ -f "${modulepath}/drivers/net/bonding/${modulebonding}" ];then
		#install module
		insmod ${modulepath}/drivers/net/bonding/${modulebonding}  miimon=100 mode=${mode}
		if [ $? -eq 0 ]
		then
			return 0	
		fi
	fi
	return 1	
}

