2014-09-04 30 views
2

我正在研究tcp/ip实现,特别是套接字层,并且我对某些结构并不太了解。理解内核中的'struct proto'和'struct proto_ops'

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

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

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

有人能为我澄清这一点吗? 谢谢。

回答

2

我认为问题是,当一个新手尝试创建一个新的协议

解释最头痛的问题: 两种结构有成员元素类似的名称,尽管它们代表不同的功能

  • 结构prot_ops:用于套接字层和传输层
  • 之间的通信
  • 结构PROT:用于与系统通信调用

例子: 当你调用在用户空间系统调用,前连接(),prot_ops_connect()将首先调用。

  • 在温控功能prot_ops_connect(),我们需要调用SK-Ⅱ> sk_prot->连接()
  • 而SK-Ⅱ> sk_prot->连接()将调用proto_connect()自动

希望这个帮助

2

您可以像this.There图像有三层:

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

对应OPS:

BSD api->proto_ops->proto 

如果你读sys_socket()和SYS_READ(),你会得到同样的答案。

希望这可以帮助你:-)