Network programming 添加新地址族(AF_xxx)

Network programming 添加新地址族(AF_xxx),network-programming,linux-kernel,Network Programming,Linux Kernel,我遇到了实现某种IGMP窥探后端的内核驱动程序代码,作为其功能的一部分,它创建了一个新的套接字地址系列AF_IGMPSNOOP,但实际上只为这种类型的套接字实现了一些操作: static struct proto_ops igmp_snoop_ops = { family: AF_IGMP_SNOOP, release: _igmp_snoop_sock_release, bind: sock_no_bind, connect:

我遇到了实现某种IGMP窥探后端的内核驱动程序代码,作为其功能的一部分,它创建了一个新的套接字地址系列AF_IGMPSNOOP,但实际上只为这种类型的套接字实现了一些操作:

static struct proto_ops igmp_snoop_ops = {
   family:       AF_IGMP_SNOOP,
   release:      _igmp_snoop_sock_release,
   bind:         sock_no_bind,
   connect:      sock_no_connect,
   socketpair:   sock_no_socketpair,
   accept:       sock_no_accept,
   getname:      sock_no_getname,
   poll:         datagram_poll,
   ioctl:        sock_no_ioctl,
   listen:       sock_no_listen,
   shutdown:     sock_no_shutdown,
   setsockopt:   _igmp_snoop_setsockopt,
   getsockopt:   sock_no_getsockopt,
   sendmsg:      _igmp_snoop_sock_sendmsg,
   recvmsg:      _igmp_snoop_sock_recvmsg,
   mmap:         sock_no_mmap,
   sendpage:     sock_no_sendpage,
}
但是,从用户空间的角度来看,套接字创建为:

fd = socket (AF_IGMPSNOOP, SOCK_RAW, IPPROTO_IGMP)
我想知道添加一个新家族的理由是什么,而事实上一个原始套接字被用来访问IGMP数据包的堆栈?仅仅创建AF_INET raw socket并执行这些操作不是一样的吗

期待您的来信! 谢谢

标记