@@ -718,7 +718,6 @@ void net_arp_update(struct net_if *iface,
718
718
719
719
static inline struct net_pkt * arp_prepare_reply (struct net_if * iface ,
720
720
struct net_pkt * req ,
721
- struct net_eth_hdr * eth_query ,
722
721
struct net_eth_addr * dst_addr )
723
722
{
724
723
struct net_arp_hdr * hdr , * query ;
@@ -780,18 +779,17 @@ static bool arp_hdr_check(struct net_arp_hdr *arp_hdr)
780
779
}
781
780
782
781
enum net_verdict net_arp_input (struct net_pkt * pkt ,
783
- struct net_eth_hdr * eth_hdr )
782
+ struct net_eth_addr * src ,
783
+ struct net_eth_addr * dst )
784
784
{
785
785
struct net_eth_addr * dst_hw_addr ;
786
786
struct net_arp_hdr * arp_hdr ;
787
787
struct net_pkt * reply ;
788
788
struct in_addr * addr ;
789
789
790
- if (net_pkt_get_len (pkt ) < (sizeof (struct net_arp_hdr ) -
791
- (net_pkt_ip_data (pkt ) - (uint8_t * )eth_hdr ))) {
792
- NET_DBG ("Invalid ARP header (len %zu, min %zu bytes) %p" ,
793
- net_pkt_get_len (pkt ), sizeof (struct net_arp_hdr ) -
794
- (net_pkt_ip_data (pkt ) - (uint8_t * )eth_hdr ), pkt );
790
+ if (net_pkt_get_len (pkt ) < sizeof (struct net_arp_hdr )) {
791
+ NET_DBG ("DROP: Too short ARP msg (%zu bytes, min %zu bytes)" ,
792
+ net_pkt_get_len (pkt ), sizeof (struct net_arp_hdr ));
795
793
return NET_DROP ;
796
794
}
797
795
@@ -812,7 +810,7 @@ enum net_verdict net_arp_input(struct net_pkt *pkt,
812
810
}
813
811
814
812
if (IS_ENABLED (CONFIG_NET_ARP_GRATUITOUS )) {
815
- if (net_eth_is_addr_broadcast (& eth_hdr -> dst ) &&
813
+ if (net_eth_is_addr_broadcast (dst ) &&
816
814
(net_eth_is_addr_broadcast (& arp_hdr -> dst_hwaddr ) ||
817
815
net_eth_is_addr_all_zeroes (& arp_hdr -> dst_hwaddr )) &&
818
816
net_ipv4_addr_cmp_raw (arp_hdr -> dst_ipaddr ,
@@ -831,7 +829,7 @@ enum net_verdict net_arp_input(struct net_pkt *pkt,
831
829
/* Discard ARP request if Ethernet address is broadcast
832
830
* and Source IP address is Multicast address.
833
831
*/
834
- if (memcmp (& eth_hdr -> dst , net_eth_broadcast_addr (),
832
+ if (memcmp (dst , net_eth_broadcast_addr (),
835
833
sizeof (struct net_eth_addr )) == 0 &&
836
834
net_ipv4_is_addr_mcast ((struct in_addr * )arp_hdr -> src_ipaddr )) {
837
835
NET_DBG ("DROP: eth addr is bcast, src addr is mcast" );
@@ -870,12 +868,11 @@ enum net_verdict net_arp_input(struct net_pkt *pkt,
870
868
871
869
dst_hw_addr = & arp_hdr -> src_hwaddr ;
872
870
} else {
873
- dst_hw_addr = & eth_hdr -> src ;
871
+ dst_hw_addr = src ;
874
872
}
875
873
876
874
/* Send reply */
877
- reply = arp_prepare_reply (net_pkt_iface (pkt ), pkt , eth_hdr ,
878
- dst_hw_addr );
875
+ reply = arp_prepare_reply (net_pkt_iface (pkt ), pkt , dst_hw_addr );
879
876
if (reply ) {
880
877
net_if_queue_tx (net_pkt_iface (reply ), reply );
881
878
} else {
@@ -1022,23 +1019,23 @@ static enum net_verdict arp_recv(struct net_if *iface,
1022
1019
uint16_t ptype ,
1023
1020
struct net_pkt * pkt )
1024
1021
{
1025
- struct net_eth_hdr * hdr = NET_ETH_HDR (pkt );
1026
-
1027
1022
ARG_UNUSED (iface );
1028
1023
ARG_UNUSED (ptype );
1029
1024
1030
1025
net_pkt_set_family (pkt , AF_INET );
1031
1026
1032
1027
NET_DBG ("ARP packet from %s received" ,
1033
- net_sprint_ll_addr (( uint8_t * ) hdr -> src . addr ,
1028
+ net_sprint_ll_addr (net_pkt_lladdr_src ( pkt ) -> addr ,
1034
1029
sizeof (struct net_eth_addr )));
1035
1030
1036
1031
if (IS_ENABLED (CONFIG_NET_IPV4_ACD ) &&
1037
1032
net_ipv4_acd_input (iface , pkt ) == NET_DROP ) {
1038
1033
return NET_DROP ;
1039
1034
}
1040
1035
1041
- return net_arp_input (pkt , hdr );
1036
+ return net_arp_input (pkt ,
1037
+ (struct net_eth_addr * )net_pkt_lladdr_src (pkt )-> addr ,
1038
+ (struct net_eth_addr * )net_pkt_lladdr_dst (pkt )-> addr );
1042
1039
}
1043
1040
1044
1041
ETH_NET_L3_REGISTER (ARP , NET_ETH_PTYPE_ARP , arp_recv );
0 commit comments