batman-adv: create helper function to get AP isolation status
authorAntonio Quartulli <antonio@open-mesh.com>
Sat, 16 Nov 2013 11:03:51 +0000 (12:03 +0100)
committerAntonio Quartulli <antonio@meshcoding.com>
Wed, 8 Jan 2014 19:49:45 +0000 (20:49 +0100)
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>
net/batman-adv/main.c
net/batman-adv/main.h
net/batman-adv/translation-table.c

index 8abda424aae311aae6ccd689e6f1c18199af4045..945e441b579dfd154d84328f93fba38c6082f0a6 100644 (file)
@@ -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;
index fa9edbf793232c59f27ec54c865e35162739a8df..a468760b11ea3a20581d3db34bae6855f692958c 100644 (file)
@@ -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_ */
index a874d08f9f0a47fdf1caffcf06930a63f471a778..1337b6925f52afb811c824dccf6e5858e9c04b3d 100644 (file)
@@ -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))