From patchwork Sun Oct 24 01:14:18 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Lindner X-Patchwork-Id: 469 Return-Path: Received: from nm5-vm0.bullet.mail.ukl.yahoo.com (nm5-vm0.bullet.mail.ukl.yahoo.com [217.146.183.232]) by open-mesh.org (Postfix) with SMTP id 2B723154540 for ; Sun, 24 Oct 2010 03:16:25 +0200 (CEST) Received: from [217.146.183.213] by nm5.bullet.mail.ukl.yahoo.com with NNFMP; 24 Oct 2010 01:16:24 -0000 Received: from [217.146.183.167] by tm6.bullet.mail.ukl.yahoo.com with NNFMP; 24 Oct 2010 01:16:23 -0000 Received: from [127.0.0.1] by omp1008.mail.ukl.yahoo.com with NNFMP; 24 Oct 2010 01:16:23 -0000 X-Yahoo-Newman-Id: 929917.43541.bm@omp1008.mail.ukl.yahoo.com Received: (qmail 2153 invoked from network); 24 Oct 2010 01:16:23 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.de; h=DKIM-Signature:Received:X-Yahoo-SMTP:X-YMail-OSG:X-Yahoo-Newman-Property:From:To:Cc:Subject:Date:Message-Id:X-Mailer:In-Reply-To:References; b=YT86il0eHz7iADzQpD8c5GLwTp7j3mEicbX6NxYHBW2KkuC5ysVPai669KXWkGmWGKaWEqX0EiwlJ+WwQPm1fUTrkx8I9i6dqGcDHvc4sEuIfYhipy2/p+GNXHvuuPyXKglwnwO5GS1HKPyY7iYXN6x2y1yFm6kARBbGhzT1lpo= ; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s1024; t=1287882983; bh=4EfNbM/PmJf4Pv48D8lJWN67CJhGOcRM1WzblTErZfQ=; h=Received:X-Yahoo-SMTP:X-YMail-OSG:X-Yahoo-Newman-Property:From:To:Cc:Subject:Date:Message-Id:X-Mailer:In-Reply-To:References; b=RvgWKh+b1RNBIvq82vCjzi+FGguGj9kNAlizPoisFDvHuIQZFEhCKIXRbubzkdbZVfqTjrqgv1H7mRIXjbSwzz1CFhzK4KtLcRho3WJcal9oqttBxUlYx5q3NuNKbgE8Dgba+1Ihd4RUN2gaQjFcRE7VMdfpBNNmf5RYDO4WMZU= Received: from localhost (lindner_marek@78.225.40.81 with plain) by smtp141.mail.ukl.yahoo.com with SMTP; 24 Oct 2010 01:16:23 +0000 GMT X-Yahoo-SMTP: tW.h3tiswBBMXO2coYcbPigGD5Lt6zY_.Zc- X-YMail-OSG: 207II4sVM1mYEdo52YzlP1CJaksPTtkVTaO4Zbd1AxTlMtB iM2448iiaJXP91PRWBBoKZ33Tn4sCsPJlOdLpatVjyN17O0tVmjX5ZY9Eoe0 VnbDxLVB.A8jperSqTfflSUUTk4blFI_S9Fp.5ulZ864jRm.45ndYRCEepxk rele4WM_841vu9WKTtZE0FSvmMojr_2fYJN_QuvH5XfIdNCSNjFIKFVIDqil Kke6qQR7FjmIXnNf1UF_u7_XmIFz.SMc39arNaByDUAwcD7CU X-Yahoo-Newman-Property: ymail-3 From: Marek Lindner To: b.a.t.m.a.n@lists.open-mesh.org Date: Sun, 24 Oct 2010 03:14:18 +0200 Message-Id: <1287882863-11314-3-git-send-email-lindner_marek@yahoo.de> X-Mailer: git-send-email 1.7.1 In-Reply-To: <201010240313.35215.lindner_marek@yahoo.de> References: <201010240313.35215.lindner_marek@yahoo.de> Cc: Marek Lindner Subject: [B.A.T.M.A.N.] [PATCH 3/8] batman-adv: move gateway selection class into its own sysfs file X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.11 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Oct 2010 01:16:25 -0000 The Linux kernel guidelines require each sysfs file to have a single value / purpose, therefore it is necessary to split up the sysfs gateway files. Signed-off-by: Marek Lindner --- batman-adv/bat_sysfs.c | 10 ++++++++++ batman-adv/gateway_client.c | 6 +++--- batman-adv/gateway_common.c | 5 ++++- batman-adv/routing.c | 5 ++++- batman-adv/soft-interface.c | 1 + batman-adv/types.h | 1 + 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/batman-adv/bat_sysfs.c b/batman-adv/bat_sysfs.c index e85a922..34a69be 100644 --- a/batman-adv/bat_sysfs.c +++ b/batman-adv/bat_sysfs.c @@ -252,6 +252,12 @@ static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr, return count; } +static void post_gw_deselect(struct net_device *net_dev) +{ + struct bat_priv *bat_priv = netdev_priv(net_dev); + gw_deselect(bat_priv); +} + static ssize_t show_gw_mode(struct kobject *kobj, struct attribute *attr, char *buff) { @@ -262,6 +268,7 @@ static ssize_t show_gw_mode(struct kobject *kobj, struct attribute *attr, switch (gw_mode) { case GW_MODE_CLIENT: + gw_class = atomic_read(&bat_priv->gw_sel_class); bytes_written = sprintf(buff, "%s (gw_class: %i)\n", GW_MODE_CLIENT_NAME, gw_class); break; @@ -299,6 +306,8 @@ static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode); static BAT_ATTR(gw_mode, S_IRUGO | S_IWUSR, show_gw_mode, store_gw_mode); BAT_ATTR_UINT(orig_interval, S_IRUGO | S_IWUSR, 2 * JITTER, INT_MAX, NULL); BAT_ATTR_UINT(hop_penalty, S_IRUGO | S_IWUSR, 0, TQ_MAX_VALUE, NULL); +BAT_ATTR_UINT(gw_sel_class, S_IRUGO | S_IWUSR, 1, TQ_MAX_VALUE, + post_gw_deselect); #ifdef CONFIG_BATMAN_ADV_DEBUG BAT_ATTR_UINT(log_level, S_IRUGO | S_IWUSR, 0, 3, NULL); #endif @@ -311,6 +320,7 @@ static struct bat_attribute *mesh_attrs[] = { &bat_attr_gw_mode, &bat_attr_orig_interval, &bat_attr_hop_penalty, + &bat_attr_gw_sel_class, #ifdef CONFIG_BATMAN_ADV_DEBUG &bat_attr_log_level, #endif diff --git a/batman-adv/gateway_client.c b/batman-adv/gateway_client.c index 6c6a0b3..4217b6b 100644 --- a/batman-adv/gateway_client.c +++ b/batman-adv/gateway_client.c @@ -117,7 +117,7 @@ void gw_election(struct bat_priv *bat_priv) if (gw_node->deleted) continue; - switch (atomic_read(&bat_priv->gw_class)) { + switch (atomic_read(&bat_priv->gw_sel_class)) { case 1: /* fast connection */ gw_srv_class_to_kbit(gw_node->orig_node->gw_flags, &down, &up); @@ -216,8 +216,8 @@ void gw_check_election(struct bat_priv *bat_priv, struct orig_node *orig_node) * 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_class) > 3) && - (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw_class))) + if ((atomic_read(&bat_priv->gw_sel_class) > 3) && + (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw_sel_class))) return; bat_dbg(DBG_BATMAN, bat_priv, diff --git a/batman-adv/gateway_common.c b/batman-adv/gateway_common.c index 3851930..05efe43 100644 --- a/batman-adv/gateway_common.c +++ b/batman-adv/gateway_common.c @@ -237,12 +237,15 @@ next: switch (gw_mode_tmp) { case GW_MODE_CLIENT: + gw_class_tmp = atomic_read(&bat_priv->gw_sel_class); if ((gw_mode_tmp == GW_MODE_CLIENT) && (!gw_class_tmp)) gw_class_tmp = 20; bat_info(net_dev, "Changing gateway mode from: '%s' to: '%s' " - "(gw_class: %ld)\n", + "(gw_sel_class: %ld)\n", gw_mode_curr_str, gw_mode_tmp_str, gw_class_tmp); + + atomic_set(&bat_priv->gw_sel_class, gw_class_tmp); break; case GW_MODE_SERVER: if (!down) diff --git a/batman-adv/routing.c b/batman-adv/routing.c index 3b03e2a..affc15f 100644 --- a/batman-adv/routing.c +++ b/batman-adv/routing.c @@ -33,6 +33,7 @@ #include "vis.h" #include "aggregation.h" #include "compat.h" +#include "gateway_common.h" #include "gateway_client.h" #include "unicast.h" @@ -331,7 +332,9 @@ update_gw: orig_node->gw_flags = batman_packet->gw_flags; /* restart gateway selection if fast or late switching was enabled */ - if ((orig_node->gw_flags) && (atomic_read(&bat_priv->gw_class) > 2)) + if ((orig_node->gw_flags) && + (atomic_read(&bat_priv->gw_mode) == GW_MODE_CLIENT) && + (atomic_read(&bat_priv->gw_sel_class) > 2)) gw_check_election(bat_priv, orig_node); } diff --git a/batman-adv/soft-interface.c b/batman-adv/soft-interface.c index 25564c3..d737f76 100644 --- a/batman-adv/soft-interface.c +++ b/batman-adv/soft-interface.c @@ -593,6 +593,7 @@ struct net_device *softif_create(char *name) atomic_set(&bat_priv->bonding, 0); atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE); atomic_set(&bat_priv->gw_mode, GW_MODE_OFF); + atomic_set(&bat_priv->gw_sel_class, 0); atomic_set(&bat_priv->gw_class, 0); atomic_set(&bat_priv->orig_interval, 1000); atomic_set(&bat_priv->hop_penalty, 10); diff --git a/batman-adv/types.h b/batman-adv/types.h index 2678ce1..b68add4 100644 --- a/batman-adv/types.h +++ b/batman-adv/types.h @@ -128,6 +128,7 @@ struct bat_priv { atomic_t fragmentation; /* boolean */ atomic_t vis_mode; /* VIS_TYPE_* */ atomic_t gw_mode; /* GW_MODE_* */ + atomic_t gw_sel_class; /* uint */ atomic_t gw_class; /* uint */ atomic_t orig_interval; /* uint */ atomic_t hop_penalty; /* uint */