[ruby-trunk - Feature #8047][Open] IPAddr makes host address with netmask

Issue #8047 has been reported by nori_nori (Tadanori Kojima).


Feature #8047: IPAddr makes host address with netmask
https://bugs.ruby-lang.org/issues/8047

Author: nori_nori (Tadanori Kojima)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

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

IPAddr.new(“192.168.1.99/24”)
=> #<IPAddr: IPv4:192.168.1.0/255.255.255.0>

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

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

  • IPAddr.new(int, family)
    IPAddr.new(3232235875, Socket::AF_INET)
    => #<IPAddr: IPv4:192.168.1.99/255.255.255.255>

  • IPAddr.new(ip, :Host)
    IPAddr.new(“192.168.1.99/24”, :Host)
    => #<IPAddr: IPv4:192.168.1.99/255.255.255.0>

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

— 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
  •  @host_mode = true
    
  •  family = Socket::AF_UNSPEC
    
  • else
  •  @host_mode = false
    
  • end
  • prefix, prefixlen = addr.split(’/’)
    if prefix =~ /^[(.*)]$/i
    prefix = $1

Issue #8047 has been updated by zzak (Zachary S.).

Category set to lib
Status changed from Open to Assigned
Assignee set to knu (Akinori MUSHA)
Target version set to current: 2.1.0


Feature #8047: IPAddr makes host address with netmask
https://bugs.ruby-lang.org/issues/8047#change-39624

Author: nori_nori (Tadanori Kojima)
Status: Assigned
Priority: Normal
Assignee: knu (Akinori MUSHA)
Category: lib
Target version: current: 2.1.0

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

IPAddr.new(“192.168.1.99/24”)
=> #<IPAddr: IPv4:192.168.1.0/255.255.255.0>

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

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

  • IPAddr.new(int, family)
    IPAddr.new(3232235875, Socket::AF_INET)
    => #<IPAddr: IPv4:192.168.1.99/255.255.255.255>

  • IPAddr.new(ip, :Host)
    IPAddr.new(“192.168.1.99/24”, :Host)
    => #<IPAddr: IPv4:192.168.1.99/255.255.255.0>

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

— 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
  •  @host_mode = true
    
  •  family = Socket::AF_UNSPEC
    
  • else
  •  @host_mode = false
    
  • end
  • prefix, prefixlen = addr.split(’/’)
    if prefix =~ /^[(.*)]$/i
    prefix = $1

Issue #8047 has been updated by Hiroshi SHIBATA.

Target version changed from 2.1.0 to current: 2.2.0


Feature #8047: IPAddr makes host address with netmask
https://bugs.ruby-lang.org/issues/8047#change-44767

  • Author: Tadanori Kojima
  • Status: Assigned
  • Priority: Normal
  • Assignee: Akinori MUSHA
  • Category: lib
  • Target version: current: 2.2.0

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

IPAddr.new(“192.168.1.99/24”)
=> #<IPAddr: IPv4:192.168.1.0/255.255.255.0>

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

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

  • IPAddr.new(int, family)
    IPAddr.new(3232235875, Socket::AF_INET)
    => #<IPAddr: IPv4:192.168.1.99/255.255.255.255>

  • IPAddr.new(ip, :Host)
    IPAddr.new(“192.168.1.99/24”, :Host)
    => #<IPAddr: IPv4:192.168.1.99/255.255.255.0>

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

— 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
  •  @host_mode = true
    
  •  family = Socket::AF_UNSPEC
    
  • else
  •  @host_mode = false
    
  • end
  • prefix, prefixlen = addr.split(’/’)
    if prefix =~ /^[(.*)]$/i
    prefix = $1

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs