ドライバをボンディングする方法についての質問は、スレーブインターフェイスからRXパケットを受け取ります。私はボンディングがLACPDUとARPパケットのハンドラを設定するためにdev_add_pack()を使用していたが、他のハンドラ(他のパケットタイプのもの)が見つかりませんでした。ボンディングドライバがスレーブインターフェイスからRXパケットを受け取る方法
この問題を解決するのに手伝ってください。
ドライバをボンディングする方法についての質問は、スレーブインターフェイスからRXパケットを受け取ります。私はボンディングがLACPDUとARPパケットのハンドラを設定するためにdev_add_pack()を使用していたが、他のハンドラ(他のパケットタイプのもの)が見つかりませんでした。ボンディングドライバがスレーブインターフェイスからRXパケットを受け取る方法
この問題を解決するのに手伝ってください。
ボンディングドライバ(bond_enslaveで、スレーブ・インターフェースはボンド・マスターに奴隷にされ、独自のRxハンドラを登録する)あなたが見ることができます:
res = netdev_rx_handler_register(slave_dev, bond_handle_frame,
new_slave);
のでbond_handle_frameに()は、受信したパケットをハイジャックしますスレーブインターフェースによって、ボンドマスターはパケットを受け取るようになります。
static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb)
{
struct sk_buff *skb = *pskb;
struct slave *slave;
struct bonding *bond;
int (*recv_probe)(const struct sk_buff *, struct bonding *,
struct slave *);
int ret = RX_HANDLER_ANOTHER;
skb = skb_share_check(skb, GFP_ATOMIC);
if (unlikely(!skb))
return RX_HANDLER_CONSUMED;
*pskb = skb;
slave = bond_slave_get_rcu(skb->dev);
bond = slave->bond;
if (bond->params.arp_interval)
slave->dev->last_rx = jiffies;
recv_probe = ACCESS_ONCE(bond->recv_probe);
if (recv_probe) {
ret = recv_probe(skb, bond, slave);
if (ret == RX_HANDLER_CONSUMED) {
consume_skb(skb);
return ret;
}
}
if (bond_should_deliver_exact_match(skb, slave, bond)) {
return RX_HANDLER_EXACT;
}
skb->dev = bond->dev;
if (bond->params.mode == BOND_MODE_ALB &&
bond->dev->priv_flags & IFF_BRIDGE_PORT &&
skb->pkt_type == PACKET_HOST) {
if (unlikely(skb_cow_head(skb,
skb->data - skb_mac_header(skb)))) {
kfree_skb(skb);
return RX_HANDLER_CONSUMED;
}
memcpy(eth_hdr(skb)->h_dest, bond->dev->dev_addr, ETH_ALEN);
}
return ret;
}
ありがとう、私は古いボンディングバージョンを確認したようだ、kernel.orgからの更新後、上に書いた –
ボンディングのコードを調べたところ、ドライバーがこれらのモードで動作する場合、タイプによっては着信RXパケットを検査しなかったことが判明しました(LACPDU、ARP)。ドライバはdev_add_pack()関数を使用してこのパケットのハンドラを設定します。
実用的なグローバルフックを設定するには、インターセプトパケット用のセットアップ独自のネットフィルタプロシージャのインターフェイスを提供するnf_register_hook()を使用できます。 nf_register_hook()はdev_add_pack()よりも強力だと思われますが、nf_register_hook()を使うときには注意が必要です。
+1、私はそこでお手伝いしたいと思います。 –
ありがとう、ありがとう、私は答えを見つけたようだ、私はここにそれを追加すると思うが、少し後で –