odhcp6c: work-around for proto-script to avoid loosing the default route

SVN-Revision: 35345
This commit is contained in:
Steven Barth 2013-01-28 13:53:43 +00:00
parent 5f735b291f
commit e964fa5d8f
2 changed files with 11 additions and 20 deletions

View file

@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=odhcp6c PKG_NAME:=odhcp6c
PKG_VERSION:=2013-01-21 PKG_VERSION:=2013-01-28
PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2

View file

@ -7,34 +7,29 @@ ipv6_conf() {
echo "$3" > "/proc/sys/net/ipv6/conf/$1/$2" echo "$3" > "/proc/sys/net/ipv6/conf/$1/$2"
} }
# RFC 6204 requires us to block forwarding until address acquisition is complete
ipv6_block_forwarding() {
ip6tables "-$2" forwarding_rule -o "$1" -j REJECT --reject-with no-route 2>/dev/null
}
prepare_interface() { prepare_interface() {
local device="$1" local device="$1"
ipv6_block_forwarding "$device" A
ipv6_conf "$device" accept_ra 2 ipv6_conf "$device" accept_ra 2
ipv6_conf "$device" forwarding 2 ipv6_conf "$device" forwarding 2
# Send RS # Send RS
[ -x /usr/sbin/6relayd ] && /usr/sbin/6relayd -s "$device" if [ -x /usr/sbin/6relayd ]; then
sleep 1
/usr/sbin/6relayd -s "$device"
sleep 4
/usr/sbin/6relayd -s "$device"
fi
} }
cleanup_interface() { cleanup_interface() {
local device="$1" local device="$1"
ipv6_conf "$device" accept_ra 1 ipv6_conf "$device" accept_ra 1
ipv6_conf "$device" forwarding 1 ipv6_conf "$device" forwarding 1
ipv6_block_forwarding "$device" D
} }
setup_interface () { setup_interface () {
local device="$1" local device="$1"
ipv6_block_forwarding "$device" D
proto_init_update "*" 1 proto_init_update "*" 1
for dns in $RDNSS; do for dns in $RDNSS; do
@ -60,16 +55,12 @@ teardown_interface() {
} }
case "$2" in case "$2" in
started)
prepare_interface "$1"
;;
stopped)
cleanup_interface "$1"
;;
informed|bound|updated|rebound) informed|bound|updated|rebound)
setup_interface "$1" setup_interface "$1"
prepare_interface "$1"
;; ;;
unbound|timeout) started|stopped|unbound)
cleanup_interface "$1"
teardown_interface "$1" teardown_interface "$1"
;; ;;
esac esac