Skip to content

Commit 267c095

Browse files
Nikolay Aleksandrovdavem330
authored andcommitted
bonding: add 3ad stats
Count the following types of 3ad packets per slave: - rx/tx lacpdu - rx/tx marker - rx/tx marker response - rx illegal lacpdus (right now counted on wrong length) - rx unknown lacpdu type - rx unknown marker type The counters are using atomic64 since this is not fast path. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent dadeb61 commit 267c095

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

drivers/net/bonding/bond_3ad.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,8 @@ static int ad_lacpdu_send(struct port *port)
851851
if (!skb)
852852
return -ENOMEM;
853853

854+
atomic64_inc(&SLAVE_AD_INFO(slave)->stats.lacpdu_tx);
855+
854856
skb->dev = slave->dev;
855857
skb_reset_mac_header(skb);
856858
skb->network_header = skb->mac_header + ETH_HLEN;
@@ -892,6 +894,15 @@ static int ad_marker_send(struct port *port, struct bond_marker *marker)
892894
if (!skb)
893895
return -ENOMEM;
894896

897+
switch (marker->tlv_type) {
898+
case AD_MARKER_INFORMATION_SUBTYPE:
899+
atomic64_inc(&SLAVE_AD_INFO(slave)->stats.marker_tx);
900+
break;
901+
case AD_MARKER_RESPONSE_SUBTYPE:
902+
atomic64_inc(&SLAVE_AD_INFO(slave)->stats.marker_resp_tx);
903+
break;
904+
}
905+
895906
skb_reserve(skb, 16);
896907

897908
skb->dev = slave->dev;
@@ -1086,6 +1097,9 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
10861097
*/
10871098
last_state = port->sm_rx_state;
10881099

1100+
if (lacpdu)
1101+
atomic64_inc(&SLAVE_AD_INFO(port->slave)->stats.lacpdu_rx);
1102+
10891103
/* check if state machine should change state */
10901104

10911105
/* first, check if port was reinitialized */
@@ -1922,6 +1936,8 @@ static void ad_marker_info_received(struct bond_marker *marker_info,
19221936
{
19231937
struct bond_marker marker;
19241938

1939+
atomic64_inc(&SLAVE_AD_INFO(port->slave)->stats.marker_rx);
1940+
19251941
/* copy the received marker data to the response marker */
19261942
memcpy(&marker, marker_info, sizeof(struct bond_marker));
19271943
/* change the marker subtype to marker response */
@@ -1946,6 +1962,8 @@ static void ad_marker_info_received(struct bond_marker *marker_info,
19461962
static void ad_marker_response_received(struct bond_marker *marker,
19471963
struct port *port)
19481964
{
1965+
atomic64_inc(&SLAVE_AD_INFO(port->slave)->stats.marker_resp_rx);
1966+
19491967
/* DO NOTHING, SINCE WE DECIDED NOT TO IMPLEMENT THIS FEATURE FOR NOW */
19501968
}
19511969

@@ -2358,6 +2376,7 @@ static int bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave)
23582376
int ret = RX_HANDLER_ANOTHER;
23592377
struct bond_marker *marker;
23602378
struct port *port;
2379+
atomic64_t *stat;
23612380

23622381
port = &(SLAVE_AD_INFO(slave)->port);
23632382
if (!port->slave) {
@@ -2397,7 +2416,12 @@ static int bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave)
23972416
default:
23982417
netdev_dbg(slave->bond->dev, "Received an unknown Marker subtype on slot %d\n",
23992418
port->actor_port_number);
2419+
stat = &SLAVE_AD_INFO(slave)->stats.marker_unknown_rx;
2420+
atomic64_inc(stat);
24002421
}
2422+
break;
2423+
default:
2424+
atomic64_inc(&SLAVE_AD_INFO(slave)->stats.lacpdu_unknown_rx);
24012425
}
24022426

24032427
return ret;
@@ -2635,8 +2659,10 @@ int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
26352659
return RX_HANDLER_ANOTHER;
26362660

26372661
lacpdu = skb_header_pointer(skb, 0, sizeof(_lacpdu), &_lacpdu);
2638-
if (!lacpdu)
2662+
if (!lacpdu) {
2663+
atomic64_inc(&SLAVE_AD_INFO(slave)->stats.lacpdu_illegal_rx);
26392664
return RX_HANDLER_ANOTHER;
2665+
}
26402666

26412667
return bond_3ad_rx_indication(lacpdu, slave);
26422668
}

include/net/bond_3ad.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,19 @@ struct port;
180180
#pragma pack(8)
181181
#endif
182182

183+
struct bond_3ad_stats {
184+
atomic64_t lacpdu_rx;
185+
atomic64_t lacpdu_tx;
186+
atomic64_t lacpdu_unknown_rx;
187+
atomic64_t lacpdu_illegal_rx;
188+
189+
atomic64_t marker_rx;
190+
atomic64_t marker_tx;
191+
atomic64_t marker_resp_rx;
192+
atomic64_t marker_resp_tx;
193+
atomic64_t marker_unknown_rx;
194+
};
195+
183196
/* aggregator structure(43.4.5 in the 802.3ad standard) */
184197
typedef struct aggregator {
185198
struct mac_addr aggregator_mac_address;
@@ -272,6 +285,7 @@ struct ad_bond_info {
272285
struct ad_slave_info {
273286
struct aggregator aggregator; /* 802.3ad aggregator structure */
274287
struct port port; /* 802.3ad port structure */
288+
struct bond_3ad_stats stats;
275289
u16 id;
276290
};
277291

0 commit comments

Comments
 (0)