Linux协议栈里用C的预处理器形成的链表
来源:互联网 发布:国密算法适用 编辑:程序博客网 时间:2024/06/10 19:04
利用C的预处理器的顺序Parse特性形成了一个链表。
技巧都在IPPROTO_PREVIOUS 宏,引用#define以及#undefine,形成一个链表赋值给inet_protocol_base 。
#define IPPROTO_PREVIOUS NULL
#ifdef CONFIG_IP_MULTICAST
static struct inet_protocol igmp_protocol =
{
igmp_rcv, /* IGMP handler */
NULL, /* IGMP error control */
IPPROTO_PREVIOUS, /* next */
IPPROTO_IGMP, /* protocol ID */
0, /* copy */
NULL, /* data */
"IGMP" /* name */
};
#undef IPPROTO_PREVIOUS
#define IPPROTO_PREVIOUS &igmp_protocol
#endif
static struct inet_protocol tcp_protocol =
{
tcp_v4_rcv, /* TCP handler */
tcp_v4_err, /* TCP error control */
IPPROTO_PREVIOUS,
IPPROTO_TCP, /* protocol ID */
0, /* copy */
NULL, /* data */
"TCP" /* name */
};
#undef IPPROTO_PREVIOUS
#define IPPROTO_PREVIOUS &tcp_protocol
static struct inet_protocol udp_protocol =
{
udp_rcv, /* UDP handler */
udp_err, /* UDP error control */
IPPROTO_PREVIOUS, /* next */
IPPROTO_UDP, /* protocol ID */
0, /* copy */
NULL, /* data */
"UDP" /* name */
};
#undef IPPROTO_PREVIOUS
#define IPPROTO_PREVIOUS &udp_protocol
static struct inet_protocol icmp_protocol =
{
icmp_rcv, /* ICMP handler */
NULL, /* ICMP error control */
IPPROTO_PREVIOUS, /* next */
IPPROTO_ICMP, /* protocol ID */
0, /* copy */
NULL, /* data */
"ICMP" /* name */
};
#undef IPPROTO_PREVIOUS
#define IPPROTO_PREVIOUS &icmp_protocol
struct inet_protocol *inet_protocol_base = IPPROTO_PREVIOUS;
- Linux协议栈里用C的预处理器形成的链表
- C的预处理器
- c的预处理器
- linux & C++Primer 学习笔记--预处理器的简单介绍
- Linux中C语言的预处理
- C语言的预处理器
- 网页集合形成这样的倒排文件预处理
- C的预处理工作
- C语言的预处理
- C语言的预处理
- C语言的预处理
- c/c++的预处理
- C语言的预处理
- c程序的预处理
- O-C 常用的预处理器指令
- C语言预处理器的几个命令
- C语言可执行文件形成的过程
- 《C预处理》Linux内核中可变参数宏的用法
- AES加密中列混合的具体算法
- 图形学算法--DDA画直线
- 第二次面试,从何下手???
- 第三次面试,难遇伯乐啊!
- 用eclipse导入新工程
- Linux协议栈里用C的预处理器形成的链表
- OutputStreamWriter Writer PrintWriter
- gh0st去硬盘锁
- filter中的url-pattern
- 各大IT公司2012校园招聘笔试面试整理
- Android 下面介绍一句很方便的查找指令
- DM3730调试心得(2)
- 四极管:android源码结构
- birt报表从session中取参数