|
@@ -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)
|