【问题标题】:understand 'struct proto' and 'struct proto_ops' in the kernel了解内核中的“struct proto”和“struct proto_ops”
【发布时间】:2014-10-28 16:38:42
【问题描述】:

我正在研究tcp/ip的实现,特别是sockets层,有些结构我不太明白。

我知道 'struct proto_ops' 用于定义操作,例如bind/connect/accept,每个socket都有一个指定的proto_ops。

另一方面,'struct proto' 定义了新协议,并且该结构还定义了用于 accept/bind/setsockopt/getsockopt/等的函数指针。方法。

我在 $linux/net/ 中阅读了很多代码,但看不到它在哪里使用通过 'struct proto' 定义的操作,所以我不确定这些方法在代码中是如何使用的?

有人可以为我澄清一下吗? 谢谢。

【问题讨论】:

    标签: networking linux-kernel


    【解决方案1】:

    我认为这个问题是新手尝试创建新协议时最头疼的问题

    说明: 两种结构都有名称相似的成员元素,尽管它们代表不同的功能

    • struct prot_ops:用于socket层和传输层的通信
    • struct prot:用于与系统调用通信

    示例: 当你在用户空间调用系统调用时,ex connect(), prot_ops_connect() 将首先被调用。

    • 在函数prot_ops_connect()中,我们需要调用sk->sk_prot->connect()
    • 而且 sk->sk_prot->connect() 会自动调用 proto_connect()

    希望有帮助

    【讨论】:

      【解决方案2】:

      你可以这样画。共有三层:

      BSD sock->inet sock->tcp/udp sock
      

      相应的操作:

      BSD api->proto_ops->proto
      

      如果你阅读 sys_socket() 和 sys_read(),你会得到相同的答案。

      希望这可以帮助你:-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-12
        • 2019-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 2011-11-14
        • 1970-01-01
        相关资源
        最近更新 更多