diff options
author | bcyrill <cyrill@bannwart.info> | 2012-12-28 22:12:07 +0100 |
---|---|---|
committer | bcyrill <cyrill@bannwart.info> | 2012-12-28 22:12:07 +0100 |
commit | 45bef774b009af7a9176bc6a4a28a9668bc69f9f (patch) | |
tree | 43344b35360955aafcb21107808408d264b356a9 | |
parent | 277ed6cb2c869589c57a1c0331bc547022bf6037 (diff) | |
download | pfsense-45bef774b009af7a9176bc6a4a28a9668bc69f9f.zip pfsense-45bef774b009af7a9176bc6a4a28a9668bc69f9f.tar.gz |
Get IPv6 address for IPv6 clients
-rw-r--r-- | etc/inc/captiveportal.inc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc index 830aca4..d70c5ac 100644 --- a/etc/inc/captiveportal.inc +++ b/etc/inc/captiveportal.inc @@ -1549,18 +1549,25 @@ function getNasIP() function portal_ip_from_client_ip($cliip) { global $config, $cpzone; + $isipv6 = is_ipaddrv6($cliip); $interfaces = explode(",", $config['captiveportal'][$cpzone]['interface']); foreach ($interfaces as $cpif) { - $ip = get_interface_ip($cpif); - $sn = get_interface_subnet($cpif); + if ($isipv6) { + $ip = get_interface_ipv6($cpif); + $sn = get_interface_subnetv6($cpif); + } else { + $ip = get_interface_ip($cpif); + $sn = get_interface_subnet($cpif); + } if (ip_in_subnet($cliip, "{$ip}/{$sn}")) return $ip; } - $iface = exec_command("/sbin/route -n get {$cliip} | /usr/bin/awk '/interface/ { print \$2; };'"); + $inet = ($isipv6) ? '-inet6' : '-inet'; + $iface = exec_command("/sbin/route -n get {$inet} {$cliip} | /usr/bin/awk '/interface/ { print \$2; };'"); $iface = trim($iface, "\n"); if (!empty($iface)) { - $ip = find_interface_ip($iface); + $ip = ($isipv6) ? find_interface_ipv6($iface) : find_interface_ip($iface); if (is_ipaddr($ip)) return $ip; } |