Armadilloフォーラム

Armadillo-440によるIEEE802.3フレームの送受信について

yanagihara

2014年2月17日 12時09分

お世話になります、柳原です。

Armadillo-440はEthernetフレームとして、DIX Etherent IIではなくIEEE802.3のフレームを送受信できますか?

できれば設定方法か実装方法を教えて頂けると有難いのですが。

コメント

at_takahiro.nakamura

2014年2月18日 15時36分

アットマークテクノの中村です。

どの様な用途でIEEE802.3のフレームを使用するか?
(上位プロトコル、アプリ)教えて頂くことは可能ですか?

ドライバの実装としては、net/ethernet/eth.cの処理に以下のコードがありますので、
typeにETH_P_802_3を設定すれば、送信は出来ると思います。
----------------------------------------------------------
int eth_header(struct sk_buff *skb, struct net_device *dev,
unsigned short type,
const void *daddr, const void *saddr, unsigned len)
{
struct ethhdr *eth = (struct ethhdr *)skb_push(skb, ETH_HLEN);

if (type != ETH_P_802_3)
eth->h_proto = htons(type);
else
eth->h_proto = htons(len);
----------------------------------------------------------
また、RAWソケットを使用する事でイーサネットフレームを
直接送信する事も可能です。

柳原です。

> どの様な用途でIEEE802.3のフレームを使用するか?
> (上位プロトコル、アプリ)教えて頂くことは可能ですか?
目的は他の接続機器との互換性確認です。
上位プロトコルは、独自プロトコルをTCPでラッピングしたものです。

スイッチやNICの製品仕様には
1000BASE-T IEEE802.3ab準拠
100BASE-TX IEEE802.3u準拠
10BASE-T IEEE802.3準拠
のように書かれています。

しかしIEEE803.2+IEEE802.2(つまりRFC1042のカプセル化)形式のパケットを
実際に送出できる機器あるいはソフトが手許に無いため、Armadilloを組み込
んだ製品がRFC1122のにおける以下の記述のどれに当てはまるのかを実際に確
認できずにいます。

2.3.3 Ethernet and IEEE 802 Encapsulation:
> Every Internet host connected to a 10Mbps Ethernet cable:
>
> o MUST be able to send and receive packets using RFC-894
> encapsulation;
>
> o SHOULD be able to receive RFC-1042 packets, intermixed
> with RFC-894 packets; and
>
> o MAY be able to send packets using RFC-1042 encapsulation.

このため、Armadilloを組み込んだ製品が接続相手機器に要求する機能要件と
して何と記述すべきか迷っているところです。

IEEE802.3準拠のスイッチを推奨したとして、Ethernet II(RFC894カプセル化)
形式のパケットでは通信できるけどIEEE802(RFC-1042カプセル化)形式のパケッ
トは受信できない(あるいは誤動作する)では『推奨』した意味が無いし。

こういった状況において、Armadillo(あるいはLinux)で以下の記述
> An Internet host that implements sending both the RFC-894 and
> the RFC-1042 encapsulations MUST provide a configuration switch
> to select which is sent, and this switch MUST default to RFC-
> 894.
にあるような、Ethernet II(RFC894カプセル化)形式とIEEE802(RFC-1042カプ
セル化)形式の切り替えが(sysctlのような)簡単な設定で実現できているなら、
それを使えるようにしておくのも手かと思い、質問いたしました。

> ドライバの実装としては、net/ethernet/eth.cの処理に以下のコードがありますので、
> typeにETH_P_802_3を設定すれば、送信は出来ると思います。
> (中略)
> また、RAWソケットを使用する事でイーサネットフレームを
> 直接送信する事も可能です。

man 7 packetで説明されている機能でしょうか。

オンラインマニュアルはPF_PACKETについて説明でしたので、PF_INETには関係
無いのかと思っていましたが、PF_INETでもETH_P_802_3プロトコルが使えるの
でしょうか?

ちょっと混乱してきたので、教えてください。

独自プロトコルは、TCPでラップされているということですが、IP層もそのまま
使う予定でしょうか? もしIPを乗せるのであれば、RFC894により、DIXになると
思うのですが、なにか私の方で勘違いしていますか?

また、もちろん独自プロトコルを送受信していない時に、802.3 で通信するこ
とはできますが、それこそ混ぜない方が良いような気がします。(混ぜるための
RFC なのは理解しているのですが...)

もしかして、「xxx準拠」と書かれているのは、電気的な方であって、ソフトウェ
アではなかったりしませんか? 電気的には、Ethernet II も IEEE 802.3 も、
ほぼ同じですし。

と、ここまで書いて、なにか話が噛み合っていない気がするので、もう少し教
えて頂けると助かります。