理解内核中的'struct proto'和'struct proto_ops'

时间:2014-09-04 03:31:49

标签: networking linux-kernel

我正在研究tcp / ip实现,特别是套接字层,而且我对一些结构还不太了解。

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

另一方面,'struct proto'定义了新协议,结构也定义了accept / bind / setsockopt / getsockopt / etc的函数指针。方法

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

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

2 个答案:

答案 0 :(得分:3)

你可以像这样形象。有三层:

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

相应的操作:

BSD api->proto_ops->proto

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

希望这可以帮到你:-)

答案 1 :(得分:3)

我认为当新手尝试创建新协议时,问题是最令人头痛的问题

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

  • struct prot_ops:用于套接字层和传输层之间的通信
  • struct prot:用于与系统调用进行通信

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

  • 在fucntion prot_ops_connect()中,我们需要调用sk-&gt; sk_prot-&gt; connect()
  • 并且sk-&gt; sk_prot-&gt; connect()会自动调用proto_connect()

希望这个帮助