wg-quick: run PreUp hook after creating interface
Currently PreUp hooks run before the interface is created. This is
problematic for moving the device into a Linux VRFs as this will
currently clear all assigned IPv6 addressess (possibly a bug), so if we
did this in PostUp (i.e. before add_addr) we'll have to manually re-add
all assigned addresses. This is obviously less than ideal.
Instead create the wg device just before running PreUp hooks. We apply
this to all platforms for consistency.
Test case:
    $ ip link add vrf-test type vrf table 1234
    $ ip link add wg-test type wireguard
    $ ip addr add dev wg-test 192.168.42.42/24
    $ ip addr add dev wg-test fe80::/64
    $ ip -br addr show wg-test
    wg-test          DOWN           192.168.42.42/24 fe80::/64
    $ ip link set dev wg-test master vrf-test
    $ ip -br addr show wg-test
    wg-test          DOWN           192.168.42.42/32
Signed-off-by: Daniel Gröber <dxld@darkboxed.org>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
			
			
This commit is contained in:
		
							parent
							
								
									b4f6b4f229
								
							
						
					
					
						commit
						e6888dd74e
					
				@ -452,8 +452,8 @@ cmd_up() {
 | 
				
			|||||||
	local i
 | 
						local i
 | 
				
			||||||
	get_real_interface && die "\`$INTERFACE' already exists as \`$REAL_INTERFACE'"
 | 
						get_real_interface && die "\`$INTERFACE' already exists as \`$REAL_INTERFACE'"
 | 
				
			||||||
	trap 'del_if; del_routes; exit' INT TERM EXIT
 | 
						trap 'del_if; del_routes; exit' INT TERM EXIT
 | 
				
			||||||
	execute_hooks "${PRE_UP[@]}"
 | 
					 | 
				
			||||||
	add_if
 | 
						add_if
 | 
				
			||||||
 | 
						execute_hooks "${PRE_UP[@]}"
 | 
				
			||||||
	set_config
 | 
						set_config
 | 
				
			||||||
	for i in "${ADDRESSES[@]}"; do
 | 
						for i in "${ADDRESSES[@]}"; do
 | 
				
			||||||
		add_addr "$i"
 | 
							add_addr "$i"
 | 
				
			||||||
 | 
				
			|||||||
@ -420,8 +420,8 @@ cmd_up() {
 | 
				
			|||||||
	local i
 | 
						local i
 | 
				
			||||||
	[[ -z $(ifconfig "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
 | 
						[[ -z $(ifconfig "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
 | 
				
			||||||
	trap 'del_if; del_routes; clean_temp; exit' INT TERM EXIT
 | 
						trap 'del_if; del_routes; clean_temp; exit' INT TERM EXIT
 | 
				
			||||||
	execute_hooks "${PRE_UP[@]}"
 | 
					 | 
				
			||||||
	add_if
 | 
						add_if
 | 
				
			||||||
 | 
						execute_hooks "${PRE_UP[@]}"
 | 
				
			||||||
	set_config
 | 
						set_config
 | 
				
			||||||
	for i in "${ADDRESSES[@]}"; do
 | 
						for i in "${ADDRESSES[@]}"; do
 | 
				
			||||||
		add_addr "$i"
 | 
							add_addr "$i"
 | 
				
			||||||
 | 
				
			|||||||
@ -327,8 +327,8 @@ cmd_up() {
 | 
				
			|||||||
	local i
 | 
						local i
 | 
				
			||||||
	[[ -z $(ip link show dev "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
 | 
						[[ -z $(ip link show dev "$INTERFACE" 2>/dev/null) ]] || die "\`$INTERFACE' already exists"
 | 
				
			||||||
	trap 'del_if; exit' INT TERM EXIT
 | 
						trap 'del_if; exit' INT TERM EXIT
 | 
				
			||||||
	execute_hooks "${PRE_UP[@]}"
 | 
					 | 
				
			||||||
	add_if
 | 
						add_if
 | 
				
			||||||
 | 
						execute_hooks "${PRE_UP[@]}"
 | 
				
			||||||
	set_config
 | 
						set_config
 | 
				
			||||||
	for i in "${ADDRESSES[@]}"; do
 | 
						for i in "${ADDRESSES[@]}"; do
 | 
				
			||||||
		add_addr "$i"
 | 
							add_addr "$i"
 | 
				
			||||||
 | 
				
			|||||||
@ -417,8 +417,8 @@ cmd_up() {
 | 
				
			|||||||
	local i
 | 
						local i
 | 
				
			||||||
	get_real_interface && die "\`$INTERFACE' already exists as \`$REAL_INTERFACE'"
 | 
						get_real_interface && die "\`$INTERFACE' already exists as \`$REAL_INTERFACE'"
 | 
				
			||||||
	trap 'del_if; del_routes; exit' INT TERM EXIT
 | 
						trap 'del_if; del_routes; exit' INT TERM EXIT
 | 
				
			||||||
	execute_hooks "${PRE_UP[@]}"
 | 
					 | 
				
			||||||
	add_if
 | 
						add_if
 | 
				
			||||||
 | 
						execute_hooks "${PRE_UP[@]}"
 | 
				
			||||||
	set_config
 | 
						set_config
 | 
				
			||||||
	for i in "${ADDRESSES[@]}"; do
 | 
						for i in "${ADDRESSES[@]}"; do
 | 
				
			||||||
		add_addr "$i"
 | 
							add_addr "$i"
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user