Project

General

Profile

Actions

Feature #8047

open

IPAddr makes host address with netmask

Added by nori_nori (Tadanori Kojima) over 11 years ago. Updated almost 7 years ago.

Status:
Assigned
Target version:
-
[ruby-dev:47149]

Description

現状の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

Updated by zzak (zzak _) over 11 years ago

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

Updated by hsbt (Hiroshi SHIBATA) almost 11 years ago

  • Target version changed from 2.1.0 to 2.2.0
Actions #3

Updated by shyouhei (Shyouhei Urabe) about 7 years ago

  • Description updated (diff)
Actions #4

Updated by naruse (Yui NARUSE) almost 7 years ago

  • Target version deleted (2.2.0)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0