diff options
Diffstat (limited to 'net/batman-adv/translation-table.c')
-rw-r--r-- | net/batman-adv/translation-table.c | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index 7abee19567e9..5e89deeb9542 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c | |||
@@ -385,25 +385,19 @@ static void batadv_tt_prepare_packet_buff(struct batadv_priv *bat_priv, | |||
385 | int *packet_buff_len, | 385 | int *packet_buff_len, |
386 | int min_packet_len) | 386 | int min_packet_len) |
387 | { | 387 | { |
388 | struct batadv_hard_iface *primary_if; | ||
389 | int req_len; | 388 | int req_len; |
390 | 389 | ||
391 | primary_if = batadv_primary_if_get_selected(bat_priv); | ||
392 | |||
393 | req_len = min_packet_len; | 390 | req_len = min_packet_len; |
394 | req_len += batadv_tt_len(atomic_read(&bat_priv->tt.local_changes)); | 391 | req_len += batadv_tt_len(atomic_read(&bat_priv->tt.local_changes)); |
395 | 392 | ||
396 | /* if we have too many changes for one packet don't send any | 393 | /* if we have too many changes for one packet don't send any |
397 | * and wait for the tt table request which will be fragmented | 394 | * and wait for the tt table request which will be fragmented |
398 | */ | 395 | */ |
399 | if ((!primary_if) || (req_len > primary_if->soft_iface->mtu)) | 396 | if (req_len > bat_priv->soft_iface->mtu) |
400 | req_len = min_packet_len; | 397 | req_len = min_packet_len; |
401 | 398 | ||
402 | batadv_tt_realloc_packet_buff(packet_buff, packet_buff_len, | 399 | batadv_tt_realloc_packet_buff(packet_buff, packet_buff_len, |
403 | min_packet_len, req_len); | 400 | min_packet_len, req_len); |
404 | |||
405 | if (primary_if) | ||
406 | batadv_hardif_free_ref(primary_if); | ||
407 | } | 401 | } |
408 | 402 | ||
409 | static int batadv_tt_changes_fill_buff(struct batadv_priv *bat_priv, | 403 | static int batadv_tt_changes_fill_buff(struct batadv_priv *bat_priv, |
@@ -908,7 +902,7 @@ out_remove: | |||
908 | /* remove address from local hash if present */ | 902 | /* remove address from local hash if present */ |
909 | local_flags = batadv_tt_local_remove(bat_priv, tt_addr, | 903 | local_flags = batadv_tt_local_remove(bat_priv, tt_addr, |
910 | "global tt received", | 904 | "global tt received", |
911 | !!(flags & BATADV_TT_CLIENT_ROAM)); | 905 | flags & BATADV_TT_CLIENT_ROAM); |
912 | tt_global_entry->common.flags |= local_flags & BATADV_TT_CLIENT_WIFI; | 906 | tt_global_entry->common.flags |= local_flags & BATADV_TT_CLIENT_WIFI; |
913 | 907 | ||
914 | if (!(flags & BATADV_TT_CLIENT_ROAM)) | 908 | if (!(flags & BATADV_TT_CLIENT_ROAM)) |
@@ -1580,7 +1574,7 @@ static int batadv_tt_global_valid(const void *entry_ptr, | |||
1580 | static struct sk_buff * | 1574 | static struct sk_buff * |
1581 | batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn, | 1575 | batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn, |
1582 | struct batadv_hashtable *hash, | 1576 | struct batadv_hashtable *hash, |
1583 | struct batadv_hard_iface *primary_if, | 1577 | struct batadv_priv *bat_priv, |
1584 | int (*valid_cb)(const void *, const void *), | 1578 | int (*valid_cb)(const void *, const void *), |
1585 | void *cb_data) | 1579 | void *cb_data) |
1586 | { | 1580 | { |
@@ -1594,8 +1588,8 @@ batadv_tt_response_fill_table(uint16_t tt_len, uint8_t ttvn, | |||
1594 | uint32_t i; | 1588 | uint32_t i; |
1595 | size_t len; | 1589 | size_t len; |
1596 | 1590 | ||
1597 | if (tt_query_size + tt_len > primary_if->soft_iface->mtu) { | 1591 | if (tt_query_size + tt_len > bat_priv->soft_iface->mtu) { |
1598 | tt_len = primary_if->soft_iface->mtu - tt_query_size; | 1592 | tt_len = bat_priv->soft_iface->mtu - tt_query_size; |
1599 | tt_len -= tt_len % sizeof(struct batadv_tt_change); | 1593 | tt_len -= tt_len % sizeof(struct batadv_tt_change); |
1600 | } | 1594 | } |
1601 | tt_tot = tt_len / sizeof(struct batadv_tt_change); | 1595 | tt_tot = tt_len / sizeof(struct batadv_tt_change); |
@@ -1715,7 +1709,6 @@ batadv_send_other_tt_response(struct batadv_priv *bat_priv, | |||
1715 | { | 1709 | { |
1716 | struct batadv_orig_node *req_dst_orig_node; | 1710 | struct batadv_orig_node *req_dst_orig_node; |
1717 | struct batadv_orig_node *res_dst_orig_node = NULL; | 1711 | struct batadv_orig_node *res_dst_orig_node = NULL; |
1718 | struct batadv_hard_iface *primary_if = NULL; | ||
1719 | uint8_t orig_ttvn, req_ttvn, ttvn; | 1712 | uint8_t orig_ttvn, req_ttvn, ttvn; |
1720 | int ret = false; | 1713 | int ret = false; |
1721 | unsigned char *tt_buff; | 1714 | unsigned char *tt_buff; |
@@ -1740,10 +1733,6 @@ batadv_send_other_tt_response(struct batadv_priv *bat_priv, | |||
1740 | if (!res_dst_orig_node) | 1733 | if (!res_dst_orig_node) |
1741 | goto out; | 1734 | goto out; |
1742 | 1735 | ||
1743 | primary_if = batadv_primary_if_get_selected(bat_priv); | ||
1744 | if (!primary_if) | ||
1745 | goto out; | ||
1746 | |||
1747 | orig_ttvn = (uint8_t)atomic_read(&req_dst_orig_node->last_ttvn); | 1736 | orig_ttvn = (uint8_t)atomic_read(&req_dst_orig_node->last_ttvn); |
1748 | req_ttvn = tt_request->ttvn; | 1737 | req_ttvn = tt_request->ttvn; |
1749 | 1738 | ||
@@ -1791,7 +1780,7 @@ batadv_send_other_tt_response(struct batadv_priv *bat_priv, | |||
1791 | 1780 | ||
1792 | skb = batadv_tt_response_fill_table(tt_len, ttvn, | 1781 | skb = batadv_tt_response_fill_table(tt_len, ttvn, |
1793 | bat_priv->tt.global_hash, | 1782 | bat_priv->tt.global_hash, |
1794 | primary_if, | 1783 | bat_priv, |
1795 | batadv_tt_global_valid, | 1784 | batadv_tt_global_valid, |
1796 | req_dst_orig_node); | 1785 | req_dst_orig_node); |
1797 | if (!skb) | 1786 | if (!skb) |
@@ -1828,8 +1817,6 @@ out: | |||
1828 | batadv_orig_node_free_ref(res_dst_orig_node); | 1817 | batadv_orig_node_free_ref(res_dst_orig_node); |
1829 | if (req_dst_orig_node) | 1818 | if (req_dst_orig_node) |
1830 | batadv_orig_node_free_ref(req_dst_orig_node); | 1819 | batadv_orig_node_free_ref(req_dst_orig_node); |
1831 | if (primary_if) | ||
1832 | batadv_hardif_free_ref(primary_if); | ||
1833 | if (!ret) | 1820 | if (!ret) |
1834 | kfree_skb(skb); | 1821 | kfree_skb(skb); |
1835 | return ret; | 1822 | return ret; |
@@ -1907,7 +1894,7 @@ batadv_send_my_tt_response(struct batadv_priv *bat_priv, | |||
1907 | 1894 | ||
1908 | skb = batadv_tt_response_fill_table(tt_len, ttvn, | 1895 | skb = batadv_tt_response_fill_table(tt_len, ttvn, |
1909 | bat_priv->tt.local_hash, | 1896 | bat_priv->tt.local_hash, |
1910 | primary_if, | 1897 | bat_priv, |
1911 | batadv_tt_local_valid_entry, | 1898 | batadv_tt_local_valid_entry, |
1912 | NULL); | 1899 | NULL); |
1913 | if (!skb) | 1900 | if (!skb) |
@@ -2528,7 +2515,7 @@ bool batadv_tt_global_client_is_roaming(struct batadv_priv *bat_priv, | |||
2528 | if (!tt_global_entry) | 2515 | if (!tt_global_entry) |
2529 | goto out; | 2516 | goto out; |
2530 | 2517 | ||
2531 | ret = !!(tt_global_entry->common.flags & BATADV_TT_CLIENT_ROAM); | 2518 | ret = tt_global_entry->common.flags & BATADV_TT_CLIENT_ROAM; |
2532 | batadv_tt_global_entry_free_ref(tt_global_entry); | 2519 | batadv_tt_global_entry_free_ref(tt_global_entry); |
2533 | out: | 2520 | out: |
2534 | return ret; | 2521 | return ret; |