aboutsummaryrefslogtreecommitdiffstats
path: root/sysconfig/network-scripts/ifdown-ipv6
blob: 8f4319ba56278f82c115473c7675c43ee2399ebd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/sh
#
# ifdown-ipv6
#
#
# Taken from:
# (P) & (C) 2000-2001 by Peter Bieringer <pb@bieringer.de>
#
# RHL integration assistance by Pekka Savola <pekkas@netcore.fi>
#
# Version 2001-07-15
#
# Uses following information from /etc/sysconfig/network:
#  NETWORKING_IPV6=yes|no: controls IPv6 initialization (global setting)
#
# Uses following information from /etc/sysconfig/network-scripts/ifcfg-$1:
#  IPV6INIT=yes|no: controls IPv6 configuration for this interface
#
# Optional for 6to4 tunneling:
#  IPV6TO4_RELAY=<ipv4address>: IPv4 address of the remote 6to4 relay
#  IPV6TO4_ROUTING="eth0-:f101::0/64 eth1-:f102::0/64": information to setup local subnetting
#  IPV6TO4_CONTROL_RADVD=yes|no: controls radvd triggering [optional]
#  IPV6TO4_RADVD_PIDFILE=file: PID file of radvd for sending signals, default is "/var/run/radvd/radvd.pid" [optional]
#
#  Requirements for 6to4 if using radvd:
#   radvd-0.6.2p3 or newer supporting option "Base6to4Interface"
#


. /etc/sysconfig/network 

cd /etc/sysconfig/network-scripts
. network-functions 

CONFIG=$1
[ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG
source_config                                                                   

# Test whether IPv6 should be configured, else stop
[ "${NETWORKING_IPV6}" = "yes" ] || exit 0

if [ ! -f /etc/sysconfig/network-scripts/network-functions-ipv6 ]; then
	exit 1
fi

# Source IPv6 helper functions
. /etc/sysconfig/network-scripts/network-functions-ipv6

# IPv6 test, no module loaded, exit if system is not IPv6-ready
test_ipv6 testonly || exit 0


# Switch some sysctls to secure mode
sysctl -w net.ipv6.conf.$DEVICE.forwarding=0 >/dev/null
sysctl -w net.ipv6.conf.$DEVICE.accept_ra=0 >/dev/null
sysctl -w net.ipv6.conf.$DEVICE.accept_redirects=0 >/dev/null

# Shutdown of 6to4, if configured
valid6to4config="yes"
if [ -z "$IPV6TO4_RELAY" ]; then
	valid6to4config="no"
fi
if [ "$valid6to4config" = "yes" ]; then
	if [ "$IPV6TO4_CONTROL_RADVD" = "yes" ]; then
		# stop RADVD from distributing no longer usable 6to4 prefixes
		if [ -z "$IPV6TO4_RADVD_PIDFILE" ]; then
			IPV6TO4_RADVD_PIDFILE="/var/run/radvd/radvd.pid"
		fi
		# Send SIGHUP to radvd
		if [ -f "$IPV6TO4_RADVD_PIDFILE" ]; then
			pid="`cat $IPV6TO4_RADVD_PIDFILE`"
			if [ ! -z "$pid" ]; then
				#  still waiting for feature enabling: stopping distribution of prefixes in RADVD....
				# kill -SOMETHING $pid
				false
			else
				false
			fi
		fi
	fi

	if [ ! -z "$IPV6TO4_ROUTING" ]; then
		# Delete routes to local networks
		for devsuf in $IPV6TO4_ROUTING; do
			dev="`echo $devsuf | awk -F- '{ print $1 }'`"
			ifdown_ipv6_route_all $dev ::
		done
	fi

	# Detect type of address, whether it is IPv4 or IPv6
	if testipv6_valid $IPV6TO4_RELAY; then
		relay6to4type="ipv6"
	fi

	# Delete all static IPv6to4 routes
	if [ "$relay6to4type" = "ipv6" ]; then	
		ifdown_ipv6_route_all sit0 $IPV6TO4_RELAY
	else
		ifdown_ipv6_route_all sit0 ::$IPV6TO4_RELAY
	fi

	# Delete old 6to4 routes, even if IPV6TO4_RELAY was changed
	if [ -f /etc/sysconfig/static-routes-ipv6 ]; then
		grep -w "^sit0" /etc/sysconfig/static-routes-ipv6 | while read device network dummy; do
			if [ "$EXISTS_ipv6calc" = "yes" ]; then
				# Convert given network to compressed one
				network="`ipv6calc  --addr_to_compressed $network`"
			fi
			LC_ALL=C route -A inet6 | grep "^$network" | while read destination nexthop flags metric ref use iface dummy; do
				if ! [ "$device" = "$iface" -a "$network" = "$destination" ]; then
					continue
				fi
				# Look for routes to a compatible IPv4 address, delete them
				if echo $nexthop | egrep -q '^::[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'; then
					ifdown_ipv6_route $destination $nexthop $iface
				fi
				# Look for routes to a IPv6to4 address, delete them
				if echo $nexthop | egrep -q '^2002::'; then
					ifdown_ipv6_route $destination $nexthop $iface
				fi
			done
		done
	fi

	# Delete 6to4 route
	ifdown_ipv6_route 2002::/16 :: sit0

	# Delete all configured 6to4 address
	ifdown_ipv6to4_all sit0 
fi

# Delete all current configured IPv6 addresses on this interface 
ifdown_ipv6_real_all $DEVICE