From ee673429a7dae3de798f97ec323ea2530c22348e Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Tue, 24 Jul 2001 20:09:07 +0000 Subject: ipv6 update () --- ipv6-6to4.howto | 2 +- ipv6-tunnel.howto | 2 +- ppp/ip-down.ipv6to4 | 10 +- ppp/ip-up.ipv6to4 | 17 +-- sysconfig.txt | 5 + sysconfig/network-scripts/ifdown-ipv6 | 48 ++++++-- sysconfig/network-scripts/ifdown-sit | 11 +- sysconfig/network-scripts/ifup-ipv6 | 75 ++++++------ sysconfig/network-scripts/ifup-sit | 47 ++++---- sysconfig/network-scripts/init.ipv6-global | 8 +- sysconfig/network-scripts/network-functions-ipv6 | 142 +++++++++-------------- 11 files changed, 182 insertions(+), 185 deletions(-) diff --git a/ipv6-6to4.howto b/ipv6-6to4.howto index 40af57d4..28543ff8 100644 --- a/ipv6-6to4.howto +++ b/ipv6-6to4.howto @@ -25,7 +25,7 @@ ASSUMPTIONS This is required for correct IPv6 by default settings, and IPv6 being enabled as a kernel module by default. -2. Your initscripts >= 5.83.2, for 6to4 support. +2. Your initscripts >= 6.02, for 6to4 support. 3. You have a static, globally unique IPv4 address. This is not an absolute requirement, but the only scenario discussed here. diff --git a/ipv6-tunnel.howto b/ipv6-tunnel.howto index 0f5bb7a3..c37f9762 100644 --- a/ipv6-tunnel.howto +++ b/ipv6-tunnel.howto @@ -92,7 +92,7 @@ Tunnel can be brought up and down with: ifup sit1 ifdown sit1 -NOTE: In initscripts <= 5.83 (ie. IPV6_TUNNELMODE=NBMA), even though sit1 is used, +NOTE: In initscripts < 6.02 (ie. IPV6_TUNNELMODE=NBMA), even though sit1 is used, 'ifconfig' sees the tunnel as sit0. This is due to an "interesting" implementation of tunneling -- else multiple tunnels couldn't be used extensibly. diff --git a/ppp/ip-down.ipv6to4 b/ppp/ip-down.ipv6to4 index 2f481708..29a4e8a0 100644 --- a/ppp/ip-down.ipv6to4 +++ b/ppp/ip-down.ipv6to4 @@ -6,7 +6,7 @@ # Taken from: # (P) & (C) 2000-2001 by Peter Bieringer # -# Version 2001-05-07 +# Version 2001-07-15a # # Calling parameters: # $1: interface name @@ -42,11 +42,8 @@ CONFIG=$1 [ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG source_config -# Test if IPv6 is globally enabled -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - # Global IPv6 switch not enabled, end now - exit 0 -fi +# 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 @@ -70,7 +67,6 @@ 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 - # Take default IPV6TO4_RADVD_PIDFILE="/var/run/radvd/radvd.pid" fi # Send SIGHUP to radvd diff --git a/ppp/ip-up.ipv6to4 b/ppp/ip-up.ipv6to4 index 6767703c..7124868d 100644 --- a/ppp/ip-up.ipv6to4 +++ b/ppp/ip-up.ipv6to4 @@ -6,7 +6,7 @@ # Taken from: # (P) & (C) 2000-2001 by Peter Bieringer # -# Version 2001-05-07 +# Version 2001-07-15a # # Calling parameters: # $1: interface name @@ -46,14 +46,10 @@ CONFIG=$1 [ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG source_config -# Test if IPv6 is globally enabled -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - # Global IPv6 switch not enabled, end now - exit 0 -fi +# Test whether IPv6 should be configured, else stop +[ "${NETWORKING_IPV6}" = "yes" ] || exit 0 if [ ! -f /etc/sysconfig/network-scripts/network-functions-ipv6 ]; then - # IPv6 setup isn't well exit 1 fi @@ -113,10 +109,8 @@ if [ "$IPV6TO4INIT" = "yes" ]; then ifup_ipv6to4 $DEVICE $ipv4addr || exit 1 if [ -f /etc/sysconfig/static-routes-ipv6 ]; then - grep "^sit0" /etc/sysconfig/static-routes-ipv6 | while read device args; do - if [ "$device" = "sit0" ]; then - ifup_ipv6_route $args ::$IPV6TO4_RELAY sit0 - fi + grep -w "^sit0" /etc/sysconfig/static-routes-ipv6 | while read device args; do + ifup_ipv6_route $args ::$IPV6TO4_RELAY sit0 done fi @@ -126,7 +120,6 @@ if [ "$IPV6TO4INIT" = "yes" ]; 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 diff --git a/sysconfig.txt b/sysconfig.txt index f91422f9..67fea335 100644 --- a/sysconfig.txt +++ b/sysconfig.txt @@ -450,6 +450,11 @@ Files in /etc/sysconfig/network-scripts/ a list of secondary IPv6 addresses (perhaps useful for virtual hosting) Example: IPV6ADDR_SECONDARIES="3ffe:400:100:f101::10/64 3ffe:400:100:f101::11/64" + IPV6_MTU="" [optional] + Note: Must be greater or equal to 1280. + Optional, dedicated MTU of this link + Example: + IPV6_MTU="1280" Special configuration options for multi-homed hosts etc. IPV6_ROUTER=yes|no: controls IPv6 autoconfiguration diff --git a/sysconfig/network-scripts/ifdown-ipv6 b/sysconfig/network-scripts/ifdown-ipv6 index d111d1cb..8f4319ba 100755 --- a/sysconfig/network-scripts/ifdown-ipv6 +++ b/sysconfig/network-scripts/ifdown-ipv6 @@ -8,7 +8,7 @@ # # RHL integration assistance by Pekka Savola # -# Version 2001-05-22d +# Version 2001-07-15 # # Uses following information from /etc/sysconfig/network: # NETWORKING_IPV6=yes|no: controls IPv6 initialization (global setting) @@ -36,14 +36,10 @@ CONFIG=$1 [ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG source_config -# Test if IPv6 is globally enabled -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - # Global IPv6 switch not enabled, end now - exit 0 -fi +# Test whether IPv6 should be configured, else stop +[ "${NETWORKING_IPV6}" = "yes" ] || exit 0 if [ ! -f /etc/sysconfig/network-scripts/network-functions-ipv6 ]; then - # IPv6 setup isn't well exit 1 fi @@ -68,7 +64,6 @@ 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 - # Take default IPV6TO4_RADVD_PIDFILE="/var/run/radvd/radvd.pid" fi # Send SIGHUP to radvd @@ -92,8 +87,43 @@ if [ "$valid6to4config" = "yes" ]; then 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 - ifdown_ipv6_route_all sit0 ::$IPV6TO4_RELAY + 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 diff --git a/sysconfig/network-scripts/ifdown-sit b/sysconfig/network-scripts/ifdown-sit index a2a70c16..1fa4dad9 100755 --- a/sysconfig/network-scripts/ifdown-sit +++ b/sysconfig/network-scripts/ifdown-sit @@ -8,7 +8,7 @@ # # RHL integration assistance by Pekka Savola # -# Version 2001-05-22d +# Version 2001-07-15a # # Uses following information from /etc/sysconfig/network: # NETWORKING_IPV6=yes|no: controls IPv6 initialization (global setting) @@ -31,14 +31,10 @@ CONFIG=$1 [ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG source_config -# Test if IPv6 is up -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - # Global IPv6 switch not enabled, end now - exit 0 -fi +# Test whether IPv6 should be configured, else stop +[ "${NETWORKING_IPV6}" = "yes" ] || exit 0 if [ ! -f /etc/sysconfig/network-scripts/network-functions-ipv6 ]; then - # IPv6 setup isn't well exit 1 fi @@ -54,7 +50,6 @@ if [ "$DEVICE" = "sit0" ]; then elif [ ! -z "$IPV6TUNNELIPV4" ]; then if [ "$IPV6_TUNNELMODE" = "NBMA" ]; then if [ ! -z "$IPV6ADDR" ]; then - # Numbered tunnel ifdown_ipv6_real sit0 $IPV6ADDR fi diff --git a/sysconfig/network-scripts/ifup-ipv6 b/sysconfig/network-scripts/ifup-ipv6 index b8a5c71c..cd5d0062 100755 --- a/sysconfig/network-scripts/ifup-ipv6 +++ b/sysconfig/network-scripts/ifup-ipv6 @@ -8,7 +8,7 @@ # # RHL integration assistance by Pekka Savola # -# Version 2001-05-22d +# Version 2001-07-16 # # Uses following information from "/etc/sysconfig/network": # NETWORKING_IPV6=yes|no: controls IPv6 initialization (global setting) @@ -22,10 +22,11 @@ # defaults: # IPV6FORWARDING=yes: IPV6_AUTOCONF=no, IPV6_ROUTER=yes # IPV6FORWARDING=no: IPV6_AUTOCONF=yes +# IPV6_MTU=: controls IPv6 MTU for this link [optional] # # Optional for 6to4 tunneling: # IPV6TO4INIT=yes|no: controls 6to4 tunneling setup -# IPV6TO4_RELAY=: IPv4 address of the remote 6to4 relay +# IPV6TO4_RELAY=: IPv4/IPv6to4 address of the remote 6to4 relay # IPV6TO4_IPV4ADDR=: overwrite local IPv4 address [optional] # IPV6TO4_ROUTING="eth0-:f101::0/64 eth1-:f102::0/64": information to setup local subnetting # IPV6TO4_CONTROL_RADVD=yes|no: controls radvd triggering [optional] @@ -47,20 +48,13 @@ CONFIG=$1 [ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG source_config -# Test if IPv6 configuration is enabled -if [ ! "$IPV6INIT" = "yes" ]; then - # not enabled, stop here - exit 0 -fi +# Test whether IPv6 configuration is enabled for this interface, else stop +[ "$IPV6INIT" = "yes" ] || exit 0 -# Test if IPv6 is up -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - # Global IPv6 switch not enabled, end now - exit 0 -fi +# Test whether IPv6 should be configured, else stop +[ "${NETWORKING_IPV6}" = "yes" ] || exit 0 if [ ! -f /etc/sysconfig/network-scripts/network-functions-ipv6 ]; then - # IPv6 setup isn't well exit 1 fi @@ -85,19 +79,16 @@ if [ "$IPV6FORWARDING" = "yes" ]; then # Check, if global IPv6 forwarding was already set by global script if [ $ipv6_global_forwarding_current -ne 1 ]; then - # Forwarding enabled, but not set, display warning echo $"Global IPv6 forwarding is enabled in configuration, but not currently enabled in kernel" - echo $"Please restart network with '/etc/rc.d/init.d/network restart'" +# echo $"Please restart network with '/sbin/service network restart'" fi ipv6_local_forwarding=1 ipv6_local_auto=0 if [ "$IPV6_ROUTER" = "no" ]; then - # Interface should not act as a Router ipv6_local_forwarding=0 fi if [ "$IPV6_AUTOCONF" = "yes" ]; then - # Interface should be autoconfigured ipv6_local_auto=1 fi else @@ -105,15 +96,13 @@ else # Check, if global IPv6 forwarding was already set by global script if [ $ipv6_global_forwarding_current -ne 0 ]; then - # Forwarding disabled, but not set, display warning echo $"Global IPv6 forwarding is disabled in configuration, but not currently disabled in kernel" - echo $"Please restart network with '/etc/rc.d/init.d/network restart'" +# echo $"Please restart network with '/sbin/service network restart'" fi ipv6_local_forwarding=0 ipv6_local_auto=1 if [ "$IPV6_AUTOCONF" = "no" ]; then - # Interface should not be autoconfigured ipv6_local_auto=0 fi fi @@ -121,6 +110,11 @@ sysctl -w net.ipv6.conf.$DEVICE.forwarding=$ipv6_local_forwarding >/dev/null sysctl -w net.ipv6.conf.$DEVICE.accept_ra=$ipv6_local_auto >/dev/null sysctl -w net.ipv6.conf.$DEVICE.accept_redirects=$ipv6_local_auto >/dev/null +# Set IPv6 MTU, if given +if [ ! -z "$IPV6_MTU" ]; then + ipv6_set_mtu $DEVICE $IPV6_MTU +fi + # Setup additional IPv6 addresses from list if [ ! -z "$IPV6ADDR_SECONDARIES" ]; then for ipv6addr in $IPV6ADDR_SECONDARIES; do @@ -130,10 +124,8 @@ fi # Setup additional static IPv6 routes on specified interface if [ -f /etc/sysconfig/static-routes-ipv6 ]; then - grep "^$DEVICE\W" /etc/sysconfig/static-routes-ipv6 | while read device args; do - if [ "$device" = "$DEVICE" ]; then - ifup_ipv6_route $args $DEVICE - fi + grep -w "^$DEVICE" /etc/sysconfig/static-routes-ipv6 | while read device args; do + ifup_ipv6_route $args $DEVICE done fi @@ -152,7 +144,6 @@ if [ "$IPV6TO4INIT" = "yes" ]; then fi fi if [ ! -z "$ipv4addr" ]; then - # Test for non-global IPv4 address if ! testipv4_globalusable $ipv4addr; then echo $"Given IPv4 address $ipv4addr is not a globally usable one, 6to4 configuration is not valid!" valid6to4config="no" @@ -162,8 +153,19 @@ if [ "$IPV6TO4INIT" = "yes" ]; then valid6to4config="no" fi if [ "$valid6to4config" = "yes" ]; then - if ! testipv4_globalusable $IPV6TO4_RELAY; then - echo $"Given IPv4 address of relay is not a globally usable one, 6to4 configuration is not valid!" + if testipv4_globalusable $IPV6TO4_RELAY 2>/dev/null; then + true + elif testipv6_valid $IPV6TO4_RELAY; then + relay6to4type="ipv6" + if echo $IPV6TO4_RELAY | grep -q "^2002:"; then + # IPv6 address is a 6to4 (further tests not be implemented at the moment) + true + else + echo $"Given IPv6 address of relay is not a 6to4 one, 6to4 configuration is not valid!" + valid6to4config="no" + fi + else + echo $"Given address of relay is not a globally usable one, 6to4 configuration is not valid!" valid6to4config="no" fi fi @@ -173,27 +175,31 @@ if [ "$IPV6TO4INIT" = "yes" ]; then fi if [ "$valid6to4config" = "yes" ]; then ifup_ipv6to4 $DEVICE $ipv4addr + + # Add static routes if [ -f /etc/sysconfig/static-routes-ipv6 ]; then - grep "^sit0" /etc/sysconfig/static-routes-ipv6 | while read device args; do - if [ "$device" = "sit0" ]; then - ifup_ipv6_route $args ::$IPV6TO4_RELAY sit0 + grep -w "^sit0" /etc/sysconfig/static-routes-ipv6 | while read device network dummy; do + if [ "$relay6to4type" = "ipv6" ]; then + # Foreign 6to4 relay gateway as IPv6to4 + ifup_ipv6_route $network $IPV6TO4_RELAY sit0 + else + # Foreign 6to4 relay gateway as compatible IPv4 + ifup_ipv6_route $network ::$IPV6TO4_RELAY sit0 fi done fi if [ "$IPV6TO4_CONTROL_RADVD" = "yes" ]; then - # RADVD is in use, so forwarding of IPv6 packets should be enabled + # RADVD is in use, so forwarding of IPv6 packets should be enabled, display warning if [ $ipv6_global_forwarding_current -ne 1 ]; then - # Forwarding not set, display warning echo $"Using 6to4 and RADVD IPv6 forwarding usually should be enabled, but it isn't!" fi if [ -z "$IPV6TO4_RADVD_PIDFILE" ]; then - # Take default IPV6TO4_RADVD_PIDFILE="/var/run/radvd/radvd.pid" fi - # Send SIGHUP to radvd + # Send SIGHUP to radvd for prefix recalculation if [ -f "$IPV6TO4_RADVD_PIDFILE" ]; then pid="`cat $IPV6TO4_RADVD_PIDFILE`" if [ ! -z "$pid" ]; then @@ -204,7 +210,6 @@ if [ "$IPV6TO4INIT" = "yes" ]; then fi fi if [ ! -z "$IPV6TO4_ROUTING" ]; then - # Generate 6to4 address ipv6to4prefix="`create6to4prefix $ipv4addr`" if [ ! -z "$ipv6to4prefix" ]; then # Add route to local networks diff --git a/sysconfig/network-scripts/ifup-sit b/sysconfig/network-scripts/ifup-sit index baf78a66..15ed67cd 100755 --- a/sysconfig/network-scripts/ifup-sit +++ b/sysconfig/network-scripts/ifup-sit @@ -8,7 +8,7 @@ # # RHL integration assistance by Pekka Savola # -# Version 2001-05-22d +# Version 2001-07-17 # # Uses following information from "/etc/sysconfig/network": # NETWORKING_IPV6=yes|no: controls IPv6 initialization (global setting) @@ -16,6 +16,7 @@ # Uses following information from "/etc/sysconfig/network-scripts/ifcfg-$1": # IPV6INIT=yes|no: controls IPv6 configuration for this interface # IPV6_TUNNELMODE=IP|NBMA: mode of tunnel creation [default: IP] +# IPV6_MTU=: controls IPv6 MTU for this link [optional] # # For static tunnels # IPV6TUNNELIPV4="" @@ -34,18 +35,13 @@ CONFIG=$1 [ -f "$CONFIG" ] || CONFIG=ifcfg-$CONFIG source_config -# Test if IPv6 configuration is enabled for this interface -if [ ! "$IPV6INIT" = "yes" ]; then - exit 0 -fi +# Test whether IPv6 configuration is enabled for this interface, else stop +[ "$IPV6INIT" = "yes" ] || exit 0 -# Test if IPv6 is up -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - exit 0 -fi +# Test whether IPv6 should be configured, else stop +[ "${NETWORKING_IPV6}" = "yes" ] || exit 0 if [ ! -f /etc/sysconfig/network-scripts/network-functions-ipv6 ]; then - # IPv6 setup isn't well exit 1 fi @@ -58,36 +54,45 @@ test_ipv6 || exit 1 # Setup IPv6-in-IPv4 tunnel(s) if [ "$DEVICE" = "sit0" ]; then ifup_ipv6_autotunnel || exit 1 + + # Set IPv6 MTU, if given + if [ ! -z "$IPV6_MTU" ]; then + ipv6_set_mtu $DEVICE $IPV6_MTU + fi elif [ ! -z "$IPV6TUNNELIPV4" ]; then if [ "$IPV6_TUNNELMODE" = "NBMA" ]; then - # NBMA-styled tunneling if [ ! -z "$IPV6ADDR" ]; then - # Numbered tunnel ifup_ipv6_real sit0 $IPV6ADDR fi # Add static IPv6 tunnel routes on specified virtual interface if [ -f /etc/sysconfig/static-routes-ipv6 ]; then - grep "^$DEVICE" /etc/sysconfig/static-routes-ipv6 | while read device ipv6route args; do - if [ "$device" = "$DEVICE" ]; then - ifup_ipv6_tunnel $DEVICE $IPV6TUNNELIPV4 $ipv6route - fi + grep -w "^$DEVICE" /etc/sysconfig/static-routes-ipv6 | while read device ipv6route args; do + ifup_ipv6_tunnel $DEVICE $IPV6TUNNELIPV4 $ipv6route done fi + + # Set IPv6 MTU, if given and in range + if [ ! -z "$IPV6_MTU" ]; then + ipv6_set_mtu sit0 $IPV6_MTU + fi + elif [ -z "$IPV6_TUNNELMODE" -o "$IPV6_TUNNELMODE" = "IP" ]; then ifup_ipv6_tunneldev $DEVICE $IPV6TUNNELIPV4 || exit 1 + # Set IPv6 MTU, if given and in range + if [ ! -z "$IPV6_MTU" ]; then + ipv6_set_mtu $DEVICE $IPV6_MTU + fi + if [ ! -z "$IPV6ADDR" ]; then - # Numbered tunnel ifup_ipv6_real $DEVICE $IPV6ADDR fi if [ -f /etc/sysconfig/static-routes-ipv6 ]; then - grep "^$DEVICE\W" /etc/sysconfig/static-routes-ipv6 | while read device ipv6route args; do - if [ "$device" = "$DEVICE" ]; then - ifup_ipv6_route $ipv6route :: $DEVICE - fi + grep -w "^$DEVICE" /etc/sysconfig/static-routes-ipv6 | while read device ipv6route args; do + ifup_ipv6_route $ipv6route :: $DEVICE done fi else diff --git a/sysconfig/network-scripts/init.ipv6-global b/sysconfig/network-scripts/init.ipv6-global index da46d4ba..aed005d8 100755 --- a/sysconfig/network-scripts/init.ipv6-global +++ b/sysconfig/network-scripts/init.ipv6-global @@ -8,7 +8,7 @@ # # RHL integration assistance by Pekka Savola # -# Version 2001-05-22d +# Version 2001-07-15a # # Calling parameters: # $1: action (currently supported: start|stop|showsysctl) @@ -37,10 +37,8 @@ cd /etc/sysconfig/network-scripts ACTION="$1" POSITION="$2" -# Test for IPv6 enabling -if [ ! "${NETWORKING_IPV6}" = "yes" ]; then - exit 0 -fi +# 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 diff --git a/sysconfig/network-scripts/network-functions-ipv6 b/sysconfig/network-scripts/network-functions-ipv6 index 6b4441a8..82c8d020 100644 --- a/sysconfig/network-scripts/network-functions-ipv6 +++ b/sysconfig/network-scripts/network-functions-ipv6 @@ -5,7 +5,7 @@ # Taken from: # (P) & (C) 1997-2001 by Peter Bieringer # -# Version: 2001-05-22d +# Version: 2001-07-17a # # Extended address detection is enabled, if 'ipv6calc' is installed # Available here: http://www.bieringer.de/linux/IPv6/tools/index.html#ipv6calc @@ -23,7 +23,6 @@ ##### Test for "ipv6calc" (used for better existing address detection) EXISTS_ipv6calc=no if which ipv6calc >/dev/null 2>&1; then - # do checks, whether ipv6calc does what was expected if ipv6calc --if_inet62addr 3ffe04000100f1010000000000000001 40 | grep -q -v '3ffe:400:100:f101::1/64'; then false elif ipv6calc --addr2if_inet6 3ffe:400:100::1/64 | grep -q -v '3ffe0400010000000000000000000001 00 40'; then @@ -42,7 +41,6 @@ test_ipv6() { local testflag=$1 - # Test for IPv6 enabled kernel if ! [ -f /proc/net/if_inet6 ]; then if [ "$testflag" = "testonly" ]; then @@ -58,7 +56,6 @@ test_ipv6() { fi if [ ! -d /proc/sys/net/ipv6/conf/ ]; then - # IPv6 related proc directory doesn't exist return 2 fi @@ -98,7 +95,6 @@ forwarding_ipv6() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 @@ -142,16 +138,10 @@ ifup_ipv6_route() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 - # Test, whether given IPv6 address is valid - if ! testipv6_valid $networkipv6; then - return 2 - fi - if ! testipv6_valid $gatewayipv6; then - return 2 - fi + testipv6_valid $networkipv6 || return 2 + testipv6_valid $gatewayipv6 || return 2 if [ -z "$device" ]; then @@ -195,16 +185,11 @@ ifdown_ipv6_route() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 # Test, whether given IPv6 address is valid - if ! testipv6_valid $networkipv6; then - return 2 - fi - if ! testipv6_valid $gatewayipv6; then - return 2 - fi + testipv6_valid $networkipv6 || return 2 + testipv6_valid $gatewayipv6 || return 2 if [ -z "$device" ]; then @@ -241,7 +226,6 @@ ifdown_ipv6_route_all() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 @@ -251,7 +235,6 @@ ifdown_ipv6_route_all() { if [ ! -z "$gatewaymatch" ]; then # Test if given gateway matches if [ "$gatewaymatch" != "$nexthop" ]; then - # No match, take next continue fi fi @@ -269,19 +252,16 @@ ifdown_ipv6_route_all() { ## Configure automatic tunneling up ifup_ipv6_autotunnel() { - # Run IPv6 test test_ipv6 || return 2 # enable IPv6-over-IPv4 tunnels if test_interface_status sit0; then - # already up, do nothing true else - # basic tunnel device to up + # bring up basic tunnel device ifconfig sit0 up - # Test, whether "up" has worked if ! test_interface_status sit0; then echo $"Tunnel device 'sit0' enabling didn't work - FATAL ERROR!" return 2 @@ -299,12 +279,10 @@ ifup_ipv6_autotunnel() { ## Configure automatic tunneling down ifdown_ipv6_autotunnel() { - # Run IPv6 test test_ipv6 || return 2 if test_interface_status sit0; then - # still up? # disable IPv6-over-IPv4 tunnels (if a tunnel is no longer up) if LC_ALL=C route -A inet6 -n | grep "sit0\W*$" | awk '{ print $2 }' | grep -v -q "^::$"; then @@ -314,15 +292,13 @@ ifdown_ipv6_autotunnel() { # still existing IPv6 addresses, skip shutdown of sit0 true else - # basic tunnel device to down - # Set sysctls proper + # take down basic tunnel device sysctl -w net.ipv6.conf.sit0.forwarding=0 >/dev/null sysctl -w net.ipv6.conf.sit0.accept_ra=0 >/dev/null sysctl -w net.ipv6.conf.sit0.accept_redirects=0 >/dev/null ifconfig sit0 down - # Test, whether "down" has worked if test_interface_status sit0; then echo $"Tunnel device 'sit0' is still up - FATAL ERROR!" return 2 @@ -351,7 +327,7 @@ ifup_ipv6_tunnel() { fi if [ -z "$addressipv4tunnel" ]; then - echo $"Missing parameter 'IPv4-tunneladdress' (arg 2)" + echo $"Missing parameter 'IPv4-tunnel address' (arg 2)" return 1 fi @@ -360,14 +336,11 @@ ifup_ipv6_tunnel() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 # Test, whether given IPv6 address is valid - if ! testipv6_valid $routeipv6; then - return 2 - fi + testipv6_valid $routeipv6 || return 2 # enable general IPv6-over-IPv4 tunneling @@ -397,33 +370,30 @@ ifdown_ipv6_tunnel() { if [ -z "$device" ]; then echo $"Missing parameter 'device' (arg 1)" - ifupdown_ipv6_tunnel_usage return 1 fi if [ -z "$addressipv4tunnel" ]; then echo $"Missing parameter 'IPv4-tunnel address' (arg 2)" - ifupdown_ipv6_tunnel_usage return 1 fi if [ -z "$routeipv6" ]; then echo $"Missing parameter 'IPv6-route' (arg 3)" - ifupdown_ipv6_tunnel_usage return 1 fi - # Run IPv6 test - test_ipv6 || return 2 + test_ipv6 || return 2 + # Delete a NBMA-styled tunnel - ifdown_ipv6_route $routeipv6::$addressipv4tunnel sit0 + ifdown_ipv6_route $routeipv6 ::$addressipv4tunnel sit0 if [ $? -ne 0 ]; then return 2 fi - # disable IPv6-over-IPv4 tunneling (if no longer a tunnel is up) + # disable IPv6-over-IPv4 tunneling (if this was the last tunnel) ifdown_ipv6_autotunnel } @@ -431,7 +401,7 @@ ifdown_ipv6_tunnel() { ## Remove all IPv6 tunnels for a given tunnel endpoint # $1: Interface (not used - dummy) -# $2: IPv4-tunneladdress +# $2: IPv4-tunnel address ifdown_ipv6_tunnel_all() { local idtuall_device=$1 local idtuall_tunnel=$2 @@ -442,11 +412,10 @@ ifdown_ipv6_tunnel_all() { fi if [ -z "$idtuall_tunnel" ]; then - echo $"Missing parameter 'IPv4-tunneladdress' (arg 2)" + echo $"Missing parameter 'IPv4-tunnel address' (arg 2)" return 1 fi - # Run IPv6 test test_ipv6 || return 2 @@ -460,7 +429,7 @@ ifdown_ipv6_tunnel_all() { fi done - # disable IPv6-over-IPv4 tunneling (if no longer a tunnel is up) + # disable IPv6-over-IPv4 tunneling (if this was the last tunnel) ifdown_ipv6_autotunnel return 0 } @@ -485,7 +454,7 @@ test_ipv6_address_exists() { if [ "$EXISTS_ipv6calc" = "yes" ]; then # Using ipv6calc and compare against /proc/net/if_inet6 - local convertresult="`LC_ALL=C ipv6calc --addr2if_inet6 $testaddr/$testprefix`" + local convertresult="`ipv6calc --addr2if_inet6 $testaddr/$testprefix`" # Split in address, scope and prefix length local test_addr="`echo $convertresult | awk '{ print $1 }'`" local test_scope="`echo $convertresult | awk '{ print $2 }'`" @@ -533,23 +502,15 @@ ifup_ipv6_real() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 - # Test, whether given IPv6 address is valid - if ! testipv6_valid $address; then - return 2 - fi + testipv6_valid $address || return 2 - # Test status of interface if test_interface_status $device; then - # Interface is already up true else - # no IPv4 for this interface, interface is still down, do up ... ifconfig $device up - # Test, whether "up" has worked if ! test_interface_status $device; then echo $"Device '$device' enabling didn't work - FATAL ERROR!" return 2 @@ -561,7 +522,7 @@ ifup_ipv6_real() { local prefixlength_implicit="`echo $address | awk -F/ '{ print $2 }'`" local address_implicit="`echo $address | awk -F/ '{ print $1 }'`" - # Only add, if address do not already exist + # Only add if address does not already exist test_ipv6_address_exists $device $address_implicit $prefixlength_implicit retval=$? if [ $retval -lt 10 ]; then @@ -589,7 +550,6 @@ ifdown_ipv6_real_all() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 @@ -624,13 +584,9 @@ ifdown_ipv6_real() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 - # Test, whether given IPv6 address is valid - if ! testipv6_valid $address; then - return 2 - fi + testipv6_valid $address || return 2 # Extract address parts @@ -664,7 +620,6 @@ testipv6_valid() { if [ -z "$testipv6addr_valid" ]; then - # nothing for testing return 2 fi @@ -713,7 +668,6 @@ testipv4_globalusable() { if [ -z "$testipv4addr_globalusable" ]; then - # nothing for testing return 2 fi @@ -823,23 +777,22 @@ ifup_ipv6to4() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 - # generate 6to4 address + # Generate 6to4 address local prefix6to4="`create6to4prefix $localipv4`" if [ $? -ne 0 -o -z "$prefix6to4" ]; then return 2 fi if [ -z "$localipv6to4suffix" ]; then - local address6to4="${prefix6to4}::1/48" + local address6to4="${prefix6to4}::1/16" else - local address6to4="${prefix6to4}::${localipv6to4suffix}/48" + local address6to4="${prefix6to4}::${localipv6to4suffix}/16" fi - # enable general IPv6-over-IPv4 tunneling + # Enable general IPv6-over-IPv4 tunneling ifup_ipv6_autotunnel ifup_ipv6_real sit0 $address6to4 @@ -862,17 +815,15 @@ ifdown_ipv6to4_all() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 - # Get all configured 6to4 addresses + # Get all configured 6to4 addresses and delete them LC_ALL=C ip addr show dev sit0 | grep inet6 | awk '{ print $2 }' | grep "^2002:" | while read ipv6to4addr; do - # And delete them ifdown_ipv6_real sit0 $ipv6to4addr done - # try to disable general IPv6-over-IPv4 tunneling + # Try to disable general IPv6-over-IPv4 tunneling ifdown_ipv6_autotunnel } @@ -896,7 +847,6 @@ ifdown_ipv6to4() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 @@ -908,9 +858,9 @@ ifdown_ipv6to4() { fi if [ -z "$localipv6to4suffix" ]; then - local address6to4="$prefix6to4::1/48" + local address6to4="$prefix6to4::1/16" else - local address6to4="${prefix6to4}::${localipv6to4suffix}/48" + local address6to4="${prefix6to4}::${localipv6to4suffix}/16" fi ifdown_ipv6_real sit0 $address6to4 @@ -918,7 +868,7 @@ ifdown_ipv6to4() { return 2 fi - # try to disable general IPv6-over-IPv4 tunneling + # Try to disable general IPv6-over-IPv4 tunneling ifdown_ipv6_autotunnel if [ $? -ne 0 ]; then return 2 @@ -945,17 +895,15 @@ ifup_ipv6_tunneldev() { fi if [ -z "$addressipv4tunnel" ]; then - echo $"Missing parameter 'IPv4-tunneladdress' (arg 2)" + echo $"Missing parameter 'IPv4-tunnel address' (arg 2)" return 1 fi - # Run IPv6 test test_ipv6 || return 2 if ! test_interface_status $device; then - # Get default TTL local ttldefault="`sysctl net.ipv4.ip_default_ttl | awk '{ print $3 }'`" if [ -z "$ttldefault" ]; then local ttldefault=64 @@ -990,7 +938,6 @@ ifup_ipv6_tunneldev() { ifconfig $device up - # Test, whether creation did worked if ! test_interface_status $device; then echo $"Tunnel device '$device' bringing up didn't work - ERROR!" return 2 @@ -1026,12 +973,10 @@ ifdown_ipv6_tunneldev() { return 1 fi - # Run IPv6 test test_ipv6 || return 2 if test_interface_status $device; then - # Shut down tunnel ifdown_ipv6_real_all $device else if [ "$device" != "sit0" ]; then @@ -1043,7 +988,6 @@ ifdown_ipv6_tunneldev() { if ip tunnel | grep -q "^$device:" ; then ip tunnel del $device - # Test, whether removing did worked if test_interface_status $device; then false fi @@ -1055,3 +999,29 @@ ifdown_ipv6_tunneldev() { return 0 } + +## Set IPv6 MTU for a device +# $1: Interface +# $2: IPv6 MTU +ipv6_set_mtu() { + local device=$1 + local ipv6_mtu=$2 + + if [ -z "$device" ]; then + echo $"Missing parameter 'device' (arg 1)" + return 1 + fi + + if [ -z "$ipv6_mtu" ]; then + echo $"Missing parameter 'IPv6 MTU' (arg 2)" + return 1 + fi + + # Check range + if [ $ipv6_mtu -lt 1280 -o $ipv6_mtu -gt 65535 ]; then + echo $"Given IPv6 MTU is out of range" + return 1 + fi + + sysctl -w net.ipv6.conf.$device.mtu=$ipv6_mtu >/dev/null +} -- cgit v1.2.1