您的位置:首页 > 产品设计 > UI/UE

uip代码之#define BUF ((struct uip_eth_hdr *)&uip_buf[0])

2013-11-22 12:10 846 查看
在看uip代码的时候有段代码觉得挺精彩的。
#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;

};

//处理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就可以像数据结构一样使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: