--- vif-common.sh	2010-09-01 21:30:31.000000000 +0200
+++ vif-common.sh	2010-09-01 21:43:36.000000000 +0200
@@ -105,7 +105,10 @@
       local addr
       for addr in $ip
       do
-        frob_iptable -s "$addr"
+        if [[ "$(is_ipv6 ${addr})" == "" ]]
+        then
+          frob_iptable -s "$addr"
+        fi
       done
 
       # Always allow the domain to talk to a DHCP server.
@@ -149,3 +152,29 @@
   fi
   echo "$result"
 }
+
+
+##
+# just a few IPv6 functions for vif-route
+ip6_of()
+{
+        ip -6 addr show "$1" | perl -wane '/scope global/ && /inet6 (([0-9a-f]+:*)+)/ && print $1;'
+}
+
+dom0_ip6()
+{
+  local nd=${netdev:-eth0}
+  local result=$(ip6_of "$nd")
+  if [ -z "$result" ]
+  then
+        echo ""
+  else
+        echo "$result"
+  fi
+}
+
+is_ipv6()
+{
+  echo "${1}" | grep -q ':' && echo "ipv6"
+}
+
--- vif-route	2010-09-01 19:07:21.000000000 +0200
+++ vif-route	2010-09-01 21:42:09.000000000 +0200
@@ -23,11 +23,19 @@
 dir=$(dirname "$0")
 . "$dir/vif-common.sh"
 
+
 main_ip=$(dom0_ip)
+main_ip6=$(dom0_ip6)
 
 case "$command" in
     online)
+        log info "[vif-route] online request, ip ${ip} with main_ip ${main_ip} and main_ip6 ${main_ip6} for $vif."
         ifconfig ${vif} ${main_ip} netmask 255.255.255.255 up
+	if [ ! -z "${main_ip6}" ]
+	then
+		ip -6 addr add ${main_ip6} dev ${vif}
+		echo 1 >/proc/sys/net/ipv6/conf/${vif}/proxy_ndp
+	fi
         echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
         ipcmd='add'
         cmdprefix=''
@@ -39,11 +47,22 @@
         ;;
 esac
 
-if [ "${ip}" ] ; then
+if [ "${ip}" ] 
+then
     # If we've been given a list of IP addresses, then add routes from dom0 to
     # the guest using those addresses.
-    for addr in ${ip} ; do
-      ${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} src ${main_ip}
+    for addr in ${ip}
+    do
+      if [[ "$(is_ipv6 ${addr})" == "ipv6" ]]
+      then
+        log info "[vif-route] Adding IPv6 address ${addr} with src ${main_ip6} for $vif."
+        ${cmdprefix} ip -6 route ${ipcmd} ${addr} dev ${vif} src ${main_ip6}
+        log info "[vif-route] Adding IPv6 proxy ${addr} on ${netdev:-eth0}."
+        ${cmdprefix} ip -6 neighbor ${ipcmd} proxy ${addr} dev ${netdev:-eth0}
+      else
+        log info "[vif-route] Adding IPv4 address ${addr} with src ${main_ip} for $vif."
+        ${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} src ${main_ip}
+      fi
     done 
 fi
 
