From patchwork Sat Jun 23 09:47:53 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Marek Lindner X-Patchwork-Id: 2070 Return-Path: Received: from nm22-vm5.bullet.mail.ukl.yahoo.com (nm22-vm5.bullet.mail.ukl.yahoo.com [217.12.10.251]) by open-mesh.org (Postfix) with SMTP id BEEE1600735 for ; Sat, 23 Jun 2012 11:48:02 +0200 (CEST) Authentication-Results: open-mesh.org; dkim=pass (1024-bit key; insecure key) header.i=@yahoo.de; dkim-adsp=pass Received: from [217.146.183.213] by nm22.bullet.mail.ukl.yahoo.com with NNFMP; 23 Jun 2012 09:48:02 -0000 Received: from [217.146.182.75] by tm6.bullet.mail.ukl.yahoo.com with NNFMP; 23 Jun 2012 09:48:02 -0000 Received: from [127.0.0.1] by smtp106.mail.ukl.yahoo.com with NNFMP; 23 Jun 2012 09:48:02 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s1024; t=1340444882; bh=4oHCoeSLuIrFLfOwYtAWESY5sbYlfFTsES2oyeyptgw=; h=X-Yahoo-Newman-Id:X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:Received:From:To:Cc:Subject:Date:Message-Id:X-Mailer; b=VTynu2b3PJXQX++VEMoEozmCuTpzdDHwfoqn81bIk0ydlO45Izak67BEs3E1q7xRQmH4Zs6PxqcBoKpKIMoRNvlZf3MR5vMVWh6d8k3yVMye983ISB3BT0Mgofb8oPLONhU8qg2FHSKiX3fuMRZMQTLTHTPLQhCslbyG7zAK8h0= X-Yahoo-Newman-Id: 101501.71939.bm@smtp106.mail.ukl.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: KGqehLwVM1mFvH4MrGR1ScJUko9oSyD3LCg83xZljjN8wPz cT7ZMLe9mH6up7L4PvnWY8ov1NH6lPf_gJFjxrsDWgfTIOe4m4ZxssXkcRL6 21hHFbLcdJgNkdqIA6un6ES3TEqE_h0o7GIufjyf4cdDh7_vRffVllvn.Mrh WN78JhBTOpKbnae1GdJQsmhBC3ioEvrLFH3enD0v2__PyfY4zvV8TQwbuqfz RWOPWPclSQcwO5KAGUwxE525Tx5tCZIKAbDu2TtiUy_qja.8GF6pMLVK3emH pz0Qch3bqgJoGGFweJreEtE5FqJcOwINX9HjgkHy.Yf8gRqZUZjqZArfPFr. lRJgzDB0wF220iKfl7kma5s6FCRrT_jsDomK7nbUgvSyobAp5_olkgtjPqOI S X-Yahoo-SMTP: tW.h3tiswBBMXO2coYcbPigGD5Lt6zY_.Zc- Received: from localhost (lindner_marek@80.214.1.31 with plain) by smtp106.mail.ukl.yahoo.com with SMTP; 23 Jun 2012 02:48:01 -0700 PDT From: Marek Lindner To: b.a.t.m.a.n@lists.open-mesh.org Date: Sat, 23 Jun 2012 11:47:53 +0200 Message-Id: <1340444873-5063-1-git-send-email-lindner_marek@yahoo.de> X-Mailer: git-send-email 1.7.9.1 Cc: Marek Lindner Subject: [B.A.T.M.A.N.] [PATCH] batman-adv: convert remaining packet counters to per_cpu_ptr() infrastructure X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.13 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: Sat, 23 Jun 2012 09:48:03 -0000 Signed-off-by: Marek Lindner Acked-by: Martin Hundebøll --- bridge_loop_avoidance.c | 5 ++- soft-interface.c | 50 +++++++++++++++++++++++++++++++---------------- types.h | 5 ++++ 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/bridge_loop_avoidance.c b/bridge_loop_avoidance.c index 1e2cfe5..b92b0ea 100644 --- a/bridge_loop_avoidance.c +++ b/bridge_loop_avoidance.c @@ -338,8 +338,9 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, skb_reset_mac_header(skb); skb->protocol = eth_type_trans(skb, soft_iface); - bat_priv->stats.rx_packets++; - bat_priv->stats.rx_bytes += skb->len + ETH_HLEN; + batadv_inc_counter(bat_priv, BATADV_CNT_RX); + batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, + skb->len + ETH_HLEN); soft_iface->last_rx = jiffies; netif_rx(skb); diff --git a/soft-interface.c b/soft-interface.c index b7c655c..e06480a 100644 --- a/soft-interface.c +++ b/soft-interface.c @@ -93,7 +93,14 @@ static int batadv_interface_release(struct net_device *dev) static struct net_device_stats *batadv_interface_stats(struct net_device *dev) { struct batadv_priv *bat_priv = netdev_priv(dev); - return &bat_priv->stats; + struct net_device_stats *stats = &bat_priv->stats; + + stats->tx_packets = batadv_sum_counter(bat_priv, BATADV_CNT_TX); + stats->tx_bytes = batadv_sum_counter(bat_priv, BATADV_CNT_TX_BYTES); + stats->tx_dropped = batadv_sum_counter(bat_priv, BATADV_CNT_TX_DROPPED); + stats->rx_packets = batadv_sum_counter(bat_priv, BATADV_CNT_RX); + stats->rx_bytes = batadv_sum_counter(bat_priv, BATADV_CNT_RX_BYTES); + return stats; } static int batadv_interface_set_mac_addr(struct net_device *dev, void *p) @@ -245,14 +252,14 @@ static int batadv_interface_tx(struct sk_buff *skb, goto dropped_freed; } - bat_priv->stats.tx_packets++; - bat_priv->stats.tx_bytes += data_len; + batadv_inc_counter(bat_priv, BATADV_CNT_TX); + batadv_add_counter(bat_priv, BATADV_CNT_TX_BYTES, data_len); goto end; dropped: kfree_skb(skb); dropped_freed: - bat_priv->stats.tx_dropped++; + batadv_inc_counter(bat_priv, BATADV_CNT_TX_DROPPED); end: if (primary_if) batadv_hardif_free_ref(primary_if); @@ -303,8 +310,9 @@ void batadv_interface_rx(struct net_device *soft_iface, /* skb->ip_summed = CHECKSUM_UNNECESSARY; */ - bat_priv->stats.rx_packets++; - bat_priv->stats.rx_bytes += skb->len + ETH_HLEN; + batadv_inc_counter(bat_priv, BATADV_CNT_RX); + batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, + skb->len + ETH_HLEN); soft_iface->last_rx = jiffies; @@ -374,15 +382,21 @@ struct net_device *batadv_softif_create(const char *name) if (!soft_iface) goto out; + bat_priv = netdev_priv(soft_iface); + + /* batadv_interface_stats() needs to be available as soon as + * register_netdevice() has been called */ + bat_priv->bat_counters = __alloc_percpu(cnt_len, __alignof__(uint64_t)); + if (!bat_priv->bat_counters) + goto free_soft_iface; + ret = register_netdevice(soft_iface); if (ret < 0) { pr_err("Unable to register the batman interface '%s': %i\n", name, ret); - goto free_soft_iface; + goto free_bat_counters; } - bat_priv = netdev_priv(soft_iface); - atomic_set(&bat_priv->aggregated_ogms, 1); atomic_set(&bat_priv->bonding, 0); atomic_set(&bat_priv->bridge_loop_avoidance, 0); @@ -412,17 +426,13 @@ struct net_device *batadv_softif_create(const char *name) bat_priv->primary_if = NULL; bat_priv->num_ifaces = 0; - bat_priv->bat_counters = __alloc_percpu(cnt_len, __alignof__(uint64_t)); - if (!bat_priv->bat_counters) - goto unreg_soft_iface; - ret = batadv_algo_select(bat_priv, batadv_routing_algo); if (ret < 0) - goto free_bat_counters; + goto unreg_soft_iface; ret = batadv_sysfs_add_meshif(soft_iface); if (ret < 0) - goto free_bat_counters; + goto unreg_soft_iface; ret = batadv_debugfs_add_meshif(soft_iface); if (ret < 0) @@ -438,12 +448,13 @@ unreg_debugfs: batadv_debugfs_del_meshif(soft_iface); unreg_sysfs: batadv_sysfs_del_meshif(soft_iface); -free_bat_counters: - free_percpu(bat_priv->bat_counters); unreg_soft_iface: + free_percpu(bat_priv->bat_counters); unregister_netdevice(soft_iface); return NULL; +free_bat_counters: + free_percpu(bat_priv->bat_counters); free_soft_iface: free_netdev(soft_iface); out: @@ -513,6 +524,11 @@ static u32 batadv_get_link(struct net_device *dev) static const struct { const char name[ETH_GSTRING_LEN]; } batadv_counters_strings[] = { + { "tx" }, + { "tx_bytes" }, + { "tx_dropped" }, + { "rx" }, + { "rx_bytes" }, { "forward" }, { "forward_bytes" }, { "mgmt_tx" }, diff --git a/types.h b/types.h index 2141c13..64b4317 100644 --- a/types.h +++ b/types.h @@ -144,6 +144,11 @@ struct batadv_bcast_duplist_entry { #endif enum batadv_counters { + BATADV_CNT_TX, + BATADV_CNT_TX_BYTES, + BATADV_CNT_TX_DROPPED, + BATADV_CNT_RX, + BATADV_CNT_RX_BYTES, BATADV_CNT_FORWARD, BATADV_CNT_FORWARD_BYTES, BATADV_CNT_MGMT_TX,