batman-adv: create helper function to get AP isolation status
The AP isolation status may be evaluated in different spots. Create an helper function to avoid code duplication. Signed-off-by: Antonio Quartulli <antonio@open-mesh.com> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
This commit is contained in:
parent
2d2fcc2a3f
commit
eceb22ae0b
@ -1171,6 +1171,32 @@ unsigned short batadv_get_vid(struct sk_buff *skb, size_t header_len)
|
||||
return vid;
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_vlan_ap_isola_get - return the AP isolation status for the given vlan
|
||||
* @bat_priv: the bat priv with all the soft interface information
|
||||
* @vid: the VLAN identifier for which the AP isolation attributed as to be
|
||||
* looked up
|
||||
*
|
||||
* Returns true if AP isolation is on for the VLAN idenfied by vid, false
|
||||
* otherwise
|
||||
*/
|
||||
bool batadv_vlan_ap_isola_get(struct batadv_priv *bat_priv, unsigned short vid)
|
||||
{
|
||||
bool ap_isolation_enabled = false;
|
||||
struct batadv_softif_vlan *vlan;
|
||||
|
||||
/* if the AP isolation is requested on a VLAN, then check for its
|
||||
* setting in the proper VLAN private data structure
|
||||
*/
|
||||
vlan = batadv_softif_vlan_get(bat_priv, vid);
|
||||
if (vlan) {
|
||||
ap_isolation_enabled = atomic_read(&vlan->ap_isolation);
|
||||
batadv_softif_vlan_free_ref(vlan);
|
||||
}
|
||||
|
||||
return ap_isolation_enabled;
|
||||
}
|
||||
|
||||
static int batadv_param_set_ra(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
struct batadv_algo_ops *bat_algo_ops;
|
||||
|
@ -369,5 +369,6 @@ void batadv_tvlv_unicast_send(struct batadv_priv *bat_priv, uint8_t *src,
|
||||
uint8_t *dst, uint8_t type, uint8_t version,
|
||||
void *tvlv_value, uint16_t tvlv_value_len);
|
||||
unsigned short batadv_get_vid(struct sk_buff *skb, size_t header_len);
|
||||
bool batadv_vlan_ap_isola_get(struct batadv_priv *bat_priv, unsigned short vid);
|
||||
|
||||
#endif /* _NET_BATMAN_ADV_MAIN_H_ */
|
||||
|
@ -1900,19 +1900,8 @@ struct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv,
|
||||
struct batadv_tt_global_entry *tt_global_entry = NULL;
|
||||
struct batadv_orig_node *orig_node = NULL;
|
||||
struct batadv_tt_orig_list_entry *best_entry;
|
||||
bool ap_isolation_enabled = false;
|
||||
struct batadv_softif_vlan *vlan;
|
||||
|
||||
/* if the AP isolation is requested on a VLAN, then check for its
|
||||
* setting in the proper VLAN private data structure
|
||||
*/
|
||||
vlan = batadv_softif_vlan_get(bat_priv, vid);
|
||||
if (vlan) {
|
||||
ap_isolation_enabled = atomic_read(&vlan->ap_isolation);
|
||||
batadv_softif_vlan_free_ref(vlan);
|
||||
}
|
||||
|
||||
if (src && ap_isolation_enabled) {
|
||||
if (src && batadv_vlan_ap_isola_get(bat_priv, vid)) {
|
||||
tt_local_entry = batadv_tt_local_hash_find(bat_priv, src, vid);
|
||||
if (!tt_local_entry ||
|
||||
(tt_local_entry->common.flags & BATADV_TT_CLIENT_PENDING))
|
||||
|
Loading…
Reference in New Issue
Block a user