X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fnetwork%2Fipv6%2Fodhcp6c%2Ffiles%2Fdhcpv6.sh;h=adcb1007a9684af6fff821be7490640ba09ffa10;hb=4734c4459b2423c07b2752498e9ac2397ae7bfe1;hp=c5e77c65b475dbfd1c69b17faa65dc8aaf446715;hpb=5219d38da29f879a86459a96ae3f5b2e1e33a95f;p=openwrt%2Fopenwrt.git diff --git a/package/network/ipv6/odhcp6c/files/dhcpv6.sh b/package/network/ipv6/odhcp6c/files/dhcpv6.sh index c5e77c65b4..adcb1007a9 100755 --- a/package/network/ipv6/odhcp6c/files/dhcpv6.sh +++ b/package/network/ipv6/odhcp6c/files/dhcpv6.sh @@ -5,21 +5,37 @@ init_proto "$@" proto_dhcpv6_init_config() { - proto_config_add_string "reqaddress" - proto_config_add_string "reqprefix" - proto_config_add_string "clientid" - proto_config_add_string "reqopts" - proto_config_add_string "noslaaconly" - proto_config_add_string "norelease" - proto_config_add_string "ip6prefix" + renew_handler=1 + + proto_config_add_string 'reqaddress:or("try","force","none")' + proto_config_add_string 'reqprefix:or("auto","no",range(0, 64))' + proto_config_add_string clientid + proto_config_add_string 'reqopts:list(uinteger)' + proto_config_add_string 'noslaaconly:bool' + proto_config_add_string 'forceprefix:bool' + proto_config_add_string 'norelease:bool' + proto_config_add_string 'ip6prefix:ip6addr' + proto_config_add_string iface_dslite + proto_config_add_string zone_dslite + proto_config_add_string iface_map + proto_config_add_string zone_map + proto_config_add_string iface_464xlat + proto_config_add_string zone_464xlat + proto_config_add_string zone + proto_config_add_string 'ifaceid:ip6addr' + proto_config_add_string "userclass" + proto_config_add_string "vendorclass" + proto_config_add_boolean delegate + proto_config_add_int "soltimeout" + proto_config_add_boolean fakeroutes } proto_dhcpv6_setup() { local config="$1" local iface="$2" - local reqaddress reqprefix clientid reqopts noslaaconly norelease ip6prefix iface_dslite ifaceid - json_get_vars reqaddress reqprefix clientid reqopts noslaaconly norelease ip6prefix iface_dslite ifaceid + local reqaddress reqprefix clientid reqopts noslaaconly forceprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes + json_get_vars reqaddress reqprefix clientid reqopts noslaaconly forceprefix norelease ip6prefix iface_dslite iface_map iface_464xlat ifaceid userclass vendorclass delegate zone_dslite zone_map zone_464xlat zone soltimeout fakeroutes # Configure @@ -33,16 +49,33 @@ proto_dhcpv6_setup() { [ "$noslaaconly" = "1" ] && append opts "-S" + [ "$forceprefix" = "1" ] && append opts "-F" + [ "$norelease" = "1" ] && append opts "-k" [ -n "$ifaceid" ] && append opts "-i$ifaceid" + [ -n "$vendorclass" ] && append opts "-V$vendorclass" + + [ -n "$userclass" ] && append opts "-u$userclass" + for opt in $reqopts; do append opts "-r$opt" done + append opts "-t${soltimeout:-120}" + [ -n "$ip6prefix" ] && proto_export "USERPREFIX=$ip6prefix" [ -n "$iface_dslite" ] && proto_export "IFACE_DSLITE=$iface_dslite" + [ -n "$iface_map" ] && proto_export "IFACE_MAP=$iface_map" + [ -n "$iface_464xlat" ] && proto_export "IFACE_464XLAT=$iface_464xlat" + [ "$delegate" = "0" ] && proto_export "IFACE_DSLITE_DELEGATE=0" + [ "$delegate" = "0" ] && proto_export "IFACE_MAP_DELEGATE=0" + [ -n "$zone_dslite" ] && proto_export "ZONE_DSLITE=$zone_dslite" + [ -n "$zone_map" ] && proto_export "ZONE_MAP=$zone_map" + [ -n "$zone_464xlat" ] && proto_export "ZONE_464XLAT=$zone_464xlat" + [ -n "$zone" ] && proto_export "ZONE=$zone" + [ "$fakeroutes" != "0" ] && proto_export "FAKE_ROUTES=1" proto_export "INTERFACE=$config" proto_run_command "$config" odhcp6c \ @@ -50,6 +83,13 @@ proto_dhcpv6_setup() { $opts $iface } +proto_dhcpv6_renew() { + local interface="$1" + # SIGUSR1 forces odhcp6c to renew its lease + local sigusr1="$(kill -l SIGUSR1)" + [ -n "$sigusr1" ] && proto_kill_command "$interface" $sigusr1 +} + proto_dhcpv6_teardown() { local interface="$1" proto_kill_command "$interface"