博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kernel 源代码 小记
阅读量:7111 次
发布时间:2019-06-28

本文共 2046 字,大约阅读时间需要 6 分钟。

1.Initial process

 

2.Create Namespace

       fork(fork.c) -> do_fork(fork.c) -> copy_process(fork.c) -> copy_namespaces(nsproxy.c) -> create_new_namespaces(nsproxy.c) -> copy_net_ns(net_namespace.c) ->setup_net(net_namespace.c init networkspace)

 

3.Receive package( TCP package)

        driver(xx-driver) -> netif_rx (dev.c) -> enqueue_to_backlog(dev.c) -> process_backlog(dev.c) -> __netif_receive_skb(dev.c) -> __netif_receive_skb_core(dev.c [handle_ing -> ing_filter -> qdisc_enqueue_root ]) -> deliver_skb(dev.c) -> ip_rcv(ip_input.c) -> ip_rcv_finish(ip_input.c) -> ip_route_input_noref(route.c) -> ip_route_input_slow(route.c) -> ip_local_deliver(ip_input.c) -> ip_local_deliver_finish(ip_input.c) -> tcp_v4_rcv(tcp_ipv4.c) -> tcp_v4_do_rcv(tcp_ipv4.c) -> tcp_child_process(tcp_minsocks.c) -> __sk_add_backlog(tcp_minsocks.c)

 

4.Application -> L4(UDP)

     udp_rcv(udp.c)  -> __udp4_lib_rcv (udp.c)  ->  udp_queue_rcv_skb (udp.c)  -> __udp_queue_rcv_skb (udp.c)  ->  sock_queue_rcv_skb(sock.c)  ->  sock_def_readable [sk_data_ready] (sock.c) -> sock_def_readable (sock.c)  -> udp_sendmsg(udp.c)

 

5.L4 (UDP)-> Application

    SYSCALL_DEFINE2[socketall](socket.c)  ->  SYSCALL_DEFINE3[sendmsg] (socket.c)  ->  __sys_sendmmsg(socket.c)  ->  sock_sendmsg(socket.c)  -> __sock_sendmsg(socket.c)  -> __sock_sendmsg_nosec(socket.c)  -> udp_sendmsg(udp.c) -> ip_make_skb(udp.c)  -> __ip_make_skb(ip_output.c)

 

6.Transmit package: hp100-driver

   packet_snd(af_packet.c)->dev_queue_xmit(dev.c  ->__dev_xmit_skb [TC]) -> dev_hard_start_xmit(dev.c) -> hp100_start_xmit (hp100.c)-> hp100_start_interface(hp100.c)

 

7.TC routine: htb

    qdisc_enqueue_root(sch_generic.h) -> qdisc_enqueue(sch_generic.h) -> htb_enqueue(sch_htb.c) ->htb_classify(sch_htb.c) -> flow_classify(cls_flow.c) -> tcf_exts_exec(pkt_cls.h) ->tcf_action_exec(act_api.c) -> tcf_act_police(act_police.c)

 

8. Linux Bridge(Bridge配置IP可进三层路由):

    br_add_if(br_if.c)  -> br_handle_frame(br_input.c)  -> br_handle_frame_finish(br_input.c)  -> br_pass_frame_up(br_input.c)  ->  netif_receive_skb(dev.c)

转载于:https://www.cnblogs.com/gaozhengwei/p/7099843.html

你可能感兴趣的文章
【BZOJ】1044: [HAOI2008]木棍分割(二分+dp)
查看>>
哈佛经济学家关于工作效率的意外发现
查看>>
维基百科一年烧四千多万美元 太会花钱?才不是呢!
查看>>
软件管理,软件生命周期,软件过程名词解释
查看>>
[Spring MVC] - SpringMVC的各种参数绑定方式
查看>>
apk签名方法
查看>>
java.io.IOException: ORA-22920: 未锁定含有 LOB 值的行
查看>>
用一条sql取得第10到第20条的记录
查看>>
《悲惨世界》--[法]雨果
查看>>
分页骨架
查看>>
IOS--UIDatePicker 时间选择器 的使用方法详细
查看>>
ORACLE系统表大全
查看>>
#研发解决方案介绍#基于持久化配置中心的业务降级
查看>>
设计模式--建造者(Builder)模式
查看>>
高效方法势图
查看>>
cocos设计模式之二段构建模式
查看>>
PHP面向对象的基本写法(区别于java)
查看>>
Oracle EBS 入门
查看>>
js 规范
查看>>
一个4节点Hadoop集群的配置示例
查看>>