Linux原始碼筆記 網路棧 傳送流程

2022-06-30 14:54:11 字數 2425 閱讀 5726

tcp_v4_send_ack

ip_send_unicast_reply

ip_route_output_key

ip_route_output_flow

ip_push_pending_frames

ip_send_skb

udp_sendmsg

_ip_route_output_key

ip_route_output_flow

fib_lookup

udp_send_skb

ip_send_skb

raw_sendmsg

ip_route_output_key

ip_route_output_flow

raw_send_hdrinc

dst_output

dst_output_sk

ip_queue_xmit 

ip_route_output_ports

_ip_route_output_key

ip_route_output_flow

ip_local_out

ip_local_out_sk

dst_output_sk

ip_route_output_flow

__ip_route_output_key

fib_lookup

__mkroute_output

rt_set_nexthop

ip_send_skb

ip_local_out

ip_local_out_sk

dst_output_sk

rtable->dst->output

ip_output

ip_finish_output    

//鄰居邏輯

ip_finish_output2

__neigh_create

neigh_table->constructor

arp_constructor

dst_neigh_output

//(a) 已經有arp鄰居表項,直接傳送

neigh_hh_output

dev_queue_xmit

//(b) 暫時沒有arp鄰居表現,先完成arp解析

neighbour->output

neighbour->ops->connected_output

neighbour->ops->output

neigh_resolve_output

// 週期性傳送arp請求 

neigh_event_send

__neigh_event_send

neigh_add_timer  // neigh_timer_handler

neigh_probe

neighbour->ops->solicit

arp_solicit

arp_send

arp_xmit

dev_queue_xmit

dev_queue_xmit 

dev_queue_xmit

__dev_queue_xmit

//選擇乙個輸出佇列,將該資料報插入傳送佇列中。

netdev_pick_tx

// 如果存在 qdisc->enqueue, 那麼使用擁塞傳送佇列

_dev_xmit_skb

sch_direct_xmit

_qdisc_run

//(a) 本次被排程

qdisc_restart

sch_direct_xmit

dev_hard_start_xmit

xmit_one

netdev_start_xmit     

net_device->netdev_ops->ndo_start_xmit

例如   ixgb_xmit_frame

例如   e1000_xmit_frame

例如   dm9000_start_xmit

//(b)如果待發的資料太多。一次沒有發完,等下次再排程傳送

_netif_schedule

netif_schedule_queue

_netif_schedule

_netif_reschedule

net_tx_softirq

net_tx_action

qdisc_run

qdisc_restart

sch_direct_xmit

dev_hard_start_xmit

xmit_one

netdev_start_xmit

__netdev_start_xmit

net_device_ops->ndo_start_xmit

ethoc_start_xmit

ixgb_xmit_frame

dm9000_start_xmit

Linux網路介面的原始碼分析

二.網路介面程式的結構五.網路協議部分 協議層是真正實現是在這一層。在linux include linux socket.h裡面,linux的bsd socket 定義了多至32支援的協議族,其中pf inet就是我們最熟悉的tcp ip協議族 ipv4,以下沒有特別宣告都指ipv4 以這個協議族...

Linux網路驅動原始碼分析 一

網路驅動是一種典型的pci裝置驅動,無論在嵌入式平台還是在pc領域,網路相關的專案開發有著比較廣闊的前景,因此,分析當前linux核心中網路裝置的驅動,不但能了解網路相關的基本原理,而且可以借鑑linux核心的先進的技術,將其應用到嵌入式或其他領域。本文以linux核心中的rtl8139網路驅動為例...

資料傳送介面原始碼示例

由於專案中經常需要寫各種對接的介面,此次決定花點心思設計一下,避免每次都重複開發。場景描述 重資料庫中讀取資料傳送至webservice介面,需要對傳送的資料進行確認。以往開發的痛點在於 要操作的表及表的字段不確定 對接的webservice介面及規範不統一,此原因在於對接的第三方。設計思路 如果請...