dect
/
linux-2.6
Archived
13
0
Fork 0

batman-adv: Add get_ethtool_stats() support for DAT

Added additional counters for D.A.T.

Signed-off-by: Martin Hundebøll <martin@hundeboll.net>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
This commit is contained in:
Martin Hundebøll 2012-04-20 17:02:45 +02:00 committed by Antonio Quartulli
parent 33af49ad8a
commit 4046b24afa
5 changed files with 65 additions and 3 deletions

View File

@ -601,9 +601,22 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
send_status = batadv_send_skb_packet(tmp_skb, send_status = batadv_send_skb_packet(tmp_skb,
neigh_node->if_incoming, neigh_node->if_incoming,
neigh_node->addr); neigh_node->addr);
if (send_status == NET_XMIT_SUCCESS) if (send_status == NET_XMIT_SUCCESS) {
/* count the sent packet */
switch (packet_subtype) {
case BATADV_P_DAT_DHT_GET:
batadv_inc_counter(bat_priv,
BATADV_CNT_DAT_GET_TX);
break;
case BATADV_P_DAT_DHT_PUT:
batadv_inc_counter(bat_priv,
BATADV_CNT_DAT_PUT_TX);
break;
}
/* packet sent to a candidate: return true */ /* packet sent to a candidate: return true */
ret = true; ret = true;
}
free_neigh: free_neigh:
batadv_neigh_node_free_ref(neigh_node); batadv_neigh_node_free_ref(neigh_node);
free_orig: free_orig:
@ -909,8 +922,10 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
else else
err = batadv_unicast_send_skb(bat_priv, skb_new); err = batadv_unicast_send_skb(bat_priv, skb_new);
if (!err) if (!err) {
batadv_inc_counter(bat_priv, BATADV_CNT_DAT_CACHED_REPLY_TX);
ret = true; ret = true;
}
out: out:
if (dat_entry) if (dat_entry)
batadv_dat_entry_free_ref(dat_entry); batadv_dat_entry_free_ref(dat_entry);

View File

@ -74,6 +74,28 @@ int batadv_dat_init(struct batadv_priv *bat_priv);
void batadv_dat_free(struct batadv_priv *bat_priv); void batadv_dat_free(struct batadv_priv *bat_priv);
int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset); int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset);
/**
* batadv_dat_inc_counter - increment the correct DAT packet counter
* @bat_priv: the bat priv with all the soft interface information
* @subtype: the 4addr subtype of the packet to be counted
*
* Updates the ethtool statistics for the received packet if it is a DAT subtype
*/
static inline void batadv_dat_inc_counter(struct batadv_priv *bat_priv,
uint8_t subtype)
{
switch (subtype) {
case BATADV_P_DAT_DHT_GET:
batadv_inc_counter(bat_priv,
BATADV_CNT_DAT_GET_RX);
break;
case BATADV_P_DAT_DHT_PUT:
batadv_inc_counter(bat_priv,
BATADV_CNT_DAT_PUT_RX);
break;
}
}
#else #else
static inline bool static inline bool
@ -135,6 +157,11 @@ static inline void batadv_dat_free(struct batadv_priv *bat_priv)
{ {
} }
static inline void batadv_dat_inc_counter(struct batadv_priv *bat_priv,
uint8_t subtype)
{
}
#endif /* CONFIG_BATMAN_ADV_DAT */ #endif /* CONFIG_BATMAN_ADV_DAT */
#endif /* _NET_BATMAN_ADV_ARP_H_ */ #endif /* _NET_BATMAN_ADV_ARP_H_ */

View File

@ -985,15 +985,17 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
{ {
struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface); struct batadv_priv *bat_priv = netdev_priv(recv_if->soft_iface);
struct batadv_unicast_packet *unicast_packet; struct batadv_unicast_packet *unicast_packet;
struct batadv_unicast_4addr_packet *unicast_4addr_packet;
int hdr_size = sizeof(*unicast_packet); int hdr_size = sizeof(*unicast_packet);
bool is4addr; bool is4addr;
unicast_packet = (struct batadv_unicast_packet *)skb->data; unicast_packet = (struct batadv_unicast_packet *)skb->data;
unicast_4addr_packet = (struct batadv_unicast_4addr_packet *)skb->data;
is4addr = unicast_packet->header.packet_type == BATADV_UNICAST_4ADDR; is4addr = unicast_packet->header.packet_type == BATADV_UNICAST_4ADDR;
/* the caller function should have already pulled 2 bytes */ /* the caller function should have already pulled 2 bytes */
if (is4addr) if (is4addr)
hdr_size = sizeof(struct batadv_unicast_4addr_packet); hdr_size = sizeof(*unicast_4addr_packet);
if (batadv_check_unicast_packet(skb, hdr_size) < 0) if (batadv_check_unicast_packet(skb, hdr_size) < 0)
return NET_RX_DROP; return NET_RX_DROP;
@ -1003,6 +1005,10 @@ int batadv_recv_unicast_packet(struct sk_buff *skb,
/* packet for me */ /* packet for me */
if (batadv_is_my_mac(unicast_packet->dest)) { if (batadv_is_my_mac(unicast_packet->dest)) {
if (is4addr)
batadv_dat_inc_counter(bat_priv,
unicast_4addr_packet->subtype);
if (batadv_dat_snoop_incoming_arp_request(bat_priv, skb, if (batadv_dat_snoop_incoming_arp_request(bat_priv, skb,
hdr_size)) hdr_size))
goto rx_success; goto rx_success;

View File

@ -625,6 +625,13 @@ static const struct {
{ "tt_response_rx" }, { "tt_response_rx" },
{ "tt_roam_adv_tx" }, { "tt_roam_adv_tx" },
{ "tt_roam_adv_rx" }, { "tt_roam_adv_rx" },
#ifdef CONFIG_BATMAN_ADV_DAT
{ "dat_get_tx" },
{ "dat_get_rx" },
{ "dat_put_tx" },
{ "dat_put_rx" },
{ "dat_cached_reply_tx" },
#endif
}; };
static void batadv_get_strings(struct net_device *dev, uint32_t stringset, static void batadv_get_strings(struct net_device *dev, uint32_t stringset,

View File

@ -186,6 +186,13 @@ enum batadv_counters {
BATADV_CNT_TT_RESPONSE_RX, BATADV_CNT_TT_RESPONSE_RX,
BATADV_CNT_TT_ROAM_ADV_TX, BATADV_CNT_TT_ROAM_ADV_TX,
BATADV_CNT_TT_ROAM_ADV_RX, BATADV_CNT_TT_ROAM_ADV_RX,
#ifdef CONFIG_BATMAN_ADV_DAT
BATADV_CNT_DAT_GET_TX,
BATADV_CNT_DAT_GET_RX,
BATADV_CNT_DAT_PUT_TX,
BATADV_CNT_DAT_PUT_RX,
BATADV_CNT_DAT_CACHED_REPLY_TX,
#endif
BATADV_CNT_NUM, BATADV_CNT_NUM,
}; };