こんばんは。

In message <20091002161233.77c55364...@mogami.com>
        on Fri, 2 Oct 2009 16:12:33 +0900,
        Kouichi Hirabayashi <k...@mogami.com> wrote:
> ip(4) を見ると、SOCK_RAW で IP_ONESBCAST を設定すれば
> 良さそうですが、sin.sin_addr.s_addr が 202.23.252.255
> などであれば、イサネットフレームの宛先が IFF_BROADCAST
> (ff:ff:ff:ff:ff:ff) になります。ところが
IP_ONESBCASTはBSD系でもFreeBSD独自(DragonFly BSDもギリギリ入らず)なの
で、素直に取れば、

> sin.sin_addr.s_addr が 255.255.255.255 だと、default
> route に配送され、IP_ONESBCAST は無視されます。それで
> はと、SO_DONTROUTE オプションを追加すると、sendto()
> で Network is unreachable のエラー !
と、いうのはバグではないでしょうか。追加された経緯も、

        Revision 119178 - (view) (annotate) - [select for diffs]
        Modified Wed Aug 20 14:46:40 2003 UTC (6 years, 1 month ago) by bms
        File length: 20849 byte(s)
        Diff to previous 118622

        Add the IP_ONESBCAST option, to enable undirected IP
        broadcasts to be sent on specific interfaces. This is required
        by aodvd, and may in future help us in getting rid of the
        requirement for BPF from our import of isc-dhcp.

と、いうことですから。send-prしても良さそうに思えます、最後に、BPFに
代えて使えたらいいな、的な記述もありますから。

In message <20091003154134.7abb6193...@mogami.com>
        on Sat, 3 Oct 2009 15:41:34 +0900,
        Kouichi Hirabayashi <k...@mogami.com> wrote:
> 2) SOCK_UDP で soket() を作ると、うまくゆかない。
> 3) SO_BROADCAST の socket option は要らない。
> 
> で、ip(4) の SOCK_UDP でも使えるという記述とは矛盾するよ
SOCK_UDP は SOCK_DGRAM ですな。


他のBSDも含めると、このような宛先にパケットを送る典型的なプログラムは
DHCPのクライアントです。OpenBSDのOpenDHCPの実装は見てませんが、BSD系の
OSでは通常はbpf(4)を使用して行うことになっているようです。


-- 
神戸 隆博(かんべ たかひろ)         at 仕事場 

メールによる返信