inet_init()初始化分析

本文深入分析了Linux内核2.6.35.8版本中的inet_init()函数,主要探讨其在TCP/IP协议栈初始化中的作用,涉及SOCK_DGRAM、IPPROTO_UDP、UDP_CSUM_DEFAULT等相关配置。

本文参看代码版本为2.6.35.8

inet_init 分析

    1,proto_register():分别注册变量tcp_prot,udp_prot,raw_prot。不负责的听说这里是注册到了私有链表,仅用于/proc。
    2,sock_register(inet_family_ops),在全局数组net_family里面注册inet_family_ops。
static const struct net_proto_family inet_family_ops = {
     .family = PF_INET,   
     .create = inet_create,  //创建socket时需要调用的函数
     .owner  = THIS_MODULE,
 };

    3,inet_add_protocol():分别注册变量icmp_protocol udp_protocol tcp_protocol,在全局数组inet_protos里面,填充IPPROTO_ICMP IPPROTO_TCP IPPROTO_UDP对应区域。猜测该数组用于ip层向上送数据时,被查找以确定正确的四层接收函数。tcp_protocol定义如下:
 static const struct net_protocol tcp_protocol = {
     .handler =  tcp_v4_rcv,  //最为重要的传输层接收函数
     .e
<think> 我们有一个名为onvif_init的函数,它似乎是ONVIF模块的初始化函数。它执行了一系列初始化操作。 函数返回类型为S32(可能是32位有符号整数),函数名为onvif_init,前面有LOCAL修饰符(可能表示该函数只在当前文件内可见)。 函数内部执行步骤: 1. soap_init_global(); -> 初始化全局SOAP环境(SOAP是用于Web服务的协议,ONVIF基于SOAP)。 2. onvif_event_basic_info_init(); -> 初始化事件基本信息。 3. onvif_init_supported_event_topic(); -> 初始化支持的事件主题(可能是指ONVIF规范中定义的事件类型)。 4. 检查定时器ID(onvif_event_monitor_timer_id)是否为-1(表示未创建),如果是,则添加一个定时器: inet_add_timer((void *)onvif_event_monitor_timer, 0, EVENT_STATUS_CHECK_INTERVAL, EXECUTE_SINGLE); 这个定时器会按照EVENT_STATUS_CHECK_INTERVAL(事件状态检查间隔)周期性地调用onvif_event_monitor_timer函数。 并且EXECUTE_SINGLE可能表示这个定时器是单次执行的,但这里可能是周期性,因为间隔不为0。需要确认。 5. soap_tag_handle_init(); -> 初始化SOAP标签处理(可能是一些XML标签解析的初始化)。 6. init_auth(); -> 初始化认证模块(ONVIF需要认证,如用户名密码等)。 7. onvif_discv_handle_init(); -> 初始化发现处理模块(设备发现功能)。 8. onvif_srv_handle_init(); -> 初始化服务处理模块(ONVIF服务端功能)。 9. onvif_passthrough_handle_init(); -> 初始化透传处理模块(可能用于直接数据转发)。 10. msg_attach_handler(ONVIF_REGISTER_MID, onvif_event_alarm_cb); -> 注册消息处理函数,当收到ONVIF_REGISTER_MID消息时,调用onvif_event_alarm_cb回调。 11. msg_attach_handler(DEVICE_DISCOVERY_SET_STATUS_MID, onvif_status_cb); -> 注册另一个消息处理函数,当收到DEVICE_DISCOVERY_SET_STATUS_MID消息时,调用onvif_status_cb回调。 12. onvif_dms_cmd_init(); -> 初始化设备管理命令(DMS可能指设备管理服务)。 13. 打印调试信息,返回OK(通常表示成功)。 这个函数综合初始化了ONVIF模块的各个部分,包括SOAP、事件、认证、发现、服务、消息处理等。 注意:函数中使用了多个自定义的初始化函数,这些函数的具体实现未给出,但通过名称可以推测其功能。 问题:这个函数可能是整个ONVIF模块的入口初始化函数,在设备启动时调用。 根据要求,回答后需要提出3-5个相关问题。 </think> 以下是对 `onvif_init()` 函数的详细解析: ### 功能概述 这是一个 **ONVIF 协议的全局初始化函数**,通常在 IPC(网络摄像机)或 NVR(网络录像机)设备启动时调用。它负责初始化 ONVIF 服务的各个核心模块,为设备提供标准的 ONVIF 协议支持。 ### 关键组件初始化解析 1. **SOAP 通信基础** ```c soap_init_global(); // 初始化 SOAP 运行时环境 soap_tag_handle_init(); // 初始化 XML 标签处理器 ``` 建立基于 SOAP/XML 的 WEB 服务通信基础(ONVIF 协议的核心传输层) 2. **事件子系统** ```c onvif_event_basic_info_init(); // 初始化事件基本信息 onvif_init_supported_event_topic(); // 注册支持的事件类型 inet_add_timer(onvif_event_monitor_timer...); // 创建事件状态监控定时器 ``` 实现 ONVIF 事件通知机制(如移动侦测、报警触发等) 3. **安全认证** ```c init_auth(); // 初始化 WS-Security 认证模块 ``` 支持 ONVIF 要求的用户名/密码/Digest 认证 4. **核心服务模块** ```c onvif_discv_handle_init(); // 设备发现服务 onvif_srv_handle_init(); // 基础服务(设备信息、时间同步等) onvif_passthrough_handle_init(); // 数据透传通道 onvif_dms_cmd_init(); // 设备管理服务 ``` 覆盖 ONVIF 规范的五大核心服务: - 设备发现(Discovery) - 设备管理(DeviceMgmt) - 媒体流(Media) - 事件处理(Events) - PTZ控制(PTZ) 5. **消息回调注册** ```c msg_attach_handler(ONVIF_REGISTER_MID, onvif_event_alarm_cb); msg_attach_handler(DEVICE_DISCOVERY_SET_STATUS_MID, onvif_status_cb); ``` 绑定关键消息的处理函数: - 事件报警回调 `onvif_event_alarm_cb` - 设备状态变更回调 `onvif_status_cb` ### 执行流程 ```mermaid graph TD A[SOAP环境初始化] --> B[事件系统初始化] B --> C[认证模块初始化] C --> D[核心服务初始化] D --> E[消息回调注册] E --> F[定时器启动] F --> G[完成初始化] ``` ### 实际应用示例(海康威视摄像机) 当设备启动时: 1. 调用 `onvif_init()` 初始化 ONVIF 服务栈 2. 定时器每 `EVENT_STATUS_CHECK_INTERVAL` 毫秒检查事件状态 3. 客户端(如 iVMS-4200)通过 ONVIF 协议: - 自动发现设备(端口 3702) - 获取视频流(rtsp://ip/stream1) - 接收移动侦测事件 4. 用户操作(如重启设备)触发 `onvif_status_cb` 回调
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值