Initial load
diff --git a/test/java/net/ipv6tests/ScopeTests.java b/test/java/net/ipv6tests/ScopeTests.java
new file mode 100644
index 0000000..f4029d9
--- /dev/null
+++ b/test/java/net/ipv6tests/ScopeTests.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4868820
+ * @summary IPv6 support for Windows XP and 2003 server
+ */
+
+import java.net.*;
+import java.util.*;
+
+public class ScopeTests extends Tests {
+
+    public static void main (String[] args) throws Exception {
+        checkDebug (args);
+        simpleTests();
+        complexTests();
+        System.out.println ("Tests passed: OK");
+    }
+
+    static void sassert (boolean condition, String msg) throws Exception {
+        if (!condition) {
+            throw new Exception (msg);
+        }
+    }
+
+    static void checkAddress (String a, int numeric) throws Exception {
+        Inet6Address addr = (Inet6Address) InetAddress.getByName (a);
+        if (addr.getScopeId () != numeric) {
+            throw new Exception ("wroing numeric scopeid");
+        }
+    }
+
+    static void checkAddress (String a, String str) throws Exception {
+        Inet6Address addr = (Inet6Address) InetAddress.getByName (a);
+        if (!addr.getScopedInterface().getName().equals (str)) {
+            throw new Exception ("wroing scoped interface name");
+        }
+    }
+
+    /* These tests check generic API functionality that is not
+     * dependent on scoping being implemented in the platform
+     */
+    static void simpleTests () throws Exception {
+        checkAddress ("fe80::%1", 1);
+        checkAddress ("fe80::1%1", 1);
+        checkAddress ("fec0::1:a00:20ff:feed:b08d%0", 0);
+        checkAddress ("fec0::1:a00:20ff:feed:b08d%1", 1);
+        checkAddress ("fec0::1:a00:20ff:feed:b08d%99", 99);
+        checkAddress ("fe80::", 0);
+        checkAddress ("fec0::1:a00:20ff:feed:b08d", 0);
+        checkAddress ("fec0::1:a00:20ff:feed:b08d", 0);
+        checkAddress ("fec0::1:a00:20ff:feed:b08d", 0);
+    }
+
+    /* These tests check the NetworkInterfaces for the actual scopeids
+     * configured on the system and do tests using that information
+     */
+    static void complexTests () throws Exception {
+        dprintln ("ComplexTests");
+        Enumeration e = NetworkInterface.getNetworkInterfaces();
+        while (e.hasMoreElements()) {
+            NetworkInterface nif = (NetworkInterface)e.nextElement();
+            String name = nif.getName();
+            Enumeration addrs = nif.getInetAddresses();
+            while (addrs.hasMoreElements()) {
+                InetAddress addr = (InetAddress) addrs.nextElement();
+                dprintln ("ComplexTests: "+addr);
+                if (addr instanceof Inet6Address) {
+                    Inet6Address ia6 = (Inet6Address) addr;
+                    if (ia6.getScopeId() != 0) {
+                        System.out.println ("Testing interface: " + name +
+                                            " and address: " + ia6);
+                        ctest1 (name, ia6);
+                        ctest2 (name, ia6);
+                    } else {
+                        System.out.println ("Interface: " + name +
+                                            " Address: "+ ia6 +
+                                            " does not support scope");
+                    }
+                }
+            }
+        }
+    }
+
+
+   /* check the scoped name on the Inet6Address is the same as
+    * the interface it is attached to
+    */
+    static void ctest1 (String ifname, Inet6Address ia6) throws Exception {
+        System.out.println ("ctest1:" + ia6);
+        String s = ia6.getScopedInterface().getName();
+        int scope = ia6.getScopeId();
+        sassert (ifname.equals (s), "ctest1:"+ifname+":"+s);
+
+    }
+
+    /* create an Inet6Adddress by all three methods using the ifname
+     * compare the numeric scope id with that of the Inet6Address passed in
+     */
+    static void ctest2 (String ifname, Inet6Address ia6) throws Exception {
+        System.out.println ("ctest2:" + ia6);
+        String s = ia6.getScopedInterface().getName();
+        int scope = ia6.getScopeId();
+        String s1 = ia6.getHostAddress();
+        if (s1.indexOf('%') != -1) {
+            s1 = s1.substring (0, s1.indexOf ('%'));
+        }
+        Inet6Address add = (Inet6Address) InetAddress.getByName (s1+"%"+ifname);
+        sassert (add.getScopeId() == scope, "ctest2:1:" +scope);
+    }
+}