uip代码之#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
来源:互联网 发布:开封知言小学怎么样 编辑:程序博客网 时间:2024/06/07 10:48
在看uip代码的时候有段代码觉得挺精彩的。
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
struct uip_eth_hdr {
struct uip_eth_addr dest;
struct uip_eth_addr src;
u16_t type;
};
}
BUF->type == htons(UIP_ETHTYPE_IP) 这个是把读取的数字转成数据结构。
写了个代码测试
解释:取uip_buf第一个字符的地址 也就是数据的首地址,转换地址类型为struct uip_eth_hdr,并把地址宏定义为 buf。buf就可以像数据结构一样使用了。
//处理IP数据包(只有校验通过的IP包才会被接收)
if(BUF->type == htons(UIP_ETHTYPE_IP))//是否是IP包?
{
uip_arp_ipin();//去除以太网头结构,更新ARP表
uip_input(); //IP包处理
//当上面的函数执行后,如果需要发送数据,则全局变量 uip_len > 0
//需要发送的数据在uip_buf, 长度是uip_len (这是2个全局变量)
if(uip_len>0)//需要回应数据
{
uip_arp_out();//加以太网头结构,在主动连接时可能要构造ARP请求
tapdev_send();//发送数据到以太网
} }
BUF->type == htons(UIP_ETHTYPE_IP) 这个是把读取的数字转成数据结构。
写了个代码测试
#include <stdio.h>
#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
struct uip_eth_hdr {
char a[5];
char b[6];
};
char uip_buf[]="abcdefghijk";
void main()
{
printf("a is:%c",(BUF->b)[4]);
} 解释:取uip_buf第一个字符的地址 也就是数据的首地址,转换地址类型为struct uip_eth_hdr,并把地址宏定义为 buf。buf就可以像数据结构一样使用了。
- uip代码之#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
- linux kernel data struct : circular buf
- sizeof 之 buf[ ]
- UIP 之uip_conn
- uip之protothreads
- Linux int lstat(const char *path, struct stat *buf);
- uip
- ENC28J60以太网之uIP协议
- uip之UDP应用笔记
- struct与typedef struct|define与typedef
- char buf[sizeof "0x7fffffff"]
- linux之DMA-BUF API使用指南
- linux之DMA-BUF API使用指南
- 13.Nginx数据结构之缓冲区Buf
- 毕业设计之路(6)——uip
- 20130408-[转]ENC28J60以太网之uIP协议
- lwip/uip移植之二:S3C2440+DM9000A
- 单片机之UIP--TCP 校验和计算
- CodePage
- upx壳的一些简单脱壳,望大牛勿喷。
- aspack的简单脱壳,望大牛勿喷。
- 北斗ncpack的简单脱壳。
- Java进行FTP操作
- uip代码之#define BUF ((struct uip_eth_hdr *)&uip_buf[0])
- 数据挖掘数据集资源
- 查看mysql数据库字符集,设置mysql字符集为utf8
- 这家伙很懒什么都没留下
- u盘美化
- 事实胜于雄辩,经典中的经典,经久…
- 常用WordPress Ping列表
- 站长必备的131个高权重外链库(转…
- 推荐15款好用的JS开发工具