Add macvlan support
X-Gentoo-Bug: 384029 X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=384029
This commit is contained in:
		
				
					committed by
					
						
						William Hubbs
					
				
			
			
				
	
			
			
			
						parent
						
							b1da4dcb99
						
					
				
				
					commit
					f94e883633
				
			@@ -13,7 +13,7 @@ SRCS-Linux=	iwconfig.sh.in
 | 
			
		||||
INC-Linux=	adsl.sh apipa.sh arping.sh bonding.sh br2684ctl.sh bridge.sh \
 | 
			
		||||
		ccwgroup.sh clip.sh ethtool.sh iproute2.sh ifplugd.sh ip6to4.sh \
 | 
			
		||||
		ipppd.sh iwconfig.sh netplugd.sh pppd.sh pump.sh tuntap.sh udhcpc.sh \
 | 
			
		||||
		vlan.sh
 | 
			
		||||
		vlan.sh macvlan.sh
 | 
			
		||||
 | 
			
		||||
SRCS-NetBSD=
 | 
			
		||||
INC-NetBSD=	ifwatchd.sh
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										69
									
								
								net/macvlan.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								net/macvlan.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
			
		||||
# 2011-09-22	Stef Simoens <stef@bgs.org>
 | 
			
		||||
#		based on vlan.sh & tuntap.sh
 | 
			
		||||
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
 | 
			
		||||
# All rights reserved. Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
_ip()
 | 
			
		||||
{
 | 
			
		||||
	if [ -x /bin/ip ]; then
 | 
			
		||||
		echo /bin/ip
 | 
			
		||||
	else
 | 
			
		||||
		echo /sbin/ip
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macvlan_depend()
 | 
			
		||||
{
 | 
			
		||||
	program $(_ip)
 | 
			
		||||
	after interface
 | 
			
		||||
	before dhcp macchanger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_is_macvlan()
 | 
			
		||||
{
 | 
			
		||||
	[ -n "$(export RC_SVCNAME="net.${IFACE}"; service_get_value macvlan)" ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_check_macvlan()
 | 
			
		||||
{
 | 
			
		||||
	if [ ! -d /sys/module/macvlan ]; then
 | 
			
		||||
		modprobe macvlan
 | 
			
		||||
		if [ ! -d /sys/module/macvlan ]; then
 | 
			
		||||
			eerror "MAC-VLAN support is not present in this kernel"
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macvlan_pre_start()
 | 
			
		||||
{
 | 
			
		||||
	# MAC-VLAN needs an existing interface to link to
 | 
			
		||||
	local macvlan=
 | 
			
		||||
	eval macvlan=\$macvlan_${IFVAR}
 | 
			
		||||
	[ -z "${macvlan}" ] && return 0
 | 
			
		||||
 | 
			
		||||
	_check_macvlan || return 1
 | 
			
		||||
 | 
			
		||||
	# optional mode, default to "private"
 | 
			
		||||
	local mode=
 | 
			
		||||
	eval mode=\$mode_${IFVAR}
 | 
			
		||||
	[ -z "${mode}" ] && mode="private"
 | 
			
		||||
 | 
			
		||||
	ebegin "Creating MAC-VLAN ${IFACE} to ${macvlan}"
 | 
			
		||||
	e="$(ip link add link "${macvlan}" name "${IFACE}" type macvlan mode "${mode}" 2>&1 1>/dev/null)"
 | 
			
		||||
	if [ -n "${e}" ]; then
 | 
			
		||||
		eend 1 "${e}"
 | 
			
		||||
	else
 | 
			
		||||
		eend 0 && service_set_value macvlan "${macvlan}"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
macvlan_post_stop()
 | 
			
		||||
{
 | 
			
		||||
	_is_macvlan || return 0
 | 
			
		||||
 | 
			
		||||
	ebegin "Removing MAC-VLAN ${IFACE}"
 | 
			
		||||
	ip link delete "${IFACE}" type macvlan >/dev/null
 | 
			
		||||
	eend $?
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user