Expand description
L2: Ethernet フレームの解析と振り分け(純粋ロジック)。
§なぜ純粋モジュールにするか
ここを誤ると
- 短いフレームで範囲外を読む(領域外アクセス)
- VLAN タグ付きフレームを「未対応 EtherType」として捨てる
- 自分宛でないフレームを上位へ渡す
といった形で壊れるが、いずれも上層では「なぜか通信できない」としか見えない。
実際、L1/L2 に単体試験が無いまま L4(TCP)/L7(CSS) を追いかけて
大きく遠回りした(spec/l1_l2_usb.md 参照)。
§典拠
IEEE 802.3(Ethernet II フレーム形式)、IEEE 802.1Q(VLAN タグ)。
宛先 MAC(6) / 送信元 MAC(6) / EtherType(2) / ペイロード。
EtherType が 0x8100 なら VLAN タグが 4 バイト挿入され、
本来の EtherType は offset 16 に来る。
Enums§
- Dispatch
- フレームの振り分け結果。
- Frame
Error - 解析失敗の理由。
Constants§
- ETHERTYPE_
ARP - ETHERTYPE_
IPV4 - ETHERTYPE_
IPV6 - ETHERTYPE_
VLAN - ETH_
HEADER_ LEN - Ethernet II ヘッダ長。
- MAC_
BROADCAST - ブロードキャスト MAC。
- VLAN_
TAG_ LEN - VLAN タグ(802.1Q)の長さ。
Functions§
- dispatch
- フレームを振り分ける。
- dst_mac
- フレームの宛先 MAC を返す。長さ不足なら
None。 - ethertype_
and_ payload - EtherType とペイロード開始位置を求める(VLAN タグを剥がす)。
- is_
for_ us - このフレームを受け取るべきか(自分宛/ブロードキャスト/マルチキャスト)。