]> Pileus Git - ~andy/linux/blobdiff - net/batman-adv/main.c
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
[~andy/linux] / net / batman-adv / main.c
index faba0f61ad535da90f8cd874ce5f901f771d4fb3..66ae135b9f273abdea581f2fc8eaa5ecb74254f0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2007-2013 B.A.T.M.A.N. contributors:
+/* Copyright (C) 2007-2014 B.A.T.M.A.N. contributors:
  *
  * Marek Lindner, Simon Wunderlich
  *
@@ -12,9 +12,7 @@
  * General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <linux/crc32c.h>
@@ -421,13 +419,23 @@ static void batadv_recv_handler_init(void)
        for (i = BATADV_UNICAST_MIN; i <= BATADV_UNICAST_MAX; i++)
                batadv_rx_handler[i] = batadv_recv_unhandled_unicast_packet;
 
-       /* compile time checks for struct member offsets */
-       BUILD_BUG_ON(offsetof(struct batadv_unicast_4addr_packet, src) != 10);
-       BUILD_BUG_ON(offsetof(struct batadv_unicast_packet, dest) != 4);
-       BUILD_BUG_ON(offsetof(struct batadv_unicast_tvlv_packet, dst) != 4);
-       BUILD_BUG_ON(offsetof(struct batadv_frag_packet, dest) != 4);
-       BUILD_BUG_ON(offsetof(struct batadv_icmp_packet, dst) != 4);
-       BUILD_BUG_ON(offsetof(struct batadv_icmp_packet_rr, dst) != 4);
+       /* compile time checks for sizes */
+       BUILD_BUG_ON(sizeof(struct batadv_bla_claim_dst) != 6);
+       BUILD_BUG_ON(sizeof(struct batadv_ogm_packet) != 24);
+       BUILD_BUG_ON(sizeof(struct batadv_icmp_header) != 20);
+       BUILD_BUG_ON(sizeof(struct batadv_icmp_packet) != 20);
+       BUILD_BUG_ON(sizeof(struct batadv_icmp_packet_rr) != 116);
+       BUILD_BUG_ON(sizeof(struct batadv_unicast_packet) != 10);
+       BUILD_BUG_ON(sizeof(struct batadv_unicast_4addr_packet) != 18);
+       BUILD_BUG_ON(sizeof(struct batadv_frag_packet) != 20);
+       BUILD_BUG_ON(sizeof(struct batadv_bcast_packet) != 14);
+       BUILD_BUG_ON(sizeof(struct batadv_coded_packet) != 46);
+       BUILD_BUG_ON(sizeof(struct batadv_unicast_tvlv_packet) != 20);
+       BUILD_BUG_ON(sizeof(struct batadv_tvlv_hdr) != 4);
+       BUILD_BUG_ON(sizeof(struct batadv_tvlv_gateway_data) != 8);
+       BUILD_BUG_ON(sizeof(struct batadv_tvlv_tt_vlan_data) != 8);
+       BUILD_BUG_ON(sizeof(struct batadv_tvlv_tt_change) != 12);
+       BUILD_BUG_ON(sizeof(struct batadv_tvlv_roam_adv) != 8);
 
        /* broadcast packet */
        batadv_rx_handler[BATADV_BCAST] = batadv_recv_bcast_packet;
@@ -1173,6 +1181,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;