Changeset 34466


Ignore:
Timestamp:
2012-12-03T10:18:53+01:00 (5 years ago)
Author:
cyrus
Message:

ipv6-support: Second Iteration

  • mode 'downstream' renamed to 'router'
  • mode 'upstream' renamed to 'dhcpv6'
  • mode 'relay' added
  • cleanups and minor bugfixes in state handling
Location:
trunk/package/network/ipv6/ipv6-support
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/network/ipv6/ipv6-support/Makefile

    r34423 r34466  
    99 
    1010PKG_NAME:=ipv6-support 
    11 PKG_VERSION:=2012-11-29 
     11PKG_VERSION:=2012-12-03 
    1212PKG_RELEASE:=1 
    1313 
  • trunk/package/network/ipv6/ipv6-support/files/dhcpv6.sh

    r34422 r34466  
    2828config_get prefix_fallback "$network" prefix_fallback 
    2929[ "$prefix_fallback" == "relay" -a -z "$PREFIXES" -a "$state" != "unbound" ] && 
    30         restart_relay "$network" 1 
     30        restart_relay "$network" "fallback" 
    3131 
    3232# Disable relay if requested 
    3333[ "$prefix_fallback" != "relay" -o -n "$PREFIXES" -o "$state" == "unbound" ] && 
    34         stop_relay "$network" 
     34        restart_relay "$network" 
    3535 
    3636 
  • trunk/package/network/ipv6/ipv6-support/files/ipv6.hotplug

    r34422 r34466  
    44. /lib/ipv6/support.sh 
    55 
    6 local mode 
    7 config_get mode "$INTERFACE" mode 
    8  
    96case "$ACTION" in 
    107        ifup) 
    11                 [ "$mode" != "downstream" ] && enable_static $INTERFACE $DEVICE 
    12                 [ "$mode" == "upstream" ] && enable_upstream $INTERFACE $DEVICE 
    13                 [ "$mode" == "downstream" ] && enable_downstream $INTERFACE $DEVICE 
     8                enable_interface "$INTERFACE" "$DEVICE" 
    149        ;; 
    1510        ifdown) 
    16                 disable_interface $INTERFACE $DEVICE 
     11                disable_interface "$INTERFACE" "$DEVICE" 
    1712        ;; 
    1813esac 
  • trunk/package/network/ipv6/ipv6-support/files/network6.config

    r34422 r34466  
    11config interface wan 
    2         option mode             upstream 
     2        option mode             dhcpv6 
    33        option ula_prefix       auto 
    44        option request_prefix   auto 
     
    88 
    99config interface lan 
    10         option mode             downstream 
     10        option mode             router 
    1111        option advertise_prefix 64 
    1212        option relay_master     wan 
     
    1616        option mode             static 
    1717        list static_prefix      2001:DB8::/48 
     18 
  • trunk/package/network/ipv6/ipv6-support/files/support.sh

    r34422 r34466  
    9494 
    9595 
    96 disable_downstream() { 
     96disable_router() { 
    9797        local network="$1" 
    9898 
     
    101101 
    102102        # Disable advertisement daemon 
    103         stop_service /usr/sbin/6relayd "/var/run/ipv6-downstream-$network.pid" 
    104 } 
    105  
    106  
    107 restart_relay_add() { 
     103        stop_service /usr/sbin/6relayd "/var/run/ipv6-router-$network.pid" 
     104} 
     105 
     106 
     107restart_relay_slave() { 
     108        local __section="$1" 
     109        local __master="$2" 
     110 
     111        network_is_up "$__section" || return 
     112 
     113        local __device="" 
     114        network_get_device __device "$__section" 
     115 
     116        local __cmaster="" 
     117        config_get __cmaster "$__section" relay_master 
     118 
     119        [ "$__master" == "$__cmaster" ] && { 
     120                disable_interface "$__section" 
     121                enable_interface "$__section" "$__device" 
     122        } 
     123} 
     124 
     125 
     126add_relay_slave() { 
    108127        local __section="$1" 
    109128        local __return="$2" 
    110129        local __master="$3" 
    111         local __disable="$4" 
     130        local __mode="$4" 
    112131 
    113132        network_is_up "$__section" || return 
     133 
     134        # Get device 
     135        local __device="" 
     136        network_get_device __device "$__section" 
    114137 
    115138        # Match master network 
    116139        local __cmaster="" 
    117140        config_get __cmaster "$__section" relay_master 
    118         [ "$__master" != "$__cmaster" ] && return 
    119          
     141        [ "$__master" == "$__cmaster" ] || return 
     142         
     143        # Test slave  mode 
     144        local __cmode="" 
     145        config_get __cmode "$__section" mode 
     146        [ "$__cmode" == "downstream" ] && __cmode="router" 
     147 
     148        # Don't start fallback interfaces if we are in forced-relay mode 
     149        [ "$__cmode" == "relay" -o "$__mode" == "fallback" ] || return 
     150 
     151        # Don't make non-relay or non-router interfaces slaves 
     152        [ "$__cmode" == "relay" -o "$__cmode" == "router" ] || return 
     153 
    120154        # Disable any active distribution 
    121         disable_downstream "$__section" 
    122  
    123         local __device="" 
    124         network_get_device __device "$__section" 
    125          
    126         # Coming from stop relay, reenable distribution 
    127         [ "$__disable" == "disable" ] && { 
    128                 enable_downstream "$__section" "$__device" 
    129                 return 
    130         } 
    131  
    132          
     155        [ "$__cmode" == "router" ] && disable_router "$__section" 
     156 
    133157        eval "$__return"'="$'"$__return"' '"$__device"'"' 
    134158} 
     
    137161stop_relay() { 
    138162        local network="$1" 
    139         local pid="/var/run/ipv6-relay-$network.pid" 
    140         local was_running="" 
    141          
    142         stop_service /usr/sbin/6relayd "$pid" was_running 
     163        local pid_fallback="/var/run/ipv6-relay-fallback-$network.pid" 
     164        local pid_forced="/var/run/ipv6-relay-forced-$network.pid" 
     165        local was_fallback="" 
     166         
     167        stop_service /usr/sbin/6relayd "$pid_fallback" was_fallback 
     168        stop_service /usr/sbin/6relayd "$pid_forced" 
    143169 
    144170        # Reenable normal distribution on slave interfaces       
    145         [ -n "$was_running" ] && config_foreach restart_relay_add interface dummy "$network" disable 
     171        [ -n "$was_fallback" ] && config_foreach restart_relay_slave interface "$network" 
     172} 
     173 
     174 
     175detect_forced_relay_mode() { 
     176        local __section="$1" 
     177        local __mode="$2" 
     178 
     179        local __cmode 
     180        config_get __cmode "$__section" mode 
     181        [ "$__cmode" == "relay" ] && eval "$__mode=forced" 
    146182} 
    147183 
     
    149185restart_relay() { 
    150186        local network="$1" 
    151         local force="$2" 
    152         local pid="/var/run/ipv6-relay-$network.pid" 
    153  
    154         local not_running=0 
    155         [ -f "$pid" ] || not_running=1 
    156  
    157         # Don't start if not desired 
    158         [ "$force" != "1" ] && [ "$not_running" == "1" ] && return 
    159  
    160         # Kill current relay and distribution daemon 
     187        local mode="$2" 
     188 
     189        # Stop last active relay 
    161190        stop_relay "$network" 
     191 
     192        # Detect if we have a forced-relay 
     193        [ -z "$mode" ] && config_foreach detect_forced_relay_mode interface mode 
     194 
     195        # Don't start without a mode 
     196        [ -z "$mode" ] && return 
    162197 
    163198        # Detect master device 
    164199        local device="" 
    165         network_get_device device $network 
     200        network_get_device device "$network" 
    166201 
    167202        # Generate command string 
    168         local cmd="/usr/sbin/6relayd -A $device " 
    169         config_foreach restart_relay_add interface cmd "$network" 
     203        local cmd="/usr/sbin/6relayd -A $device" 
     204        local ifaces="" 
     205        config_foreach add_relay_slave interface ifaces "$network" "$mode" 
    170206 
    171207        # Start relay 
    172         start_service "$cmd" "$pid" 
     208        local pid="/var/run/ipv6-relay-$mode-$network.pid" 
     209        [ -n "$ifaces" ] && start_service "$cmd $ifaces" "$pid" 
     210 
     211        # There are no slave interface, however indicate that we want to relay 
     212        [ -z "$ifaces" ] && touch "$pid" 
    173213} 
    174214 
     
    176216restart_master_relay() { 
    177217        local network="$1" 
     218        local mode="$2" 
     219        local pid_fallback="/var/run/ipv6-relay-fallback-$network.pid" 
     220        local pid_forced="/var/run/ipv6-relay-forced-$network.pid" 
    178221 
    179222        # Disable active relaying to this interface 
    180         local relay_master 
    181223        config_get relay_master "$network" relay_master 
    182         [ -n "$relay_master" ] && restart_relay "$relay_master" 
     224        [ -z "$relay_master" ] && return 
     225        network_is_up "$relay_master" || return 
     226 
     227        # Detect running mode 
     228        [ -z "$mode" && -f "$pid_fallback" ] && mode="fallback" 
     229        [ -z "$mode" && -f "$pid_forced" ] && mode="forced" 
     230 
     231        # Restart relay if running or start requested 
     232        [ -n "$mode" ] && restart_relay "$relay_master" "$mode" 
    183233} 
    184234 
     
    194244 
    195245        # Disable distribution 
    196         disable_downstream "$network" 
     246        disable_router "$network" 
    197247 
    198248        # Disable relay 
     
    200250 
    201251        # Disable DHCPv6 client if enabled, state script will take care 
    202         stop_service /usr/sbin/odhcp6c "/var/run/ipv6-upstream-$network.pid" 
     252        stop_service /usr/sbin/odhcp6c "/var/run/ipv6-dhcpv6-$network.pid" 
    203253} 
    204254 
     
    246296        # Announce all static prefixes 
    247297        config_list_foreach "$network" static_prefix announce_prefix $network 
    248 } 
    249  
    250  
    251 enable_downstream() { 
     298 
     299        # start relay if there are forced relay members 
     300        restart_relay "$network" 
     301} 
     302 
     303 
     304enable_router() { 
    252305        local network="$1" 
    253306        local device="$2" 
     
    260313 
    261314        # Start RD & DHCPv6 service 
    262         local pid="/var/run/ipv6-downstream-$network.pid" 
     315        local pid="/var/run/ipv6-router-$network.pid" 
    263316        start_service "/usr/sbin/6relayd -Rserver -Dserver . $device" "$pid" 
    264317 
     
    268321 
    269322 
    270 enable_upstream() { 
     323enable_dhcpv6() { 
    271324        local network="$1" 
    272325        local device="$2" 
     
    293346         
    294347        # Start DHCPv6 client 
    295         local pid="/var/run/ipv6-upstream-$network.pid" 
     348        local pid="/var/run/ipv6-dhcpv6-$network.pid" 
    296349        start_service "/usr/sbin/odhcp6c -s/lib/ipv6/dhcpv6.sh $dhcp6_opts" "$pid" 
    297350 
    298351        # Refresh RA on all interfaces 
    299         for pid in /var/run/ipv6-downstream-*.pid; do 
     352        for pid in /var/run/ipv6-router-*.pid; do 
    300353                kill -SIGUSR1 $(cat "$pid") 
    301354        done 
     
    303356 
    304357 
     358enable_interface() 
     359{ 
     360        local network="$1" 
     361        local device="$2" 
     362        local mode="" 
     363        config_get mode "$network" mode 
     364 
     365        # Compatibility with old mode names 
     366        [ "$mode" == "downstream" ] && mode=router 
     367        [ "$mode" == "upstream" ] && mode=dhcpv6 
     368 
     369        # Run mode startup code 
     370        [ "$mode" == "dhcpv6" -o "$mode" == "static" ] && enable_static "$network" "$device" 
     371        [ "$mode" == "dhcpv6" ] && enable_dhcpv6 "$network" "$device" 
     372        [ "$mode" == "router" ] && enable_router "$network" "$device" 
     373        [ "$mode" == "relay" ] && restart_master_relay "$network" forced 
     374} 
Note: See TracChangeset for help on using the changeset viewer.