Stefan Schuermans commited on 2012-04-04 22:24:19
Showing 1 changed files, with 27 additions and 1 deletions.
| ... | ... |
@@ -110,7 +110,12 @@ void arp_recv(void *ptr, unsigned int sz) |
| 110 | 110 |
return; |
| 111 | 111 |
|
| 112 | 112 |
// source MAC is broadcast MAC -> broken packet / attac -> get lost |
| 113 |
- if (mac_eq(arp_pack->arp_hdr.src_mac, "\xFF\xFF\xFF\xFF\xFF\xFF")) |
|
| 113 |
+ if (arp_pack->arp_hdr.src_mac[0] == 0xFF && |
|
| 114 |
+ arp_pack->arp_hdr.src_mac[1] == 0xFF && |
|
| 115 |
+ arp_pack->arp_hdr.src_mac[2] == 0xFF && |
|
| 116 |
+ arp_pack->arp_hdr.src_mac[3] == 0xFF && |
|
| 117 |
+ arp_pack->arp_hdr.src_mac[4] == 0xFF && |
|
| 118 |
+ arp_pack->arp_hdr.src_mac[5] == 0xFF) |
|
| 114 | 119 |
return; |
| 115 | 120 |
|
| 116 | 121 |
// ARP request for own IP address |
| ... | ... |
@@ -222,6 +227,27 @@ void arp_store(unsigned char ip[4], unsigned char mac[6]) |
| 222 | 227 |
{
|
| 223 | 228 |
unsigned int i, j; |
| 224 | 229 |
|
| 230 |
+ // do not store broadcast MAC |
|
| 231 |
+ if (mac[0] == 0xFF && mac[1] == 0xFF && mac[2] == 0xFF && |
|
| 232 |
+ mac[3] == 0xFF && mac[4] == 0xFF && mac[5] == 0xFF) |
|
| 233 |
+ return; |
|
| 234 |
+ |
|
| 235 |
+ // do not store link-local broadcast IP |
|
| 236 |
+ if (ip[0] == 0xFF && ip[1] == 0xFF && ip[2] == 0xFF && ip[3] == 0xFF) |
|
| 237 |
+ return; |
|
| 238 |
+ // do not store non-local IPs |
|
| 239 |
+ if ((ip[0] & config_ip.mask[0]) != (config_ip.ip[0] & config_ip.mask[0]) || |
|
| 240 |
+ (ip[1] & config_ip.mask[1]) != (config_ip.ip[1] & config_ip.mask[1]) || |
|
| 241 |
+ (ip[2] & config_ip.mask[2]) != (config_ip.ip[2] & config_ip.mask[2]) || |
|
| 242 |
+ (ip[3] & config_ip.mask[3]) != (config_ip.ip[3] & config_ip.mask[3])) |
|
| 243 |
+ return; |
|
| 244 |
+ // do not store broadcast IP |
|
| 245 |
+ if (ip[0] == (config_ip.ip[0] | ~config_ip.mask[0]) && |
|
| 246 |
+ ip[1] == (config_ip.ip[1] | ~config_ip.mask[1]) && |
|
| 247 |
+ ip[2] == (config_ip.ip[2] | ~config_ip.mask[2]) && |
|
| 248 |
+ ip[3] == (config_ip.ip[3] | ~config_ip.mask[3])) |
|
| 249 |
+ return; |
|
| 250 |
+ |
|
| 225 | 251 |
// search IP in ARP table |
| 226 | 252 |
for (i = 0; i < count(arp_tab); ++i) {
|
| 227 | 253 |
if ((arp_tab[i].flags & ARP_TAB_FLAG_IN_USE) && |
| 228 | 254 |