freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux-310-kernel-bridge轉(zhuǎn)發(fā)邏輯-免費(fèi)閱讀

  

【正文】 //發(fā)送到鏈路層 } return 0。}l br_forward_finish點(diǎn)擊(此處)折疊或打開(kāi)int br_forward_finish(struct sk_buff *skb){ //經(jīng)過(guò)NF_BR_POST_ROUTING hook點(diǎn),調(diào)用br_dev_queue_push_xmit return NF_HOOK(NFPROTO_BRIDGE, NF_BR_POST_ROUTING, skb, NULL, skbdev, br_dev_queue_push_xmit)。 下面看轉(zhuǎn)發(fā)邏輯,轉(zhuǎn)發(fā)邏輯主要在br_forward函數(shù)中,而br_forward主要調(diào)用__br_forward函數(shù)。 !br_allowed_egress(br, br_get_vlan_info(br), skb)) { kfree_skb(skb)。drop: kfree_skb(skb)。 dstis_local) {/*目的地址是本機(jī)mac,則發(fā)往本機(jī)協(xié)議棧*/ skb2 = skb。 mdstmglist) || br_multicast_is_router(br)) skb2 = skb。 /* The packet skb2 goes to the local host (NULL to skip). */ skb2 = NULL。 /*更新轉(zhuǎn)發(fā)數(shù)據(jù)庫(kù)*/ br_fdb_update(br, p, eth_hdr(skb)h_source, vid)。 struct net_bridge_fdb_entry *dst。 /*獲取skb的vlan id()*/ br_vlan_get_tag(skb, amp。 } /* fall through */ case BR_STATE_LEARNING: /*skb的目的mac和bridge的mac一樣,則將skb發(fā)往本機(jī)協(xié)議棧*/ if (ether_addr_equal(pbrdevdev_addr, dest)) skbpkt_type = PACKET_HOST。 (1u dest[5])) goto forward。 if (!is_valid_ether_addr(eth_hdr(skb)h_source)) goto drop。}如果一個(gè)dev被添加到一個(gè)bridge(做為bridge的一個(gè)接口),的這個(gè)接口設(shè)備的rx_handler被設(shè)置為br_handle_frame函數(shù),這是在br_add_if函數(shù)中設(shè)置的,而br_add_if (net/bridge/)是在向網(wǎng)橋設(shè)備上添加接口時(shí)設(shè)置的。 pt_prev = ptype。 case RX_HANDLER_PASS: break。 } } /*調(diào)用接收設(shè)備的rx_handler*/ rx_handler = rcu_dereference(skbdevrx_handler)。 __be16 type。__netif_receive_skb并沒(méi)有其他多余的處理邏輯,主要調(diào)用 __netif_receive_skb_core。 if (cpu = 0) { ret = enqueue_to_backlog(skb, cpu, amp。l netif_receive_skb點(diǎn)擊(此處)折疊或打開(kāi)int netif_receive_skb(struct sk_buff *skb){ int ret。}這個(gè)函數(shù)可以給設(shè)備(net_device)注冊(cè)接收函數(shù),然后在__netif_receive_skb函數(shù)中根據(jù)接收skb的設(shè)備接口,再調(diào)用這個(gè)被注冊(cè)的接收函數(shù)。這樣正是CentOS 5和CentOS 7對(duì)應(yīng)的內(nèi)核。 /* Note: rx_handler_data must be set before rx_handler */ rcu_assign_pointer(devrx_handler_data, rx_handler_data)。 /....../ err = netdev_rx_handler_register(netdev_vportdev, netdev_frame_hook,vport)。voidflow。 rcu_read_unlock()。 struct net_device *null_or_dev。 /*ptype_all協(xié)議處理,tcpdump抓包就在這里*/ list_for_each_entry_rcu(ptype, amp。 goto out。 PTYPE_HASH_MASK], list) { if (ptypetype == type amp。 kfree_skb(skb)。 const unsigned char *dest = eth_hdr(skb)h_dest。 break。 if (rhook) { if ((*rhook)(skb)) {
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1