Project

General

Profile

Bug #8464

IPAddr cannot parse link-local IPv6 address.

Added by Andrew Selder over 3 years ago. Updated over 3 years ago.

Status:
Feedback
Priority:
Normal
Assignee:
ruby -v:
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
[ruby-core:55209]

Description

1.9.3p374 :001 > require 'ipaddr'
=> true
1.9.3p374 :002 > IPAddr.new("0:0:0:0:0:0:0:1%0")
ArgumentError: invalid address
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/ipaddr.rb:559:in in6_addr'
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/ipaddr.rb:496:in
initialize'
from (irb):2:in new'
from (irb):2
from /Users/andrew/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in
'

Same behavior in Ruby 1.9.3 all patch levels

History

#1 [ruby-core:55674] Updated by Cedric Brancourt over 3 years ago

Not sure this need a fix.
The %0 part of the example is the scope ( zone ) and should not be part of the address.

It is appended by operating system in the textual representation of the endpoint ( for interface identification ), and format depend on the operating system.

But it is not part of the address , see http://www.ietf.org/rfc/rfc4007.txt

This is the way I understand it. If I am right , this is not a bug.

#2 [ruby-core:55766] Updated by Akinori MUSHA over 3 years ago

  • Category set to lib
  • Status changed from Open to Feedback
  • Assignee set to Akinori MUSHA

IPAddr currently does not support scope ID's.

Making IPAddr deal with scope ID's would mean a lot more than just ignoring it (starting with adding #scope_id).
If you are going to request such a feature, you'll have to investigate, for example, in what contexts (libraries/methods/commands) an IPv6 address with a scope ID is valid and accepted, if #to_s should include it or another method should be added for that, how it would affect the backward compatibility, etc.

On the other hand, you can use str.sub(/%./m, '') or str[/[%]/m] if you just want to drop the scope ID part.

#3 [ruby-core:55770] Updated by Eric Hodel over 3 years ago

Thanks to the recently added Socket.getifaddrs we now have the ability to map scope names to interface ids for use in IPv6 multicast, for example.

Also available in: Atom PDF