sock_net() 做什么?
What sock_net() does?
我正在通过阅读执行此操作的内核模块来研究 user-space 和内核之间的通信,但是在代码中有对函数 sock_net() 的调用,我没有明白。我搜索了很多,但我没有找到任何关于这个特定功能的文档,那么这个功能实际上是做什么的?
它 returns 套接字所属的网络堆栈对象,如果启用了网络命名空间(容器通常有自己的网络)。
参见https://elixir.bootlin.com/linux/latest/source/include/net/sock.h#L2503:
static inline
struct net *sock_net(const struct sock *sk)
{
return read_pnet(&sk->sk_net);
}
其中 read_pnet
是:
static inline struct net *read_pnet(const possible_net_t *pnet)
{
#ifdef CONFIG_NET_NS
return pnet->net;
#else
return &init_net;
#endif
}
我正在通过阅读执行此操作的内核模块来研究 user-space 和内核之间的通信,但是在代码中有对函数 sock_net() 的调用,我没有明白。我搜索了很多,但我没有找到任何关于这个特定功能的文档,那么这个功能实际上是做什么的?
它 returns 套接字所属的网络堆栈对象,如果启用了网络命名空间(容器通常有自己的网络)。
参见https://elixir.bootlin.com/linux/latest/source/include/net/sock.h#L2503:
static inline
struct net *sock_net(const struct sock *sk)
{
return read_pnet(&sk->sk_net);
}
其中 read_pnet
是:
static inline struct net *read_pnet(const possible_net_t *pnet)
{
#ifdef CONFIG_NET_NS
return pnet->net;
#else
return &init_net;
#endif
}