分类: 嵌入式
2015-04-29 10:40:40
实验1:dm9000过滤功能初步验证
一,实验目的:a,dm9000是否具备mac头的硬件过滤功能
b,dm9000是否具备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的作用