先了解应用层和协议栈是怎么交互消息的
先看内核消息数据结构
/* tcp/ip内核消息类型 */
enum tcpip_msg_type
{
TCPIP_MSG_API, //调用API
TCPIP_MSG_INPKT, //底层数据包输入
TCPIP_MSG_TIMEOUT, //注册一个定时事件
TCPIP_MSG_UNTIMEOUT, //删除一个定时事件
TCPIP_MSG_CALLBACK, //上层回调函数
TCPIP_MSG_CALLBACK_STATIC //上层回调函数(消息为静态)
};
/* tcp/ip内核消息 */
struct tcpip_msg
{
enum tcpip_msg_type type; //消息类型
sys_sem_t *sem; //信号量指针
union
{
/* API消息 */
struct api_msg *apimsg;
/* 底层数据包输入消息 */
struct
{
struct pbuf *p; //数据包pbuf指针
struct netif *netif; //网络接口指针
}inp;
/* 上层回调函数消息 */
struct
{
tcpip_callback_fn function; //回调函数
void *ctx; //回调函数参数
}cb;
/* 定时事件 */
struct
{
u32_t msecs; //时间
sys_timeout_handler h; //回调函数
void *arg; //回调函数参数
}tmo;
}msg;
};
在看一下,内核是