Feature #8047

IPAddr makes host address with netmask

Added by Tadanori Kojima about 1 year ago. Updated 3 months ago.

[ruby-dev:47149]
Status:Assigned
Priority:Normal
Assignee:Akinori MUSHA
Category:lib
Target version:current: 2.2.0

Description

現状のIPAddrはネットマスク付きの場合、

IPAddr.new("192.168.1.99/24")
=> #

のようにネットワークアドレスとして生成されますが、
マスク付きの場合にマスクされないホストとして生成する
モードを提案します
(=ホストのIPアドレスとどのネットワークかを把握したい)
ex.
IPAddr.new("192.168.1.99/24")
=> #

newの第二引数にfamilyが指定されていれば32bitマスクのホストアドレスなので、
引数がAF_INET/INET6または:Hostならばホストとして生成させます

  • IPAddr.new(int, family)
    IPAddr.new(3232235875, Socket::AF_INET)
    => #

  • IPAddr.new(ip, :Host)
    IPAddr.new("192.168.1.99/24", :Host)
    => #

引数の構成とシンボル名がイマイチですが既存との両立ということで
以下がパッチになります

--- ipaddr.rb.orig 2013-03-08 13:59:07.000000000 +0900
+++ ipaddr.rb 2013-03-08 14:35:06.000000000 +0900
@@ -440,7 +440,7 @@
else
raise AddressFamilyError, "unsupported address family"
end
- @addr = ((@addr >> masklen) << masklen)
+ @addr = ((@addr >> masklen) << masklen) if @host_mode == false
return self
end

@@ -477,6 +477,14 @@
raise AddressFamilyError, "unsupported address family: #{family}"
end
end
+
+ if family == :Host
+ @hostmode = true
+ family = Socket::AF
UNSPEC
+ else
+ @host_mode = false
+ end
+
prefix, prefixlen = addr.split('/')
if prefix =~ /[(.*)]$/i
prefix = $1

History

#1 Updated by Zachary Scott 11 months ago

  • Category set to lib
  • Status changed from Open to Assigned
  • Assignee set to Akinori MUSHA
  • Target version set to 2.1.0

#2 Updated by Hiroshi SHIBATA 3 months ago

  • Target version changed from 2.1.0 to current: 2.2.0

Also available in: Atom PDF