Search Linux Wireless

Re: [PATCH] net: wireless: mesh: Add multicast and unicast stat counters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Daniel,

Thanks for the patch, that's useful.
I've reworked it so it can be applied to the HEAD of wireless-testing.
 Comments in line and reworked patch in a follow-up email.
Cheers,

Javier

> ---
>  net/mac80211/debugfs_netdev.c |    6 ++++++
>  net/mac80211/ieee80211_i.h    |    6 +++++-
>  net/mac80211/mesh_hwmp.c      |    4 ++++
>  net/mac80211/rx.c             |    9 +++++++--
>  4 files changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
> index e9ec6ca..00f7c6e 100644
> --- a/net/mac80211/debugfs_netdev.c
> +++ b/net/mac80211/debugfs_netdev.c
> @@ -116,6 +116,8 @@ IEEE80211_IF_FILE(peer, u.wds.remote_addr, MAC);
>
>  #ifdef CONFIG_MAC80211_MESH
>  /* Mesh stats attributes */
> +IEEE80211_IF_FILE(fwded_mcast, u.mesh.mshstats.fwded_mcast, DEC);
> +IEEE80211_IF_FILE(fwded_unicast, u.mesh.mshstats.fwded_unicast, DEC);
>  IEEE80211_IF_FILE(fwded_frames, u.mesh.mshstats.fwded_frames, DEC);
>  IEEE80211_IF_FILE(dropped_frames_ttl, u.mesh.mshstats.dropped_frames_ttl, DEC);
>  IEEE80211_IF_FILE(dropped_frames_no_route,
> @@ -205,6 +207,8 @@ static void add_mesh_stats(struct ieee80211_sub_if_data *sdata)
>  {
>        sdata->mesh_stats_dir = debugfs_create_dir("mesh_stats",
>                                sdata->debugfsdir);
> +       MESHSTATS_ADD(mcast_frames);
> +       MESHSTATS_ADD(unicast_frames);

mcast_frames -> fwded_mcast
unicast_frames -> fwded_unicast

>        MESHSTATS_ADD(fwded_frames);
>        MESHSTATS_ADD(dropped_frames_ttl);
>        MESHSTATS_ADD(dropped_frames_no_route);
> @@ -327,6 +331,8 @@ static void del_monitor_files(struct ieee80211_sub_if_data *sdata)
>
>  static void del_mesh_stats(struct ieee80211_sub_if_data *sdata)
>  {
> +       MESHSTATS_DEL(mcast_frames);
> +       MESHSTATS_DEL(unicast_frames);

Same as previous comment.

>        MESHSTATS_DEL(fwded_frames);
>        MESHSTATS_DEL(dropped_frames_ttl);
>        MESHSTATS_DEL(dropped_frames_no_route);
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index d6bd7dd..82c39d9 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -212,7 +212,9 @@ struct ieee80211_if_vlan {
>  };
>
>  struct mesh_stats {
> -       __u32 fwded_frames;             /* Mesh forwarded frames */
> +       __u32 fwded_mcast;              /* Mesh forwarded multicast frames */
> +       __u32 fwded_unicast;            /* Mesh forwarded unicast frames */
> +       __u32 fwded_frames;             /* Mesh total forwarded frames */
>        __u32 dropped_frames_ttl;       /* Not transmitted since mesh_ttl == 0*/
>        __u32 dropped_frames_no_route;  /* Not transmitted, no route found */
>        atomic_t estab_plinks;
> @@ -506,6 +508,8 @@ struct ieee80211_sub_if_data {
>  #ifdef CONFIG_MAC80211_MESH
>        struct dentry *mesh_stats_dir;
>        struct {
> +               struct dentry *fwded_mcast;
> +               struct dentry *fwded_unicast;
>                struct dentry *fwded_frames;
>                struct dentry *dropped_frames_ttl;
>                struct dentry *dropped_frames_no_route;
> diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
> index e1a763e..593ea64 100644
> --- a/net/mac80211/mesh_hwmp.c
> +++ b/net/mac80211/mesh_hwmp.c
> @@ -478,6 +478,8 @@ static void hwmp_preq_frame_process(struct ieee80211_sub_if_data *sdata,
>                                hopcount, ttl, cpu_to_le32(lifetime),
>                                cpu_to_le32(metric), cpu_to_le32(preq_id),
>                                sdata);
> +
> +               ifmsh->mshstats.fwded_mcast++;
>                ifmsh->mshstats.fwded_frames++;
>        }
>  }
> @@ -536,6 +538,8 @@ static void hwmp_prep_frame_process(struct ieee80211_sub_if_data *sdata,
>                cpu_to_le32(lifetime), cpu_to_le32(metric),
>                0, sdata);
>        rcu_read_unlock();
> +
> +       sdata->u.mesh.mshstats.fwded_unicast++;
>        sdata->u.mesh.mshstats.fwded_frames++;
>        return;
>
> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index 25a669c..cf21f57 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -1543,16 +1543,21 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
>                        info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
>                        info->control.vif = &rx->sdata->vif;
>                        ieee80211_select_queue(local, fwd_skb);
> -                       if (is_multicast_ether_addr(fwd_hdr->addr3))
> +                       if (is_multicast_ether_addr(fwd_hdr->addr3)) {
>                                memcpy(fwd_hdr->addr1, fwd_hdr->addr3,
>                                                ETH_ALEN);
> -                       else {
> +                               IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
> +                                                            fwded_mcast);
> +                       } else {
>                                int err = mesh_nexthop_lookup(fwd_skb, sdata);
>                                /* Failed to immediately resolve next hop:
>                                 * fwded frame was dropped or will be added
>                                 * later to the pending skb queue.  */
>                                if (err)
>                                        return RX_DROP_MONITOR;
> +
> +                               IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
> +                                                            fwded_unicast);
>                        }
>                        IEEE80211_IFSTA_MESH_CTR_INC(&sdata->u.mesh,
>                                                     fwded_frames);

Hunk will fail due to recent changes to multicast frame format.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux