mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 09:13:55 +08:00
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;
|
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)
|
static int batadv_param_set_ra(const char *val, const struct kernel_param *kp)
|
||||||
{
|
{
|
||||||
struct batadv_algo_ops *bat_algo_ops;
|
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,
|
uint8_t *dst, uint8_t type, uint8_t version,
|
||||||
void *tvlv_value, uint16_t tvlv_value_len);
|
void *tvlv_value, uint16_t tvlv_value_len);
|
||||||
unsigned short batadv_get_vid(struct sk_buff *skb, size_t header_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_ */
|
#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_tt_global_entry *tt_global_entry = NULL;
|
||||||
struct batadv_orig_node *orig_node = NULL;
|
struct batadv_orig_node *orig_node = NULL;
|
||||||
struct batadv_tt_orig_list_entry *best_entry;
|
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
|
if (src && batadv_vlan_ap_isola_get(bat_priv, vid)) {
|
||||||
* 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) {
|
|
||||||
tt_local_entry = batadv_tt_local_hash_find(bat_priv, src, vid);
|
tt_local_entry = batadv_tt_local_hash_find(bat_priv, src, vid);
|
||||||
if (!tt_local_entry ||
|
if (!tt_local_entry ||
|
||||||
(tt_local_entry->common.flags & BATADV_TT_CLIENT_PENDING))
|
(tt_local_entry->common.flags & BATADV_TT_CLIENT_PENDING))
|
||||||
|
Loading…
Reference in New Issue
Block a user