> 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 の中
mac より前に確保してる? できれば mac と net の間に VLAN オプションフィールド入れたいけど、すんごいツラいしそーゆー用途ではない? ユーザスペースで mac ヘッダ前にずらす?} 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;
0 件のコメント:
コメントを投稿