首页 > 系统相关 >Linux 内核 net_proto_family

Linux 内核 net_proto_family

时间:2023-06-01 10:35:18浏览次数:38  
标签:family ops create proto sock net

static const struct net_proto_family inet_family_ops = { 

.family = PF_INET, 

.create = inet_create, 

.owner 
  = THIS_MODULE, 
};
(void)sock_register(&inet_family_ops);
 /**
  * sock_register - add a socket protocol handler
  * @ops: description of protocol
  *
  * This function is called by a protocol handler that wants to
  * advertise its address family, and have it linked into the
  * socket interface. The value ops->family corresponds to the
  * socket system call protocol family.
  */
 int sock_register(const struct net_proto_family *ops)
 {
int err;


if (ops->family >= NPROTO) {
pr_crit("protocol %d >= NPROTO(%d)\n", ops->family, NPROTO);
return -ENOBUFS;
}


spin_lock(&net_family_lock);
if (rcu_dereference_protected(net_families[ops->family],
     lockdep_is_held(&net_family_lock)))
err = -EEXIST;
else {
rcu_assign_pointer(net_families[ops->family], ops);
err = 0;
}
spin_unlock(&net_family_lock);


pr_info("NET: Registered protocol family %d\n", ops->family);
return err;
 }
void sock_unregister(int family)
 {
BUG_ON(family < 0 || family >= NPROTO);


spin_lock(&net_family_lock);
RCU_INIT_POINTER(net_families[family], NULL);
spin_unlock(&net_family_lock);


synchronize_rcu();


pr_info("NET: Unregistered protocol family %d\n", family);
 }
 EXPORT_SYMBOL(sock_unregister);
static const struct net_proto_family inet6_family_ops = {
.family = PF_INET6,
.create = inet6_create,
.owner  = THIS_MODULE,
 };
static const struct net_proto_family unix_family_ops = {
.family = PF_UNIX,
.create = unix_create,
.owner  = THIS_MODULE,
 };
static const struct net_proto_family ipx_family_ops = {
.family  = PF_IPX,
.create  = ipx_create,
.owner  = THIS_MODULE,
 };
static const struct net_proto_family packet_family_ops = {
.family =  PF_PACKET,
.create =  packet_create,
.owner  = THIS_MODULE,
 };
static const struct net_proto_family netlink_family_ops = {
.family = PF_NETLINK,
.create = netlink_create,
.owner  = THIS_MODULE, /* for consistency 8) */
 };
static struct net_proto_family nfc_sock_family_ops = {
.owner  = THIS_MODULE,
.family = PF_NFC,
.create = nfc_sock_create,
 };
static const struct net_proto_family bnep_sock_family_ops = {
.family = PF_BLUETOOTH,
.owner  = THIS_MODULE,
.create = bnep_sock_create
 };static const struct net_proto_family mISDN_sock_family_ops = {
.owner  = THIS_MODULE,
.family = PF_ISDN,
.create = mISDN_sock_create,
 };

标签:family,ops,create,proto,sock,net
From: https://blog.51cto.com/u_11860992/6392709

相关文章

  • inetsw table
    /*Theinetswtablecontainseverythingthatinet_createneedsto*buildanewsocket.*/staticstructlist_headinetsw[SOCK_MAX];staticDEFINE_SPINLOCK(inetsw_lock);for(q=inetsw_array;q<&inetsw_array[INETSW_ARRAY_LEN];++q)......
  • 界面控件DevExpress ASP.NET新主题——Office 365暗黑主题的应用
    DevExpressASP.NET WebFormsControls拥有针对Web表单(包括报表)的110+种UI控件,DevExpressASP.NETMVCExtensions是服务器端MVC扩展或客户端控件,由轻量级JavaScript小部件提供支持的70+个高性能DevExpressASP.NETCoreControls,包含功能完善的报表平台。在之前发布的v22.1版......
  • PowerShell实战系列:按需更改.net解决方案中的项目名称
    一、需求  产品在生命周期中可能会更改名称,比如产品从Product1升级为Product2,为了使产品代码与之同步,产品源码项目名称需要改动,通常一个产品由包含很多项目,手动更改有很大的工作量,且未来该工作仍可能重复(产品继续升级,带来改名需求)。  对于大量且重复的工作,编写脚本可有......
  • 使用脚本批量Telnet和Curl测试端口是否连通
    使用脚本批量Telnet测试端口是否连通,使用telnet:telnets.sh:#!/bin/bashcheck_telnet(){forip_portin$(catip_info|grep-v'^#')doCHECK_PORT=$(echo$ip_port|awk-F:'{print$2}')CHECK_IP=$(echo$ip_port|awk-F:'{print$1}')......
  • 开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库。发送短信就像发送邮件一样,在软件系统中使用非常普遍,甚至比发送邮件还要常见,有些甚至是软件标配功能;例如现在的短信验证码登录、通过短信找回密码等等。发送短信需要......
  • yolotv5和resnet152模型预测
    我已经训练完成了yolov5检测和resnet152分类的模型,下面开始对一张图片进行检测分类。首先用yolo算法对猫和狗进行检测,然后将检测到的目标进行裁剪,然后用resnet152对裁剪的图片进行分类。首先我有以下这些训练好的模型 猫狗检测的,猫的分类,狗的分类 我的预测文件my_detect.p......
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习
    一、什么是容器容器简介简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。这种隔离是怎么做到的呢?它利用了内核提供的namespace和cgroup这2种技术。这些技术能力在Linux中已经存在了很长时间。而Docker或容器技术致力于将这些功能更......
  • 使用OnePlus 6T(一加6T)刷入 Kali NetHunter的操作总结
    前景概述:看到网上有人用手机进行BadUSB攻击,自己也幻想了一下在手机中使用KaliLinux的场景,看到Kali官方提供的有移动端的设备Nethunter,于是我就筹划这准备刷入这个系统。想要刷入NetHunter,并不是非常简单的事情,但是如果你有刷机基础的话,也可以是很简单的步骤。我是一个小白,一......
  • Vs2022安装.Net4.5程序包
    因为VS2022将不再支持.NET4.5,即使在VisualStudioInstaller中也找不到.NET4.5的选项我们可以在NuGet包中下载.NET4.5的工具包找到程序包管理器控制台Vs2022顶部菜单>视图>其它窗口>程序包管理器控制台将下段代码复制进程序包管理器控制台然后回车Install-PackageMicrosof......
  • 【Netty实战】1~3章学习笔记
    1.Netty总体结构1.1Netty简介​ Netty是一款用于创建高性能网络应用程序的高级框架。它的基于JavaNIO的异步的和事件驱动的实现,保证了高负载下应用程序性能的最大化和可伸缩性。​ 其次,Netty也包含了一组设计模式,将应用程序逻辑从网络层解耦,简化了开发过程,同时也最大限度......