2008年9月3日水曜日

PF_PACKET での vlan_tci - 気になるトコロ

間違い。
> skb->vlan_tci を設定する __vlan_hwaccel_rx() を呼んでいるのは
じゃなくて、__vlan_hwaccel_rx() を呼び出す netif_rx() や netif_receive_skb() の wrapper (とコメントに書いてある) の vlan_hwaccel_rx() や vlan_hwaccel_receive_skb() はいろんなドライバから呼ばれてる。

その他
  • (多分 NETIF_F_HW_VLAN_RX でないデバイスで使う)
    vlan_skb_recv()::net/8021q/vlan_dev.c で skb->vlan_tci をセットしてない

  • packet_sock.tp_reserve で確保する位置
    tpacket_rcv()::net/packet/af_packet.c の中
     } else {
    unsigned maclen = skb_network_offset(skb);
    netoff = TPACKET_ALIGN(po->tp_hdrlen +
    (maclen < 16 ? 16 : maclen)) +
    po->tp_reserve;
    macoff = netoff - maclen;
    }
    ....
    skb_copy_bits(skb, 0, h.raw + macoff, snaplen);
    ....
    case TPACKET_V2:
    h.h2->tp_len = skb->len;
    h.h2->tp_snaplen = snaplen;
    h.h2->tp_mac = macoff;
    h.h2->tp_net = netoff;
    mac より前に確保してる? できれば mac と net の間に VLAN オプションフィールド入れたいけど、すんごいツラいしそーゆー用途ではない? ユーザスペースで mac ヘッダ前にずらす?

0 件のコメント: