« WiMaxを導入してみました | トップページ | WiMAXモバイルルータ »

2011年4月18日 (月)

IPv4枯渇

ついにその日が来ました

APNIC(=JPNICも)のIPv4アドレスが枯渇しました。

まぁ、10年も前から無くなるといわれていて、ようやく到達したという感じですが。

さて、ここのところ色々あって停滞気味だったのですが、ネタとしては面白いのでIPv6が早く普及するようツールを作ってみることにしました。

IPv4にはプライベートアドレスというのがあるのですが、v6で実験的にアドレス振りたいときにどうするのよ?というのがことの始まりです。

IPv6でローカルなネットワークアドレスを決める方法というRFCが出ていて、これによると、FC00::/7にLbitというローカルに生成したよというフラグを立て(つまり、Lbitは8ビット目にあるので先頭8ビットはFDとなるらしい)あとは好きに決めていい。ただし、できるだけ分散するように、UTPの時刻やらEUI(まあMACのようなものらしい)やらを使って、SHA1でハッシュを計算して、...というお約束が書いてあります。

じゃぁ、Androidで作ってやろうじゃん。と思って作り始めました。

まず、NTP形式の時刻ですが、64bitで、上位32bitは1900年1月1日からの通算秒。下位32bitは固定小数点形式の秒以下の数値となっています。

まず、問題なのは1900年ですね。CalendarのgetTimeInMillsで取れるミリ秒単位の時刻は1970年1月1日が起算日です。
そこで、問題です。setData(YEAR, 1900)してからgetTimeInMillsするとどうなるのか?これが、驚いたことにというかやっぱりというか負の数値が返ってきます。つまり、今のCalendarから1900年1月1日のCalendarのミリ秒を引けば普通に1900年からの通算秒が求まります。

下位32bitですが、ミリ秒の%1000を取って、2^32倍してから1000で割ればよさそうです。

実際は、ランダムな数を作りだすために時刻を使っているだけなので、厳密に計算しなくてもいい気もしますけどね。

ということで、機器固有部分につづく(かもしれない)

« WiMaxを導入してみました | トップページ | WiMAXモバイルルータ »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/60027/51428810

この記事へのトラックバック一覧です: IPv4枯渇:

« WiMaxを導入してみました | トップページ | WiMAXモバイルルータ »