tq_avg = router_ifinfo->bat_iv.tq_avg;
 
-               switch (atomic_read(&bat_priv->gw_sel_class)) {
+               switch (atomic_read(&bat_priv->gw.sel_class)) {
                case 1: /* fast connection */
                        tmp_gw_factor = tq_avg * tq_avg;
                        tmp_gw_factor *= gw_node->bandwidth_down;
 {
        struct batadv_gw_node *curr_gw;
 
-       if (atomic_read(&bat_priv->gw_mode) != BATADV_GW_MODE_CLIENT)
+       if (atomic_read(&bat_priv->gw.mode) != BATADV_GW_MODE_CLIENT)
                return;
 
        curr_gw = batadv_gw_get_selected_gw_node(bat_priv);
        struct batadv_neigh_ifinfo *router_ifinfo = NULL;
        char gw_addr[18] = { '\0' };
 
-       if (atomic_read(&bat_priv->gw_mode) != BATADV_GW_MODE_CLIENT)
+       if (atomic_read(&bat_priv->gw.mode) != BATADV_GW_MODE_CLIENT)
                goto out;
 
        curr_gw = batadv_gw_get_selected_gw_node(bat_priv);
        /* if the routing class is greater than 3 the value tells us how much
         * greater the TQ value of the new gateway must be
         */
-       if ((atomic_read(&bat_priv->gw_sel_class) > 3) &&
-           (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw_sel_class)))
+       if ((atomic_read(&bat_priv->gw.sel_class) > 3) &&
+           (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw.sel_class)))
                goto out;
 
        batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
        if (!gw_node)
                goto out;
 
-       switch (atomic_read(&bat_priv->gw_mode)) {
+       switch (atomic_read(&bat_priv->gw.mode)) {
        case BATADV_GW_MODE_SERVER:
                /* If we are a GW then we are our best GW. We can artificially
                 * set the tq towards ourself as the maximum value
 
        u32 down, up;
        char gw_mode;
 
-       gw_mode = atomic_read(&bat_priv->gw_mode);
+       gw_mode = atomic_read(&bat_priv->gw.mode);
 
        switch (gw_mode) {
        case BATADV_GW_MODE_OFF:
 
        /* restart gateway selection if fast or late switching was enabled */
        if ((gateway.bandwidth_down != 0) &&
-           (atomic_read(&bat_priv->gw_mode) == BATADV_GW_MODE_CLIENT) &&
-           (atomic_read(&bat_priv->gw_sel_class) > 2))
+           (atomic_read(&bat_priv->gw.mode) == BATADV_GW_MODE_CLIENT) &&
+           (atomic_read(&bat_priv->gw.sel_class) > 2))
                batadv_gw_check_election(bat_priv, orig);
 }
 
 
        if (batadv_compare_eth(ethhdr->h_dest, ectp_addr))
                goto dropped;
 
-       gw_mode = atomic_read(&bat_priv->gw_mode);
+       gw_mode = atomic_read(&bat_priv->gw.mode);
        if (is_multicast_ether_addr(ethhdr->h_dest)) {
                /* if gw mode is off, broadcast every packet */
                if (gw_mode == BATADV_GW_MODE_OFF) {
        atomic_set(&bat_priv->mcast.num_want_all_ipv4, 0);
        atomic_set(&bat_priv->mcast.num_want_all_ipv6, 0);
 #endif
-       atomic_set(&bat_priv->gw_mode, BATADV_GW_MODE_OFF);
-       atomic_set(&bat_priv->gw_sel_class, 20);
+       atomic_set(&bat_priv->gw.mode, BATADV_GW_MODE_OFF);
+       atomic_set(&bat_priv->gw.sel_class, 20);
        atomic_set(&bat_priv->gw.bandwidth_down, 100);
        atomic_set(&bat_priv->gw.bandwidth_up, 20);
        atomic_set(&bat_priv->orig_interval, 1000);
 
        struct batadv_priv *bat_priv = batadv_kobj_to_batpriv(kobj);
        int bytes_written;
 
-       switch (atomic_read(&bat_priv->gw_mode)) {
+       switch (atomic_read(&bat_priv->gw.mode)) {
        case BATADV_GW_MODE_CLIENT:
                bytes_written = sprintf(buff, "%s\n",
                                        BATADV_GW_MODE_CLIENT_NAME);
                return -EINVAL;
        }
 
-       if (atomic_read(&bat_priv->gw_mode) == gw_mode_tmp)
+       if (atomic_read(&bat_priv->gw.mode) == gw_mode_tmp)
                return count;
 
-       switch (atomic_read(&bat_priv->gw_mode)) {
+       switch (atomic_read(&bat_priv->gw.mode)) {
        case BATADV_GW_MODE_CLIENT:
                curr_gw_mode_str = BATADV_GW_MODE_CLIENT_NAME;
                break;
         * state
         */
        batadv_gw_check_client_stop(bat_priv);
-       atomic_set(&bat_priv->gw_mode, (unsigned int)gw_mode_tmp);
+       atomic_set(&bat_priv->gw.mode, (unsigned int)gw_mode_tmp);
        batadv_gw_tvlv_container_update(bat_priv);
        return count;
 }
                     2 * BATADV_JITTER, INT_MAX, NULL);
 BATADV_ATTR_SIF_UINT(hop_penalty, hop_penalty, S_IRUGO | S_IWUSR, 0,
                     BATADV_TQ_MAX_VALUE, NULL);
-BATADV_ATTR_SIF_UINT(gw_sel_class, gw_sel_class, S_IRUGO | S_IWUSR, 1,
+BATADV_ATTR_SIF_UINT(gw_sel_class, gw.sel_class, S_IRUGO | S_IWUSR, 1,
                     BATADV_TQ_MAX_VALUE, batadv_post_gw_reselect);
 static BATADV_ATTR(gw_bandwidth, S_IRUGO | S_IWUSR, batadv_show_gw_bwidth,
                   batadv_store_gw_bwidth);
 
  * @list: list of available gateway nodes
  * @list_lock: lock protecting gw_list & curr_gw
  * @curr_gw: pointer to currently selected gateway node
+ * @mode: gateway operation: off, client or server (see batadv_gw_modes)
+ * @sel_class: gateway selection class (applies if gw_mode client)
  * @bandwidth_down: advertised uplink download bandwidth (if gw_mode server)
  * @bandwidth_up: advertised uplink upload bandwidth (if gw_mode server)
  * @reselect: bool indicating a gateway re-selection is in progress
        struct hlist_head list;
        spinlock_t list_lock; /* protects gw_list & curr_gw */
        struct batadv_gw_node __rcu *curr_gw;  /* rcu protected pointer */
+       atomic_t mode;
+       atomic_t sel_class;
        atomic_t bandwidth_down;
        atomic_t bandwidth_up;
        atomic_t reselect;
  *  enabled
  * @multicast_mode: Enable or disable multicast optimizations on this node's
  *  sender/originating side
- * @gw_mode: gateway operation: off, client or server (see batadv_gw_modes)
- * @gw_sel_class: gateway selection class (applies if gw_mode client)
  * @orig_interval: OGM broadcast interval in milliseconds
  * @hop_penalty: penalty which will be applied to an OGM's tq-field on every hop
  * @log_level: configured log level (see batadv_dbg_level)
 #ifdef CONFIG_BATMAN_ADV_MCAST
        atomic_t multicast_mode;
 #endif
-       atomic_t gw_mode;
-       atomic_t gw_sel_class;
        atomic_t orig_interval;
        atomic_t hop_penalty;
 #ifdef CONFIG_BATMAN_ADV_DEBUG