[前][次][番号順一覧][スレッド一覧]

ruby-changes:24423

From: drbrain <ko1@a...>
Date: Fri, 20 Jul 2012 09:32:51 +0900 (JST)
Subject: [ruby-changes:24423] drbrain:r36474 (trunk): * ext/socket/raddrinfo.c (addrinfo_ipv6_unique_local_p): Added

drbrain	2012-07-20 09:32:35 +0900 (Fri, 20 Jul 2012)

  New Revision: 36474

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36474

  Log:
    * ext/socket/raddrinfo.c (addrinfo_ipv6_unique_local_p):  Added
      Addrinfo#ipv6_unique_local? to detect RFC 4193 unique local
      addresses.  Part of #6692
    * ext/socket/rubysocket.h:  Add IN6_IS_ADDR_UNIQUE_LOCAL macro if
      missing.
    * test/socket/test_addrinfo.rb:  Test for ipv6_unqiue_local?

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/raddrinfo.c
    trunk/ext/socket/rubysocket.h
    trunk/test/socket/test_addrinfo.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36473)
+++ ChangeLog	(revision 36474)
@@ -1,3 +1,12 @@
+Fri Jul 20 09:32:14 2012  Eric Hodel  <drbrain@s...>
+
+	* ext/socket/raddrinfo.c (addrinfo_ipv6_unique_local_p):  Added
+	  Addrinfo#ipv6_unique_local? to detect RFC 4193 unique local
+	  addresses.  Part of #6692
+	* ext/socket/rubysocket.h:  Add IN6_IS_ADDR_UNIQUE_LOCAL macro if
+	  missing.
+	* test/socket/test_addrinfo.rb:  Test for ipv6_unqiue_local?
+
 Fri Jul 20 07:40:32 2012  Eric Hodel  <drbrain@s...>
 
 	* lib/net/http/response.rb:  Automatically inflate gzip and
Index: ext/socket/rubysocket.h
===================================================================
--- ext/socket/rubysocket.h	(revision 36473)
+++ ext/socket/rubysocket.h	(revision 36474)
@@ -117,6 +117,10 @@
 # define IS_IP_FAMILY(af) ((af) == AF_INET)
 #endif
 
+#ifndef IN6_IS_ADDR_UNIQUE_LOCAL
+# define IN6_IS_ADDR_UNIQUE_LOCAL(a) (((a)->s6_addr[0] == 0xfc) || ((a)->s6_addr[0] == 0xfd))
+#endif
+
 #ifndef HAVE_SOCKADDR_STORAGE
 /*
  * RFC 2553: protocol-independent placeholder for socket addresses
Index: ext/socket/raddrinfo.c
===================================================================
--- ext/socket/raddrinfo.c	(revision 36473)
+++ ext/socket/raddrinfo.c	(revision 36474)
@@ -1793,6 +1793,18 @@
 }
 
 /*
+ * Returns true for IPv6 unique local address (fc00::/7, RFC4193).
+ * It returns false otherwise.
+ */
+static VALUE
+addrinfo_ipv6_unique_local_p(VALUE self)
+{
+    struct in6_addr *addr = extract_in6_addr(self);
+    if (addr && IN6_IS_ADDR_UNIQUE_LOCAL(addr)) return Qtrue;
+    return Qfalse;
+}
+
+/*
  * Returns true for IPv4-mapped IPv6 address (::ffff:0:0/80).
  * It returns false otherwise.
  */
@@ -2207,6 +2219,7 @@
     rb_define_method(rb_cAddrinfo, "ipv6_multicast?", addrinfo_ipv6_multicast_p, 0);
     rb_define_method(rb_cAddrinfo, "ipv6_linklocal?", addrinfo_ipv6_linklocal_p, 0);
     rb_define_method(rb_cAddrinfo, "ipv6_sitelocal?", addrinfo_ipv6_sitelocal_p, 0);
+    rb_define_method(rb_cAddrinfo, "ipv6_unique_local?", addrinfo_ipv6_unique_local_p, 0);
     rb_define_method(rb_cAddrinfo, "ipv6_v4mapped?", addrinfo_ipv6_v4mapped_p, 0);
     rb_define_method(rb_cAddrinfo, "ipv6_v4compat?", addrinfo_ipv6_v4compat_p, 0);
     rb_define_method(rb_cAddrinfo, "ipv6_mc_nodelocal?", addrinfo_ipv6_mc_nodelocal_p, 0);
Index: test/socket/test_addrinfo.rb
===================================================================
--- test/socket/test_addrinfo.rb	(revision 36473)
+++ test/socket/test_addrinfo.rb	(revision 36474)
@@ -512,7 +512,8 @@
         [:ipv6_v4mapped?, "::ffff:0.0.0.0", "::ffff:255.255.255.255"],
         [:ipv6_linklocal?, "fe80::", "febf::"],
         [:ipv6_sitelocal?, "fec0::", "feef::"],
-        [:ipv6_multicast?, "ff00::", "ffff::"]
+        [:ipv6_multicast?, "ff00::", "ffff::"],
+        [:ipv6_unique_local?, "fc00::", "fd00::"],
       ]
       mlist = [
         [:ipv6_mc_nodelocal?, "ff01::", "ff11::"],

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]