Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76943
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-11 10:56
文章分类

全部博文(35)

文章存档

2016年(2)

2015年(33)

我的朋友

分类: 嵌入式

2015-04-29 10:40:40

实验1:dm9000过滤功能初步验证

一,实验目的:adm9000是否具备mac头的硬件过滤功能

                     bdm9000是否具备hash过滤,让广播通过,多播过滤

       

发送数据:

u_char mac_self[6]={0,0x11,0x25,0x48,0x29,0xe8};

u_char mac_other[6]={0,0x11,0x25,0x48,0x29,0xe9};

u_char broadcast[6]={0xff,0xff,0xff,0xff,0xff,0xff};

u_char multicast[6]={0x01,0x00,0x5e,0x00,0x00,0x00};

 

二,实验程序:

A模块四个数据包每隔两秒发送一次,循环发送,串口显示发送数据

B模块中断接受模块,串口显示接收数据

   switch(index_package)

    {

        case 0:

          at91_usart_send_frame (&USART2_DESC,mac_self,6);    /*串口显示*/

          send_packet(&NET0_DEF,mac_self,6);

          index_package++;

          break;

        case 1:

          at91_usart_send_frame (&USART2_DESC,mac_other,6);    /*串口显示*/

          send_packet(&NET0_DEF,mac_other,6);

          index_package++;

          break;

       case 2:

          at91_usart_send_frame (&USART2_DESC,broadcast,6);

          send_packet(&NET0_DEF,broadcast,6);

          index_package++;

          break;

       case 3:

          at91_usart_send_frame (&USART2_DESC,multicast,6);

          send_packet(&NET0_DEF,multicast,6);

          index_package = 0 ;

          break;

       default:

          break;

}

 

三,实验过程       

1,  开启混杂模式

iow(net_def, DM9000_RCR , RCR_PRMSC | RCR_RXEN);

接收数据:01 00 40 00 00 11 25 48 29 E8 00 01 00 40 00 00 11 25 48 29 E9 00 01 40 40 00 FF FF FF FF FF FF 00 01 40 40 00 01 00 5E 00 00 00 00

现象描述:全部通过

结论:混杂模式下可以接受所有数据

               

2,  关掉混杂 接收全部多播

iow(net_def, DM9000_RCR, RCR_ALL | RCR_RXEN);

   接收数据:01 00 40 00 00 11 25 48 29 E8 00 01 40 40 00 FF FF FF FF FF FF 00 01 40 40 00 01 00 5E 00 00 00 00

   现象描述:自己mac进来,他人mac过滤,广播进来,多播进来

   结论:初步发现,只要关掉混杂,就能实现他人mac头过滤,与网卡正常特性相符(需要大量其它mac头数据包验证)                              

       

3,  关掉混杂 关掉接收全部多播

iow(net_def, DM9000_RCR,  RCR_RXEN);

   接收数据:01 00 40 00 00 11 25 48 29 E8 00 01 40 40 00 FF FF FF FF FF FF 00 01 00 40 00 00 11 25 48 29 E8 00 01 40 40 00 FF FF FF FF FF FF 00

   现象描述:自己mac进来,他人mac过滤,广播进来,多播过滤

   结论:初步发现,dm9000可以实现目标效果(需要大量其它mac头数据包验证)

       

4,  去除hash过滤

iow(net_def, DM9000_RCR,  RCR_RXEN);

填写哈希表程序

//Clear Hash Table

for (i = 0; i < 4; i++)

hash_table[i] = 0x0;

 

// broadcast address

hash_table[3] = 0x8000;

 

// Write the hash table to MAC MD table

for (i = 0, oft = DM9000_MAR; i < 4; i++)

{

         iow(net_def, oft++, hash_table[i] & 0xff);

         iow(net_def, oft++, (hash_table[i] >> 8) & 0xff);

}

 

接收数据:01 00 40 00 00 11 25 48 29 E8 00 01 00 40 00 00 11 25 48 29 E8 00 01 00 40 00 00 11 25 48 29 E8 00 01 00 40 00 00 11 25 48 29 E8 00

    现象描述:自己mac进来,他人mac过滤,广播过滤,多播过滤

    结论:初步发现,dm9000通过hash表实现多播过滤(需要大量其它多播包验证)

            

5,  使能pass runt packet

iow(net_def, DM9000_RCR,RCR_RUNT | RCR_RXEN);

    接收数据:01 00 40 00 00 11 25 48 29 E8 00 01 40 40 00 FF FF FF FF FF FF 00 01 00 40 00 00 11 25 48 29 E8 00 01 40 40 00 FF FF FF FF FF FF 00

    现象描述:自己mac进来,他人mac过滤,广播过滤,多播过滤

    结论:没有影响,不知道pass runt packet register的作用

 

阅读(1228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~