Skip to content
tsahara-iij edited this page Sep 25, 2012 · 4 revisions

IPAddr クラスは "IP address" と言いつつプレフィクスを表す。

引数にバイト列をとり、AF を自動判別するメソッド群は、バイト列の長さが 4 または 16 ではない場合に unsupported address family (ArgumentError) 例外を発生する。この処理は共通化すべきだろう。

String クラスのバイト列にはマスクの適用などの処理は行えない。したがってそのような処理が必要な際には Fixnum の Array 表現に変換することとする。

#mask のマスク表現は後回し。基本的にプレフィクス長しか使わない。

やりたいこと

与えられた文字列が、与えられたプレフィクス長のもとで、ネットワークアドレスまたはブロードキャストアドレスであるかを判断したい。

実装方針

  • IPAddr.pton(Integer, String) => String(バイト列) を C で実装する
  • IPAddr.new その他を .rb で実装する。そして IPAddr#bytes => Array of Fixnum というアクセサを用意しておく。

実装しないもの

  • << htons ip6_arpa ip6_int ipv4_compat ipv4_compat? ipv4_mapped ipv4_mapped? native ntohs to_i to_range ~
  • 全般的に、mapped/compatible アドレスのことは考慮しない

後回しにするもの

  • reverse succ
Clone this wiki locally