私は 2 つのボックスを持っています: - " Omap "と呼ぶ組み込みデバイス (ARM Omap with Linux) 。- PC (Windows または Linux のいずれか)。
シナリオ 1
両方のボックスが同じネットワークにあります (例: 私のオフィス)。
Omap は DHCP サーバーからアドレスを取得します (例: 192.168.10.110)。PC のアドレスは常に同じです (例: 192.168.10.104)。
どのポートでも UDP ブロードキャスト パケットを正常に交換できます。
成功。
シナリオ 2
2 つのボックスは、DHCP サーバーのないネットワークにあります。
PC には静的 IP アドレスがあります (例: 10.10.10.20)。
Omap が起動し、DHCP サーバーを探しますが、それが見つからず、私が「不正な IP アドレス」と呼んでいる状態になります。 これで... Omapから
の
UDP パケットのブロードキャストが機能します。PC はそれらを認識できます。
逆は機能しません。PC によってブロードキャストされた UDP パケットは、Omap によって認識されません。別の PC で Wireshark を使用して、パケットが送信されていることを確認しています。
失敗。
Omap の IP アドレスを (ifconfig を使用して) 変更しようとしましたが、うまくいきませんでした。
私は何が欠けていますか?
全体像を完成させるために、Omap がシナリオ 2 にある場合、udhcpc を実行すると ... DHCP サーバーと通信して IP アドレスを取得できます。Wireshark のパケットも表示されます。これは、DHCP クライアントが UDP パケットをブロードキャストできることを意味します。(はい、DHCP ポート 67/68 を使用しようとしましたが、機能しません)。
Boost C++ Asio UDP ソケットを使用しています。具体的には、マルチキャストの例を取り上げて、ブロードキャストを行うように変更しました。
どんな助けでも大歓迎です。
ありがとう、ベネデット
PS: いくつかの説明。
Omap デバイスは組み込みデバイスであり、私の目的は、顧客がフィールドで IP アドレスを設定する必要がないようにすることです。そのため、PC で実行されている他のソフトウェアから「適切な」IP アドレスを取得するために、PC とブロードキャスト パケットを交換しています (これは、静的 IP アドレスがあり、DHCP サーバーがないネットワークでも、現在のサブネットが何であるかを認識しています)。
基本的に、私は非常に単純な DHCP プロトコルを実装しました。PC は Omap によってブロードキャストされたパケットをリッスンできましたが、その逆はできませんでした。