yanagihara
2014年2月17日 12時09分
お世話になります、柳原です。
Armadillo-440はEthernetフレームとして、DIX Etherent IIではなくIEEE802.3のフレームを送受信できますか?
できれば設定方法か実装方法を教えて頂けると有難いのですが。
コメント
yanagihara
柳原です。
> どの様な用途で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プロトコルが使えるの
でしょうか?
at_yashi
ちょっと混乱してきたので、教えてください。
独自プロトコルは、TCPでラップされているということですが、IP層もそのまま
使う予定でしょうか? もしIPを乗せるのであれば、RFC894により、DIXになると
思うのですが、なにか私の方で勘違いしていますか?
また、もちろん独自プロトコルを送受信していない時に、802.3 で通信するこ
とはできますが、それこそ混ぜない方が良いような気がします。(混ぜるための
RFC なのは理解しているのですが...)
もしかして、「xxx準拠」と書かれているのは、電気的な方であって、ソフトウェ
アではなかったりしませんか? 電気的には、Ethernet II も IEEE 802.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ソケットを使用する事でイーサネットフレームを
直接送信する事も可能です。