ipmacsec: collapse common code
Several places copy/paste same code for printing array of statistics. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
c2f260f4eb
commit
d341863839
139
ip/ipmacsec.c
139
ip/ipmacsec.c
|
|
@ -624,21 +624,54 @@ static void print_attrs(const char *prefix, struct rtattr *attrs[])
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_one_stat(const char **names, struct rtattr **attr, int idx,
|
static __u64 getattr_uint(struct rtattr *stat)
|
||||||
bool long_stat)
|
|
||||||
{
|
{
|
||||||
int pad = strlen(names[idx]) + 1;
|
switch (RTA_PAYLOAD(stat)) {
|
||||||
|
case sizeof(__u64):
|
||||||
if (attr[idx]) {
|
return rta_getattr_u64(stat);
|
||||||
if (long_stat)
|
case sizeof(__u32):
|
||||||
printf("%*llu", pad, rta_getattr_u64(attr[idx]));
|
return rta_getattr_u32(stat);
|
||||||
else
|
case sizeof(__u16):
|
||||||
printf("%*u", pad, rta_getattr_u32(attr[idx]));
|
return rta_getattr_u16(stat);
|
||||||
} else {
|
case sizeof(__u8):
|
||||||
printf("%*c", pad, '-');
|
return rta_getattr_u8(stat);
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "invalid attribute length %lu\n",
|
||||||
|
RTA_PAYLOAD(stat));
|
||||||
|
exit(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void print_stats(const char *prefix,
|
||||||
|
const char *names[], unsigned int num,
|
||||||
|
struct rtattr *stats[])
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
int pad;
|
||||||
|
|
||||||
|
printf("%sstats:", prefix);
|
||||||
|
|
||||||
|
for (i = 1; i < num; i++) {
|
||||||
|
if (!names[i])
|
||||||
|
continue;
|
||||||
|
printf(" %s", names[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n%s ", prefix);
|
||||||
|
|
||||||
|
for (i = 1; i < num; i++) {
|
||||||
|
if (!names[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pad = strlen(names[i]) + 1;
|
||||||
|
if (stats[i])
|
||||||
|
printf("%*llu", pad, getattr_uint(stats[i]));
|
||||||
|
else
|
||||||
|
printf("%*c", pad, '-');
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
static const char *txsc_stats_names[NUM_MACSEC_TXSC_STATS_ATTR] = {
|
static const char *txsc_stats_names[NUM_MACSEC_TXSC_STATS_ATTR] = {
|
||||||
[MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED] = "OutPktsProtected",
|
[MACSEC_TXSC_STATS_ATTR_OUT_PKTS_PROTECTED] = "OutPktsProtected",
|
||||||
[MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED] = "OutPktsEncrypted",
|
[MACSEC_TXSC_STATS_ATTR_OUT_PKTS_ENCRYPTED] = "OutPktsEncrypted",
|
||||||
|
|
@ -649,29 +682,14 @@ static const char *txsc_stats_names[NUM_MACSEC_TXSC_STATS_ATTR] = {
|
||||||
static void print_txsc_stats(const char *prefix, struct rtattr *attr)
|
static void print_txsc_stats(const char *prefix, struct rtattr *attr)
|
||||||
{
|
{
|
||||||
struct rtattr *stats[MACSEC_TXSC_STATS_ATTR_MAX + 1];
|
struct rtattr *stats[MACSEC_TXSC_STATS_ATTR_MAX + 1];
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!attr || show_stats == 0)
|
if (!attr || show_stats == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
parse_rtattr_nested(stats, MACSEC_TXSC_STATS_ATTR_MAX + 1, attr);
|
parse_rtattr_nested(stats, MACSEC_TXSC_STATS_ATTR_MAX + 1, attr);
|
||||||
printf("%sstats:", prefix);
|
|
||||||
|
|
||||||
for (i = 1; i < NUM_MACSEC_TXSC_STATS_ATTR; i++) {
|
print_stats(prefix, txsc_stats_names, NUM_MACSEC_TXSC_STATS_ATTR,
|
||||||
if (!txsc_stats_names[i])
|
stats);
|
||||||
continue;
|
|
||||||
printf(" %s", txsc_stats_names[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n%s ", prefix);
|
|
||||||
|
|
||||||
for (i = 1; i < NUM_MACSEC_TXSC_STATS_ATTR; i++) {
|
|
||||||
if (!txsc_stats_names[i])
|
|
||||||
continue;
|
|
||||||
print_one_stat(txsc_stats_names, stats, i, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *secy_stats_names[NUM_MACSEC_SECY_STATS_ATTR] = {
|
static const char *secy_stats_names[NUM_MACSEC_SECY_STATS_ATTR] = {
|
||||||
|
|
@ -688,29 +706,14 @@ static const char *secy_stats_names[NUM_MACSEC_SECY_STATS_ATTR] = {
|
||||||
static void print_secy_stats(const char *prefix, struct rtattr *attr)
|
static void print_secy_stats(const char *prefix, struct rtattr *attr)
|
||||||
{
|
{
|
||||||
struct rtattr *stats[MACSEC_SECY_STATS_ATTR_MAX + 1];
|
struct rtattr *stats[MACSEC_SECY_STATS_ATTR_MAX + 1];
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!attr || show_stats == 0)
|
if (!attr || show_stats == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
parse_rtattr_nested(stats, MACSEC_SECY_STATS_ATTR_MAX + 1, attr);
|
parse_rtattr_nested(stats, MACSEC_SECY_STATS_ATTR_MAX + 1, attr);
|
||||||
printf("%sstats:", prefix);
|
|
||||||
|
|
||||||
for (i = 1; i < NUM_MACSEC_SECY_STATS_ATTR; i++) {
|
print_stats(prefix, secy_stats_names,
|
||||||
if (!secy_stats_names[i])
|
NUM_MACSEC_SECY_STATS_ATTR, stats);
|
||||||
continue;
|
|
||||||
printf(" %s", secy_stats_names[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n%s ", prefix);
|
|
||||||
|
|
||||||
for (i = 1; i < NUM_MACSEC_SECY_STATS_ATTR; i++) {
|
|
||||||
if (!secy_stats_names[i])
|
|
||||||
continue;
|
|
||||||
print_one_stat(secy_stats_names, stats, i, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *rxsa_stats_names[NUM_MACSEC_SA_STATS_ATTR] = {
|
static const char *rxsa_stats_names[NUM_MACSEC_SA_STATS_ATTR] = {
|
||||||
|
|
@ -724,29 +727,13 @@ static const char *rxsa_stats_names[NUM_MACSEC_SA_STATS_ATTR] = {
|
||||||
static void print_rxsa_stats(const char *prefix, struct rtattr *attr)
|
static void print_rxsa_stats(const char *prefix, struct rtattr *attr)
|
||||||
{
|
{
|
||||||
struct rtattr *stats[MACSEC_SA_STATS_ATTR_MAX + 1];
|
struct rtattr *stats[MACSEC_SA_STATS_ATTR_MAX + 1];
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!attr || show_stats == 0)
|
if (!attr || show_stats == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
parse_rtattr_nested(stats, MACSEC_SA_STATS_ATTR_MAX + 1, attr);
|
parse_rtattr_nested(stats, MACSEC_SA_STATS_ATTR_MAX + 1, attr);
|
||||||
printf("%s%s ", prefix, prefix);
|
|
||||||
|
|
||||||
for (i = 1; i < NUM_MACSEC_SA_STATS_ATTR; i++) {
|
print_stats(prefix, rxsa_stats_names, NUM_MACSEC_SA_STATS_ATTR, stats);
|
||||||
if (!rxsa_stats_names[i])
|
|
||||||
continue;
|
|
||||||
printf(" %s", rxsa_stats_names[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n%s%s ", prefix, prefix);
|
|
||||||
|
|
||||||
for (i = 1; i < NUM_MACSEC_SA_STATS_ATTR; i++) {
|
|
||||||
if (!rxsa_stats_names[i])
|
|
||||||
continue;
|
|
||||||
print_one_stat(rxsa_stats_names, stats, i, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *txsa_stats_names[NUM_MACSEC_SA_STATS_ATTR] = {
|
static const char *txsa_stats_names[NUM_MACSEC_SA_STATS_ATTR] = {
|
||||||
|
|
@ -762,16 +749,8 @@ static void print_txsa_stats(const char *prefix, struct rtattr *attr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
parse_rtattr_nested(stats, MACSEC_SA_STATS_ATTR_MAX + 1, attr);
|
parse_rtattr_nested(stats, MACSEC_SA_STATS_ATTR_MAX + 1, attr);
|
||||||
printf("%s%s %s %s\n", prefix, prefix,
|
|
||||||
txsa_stats_names[MACSEC_SA_STATS_ATTR_OUT_PKTS_PROTECTED],
|
|
||||||
txsa_stats_names[MACSEC_SA_STATS_ATTR_OUT_PKTS_ENCRYPTED]);
|
|
||||||
printf("%s%s ", prefix, prefix);
|
|
||||||
|
|
||||||
print_one_stat(txsa_stats_names, stats,
|
print_stats(prefix, txsa_stats_names, NUM_MACSEC_SA_STATS_ATTR, stats);
|
||||||
MACSEC_SA_STATS_ATTR_OUT_PKTS_PROTECTED, false);
|
|
||||||
print_one_stat(txsa_stats_names, stats,
|
|
||||||
MACSEC_SA_STATS_ATTR_OUT_PKTS_ENCRYPTED, false);
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_tx_sc(const char *prefix, __u64 sci, __u8 encoding_sa,
|
static void print_tx_sc(const char *prefix, __u64 sci, __u8 encoding_sa,
|
||||||
|
|
@ -820,28 +799,14 @@ static const char *rxsc_stats_names[NUM_MACSEC_RXSC_STATS_ATTR] = {
|
||||||
static void print_rxsc_stats(const char *prefix, struct rtattr *attr)
|
static void print_rxsc_stats(const char *prefix, struct rtattr *attr)
|
||||||
{
|
{
|
||||||
struct rtattr *stats[MACSEC_RXSC_STATS_ATTR_MAX + 1];
|
struct rtattr *stats[MACSEC_RXSC_STATS_ATTR_MAX + 1];
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!attr || show_stats == 0)
|
if (!attr || show_stats == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
parse_rtattr_nested(stats, MACSEC_RXSC_STATS_ATTR_MAX + 1, attr);
|
parse_rtattr_nested(stats, MACSEC_RXSC_STATS_ATTR_MAX + 1, attr);
|
||||||
printf("%sstats:", prefix);
|
|
||||||
for (i = 1; i < NUM_MACSEC_RXSC_STATS_ATTR; i++) {
|
|
||||||
if (!rxsc_stats_names[i])
|
|
||||||
continue;
|
|
||||||
printf(" %s", rxsc_stats_names[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n%s ", prefix);
|
print_stats(prefix, rxsc_stats_names,
|
||||||
|
NUM_MACSEC_RXSC_STATS_ATTR, stats);
|
||||||
for (i = 1; i < NUM_MACSEC_RXSC_STATS_ATTR; i++) {
|
|
||||||
if (!rxsc_stats_names[i])
|
|
||||||
continue;
|
|
||||||
print_one_stat(rxsc_stats_names, stats, i, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_rx_sc(const char *prefix, __u64 sci, __u8 active,
|
static void print_rx_sc(const char *prefix, __u64 sci, __u8 active,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue