From 966f054a639f07fb76db8ae00e55bac60ee9f727 Mon Sep 17 00:00:00 2001 From: asxalex Date: Wed, 30 Oct 2024 10:30:58 +0800 Subject: [PATCH] BROADCAST ip to BROADCAST_MAC --- src/network/arp.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/network/arp.rs b/src/network/arp.rs index cfd5785..8569b24 100644 --- a/src/network/arp.rs +++ b/src/network/arp.rs @@ -171,6 +171,15 @@ impl ArpInfo { if ip == BROADCAST_IPADDR { return (BROADCAST_MAC, ip, false); } + let edge = get_edge(); + let netbit = edge.device_config.get_net_bit(); + let host_netmask = net_bit_len_to_mask(netbit); + let host_netmask_reverse = !host_netmask; + + if (ip & host_netmask_reverse) == host_netmask_reverse { + return (BROADCAST_MAC, ip, false); + } + let first_ip = (ip >> 24) as u8 & 0xff; if first_ip >= 224 && first_ip <= 239 { let mut multi = MULTICAST_MAC; @@ -180,10 +189,8 @@ impl ArpInfo { return (multi, ip, false); } let mut target_ip = 0; - let edge = get_edge(); let host_ip = edge.device_config.get_ip(); - let host_netmask = net_bit_len_to_mask(edge.device_config.get_net_bit()); if (ip & host_netmask) == (host_ip & host_netmask) { target_ip = ip;