私のアプリケーションでは、次の命令で raw ソケット (LINUX カーネル 3.8.5) を開きます。
::socket( PF_PACKET, SOCK_RAW, htons((uint16_t)ETH_P_ALL));
すべて正常に動作しています。受信して別のインターフェイスに送信できます。しかし、ある時は
::recvfrom()
そのソケットでは、1518 (1504 ペイロード バイト + 14 ETH_HLEN) が返されます。
この 1518 バイトのバッファを送信しようとすると、命令が
::send(......)
EMSGSIZE (メッセージが長すぎます) を返します。
私の NIC インターフェイスでは MTU が 1500 であるため、::recvfrom で最大 1514 (ペイロード + ETH_HLEN) バイトが取得されると予想されることに注意してください。
ethtype は 0x0800 であるため、vlan タグ付きフレームではないため、これらの 4 バイトの「余分な」は vlan タグによるものではありません
説明はありますか?