@ -258,7 +258,7 @@ static int batadv_recv_my_icmp_packet(struct batadv_priv *bat_priv,
icmp_packet = ( struct batadv_icmp_packet_rr * ) skb - > data ;
/* add data to device queue */
if ( icmp_packet - > msg_type ! = BATADV_ECHO_REQUEST ) {
if ( icmp_packet - > icmph . msg_type ! = BATADV_ECHO_REQUEST ) {
batadv_socket_receive_packet ( icmp_packet , icmp_len ) ;
goto out ;
}
@ -269,7 +269,7 @@ static int batadv_recv_my_icmp_packet(struct batadv_priv *bat_priv,
/* answer echo request (ping) */
/* get routing information */
orig_node = batadv_orig_hash_find ( bat_priv , icmp_packet - > orig ) ;
orig_node = batadv_orig_hash_find ( bat_priv , icmp_packet - > icmph . orig ) ;
if ( ! orig_node )
goto out ;
@ -279,10 +279,11 @@ static int batadv_recv_my_icmp_packet(struct batadv_priv *bat_priv,
icmp_packet = ( struct batadv_icmp_packet_rr * ) skb - > data ;
memcpy ( icmp_packet - > dst , icmp_packet - > orig , ETH_ALEN ) ;
memcpy ( icmp_packet - > orig , primary_if - > net_dev - > dev_addr , ETH_ALEN ) ;
icmp_packet - > msg_type = BATADV_ECHO_REPLY ;
icmp_packet - > header . ttl = BATADV_TTL ;
memcpy ( icmp_packet - > icmph . dst , icmp_packet - > icmph . orig , ETH_ALEN ) ;
memcpy ( icmp_packet - > icmph . orig , primary_if - > net_dev - > dev_addr ,
ETH_ALEN ) ;
icmp_packet - > icmph . msg_type = BATADV_ECHO_REPLY ;
icmp_packet - > icmph . header . ttl = BATADV_TTL ;
if ( batadv_send_skb_to_orig ( skb , orig_node , NULL ) ! = NET_XMIT_DROP )
ret = NET_RX_SUCCESS ;
@ -306,9 +307,9 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
icmp_packet = ( struct batadv_icmp_packet * ) skb - > data ;
/* send TTL exceeded if packet is an echo request (traceroute) */
if ( icmp_packet - > msg_type ! = BATADV_ECHO_REQUEST ) {
if ( icmp_packet - > icmph . msg_type ! = BATADV_ECHO_REQUEST ) {
pr_debug ( " Warning - can't forward icmp packet from %pM to %pM: ttl exceeded \n " ,
icmp_packet - > orig , icmp_packet - > dst ) ;
icmp_packet - > icmph . orig , icmp_packet - > icmph . dst ) ;
goto out ;
}
@ -317,7 +318,7 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
goto out ;
/* get routing information */
orig_node = batadv_orig_hash_find ( bat_priv , icmp_packet - > orig ) ;
orig_node = batadv_orig_hash_find ( bat_priv , icmp_packet - > icmph . orig ) ;
if ( ! orig_node )
goto out ;
@ -327,10 +328,11 @@ static int batadv_recv_icmp_ttl_exceeded(struct batadv_priv *bat_priv,
icmp_packet = ( struct batadv_icmp_packet * ) skb - > data ;
memcpy ( icmp_packet - > dst , icmp_packet - > orig , ETH_ALEN ) ;
memcpy ( icmp_packet - > orig , primary_if - > net_dev - > dev_addr , ETH_ALEN ) ;
icmp_packet - > msg_type = BATADV_TTL_EXCEEDED ;
icmp_packet - > header . ttl = BATADV_TTL ;
memcpy ( icmp_packet - > icmph . dst , icmp_packet - > icmph . orig , ETH_ALEN ) ;
memcpy ( icmp_packet - > icmph . orig , primary_if - > net_dev - > dev_addr ,
ETH_ALEN ) ;
icmp_packet - > icmph . msg_type = BATADV_TTL_EXCEEDED ;
icmp_packet - > icmph . header . ttl = BATADV_TTL ;
if ( batadv_send_skb_to_orig ( skb , orig_node , NULL ) ! = NET_XMIT_DROP )
ret = NET_RX_SUCCESS ;
@ -379,8 +381,8 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
icmp_packet = ( struct batadv_icmp_packet_rr * ) skb - > data ;
/* add record route information if not full */
if ( ( icmp_packet - > msg_type = = BATADV_ECHO_REPLY | |
icmp_packet - > msg_type = = BATADV_ECHO_REQUEST ) & &
if ( ( icmp_packet - > icmph . msg_type = = BATADV_ECHO_REPLY | |
icmp_packet - > icmph . msg_type = = BATADV_ECHO_REQUEST ) & &
( hdr_size = = sizeof ( struct batadv_icmp_packet_rr ) ) & &
( icmp_packet - > rr_cur < BATADV_RR_LEN ) ) {
memcpy ( & ( icmp_packet - > rr [ icmp_packet - > rr_cur ] ) ,
@ -389,15 +391,15 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
}
/* packet for me */
if ( batadv_is_my_mac ( bat_priv , icmp_packet - > dst ) )
if ( batadv_is_my_mac ( bat_priv , icmp_packet - > icmph . dst ) )
return batadv_recv_my_icmp_packet ( bat_priv , skb , hdr_size ) ;
/* TTL exceeded */
if ( icmp_packet - > header . ttl < 2 )
if ( icmp_packet - > icmph . header . ttl < 2 )
return batadv_recv_icmp_ttl_exceeded ( bat_priv , skb ) ;
/* get routing information */
orig_node = batadv_orig_hash_find ( bat_priv , icmp_packet - > dst ) ;
orig_node = batadv_orig_hash_find ( bat_priv , icmp_packet - > icmph . dst ) ;
if ( ! orig_node )
goto out ;
@ -408,7 +410,7 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
icmp_packet = ( struct batadv_icmp_packet_rr * ) skb - > data ;
/* decrement ttl */
icmp_packet - > header . ttl - - ;
icmp_packet - > icmph . header . ttl - - ;
/* route it */
if ( batadv_send_skb_to_orig ( skb , orig_node , recv_if ) ! = NET_XMIT_DROP )