mirror of
https://gitee.com/openharmony/third_party_libnl
synced 2025-02-25 22:07:13 +00:00
route: update kernel header snmp.h and fix inet6_parse_protinfo() after kernel API breakage
Take 'include/uapi/linux/snmp.h' from current kernel v3.13 (commit d8ec26d7f8287f5788a494f56e8814210f0e64be). The header file added new values for IPSTATS_MIB_* and ICMP6_MIB_*, but more importantly, the kernel broke user space API by reordering enum values in IPSTATS_MIB_*. Add a workaround when parsing IFLA_PROTINFO trying to be compatible with both older and newer kernels. Note that this workaround might fail for some specific kernel versions by assuming the old enum value mapping, although the kernel version already contains the API change. In this case rtnl_link_get_stat() mixes up values. Acked-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
parent
3584a7ab55
commit
5981a39583
@ -18,7 +18,14 @@
|
||||
enum
|
||||
{
|
||||
IPSTATS_MIB_NUM = 0,
|
||||
/* frequently written fields in fast path, kept in same cache line */
|
||||
IPSTATS_MIB_INPKTS, /* InReceives */
|
||||
IPSTATS_MIB_INOCTETS, /* InOctets */
|
||||
IPSTATS_MIB_INDELIVERS, /* InDelivers */
|
||||
IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */
|
||||
IPSTATS_MIB_OUTPKTS, /* OutRequests */
|
||||
IPSTATS_MIB_OUTOCTETS, /* OutOctets */
|
||||
/* other fields */
|
||||
IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */
|
||||
IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */
|
||||
IPSTATS_MIB_INNOROUTES, /* InNoRoutes */
|
||||
@ -26,9 +33,6 @@ enum
|
||||
IPSTATS_MIB_INUNKNOWNPROTOS, /* InUnknownProtos */
|
||||
IPSTATS_MIB_INTRUNCATEDPKTS, /* InTruncatedPkts */
|
||||
IPSTATS_MIB_INDISCARDS, /* InDiscards */
|
||||
IPSTATS_MIB_INDELIVERS, /* InDelivers */
|
||||
IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */
|
||||
IPSTATS_MIB_OUTPKTS, /* OutRequests */
|
||||
IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */
|
||||
IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */
|
||||
IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */
|
||||
@ -42,12 +46,15 @@ enum
|
||||
IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */
|
||||
IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */
|
||||
IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */
|
||||
IPSTATS_MIB_INOCTETS, /* InOctets */
|
||||
IPSTATS_MIB_OUTOCTETS, /* OutOctets */
|
||||
IPSTATS_MIB_INMCASTOCTETS, /* InMcastOctets */
|
||||
IPSTATS_MIB_OUTMCASTOCTETS, /* OutMcastOctets */
|
||||
IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */
|
||||
IPSTATS_MIB_OUTBCASTOCTETS, /* OutBcastOctets */
|
||||
IPSTATS_MIB_CSUMERRORS, /* InCsumErrors */
|
||||
IPSTATS_MIB_NOECTPKTS, /* InNoECTPkts */
|
||||
IPSTATS_MIB_ECT1PKTS, /* InECT1Pkts */
|
||||
IPSTATS_MIB_ECT0PKTS, /* InECT0Pkts */
|
||||
IPSTATS_MIB_CEPKTS, /* InCEPkts */
|
||||
__IPSTATS_MIB_MAX
|
||||
};
|
||||
|
||||
@ -85,6 +92,7 @@ enum
|
||||
ICMP_MIB_OUTTIMESTAMPREPS, /* OutTimestampReps */
|
||||
ICMP_MIB_OUTADDRMASKS, /* OutAddrMasks */
|
||||
ICMP_MIB_OUTADDRMASKREPS, /* OutAddrMaskReps */
|
||||
ICMP_MIB_CSUMERRORS, /* InCsumErrors */
|
||||
__ICMP_MIB_MAX
|
||||
};
|
||||
|
||||
@ -101,6 +109,7 @@ enum
|
||||
ICMP6_MIB_INERRORS, /* InErrors */
|
||||
ICMP6_MIB_OUTMSGS, /* OutMsgs */
|
||||
ICMP6_MIB_OUTERRORS, /* OutErrors */
|
||||
ICMP6_MIB_CSUMERRORS, /* InCsumErrors */
|
||||
__ICMP6_MIB_MAX
|
||||
};
|
||||
|
||||
@ -128,6 +137,7 @@ enum
|
||||
TCP_MIB_RETRANSSEGS, /* RetransSegs */
|
||||
TCP_MIB_INERRS, /* InErrs */
|
||||
TCP_MIB_OUTRSTS, /* OutRsts */
|
||||
TCP_MIB_CSUMERRORS, /* InCsumErrors */
|
||||
__TCP_MIB_MAX
|
||||
};
|
||||
|
||||
@ -145,6 +155,7 @@ enum
|
||||
UDP_MIB_OUTDATAGRAMS, /* OutDatagrams */
|
||||
UDP_MIB_RCVBUFERRORS, /* RcvbufErrors */
|
||||
UDP_MIB_SNDBUFERRORS, /* SndbufErrors */
|
||||
UDP_MIB_CSUMERRORS, /* InCsumErrors */
|
||||
__UDP_MIB_MAX
|
||||
};
|
||||
|
||||
@ -192,7 +203,6 @@ enum
|
||||
LINUX_MIB_TCPPARTIALUNDO, /* TCPPartialUndo */
|
||||
LINUX_MIB_TCPDSACKUNDO, /* TCPDSACKUndo */
|
||||
LINUX_MIB_TCPLOSSUNDO, /* TCPLossUndo */
|
||||
LINUX_MIB_TCPLOSS, /* TCPLoss */
|
||||
LINUX_MIB_TCPLOSTRETRANSMIT, /* TCPLostRetransmit */
|
||||
LINUX_MIB_TCPRENOFAILURES, /* TCPRenoFailures */
|
||||
LINUX_MIB_TCPSACKFAILURES, /* TCPSackFailures */
|
||||
@ -201,6 +211,8 @@ enum
|
||||
LINUX_MIB_TCPFORWARDRETRANS, /* TCPForwardRetrans */
|
||||
LINUX_MIB_TCPSLOWSTARTRETRANS, /* TCPSlowStartRetrans */
|
||||
LINUX_MIB_TCPTIMEOUTS, /* TCPTimeouts */
|
||||
LINUX_MIB_TCPLOSSPROBES, /* TCPLossProbes */
|
||||
LINUX_MIB_TCPLOSSPROBERECOVERY, /* TCPLossProbeRecovery */
|
||||
LINUX_MIB_TCPRENORECOVERYFAIL, /* TCPRenoRecoveryFail */
|
||||
LINUX_MIB_TCPSACKRECOVERYFAIL, /* TCPSackRecoveryFail */
|
||||
LINUX_MIB_TCPSCHEDULERFAILED, /* TCPSchedulerFailed */
|
||||
@ -209,7 +221,6 @@ enum
|
||||
LINUX_MIB_TCPDSACKOFOSENT, /* TCPDSACKOfoSent */
|
||||
LINUX_MIB_TCPDSACKRECV, /* TCPDSACKRecv */
|
||||
LINUX_MIB_TCPDSACKOFORECV, /* TCPDSACKOfoRecv */
|
||||
LINUX_MIB_TCPABORTONSYN, /* TCPAbortOnSyn */
|
||||
LINUX_MIB_TCPABORTONDATA, /* TCPAbortOnData */
|
||||
LINUX_MIB_TCPABORTONCLOSE, /* TCPAbortOnClose */
|
||||
LINUX_MIB_TCPABORTONMEMORY, /* TCPAbortOnMemory */
|
||||
@ -231,6 +242,22 @@ enum
|
||||
LINUX_MIB_TCPDEFERACCEPTDROP,
|
||||
LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */
|
||||
LINUX_MIB_TCPTIMEWAITOVERFLOW, /* TCPTimeWaitOverflow */
|
||||
LINUX_MIB_TCPREQQFULLDOCOOKIES, /* TCPReqQFullDoCookies */
|
||||
LINUX_MIB_TCPREQQFULLDROP, /* TCPReqQFullDrop */
|
||||
LINUX_MIB_TCPRETRANSFAIL, /* TCPRetransFail */
|
||||
LINUX_MIB_TCPRCVCOALESCE, /* TCPRcvCoalesce */
|
||||
LINUX_MIB_TCPOFOQUEUE, /* TCPOFOQueue */
|
||||
LINUX_MIB_TCPOFODROP, /* TCPOFODrop */
|
||||
LINUX_MIB_TCPOFOMERGE, /* TCPOFOMerge */
|
||||
LINUX_MIB_TCPCHALLENGEACK, /* TCPChallengeACK */
|
||||
LINUX_MIB_TCPSYNCHALLENGE, /* TCPSYNChallenge */
|
||||
LINUX_MIB_TCPFASTOPENACTIVE, /* TCPFastOpenActive */
|
||||
LINUX_MIB_TCPFASTOPENPASSIVE, /* TCPFastOpenPassive*/
|
||||
LINUX_MIB_TCPFASTOPENPASSIVEFAIL, /* TCPFastOpenPassiveFail */
|
||||
LINUX_MIB_TCPFASTOPENLISTENOVERFLOW, /* TCPFastOpenListenOverflow */
|
||||
LINUX_MIB_TCPFASTOPENCOOKIEREQD, /* TCPFastOpenCookieReqd */
|
||||
LINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES, /* TCPSpuriousRtxHostQueues */
|
||||
LINUX_MIB_BUSYPOLLRXPACKETS, /* BusyPollRxPackets */
|
||||
__LINUX_MIB_MAX
|
||||
};
|
||||
|
||||
@ -264,6 +291,8 @@ enum
|
||||
LINUX_MIB_XFRMOUTPOLDEAD, /* XfrmOutPolDead */
|
||||
LINUX_MIB_XFRMOUTPOLERROR, /* XfrmOutPolError */
|
||||
LINUX_MIB_XFRMFWDHDRERROR, /* XfrmFwdHdrError*/
|
||||
LINUX_MIB_XFRMOUTSTATEINVALID, /* XfrmOutStateInvalid */
|
||||
LINUX_MIB_XFRMACQUIREERROR, /* XfrmAcquireError */
|
||||
__LINUX_MIB_XFRMMAX
|
||||
};
|
||||
|
||||
|
@ -93,6 +93,12 @@ typedef enum {
|
||||
RTNL_LINK_ICMP6_INERRORS, /*!< ICMPv6 SNMP InErrors */
|
||||
RTNL_LINK_ICMP6_OUTMSGS, /*!< ICMPv6 SNMP OutMsgs */
|
||||
RTNL_LINK_ICMP6_OUTERRORS, /*!< ICMPv6 SNMP OutErrors */
|
||||
RTNL_LINK_ICMP6_CSUMERRORS, /*!< ICMPv6 SNMP InCsumErrors */
|
||||
RTNL_LINK_IP6_CSUMERRORS, /*!< IPv6 SNMP InCsumErrors */
|
||||
RTNL_LINK_IP6_NOECTPKTS, /*!< IPv6 SNMP InNoECTPkts */
|
||||
RTNL_LINK_IP6_ECT1PKTS, /*!< IPv6 SNMP InECT1Pkts */
|
||||
RTNL_LINK_IP6_ECT0PKTS, /*!< IPv6 SNMP InECT0Pkts */
|
||||
RTNL_LINK_IP6_CEPKTS, /*!< IPv6 SNMP InCEPkts */
|
||||
__RTNL_LINK_STATS_MAX,
|
||||
} rtnl_link_stat_id_t;
|
||||
|
||||
|
@ -2599,6 +2599,12 @@ static const struct trans_tbl link_stats[] = {
|
||||
__ADD(RTNL_LINK_ICMP6_INERRORS, ICMP6_InErrors)
|
||||
__ADD(RTNL_LINK_ICMP6_OUTMSGS, ICMP6_OutMsgs)
|
||||
__ADD(RTNL_LINK_ICMP6_OUTERRORS, ICMP6_OutErrors)
|
||||
__ADD(RTNL_LINK_ICMP6_CSUMERRORS, ICMP6_InCsumErrors)
|
||||
__ADD(RTNL_LINK_IP6_CSUMERRORS, Ip6_InCsumErrors)
|
||||
__ADD(RTNL_LINK_IP6_NOECTPKTS, Ip6_InNoECTPkts)
|
||||
__ADD(RTNL_LINK_IP6_ECT1PKTS, Ip6_InECT1Pkts)
|
||||
__ADD(RTNL_LINK_IP6_ECT0PKTS, Ip6_InECT0Pkts)
|
||||
__ADD(RTNL_LINK_IP6_CEPKTS, Ip6_InCEPkts)
|
||||
};
|
||||
|
||||
char *rtnl_link_stat2str(int st, char *buf, size_t len)
|
||||
|
@ -50,6 +50,84 @@ static struct nla_policy inet6_policy[IFLA_INET6_MAX+1] = {
|
||||
[IFLA_INET6_ICMP6STATS] = { .minlen = 8 },
|
||||
};
|
||||
|
||||
static const uint8_t map_stat_id_from_IPSTATS_MIB_v1[__IPSTATS_MIB_MAX] = {
|
||||
/* 14a196807482e6fc74f15fc03176d5c08880588f^:include/linux/snmp.h
|
||||
* version before the API change in commit 14a196807482e6fc74f15fc03176d5c08880588f.
|
||||
* This version was valid since commit edf391ff17232f097d72441c9ad467bcb3b5db18, which
|
||||
* predates support for parsing IFLA_PROTINFO in libnl3. Such an even older meaning of
|
||||
* the flags is not supported in libnl3. */
|
||||
[ 1] = RTNL_LINK_IP6_INPKTS, /* IPSTATS_MIB_INPKTS */
|
||||
[ 2] = RTNL_LINK_IP6_INHDRERRORS, /* IPSTATS_MIB_INHDRERRORS */
|
||||
[ 3] = RTNL_LINK_IP6_INTOOBIGERRORS, /* IPSTATS_MIB_INTOOBIGERRORS */
|
||||
[ 4] = RTNL_LINK_IP6_INNOROUTES, /* IPSTATS_MIB_INNOROUTES */
|
||||
[ 5] = RTNL_LINK_IP6_INADDRERRORS, /* IPSTATS_MIB_INADDRERRORS */
|
||||
[ 6] = RTNL_LINK_IP6_INUNKNOWNPROTOS, /* IPSTATS_MIB_INUNKNOWNPROTOS */
|
||||
[ 7] = RTNL_LINK_IP6_INTRUNCATEDPKTS, /* IPSTATS_MIB_INTRUNCATEDPKTS */
|
||||
[ 8] = RTNL_LINK_IP6_INDISCARDS, /* IPSTATS_MIB_INDISCARDS */
|
||||
[ 9] = RTNL_LINK_IP6_INDELIVERS, /* IPSTATS_MIB_INDELIVERS */
|
||||
[10] = RTNL_LINK_IP6_OUTFORWDATAGRAMS, /* IPSTATS_MIB_OUTFORWDATAGRAMS */
|
||||
[11] = RTNL_LINK_IP6_OUTPKTS, /* IPSTATS_MIB_OUTPKTS */
|
||||
[12] = RTNL_LINK_IP6_OUTDISCARDS, /* IPSTATS_MIB_OUTDISCARDS */
|
||||
[13] = RTNL_LINK_IP6_OUTNOROUTES, /* IPSTATS_MIB_OUTNOROUTES */
|
||||
[14] = RTNL_LINK_IP6_REASMTIMEOUT, /* IPSTATS_MIB_REASMTIMEOUT */
|
||||
[15] = RTNL_LINK_IP6_REASMREQDS, /* IPSTATS_MIB_REASMREQDS */
|
||||
[16] = RTNL_LINK_IP6_REASMOKS, /* IPSTATS_MIB_REASMOKS */
|
||||
[17] = RTNL_LINK_IP6_REASMFAILS, /* IPSTATS_MIB_REASMFAILS */
|
||||
[18] = RTNL_LINK_IP6_FRAGOKS, /* IPSTATS_MIB_FRAGOKS */
|
||||
[19] = RTNL_LINK_IP6_FRAGFAILS, /* IPSTATS_MIB_FRAGFAILS */
|
||||
[20] = RTNL_LINK_IP6_FRAGCREATES, /* IPSTATS_MIB_FRAGCREATES */
|
||||
[21] = RTNL_LINK_IP6_INMCASTPKTS, /* IPSTATS_MIB_INMCASTPKTS */
|
||||
[22] = RTNL_LINK_IP6_OUTMCASTPKTS, /* IPSTATS_MIB_OUTMCASTPKTS */
|
||||
[23] = RTNL_LINK_IP6_INBCASTPKTS, /* IPSTATS_MIB_INBCASTPKTS */
|
||||
[24] = RTNL_LINK_IP6_OUTBCASTPKTS, /* IPSTATS_MIB_OUTBCASTPKTS */
|
||||
[25] = RTNL_LINK_IP6_INOCTETS, /* IPSTATS_MIB_INOCTETS */
|
||||
[26] = RTNL_LINK_IP6_OUTOCTETS, /* IPSTATS_MIB_OUTOCTETS */
|
||||
[27] = RTNL_LINK_IP6_INMCASTOCTETS, /* IPSTATS_MIB_INMCASTOCTETS */
|
||||
[28] = RTNL_LINK_IP6_OUTMCASTOCTETS, /* IPSTATS_MIB_OUTMCASTOCTETS */
|
||||
[29] = RTNL_LINK_IP6_INBCASTOCTETS, /* IPSTATS_MIB_INBCASTOCTETS */
|
||||
[30] = RTNL_LINK_IP6_OUTBCASTOCTETS, /* IPSTATS_MIB_OUTBCASTOCTETS */
|
||||
};
|
||||
|
||||
static const uint8_t map_stat_id_from_IPSTATS_MIB_v2[__IPSTATS_MIB_MAX] = {
|
||||
/* d8ec26d7f8287f5788a494f56e8814210f0e64be:include/uapi/linux/snmp.h
|
||||
* version since the API change in commit 14a196807482e6fc74f15fc03176d5c08880588f */
|
||||
[ 1] = RTNL_LINK_IP6_INPKTS, /* IPSTATS_MIB_INPKTS */
|
||||
[ 2] = RTNL_LINK_IP6_INOCTETS, /* IPSTATS_MIB_INOCTETS */
|
||||
[ 3] = RTNL_LINK_IP6_INDELIVERS, /* IPSTATS_MIB_INDELIVERS */
|
||||
[ 4] = RTNL_LINK_IP6_OUTFORWDATAGRAMS, /* IPSTATS_MIB_OUTFORWDATAGRAMS */
|
||||
[ 5] = RTNL_LINK_IP6_OUTPKTS, /* IPSTATS_MIB_OUTPKTS */
|
||||
[ 6] = RTNL_LINK_IP6_OUTOCTETS, /* IPSTATS_MIB_OUTOCTETS */
|
||||
[ 7] = RTNL_LINK_IP6_INHDRERRORS, /* IPSTATS_MIB_INHDRERRORS */
|
||||
[ 8] = RTNL_LINK_IP6_INTOOBIGERRORS, /* IPSTATS_MIB_INTOOBIGERRORS */
|
||||
[ 9] = RTNL_LINK_IP6_INNOROUTES, /* IPSTATS_MIB_INNOROUTES */
|
||||
[10] = RTNL_LINK_IP6_INADDRERRORS, /* IPSTATS_MIB_INADDRERRORS */
|
||||
[11] = RTNL_LINK_IP6_INUNKNOWNPROTOS, /* IPSTATS_MIB_INUNKNOWNPROTOS */
|
||||
[12] = RTNL_LINK_IP6_INTRUNCATEDPKTS, /* IPSTATS_MIB_INTRUNCATEDPKTS */
|
||||
[13] = RTNL_LINK_IP6_INDISCARDS, /* IPSTATS_MIB_INDISCARDS */
|
||||
[14] = RTNL_LINK_IP6_OUTDISCARDS, /* IPSTATS_MIB_OUTDISCARDS */
|
||||
[15] = RTNL_LINK_IP6_OUTNOROUTES, /* IPSTATS_MIB_OUTNOROUTES */
|
||||
[16] = RTNL_LINK_IP6_REASMTIMEOUT, /* IPSTATS_MIB_REASMTIMEOUT */
|
||||
[17] = RTNL_LINK_IP6_REASMREQDS, /* IPSTATS_MIB_REASMREQDS */
|
||||
[18] = RTNL_LINK_IP6_REASMOKS, /* IPSTATS_MIB_REASMOKS */
|
||||
[19] = RTNL_LINK_IP6_REASMFAILS, /* IPSTATS_MIB_REASMFAILS */
|
||||
[20] = RTNL_LINK_IP6_FRAGOKS, /* IPSTATS_MIB_FRAGOKS */
|
||||
[21] = RTNL_LINK_IP6_FRAGFAILS, /* IPSTATS_MIB_FRAGFAILS */
|
||||
[22] = RTNL_LINK_IP6_FRAGCREATES, /* IPSTATS_MIB_FRAGCREATES */
|
||||
[23] = RTNL_LINK_IP6_INMCASTPKTS, /* IPSTATS_MIB_INMCASTPKTS */
|
||||
[24] = RTNL_LINK_IP6_OUTMCASTPKTS, /* IPSTATS_MIB_OUTMCASTPKTS */
|
||||
[25] = RTNL_LINK_IP6_INBCASTPKTS, /* IPSTATS_MIB_INBCASTPKTS */
|
||||
[26] = RTNL_LINK_IP6_OUTBCASTPKTS, /* IPSTATS_MIB_OUTBCASTPKTS */
|
||||
[27] = RTNL_LINK_IP6_INMCASTOCTETS, /* IPSTATS_MIB_INMCASTOCTETS */
|
||||
[28] = RTNL_LINK_IP6_OUTMCASTOCTETS, /* IPSTATS_MIB_OUTMCASTOCTETS */
|
||||
[29] = RTNL_LINK_IP6_INBCASTOCTETS, /* IPSTATS_MIB_INBCASTOCTETS */
|
||||
[30] = RTNL_LINK_IP6_OUTBCASTOCTETS, /* IPSTATS_MIB_OUTBCASTOCTETS */
|
||||
[31] = RTNL_LINK_IP6_CSUMERRORS, /* IPSTATS_MIB_CSUMERRORS */
|
||||
[32] = RTNL_LINK_IP6_NOECTPKTS, /* IPSTATS_MIB_NOECTPKTS */
|
||||
[33] = RTNL_LINK_IP6_ECT1PKTS, /* IPSTATS_MIB_ECT1PKTS */
|
||||
[34] = RTNL_LINK_IP6_ECT0PKTS, /* IPSTATS_MIB_ECT0PKTS */
|
||||
[35] = RTNL_LINK_IP6_CEPKTS, /* IPSTATS_MIB_CEPKTS */
|
||||
};
|
||||
|
||||
static int inet6_parse_protinfo(struct rtnl_link *link, struct nlattr *attr,
|
||||
void *data)
|
||||
{
|
||||
@ -86,12 +164,23 @@ static int inet6_parse_protinfo(struct rtnl_link *link, struct nlattr *attr,
|
||||
unsigned char *cnt = nla_data(tb[IFLA_INET6_STATS]);
|
||||
uint64_t stat;
|
||||
int i;
|
||||
int len = min_t(int, __IPSTATS_MIB_MAX, nla_len(tb[IFLA_INET6_STATS]) / 8);
|
||||
int len = nla_len(tb[IFLA_INET6_STATS]) / 8;
|
||||
const uint8_t *map_stat_id = map_stat_id_from_IPSTATS_MIB_v2;
|
||||
|
||||
if (len < 32 ||
|
||||
(tb[IFLA_INET6_ICMP6STATS] && nla_len(tb[IFLA_INET6_ICMP6STATS]) < 6)) {
|
||||
/* kernel commit 14a196807482e6fc74f15fc03176d5c08880588f reordered the values.
|
||||
* The later commit 6a5dc9e598fe90160fee7de098fa319665f5253e added values
|
||||
* IPSTATS_MIB_CSUMERRORS/ICMP6_MIB_CSUMERRORS. If the netlink is shorter
|
||||
* then this, assume that the kernel uses the previous meaning of the
|
||||
* enumeration. */
|
||||
map_stat_id = map_stat_id_from_IPSTATS_MIB_v1;
|
||||
}
|
||||
|
||||
len = min_t(int, __IPSTATS_MIB_MAX, len);
|
||||
for (i = 1; i < len; i++) {
|
||||
memcpy(&stat, &cnt[i * sizeof(stat)], sizeof(stat));
|
||||
rtnl_link_set_stat(link, RTNL_LINK_IP6_INPKTS + i - 1,
|
||||
stat);
|
||||
rtnl_link_set_stat(link, map_stat_id[i], stat);
|
||||
}
|
||||
}
|
||||
|
||||
@ -343,19 +432,29 @@ static void inet6_dump_stats(struct rtnl_link *link,
|
||||
link->l_stats[RTNL_LINK_IP6_INADDRERRORS]);
|
||||
|
||||
nl_dump(p, " InUnknownProtos InTruncatedPkts "
|
||||
" OutNoRoutes\n");
|
||||
nl_dump(p, " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 "\n",
|
||||
" OutNoRoutes InCsumErrors\n");
|
||||
nl_dump(p, " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 "\n",
|
||||
link->l_stats[RTNL_LINK_IP6_INUNKNOWNPROTOS],
|
||||
link->l_stats[RTNL_LINK_IP6_INTRUNCATEDPKTS],
|
||||
link->l_stats[RTNL_LINK_IP6_OUTNOROUTES]);
|
||||
link->l_stats[RTNL_LINK_IP6_OUTNOROUTES],
|
||||
link->l_stats[RTNL_LINK_IP6_CSUMERRORS]);
|
||||
|
||||
nl_dump(p, " InNoECTPkts InECT1Pkts "
|
||||
" InECT0Pkts InCEPkts\n");
|
||||
nl_dump(p, " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 "\n",
|
||||
link->l_stats[RTNL_LINK_IP6_NOECTPKTS],
|
||||
link->l_stats[RTNL_LINK_IP6_ECT1PKTS],
|
||||
link->l_stats[RTNL_LINK_IP6_ECT0PKTS],
|
||||
link->l_stats[RTNL_LINK_IP6_CEPKTS]);
|
||||
|
||||
nl_dump(p, " ICMPv6: InMsgs InErrors "
|
||||
" OutMsgs OutErrors\n");
|
||||
nl_dump(p, " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 "\n",
|
||||
" OutMsgs OutErrors InCsumErrors\n");
|
||||
nl_dump(p, " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 " %18" PRIu64 "\n",
|
||||
link->l_stats[RTNL_LINK_ICMP6_INMSGS],
|
||||
link->l_stats[RTNL_LINK_ICMP6_INERRORS],
|
||||
link->l_stats[RTNL_LINK_ICMP6_OUTMSGS],
|
||||
link->l_stats[RTNL_LINK_ICMP6_OUTERRORS]);
|
||||
link->l_stats[RTNL_LINK_ICMP6_OUTERRORS],
|
||||
link->l_stats[RTNL_LINK_ICMP6_CSUMERRORS]);
|
||||
}
|
||||
|
||||
static const struct nla_policy protinfo_policy = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user