ruby-changes:23559
From: naruse <ko1@a...>
Date: Thu, 10 May 2012 12:47:48 +0900 (JST)
Subject: [ruby-changes:23559] naruse:r35610 (trunk): Skip IPv6 addresses whose interface is set as IFDISABLED.
naruse 2012-05-10 12:47:10 +0900 (Thu, 10 May 2012) New Revision: 35610 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35610 Log: Skip IPv6 addresses whose interface is set as IFDISABLED. FreeBSD 9.0 with default setting (ipv6_activate_all_interfaces is not YES) sets IFDISABLED to interfaces which don't have global IPv6 address. Link-local IPv6 addresses on those interfaces don't work. Modified files: trunk/test/socket/test_socket.rb Index: test/socket/test_socket.rb =================================================================== --- test/socket/test_socket.rb (revision 35609) +++ test/socket/test_socket.rb (revision 35610) @@ -307,8 +307,32 @@ Socket.udp_server_sockets(0) {|sockets| famlies = {} - sockets.each {|s| famlies[s.local_address.afamily] = true } - ip_addrs.reject! {|ai| !famlies[ai.afamily] } + sockets.each {|s| famlies[s.local_address.afamily] = s } + ip_addrs.reject! {|ai| + s = famlies[ai.afamily] + next true unless s + case RUBY_PLATFORM + when /linux/ + if ai.ip_address.include?('%') and + (`uname -r`[/[0-9.]+/].split('.').map(&:to_i) <=> [2,6,18]) <= 0 + # Cent OS 5.6 (2.6.18-238.19.1.el5xen) doesn't correctly work + # sendmsg with pktinfo for link-local ipv6 addresses + next true + end + when /freebsd/ + if ifr_name = ai.ip_address[/%(.*)/, 1] + # FreeBSD 9.0 with default setting (ipv6_activate_all_interfaces + # is not YES) sets IFDISABLED to interfaces which don't have + # global IPv6 address. + # Link-local IPv6 addresses on those interfaces don't work. + ulSIOCGIFINFO_IN6 = 3225971052 + bIFDISABLED = 4 + in6_ifreq = ifr_name + s.ioctl(ulSIOCGIFINFO_IN6, in6_ifreq) + next true if in6_ifreq.unpack('A16L6').last[bIFDISABLED-1] == 1 + end + end + } skipped = false begin port = sockets.first.local_address.ip_port @@ -322,12 +346,6 @@ } ip_addrs.each {|ai| - if /linux/ =~ RUBY_PLATFORM && ai.ip_address.include?('%') && - (`uname -r`[/[0-9.]+/].split('.').map(&:to_i) <=> [2,6,18]) <= 0 - # Cent OS 5.6 (2.6.18-238.19.1.el5xen) doesn't correctly work - # sendmsg with pktinfo for link-local ipv6 addresses - next - end Addrinfo.udp(ai.ip_address, port).connect {|s| msg1 = "<<<#{ai.inspect}>>>" s.sendmsg msg1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/