mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Extract ICMPv4/v6 specific stats to their own types
This change lets us split the v4 stats from the v6 stats, which will be useful when adding stats for each network endpoint. PiperOrigin-RevId: 345322615
This commit is contained in:
@@ -84,69 +84,73 @@ var Metrics = tcpip.Stats{
|
||||
MalformedRcvdPackets: mustCreateMetric("/netstack/malformed_received_packets", "Number of packets received by netstack that were deemed malformed."),
|
||||
DroppedPackets: mustCreateMetric("/netstack/dropped_packets", "Number of packets dropped by netstack due to full queues."),
|
||||
ICMP: tcpip.ICMPStats{
|
||||
V4PacketsSent: tcpip.ICMPv4SentPacketStats{
|
||||
ICMPv4PacketStats: tcpip.ICMPv4PacketStats{
|
||||
Echo: mustCreateMetric("/netstack/icmp/v4/packets_sent/echo", "Total number of ICMPv4 echo packets sent by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v4/packets_sent/echo_reply", "Total number of ICMPv4 echo reply packets sent by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v4/packets_sent/dst_unreachable", "Total number of ICMPv4 destination unreachable packets sent by netstack."),
|
||||
SrcQuench: mustCreateMetric("/netstack/icmp/v4/packets_sent/src_quench", "Total number of ICMPv4 source quench packets sent by netstack."),
|
||||
Redirect: mustCreateMetric("/netstack/icmp/v4/packets_sent/redirect", "Total number of ICMPv4 redirect packets sent by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v4/packets_sent/time_exceeded", "Total number of ICMPv4 time exceeded packets sent by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v4/packets_sent/param_problem", "Total number of ICMPv4 parameter problem packets sent by netstack."),
|
||||
Timestamp: mustCreateMetric("/netstack/icmp/v4/packets_sent/timestamp", "Total number of ICMPv4 timestamp packets sent by netstack."),
|
||||
TimestampReply: mustCreateMetric("/netstack/icmp/v4/packets_sent/timestamp_reply", "Total number of ICMPv4 timestamp reply packets sent by netstack."),
|
||||
InfoRequest: mustCreateMetric("/netstack/icmp/v4/packets_sent/info_request", "Total number of ICMPv4 information request packets sent by netstack."),
|
||||
InfoReply: mustCreateMetric("/netstack/icmp/v4/packets_sent/info_reply", "Total number of ICMPv4 information reply packets sent by netstack."),
|
||||
V4: tcpip.ICMPv4Stats{
|
||||
PacketsSent: tcpip.ICMPv4SentPacketStats{
|
||||
ICMPv4PacketStats: tcpip.ICMPv4PacketStats{
|
||||
Echo: mustCreateMetric("/netstack/icmp/v4/packets_sent/echo", "Total number of ICMPv4 echo packets sent by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v4/packets_sent/echo_reply", "Total number of ICMPv4 echo reply packets sent by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v4/packets_sent/dst_unreachable", "Total number of ICMPv4 destination unreachable packets sent by netstack."),
|
||||
SrcQuench: mustCreateMetric("/netstack/icmp/v4/packets_sent/src_quench", "Total number of ICMPv4 source quench packets sent by netstack."),
|
||||
Redirect: mustCreateMetric("/netstack/icmp/v4/packets_sent/redirect", "Total number of ICMPv4 redirect packets sent by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v4/packets_sent/time_exceeded", "Total number of ICMPv4 time exceeded packets sent by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v4/packets_sent/param_problem", "Total number of ICMPv4 parameter problem packets sent by netstack."),
|
||||
Timestamp: mustCreateMetric("/netstack/icmp/v4/packets_sent/timestamp", "Total number of ICMPv4 timestamp packets sent by netstack."),
|
||||
TimestampReply: mustCreateMetric("/netstack/icmp/v4/packets_sent/timestamp_reply", "Total number of ICMPv4 timestamp reply packets sent by netstack."),
|
||||
InfoRequest: mustCreateMetric("/netstack/icmp/v4/packets_sent/info_request", "Total number of ICMPv4 information request packets sent by netstack."),
|
||||
InfoReply: mustCreateMetric("/netstack/icmp/v4/packets_sent/info_reply", "Total number of ICMPv4 information reply packets sent by netstack."),
|
||||
},
|
||||
Dropped: mustCreateMetric("/netstack/icmp/v4/packets_sent/dropped", "Total number of ICMPv4 packets dropped by netstack due to link layer errors."),
|
||||
},
|
||||
PacketsReceived: tcpip.ICMPv4ReceivedPacketStats{
|
||||
ICMPv4PacketStats: tcpip.ICMPv4PacketStats{
|
||||
Echo: mustCreateMetric("/netstack/icmp/v4/packets_received/echo", "Total number of ICMPv4 echo packets received by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v4/packets_received/echo_reply", "Total number of ICMPv4 echo reply packets received by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v4/packets_received/dst_unreachable", "Total number of ICMPv4 destination unreachable packets received by netstack."),
|
||||
SrcQuench: mustCreateMetric("/netstack/icmp/v4/packets_received/src_quench", "Total number of ICMPv4 source quench packets received by netstack."),
|
||||
Redirect: mustCreateMetric("/netstack/icmp/v4/packets_received/redirect", "Total number of ICMPv4 redirect packets received by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v4/packets_received/time_exceeded", "Total number of ICMPv4 time exceeded packets received by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v4/packets_received/param_problem", "Total number of ICMPv4 parameter problem packets received by netstack."),
|
||||
Timestamp: mustCreateMetric("/netstack/icmp/v4/packets_received/timestamp", "Total number of ICMPv4 timestamp packets received by netstack."),
|
||||
TimestampReply: mustCreateMetric("/netstack/icmp/v4/packets_received/timestamp_reply", "Total number of ICMPv4 timestamp reply packets received by netstack."),
|
||||
InfoRequest: mustCreateMetric("/netstack/icmp/v4/packets_received/info_request", "Total number of ICMPv4 information request packets received by netstack."),
|
||||
InfoReply: mustCreateMetric("/netstack/icmp/v4/packets_received/info_reply", "Total number of ICMPv4 information reply packets received by netstack."),
|
||||
},
|
||||
Invalid: mustCreateMetric("/netstack/icmp/v4/packets_received/invalid", "Total number of ICMPv4 packets received that the transport layer could not parse."),
|
||||
},
|
||||
Dropped: mustCreateMetric("/netstack/icmp/v4/packets_sent/dropped", "Total number of ICMPv4 packets dropped by netstack due to link layer errors."),
|
||||
},
|
||||
V4PacketsReceived: tcpip.ICMPv4ReceivedPacketStats{
|
||||
ICMPv4PacketStats: tcpip.ICMPv4PacketStats{
|
||||
Echo: mustCreateMetric("/netstack/icmp/v4/packets_received/echo", "Total number of ICMPv4 echo packets received by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v4/packets_received/echo_reply", "Total number of ICMPv4 echo reply packets received by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v4/packets_received/dst_unreachable", "Total number of ICMPv4 destination unreachable packets received by netstack."),
|
||||
SrcQuench: mustCreateMetric("/netstack/icmp/v4/packets_received/src_quench", "Total number of ICMPv4 source quench packets received by netstack."),
|
||||
Redirect: mustCreateMetric("/netstack/icmp/v4/packets_received/redirect", "Total number of ICMPv4 redirect packets received by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v4/packets_received/time_exceeded", "Total number of ICMPv4 time exceeded packets received by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v4/packets_received/param_problem", "Total number of ICMPv4 parameter problem packets received by netstack."),
|
||||
Timestamp: mustCreateMetric("/netstack/icmp/v4/packets_received/timestamp", "Total number of ICMPv4 timestamp packets received by netstack."),
|
||||
TimestampReply: mustCreateMetric("/netstack/icmp/v4/packets_received/timestamp_reply", "Total number of ICMPv4 timestamp reply packets received by netstack."),
|
||||
InfoRequest: mustCreateMetric("/netstack/icmp/v4/packets_received/info_request", "Total number of ICMPv4 information request packets received by netstack."),
|
||||
InfoReply: mustCreateMetric("/netstack/icmp/v4/packets_received/info_reply", "Total number of ICMPv4 information reply packets received by netstack."),
|
||||
V6: tcpip.ICMPv6Stats{
|
||||
PacketsSent: tcpip.ICMPv6SentPacketStats{
|
||||
ICMPv6PacketStats: tcpip.ICMPv6PacketStats{
|
||||
EchoRequest: mustCreateMetric("/netstack/icmp/v6/packets_sent/echo_request", "Total number of ICMPv6 echo request packets sent by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v6/packets_sent/echo_reply", "Total number of ICMPv6 echo reply packets sent by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v6/packets_sent/dst_unreachable", "Total number of ICMPv6 destination unreachable packets sent by netstack."),
|
||||
PacketTooBig: mustCreateMetric("/netstack/icmp/v6/packets_sent/packet_too_big", "Total number of ICMPv6 packet too big packets sent by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v6/packets_sent/time_exceeded", "Total number of ICMPv6 time exceeded packets sent by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v6/packets_sent/param_problem", "Total number of ICMPv6 parameter problem packets sent by netstack."),
|
||||
RouterSolicit: mustCreateMetric("/netstack/icmp/v6/packets_sent/router_solicit", "Total number of ICMPv6 router solicit packets sent by netstack."),
|
||||
RouterAdvert: mustCreateMetric("/netstack/icmp/v6/packets_sent/router_advert", "Total number of ICMPv6 router advert packets sent by netstack."),
|
||||
NeighborSolicit: mustCreateMetric("/netstack/icmp/v6/packets_sent/neighbor_solicit", "Total number of ICMPv6 neighbor solicit packets sent by netstack."),
|
||||
NeighborAdvert: mustCreateMetric("/netstack/icmp/v6/packets_sent/neighbor_advert", "Total number of ICMPv6 neighbor advert packets sent by netstack."),
|
||||
RedirectMsg: mustCreateMetric("/netstack/icmp/v6/packets_sent/redirect_msg", "Total number of ICMPv6 redirect message packets sent by netstack."),
|
||||
},
|
||||
Dropped: mustCreateMetric("/netstack/icmp/v6/packets_sent/dropped", "Total number of ICMPv6 packets dropped by netstack due to link layer errors."),
|
||||
},
|
||||
Invalid: mustCreateMetric("/netstack/icmp/v4/packets_received/invalid", "Total number of ICMPv4 packets received that the transport layer could not parse."),
|
||||
},
|
||||
V6PacketsSent: tcpip.ICMPv6SentPacketStats{
|
||||
ICMPv6PacketStats: tcpip.ICMPv6PacketStats{
|
||||
EchoRequest: mustCreateMetric("/netstack/icmp/v6/packets_sent/echo_request", "Total number of ICMPv6 echo request packets sent by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v6/packets_sent/echo_reply", "Total number of ICMPv6 echo reply packets sent by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v6/packets_sent/dst_unreachable", "Total number of ICMPv6 destination unreachable packets sent by netstack."),
|
||||
PacketTooBig: mustCreateMetric("/netstack/icmp/v6/packets_sent/packet_too_big", "Total number of ICMPv6 packet too big packets sent by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v6/packets_sent/time_exceeded", "Total number of ICMPv6 time exceeded packets sent by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v6/packets_sent/param_problem", "Total number of ICMPv6 parameter problem packets sent by netstack."),
|
||||
RouterSolicit: mustCreateMetric("/netstack/icmp/v6/packets_sent/router_solicit", "Total number of ICMPv6 router solicit packets sent by netstack."),
|
||||
RouterAdvert: mustCreateMetric("/netstack/icmp/v6/packets_sent/router_advert", "Total number of ICMPv6 router advert packets sent by netstack."),
|
||||
NeighborSolicit: mustCreateMetric("/netstack/icmp/v6/packets_sent/neighbor_solicit", "Total number of ICMPv6 neighbor solicit packets sent by netstack."),
|
||||
NeighborAdvert: mustCreateMetric("/netstack/icmp/v6/packets_sent/neighbor_advert", "Total number of ICMPv6 neighbor advert packets sent by netstack."),
|
||||
RedirectMsg: mustCreateMetric("/netstack/icmp/v6/packets_sent/redirect_msg", "Total number of ICMPv6 redirect message packets sent by netstack."),
|
||||
PacketsReceived: tcpip.ICMPv6ReceivedPacketStats{
|
||||
ICMPv6PacketStats: tcpip.ICMPv6PacketStats{
|
||||
EchoRequest: mustCreateMetric("/netstack/icmp/v6/packets_received/echo_request", "Total number of ICMPv6 echo request packets received by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v6/packets_received/echo_reply", "Total number of ICMPv6 echo reply packets received by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v6/packets_received/dst_unreachable", "Total number of ICMPv6 destination unreachable packets received by netstack."),
|
||||
PacketTooBig: mustCreateMetric("/netstack/icmp/v6/packets_received/packet_too_big", "Total number of ICMPv6 packet too big packets received by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v6/packets_received/time_exceeded", "Total number of ICMPv6 time exceeded packets received by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v6/packets_received/param_problem", "Total number of ICMPv6 parameter problem packets received by netstack."),
|
||||
RouterSolicit: mustCreateMetric("/netstack/icmp/v6/packets_received/router_solicit", "Total number of ICMPv6 router solicit packets received by netstack."),
|
||||
RouterAdvert: mustCreateMetric("/netstack/icmp/v6/packets_received/router_advert", "Total number of ICMPv6 router advert packets received by netstack."),
|
||||
NeighborSolicit: mustCreateMetric("/netstack/icmp/v6/packets_received/neighbor_solicit", "Total number of ICMPv6 neighbor solicit packets received by netstack."),
|
||||
NeighborAdvert: mustCreateMetric("/netstack/icmp/v6/packets_received/neighbor_advert", "Total number of ICMPv6 neighbor advert packets received by netstack."),
|
||||
RedirectMsg: mustCreateMetric("/netstack/icmp/v6/packets_received/redirect_msg", "Total number of ICMPv6 redirect message packets received by netstack."),
|
||||
},
|
||||
Invalid: mustCreateMetric("/netstack/icmp/v6/packets_received/invalid", "Total number of ICMPv6 packets received that the transport layer could not parse."),
|
||||
},
|
||||
Dropped: mustCreateMetric("/netstack/icmp/v6/packets_sent/dropped", "Total number of ICMPv6 packets dropped by netstack due to link layer errors."),
|
||||
},
|
||||
V6PacketsReceived: tcpip.ICMPv6ReceivedPacketStats{
|
||||
ICMPv6PacketStats: tcpip.ICMPv6PacketStats{
|
||||
EchoRequest: mustCreateMetric("/netstack/icmp/v6/packets_received/echo_request", "Total number of ICMPv6 echo request packets received by netstack."),
|
||||
EchoReply: mustCreateMetric("/netstack/icmp/v6/packets_received/echo_reply", "Total number of ICMPv6 echo reply packets received by netstack."),
|
||||
DstUnreachable: mustCreateMetric("/netstack/icmp/v6/packets_received/dst_unreachable", "Total number of ICMPv6 destination unreachable packets received by netstack."),
|
||||
PacketTooBig: mustCreateMetric("/netstack/icmp/v6/packets_received/packet_too_big", "Total number of ICMPv6 packet too big packets received by netstack."),
|
||||
TimeExceeded: mustCreateMetric("/netstack/icmp/v6/packets_received/time_exceeded", "Total number of ICMPv6 time exceeded packets received by netstack."),
|
||||
ParamProblem: mustCreateMetric("/netstack/icmp/v6/packets_received/param_problem", "Total number of ICMPv6 parameter problem packets received by netstack."),
|
||||
RouterSolicit: mustCreateMetric("/netstack/icmp/v6/packets_received/router_solicit", "Total number of ICMPv6 router solicit packets received by netstack."),
|
||||
RouterAdvert: mustCreateMetric("/netstack/icmp/v6/packets_received/router_advert", "Total number of ICMPv6 router advert packets received by netstack."),
|
||||
NeighborSolicit: mustCreateMetric("/netstack/icmp/v6/packets_received/neighbor_solicit", "Total number of ICMPv6 neighbor solicit packets received by netstack."),
|
||||
NeighborAdvert: mustCreateMetric("/netstack/icmp/v6/packets_received/neighbor_advert", "Total number of ICMPv6 neighbor advert packets received by netstack."),
|
||||
RedirectMsg: mustCreateMetric("/netstack/icmp/v6/packets_received/redirect_msg", "Total number of ICMPv6 redirect message packets received by netstack."),
|
||||
},
|
||||
Invalid: mustCreateMetric("/netstack/icmp/v6/packets_received/invalid", "Total number of ICMPv6 packets received that the transport layer could not parse."),
|
||||
},
|
||||
},
|
||||
IP: tcpip.IPStats{
|
||||
|
||||
@@ -324,12 +324,12 @@ func (s *Stack) Statistics(stat interface{}, arg string) error {
|
||||
0, // Support Ip/FragCreates.
|
||||
}
|
||||
case *inet.StatSNMPICMP:
|
||||
in := Metrics.ICMP.V4PacketsReceived.ICMPv4PacketStats
|
||||
out := Metrics.ICMP.V4PacketsSent.ICMPv4PacketStats
|
||||
in := Metrics.ICMP.V4.PacketsReceived.ICMPv4PacketStats
|
||||
out := Metrics.ICMP.V4.PacketsSent.ICMPv4PacketStats
|
||||
// TODO(gvisor.dev/issue/969) Support stubbed stats.
|
||||
*stats = inet.StatSNMPICMP{
|
||||
0, // Icmp/InMsgs.
|
||||
Metrics.ICMP.V4PacketsSent.Dropped.Value(), // InErrors.
|
||||
Metrics.ICMP.V4.PacketsSent.Dropped.Value(), // InErrors.
|
||||
0, // Icmp/InCsumErrors.
|
||||
in.DstUnreachable.Value(), // InDestUnreachs.
|
||||
in.TimeExceeded.Value(), // InTimeExcds.
|
||||
@@ -343,18 +343,18 @@ func (s *Stack) Statistics(stat interface{}, arg string) error {
|
||||
in.InfoRequest.Value(), // InAddrMasks.
|
||||
in.InfoReply.Value(), // InAddrMaskReps.
|
||||
0, // Icmp/OutMsgs.
|
||||
Metrics.ICMP.V4PacketsReceived.Invalid.Value(), // OutErrors.
|
||||
out.DstUnreachable.Value(), // OutDestUnreachs.
|
||||
out.TimeExceeded.Value(), // OutTimeExcds.
|
||||
out.ParamProblem.Value(), // OutParmProbs.
|
||||
out.SrcQuench.Value(), // OutSrcQuenchs.
|
||||
out.Redirect.Value(), // OutRedirects.
|
||||
out.Echo.Value(), // OutEchos.
|
||||
out.EchoReply.Value(), // OutEchoReps.
|
||||
out.Timestamp.Value(), // OutTimestamps.
|
||||
out.TimestampReply.Value(), // OutTimestampReps.
|
||||
out.InfoRequest.Value(), // OutAddrMasks.
|
||||
out.InfoReply.Value(), // OutAddrMaskReps.
|
||||
Metrics.ICMP.V4.PacketsReceived.Invalid.Value(), // OutErrors.
|
||||
out.DstUnreachable.Value(), // OutDestUnreachs.
|
||||
out.TimeExceeded.Value(), // OutTimeExcds.
|
||||
out.ParamProblem.Value(), // OutParmProbs.
|
||||
out.SrcQuench.Value(), // OutSrcQuenchs.
|
||||
out.Redirect.Value(), // OutRedirects.
|
||||
out.Echo.Value(), // OutEchos.
|
||||
out.EchoReply.Value(), // OutEchoReps.
|
||||
out.Timestamp.Value(), // OutTimestamps.
|
||||
out.TimestampReply.Value(), // OutTimestampReps.
|
||||
out.InfoRequest.Value(), // OutAddrMasks.
|
||||
out.InfoReply.Value(), // OutAddrMaskReps.
|
||||
}
|
||||
case *inet.StatSNMPTCP:
|
||||
tcp := Metrics.TCP
|
||||
|
||||
@@ -63,7 +63,7 @@ func (e *endpoint) handleControl(typ stack.ControlType, extra uint32, pkt *stack
|
||||
|
||||
func (e *endpoint) handleICMP(pkt *stack.PacketBuffer) {
|
||||
stats := e.protocol.stack.Stats()
|
||||
received := stats.ICMP.V4PacketsReceived
|
||||
received := stats.ICMP.V4.PacketsReceived
|
||||
// TODO(gvisor.dev/issue/170): ICMP packets don't have their
|
||||
// TransportHeader fields set. See icmp/protocol.go:protocol.Parse for a
|
||||
// full explanation.
|
||||
@@ -130,7 +130,7 @@ func (e *endpoint) handleICMP(pkt *stack.PacketBuffer) {
|
||||
case header.ICMPv4Echo:
|
||||
received.Echo.Increment()
|
||||
|
||||
sent := stats.ICMP.V4PacketsSent
|
||||
sent := stats.ICMP.V4.PacketsSent
|
||||
if !e.protocol.stack.AllowICMPMessage() {
|
||||
sent.RateLimited.Increment()
|
||||
return
|
||||
@@ -379,7 +379,7 @@ func (p *protocol) returnError(reason icmpReason, pkt *stack.PacketBuffer) *tcpi
|
||||
}
|
||||
defer route.Release()
|
||||
|
||||
sent := p.stack.Stats().ICMP.V4PacketsSent
|
||||
sent := p.stack.Stats().ICMP.V4.PacketsSent
|
||||
if !p.stack.AllowICMPMessage() {
|
||||
sent.RateLimited.Increment()
|
||||
return nil
|
||||
|
||||
@@ -126,8 +126,8 @@ func getTargetLinkAddr(it header.NDPOptionIterator) (tcpip.LinkAddress, bool) {
|
||||
|
||||
func (e *endpoint) handleICMP(pkt *stack.PacketBuffer, hasFragmentHeader bool) {
|
||||
stats := e.protocol.stack.Stats().ICMP
|
||||
sent := stats.V6PacketsSent
|
||||
received := stats.V6PacketsReceived
|
||||
sent := stats.V6.PacketsSent
|
||||
received := stats.V6.PacketsReceived
|
||||
// TODO(gvisor.dev/issue/170): ICMP packets don't have their
|
||||
// TransportHeader fields set. See icmp/protocol.go:protocol.Parse for a
|
||||
// full explanation.
|
||||
@@ -709,7 +709,7 @@ func (p *protocol) LinkAddressRequest(targetAddr, localAddr tcpip.Address, remot
|
||||
ns.Options().Serialize(optsSerializer)
|
||||
packet.SetChecksum(header.ICMPv6Checksum(packet, r.LocalAddress, r.RemoteAddress, buffer.VectorisedView{}))
|
||||
|
||||
stat := p.stack.Stats().ICMP.V6PacketsSent
|
||||
stat := p.stack.Stats().ICMP.V6.PacketsSent
|
||||
if err := r.WritePacket(nil /* gso */, stack.NetworkHeaderParams{
|
||||
Protocol: header.ICMPv6ProtocolNumber,
|
||||
TTL: header.NDPHopLimit,
|
||||
@@ -856,7 +856,7 @@ func (p *protocol) returnError(reason icmpReason, pkt *stack.PacketBuffer) *tcpi
|
||||
defer route.Release()
|
||||
|
||||
stats := p.stack.Stats().ICMP
|
||||
sent := stats.V6PacketsSent
|
||||
sent := stats.V6.PacketsSent
|
||||
if !p.stack.AllowICMPMessage() {
|
||||
sent.RateLimited.Increment()
|
||||
return nil
|
||||
|
||||
@@ -317,7 +317,7 @@ func TestICMPCounts(t *testing.T) {
|
||||
// Stats().ICMP.ICMPv6ReceivedPacketStats.Invalid is incremented.
|
||||
handleIPv6Payload(header.ICMPv6(buffer.NewView(header.IPv6MinimumSize)))
|
||||
|
||||
icmpv6Stats := s.Stats().ICMP.V6PacketsReceived
|
||||
icmpv6Stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
visitStats(reflect.ValueOf(&icmpv6Stats).Elem(), func(name string, s *tcpip.StatCounter) {
|
||||
if got, want := s.Value(), uint64(1); got != want {
|
||||
t.Errorf("got %s = %d, want = %d", name, got, want)
|
||||
@@ -475,7 +475,7 @@ func TestICMPCountsWithNeighborCache(t *testing.T) {
|
||||
// Stats().ICMP.ICMPv6ReceivedPacketStats.Invalid is incremented.
|
||||
handleIPv6Payload(header.ICMPv6(buffer.NewView(header.IPv6MinimumSize)))
|
||||
|
||||
icmpv6Stats := s.Stats().ICMP.V6PacketsReceived
|
||||
icmpv6Stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
visitStats(reflect.ValueOf(&icmpv6Stats).Elem(), func(name string, s *tcpip.StatCounter) {
|
||||
if got, want := s.Value(), uint64(1); got != want {
|
||||
t.Errorf("got %s = %d, want = %d", name, got, want)
|
||||
@@ -865,7 +865,7 @@ func TestICMPChecksumValidationSimple(t *testing.T) {
|
||||
e.InjectInbound(ProtocolNumber, pkt)
|
||||
}
|
||||
|
||||
stats := s.Stats().ICMP.V6PacketsReceived
|
||||
stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
invalid := stats.Invalid
|
||||
routerOnly := stats.RouterOnlyPacketsDroppedByHost
|
||||
typStat := typ.statCounter(stats)
|
||||
@@ -1060,7 +1060,7 @@ func TestICMPChecksumValidationWithPayload(t *testing.T) {
|
||||
e.InjectInbound(ProtocolNumber, pkt)
|
||||
}
|
||||
|
||||
stats := s.Stats().ICMP.V6PacketsReceived
|
||||
stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
invalid := stats.Invalid
|
||||
typStat := typ.statCounter(stats)
|
||||
|
||||
@@ -1239,7 +1239,7 @@ func TestICMPChecksumValidationWithPayloadMultipleViews(t *testing.T) {
|
||||
e.InjectInbound(ProtocolNumber, pkt)
|
||||
}
|
||||
|
||||
stats := s.Stats().ICMP.V6PacketsReceived
|
||||
stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
invalid := stats.Invalid
|
||||
typStat := typ.statCounter(stats)
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ func testReceiveICMP(t *testing.T, s *stack.Stack, e *channel.Endpoint, src, dst
|
||||
Data: hdr.View().ToVectorisedView(),
|
||||
}))
|
||||
|
||||
stats := s.Stats().ICMP.V6PacketsReceived
|
||||
stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
|
||||
if got := stats.NeighborAdvert.Value(); got != want {
|
||||
t.Fatalf("got NeighborAdvert = %d, want = %d", got, want)
|
||||
|
||||
@@ -125,7 +125,7 @@ func (mld *mldState) initializeAll() {
|
||||
}
|
||||
|
||||
func (mld *mldState) writePacket(destAddress, groupAddress tcpip.Address, mldType header.ICMPv6Type) *tcpip.Error {
|
||||
sentStats := mld.ep.protocol.stack.Stats().ICMP.V6PacketsSent
|
||||
sentStats := mld.ep.protocol.stack.Stats().ICMP.V6.PacketsSent
|
||||
var mldStat *tcpip.StatCounter
|
||||
switch mldType {
|
||||
case header.ICMPv6MulticastListenerReport:
|
||||
|
||||
@@ -724,7 +724,7 @@ func (ndp *ndpState) sendDADPacket(addr tcpip.Address, addressEndpoint stack.Add
|
||||
Data: buffer.View(icmp).ToVectorisedView(),
|
||||
})
|
||||
|
||||
sent := ndp.ep.protocol.stack.Stats().ICMP.V6PacketsSent
|
||||
sent := ndp.ep.protocol.stack.Stats().ICMP.V6.PacketsSent
|
||||
ndp.ep.addIPHeader(header.IPv6Any, snmc, pkt, stack.NetworkHeaderParams{
|
||||
Protocol: header.ICMPv6ProtocolNumber,
|
||||
TTL: header.NDPHopLimit,
|
||||
@@ -1846,7 +1846,7 @@ func (ndp *ndpState) startSolicitingRouters() {
|
||||
Data: buffer.View(icmpData).ToVectorisedView(),
|
||||
})
|
||||
|
||||
sent := ndp.ep.protocol.stack.Stats().ICMP.V6PacketsSent
|
||||
sent := ndp.ep.protocol.stack.Stats().ICMP.V6.PacketsSent
|
||||
ndp.ep.addIPHeader(localAddr, header.IPv6AllRoutersMulticastAddress, pkt, stack.NetworkHeaderParams{
|
||||
Protocol: header.ICMPv6ProtocolNumber,
|
||||
TTL: header.NDPHopLimit,
|
||||
|
||||
@@ -220,7 +220,7 @@ func TestNeighorSolicitationWithSourceLinkLayerOption(t *testing.T) {
|
||||
DstAddr: lladdr0,
|
||||
})
|
||||
|
||||
invalid := s.Stats().ICMP.V6PacketsReceived.Invalid
|
||||
invalid := s.Stats().ICMP.V6.PacketsReceived.Invalid
|
||||
|
||||
// Invalid count should initially be 0.
|
||||
if got := invalid.Value(); got != 0 {
|
||||
@@ -326,7 +326,7 @@ func TestNeighorSolicitationWithSourceLinkLayerOptionUsingNeighborCache(t *testi
|
||||
DstAddr: lladdr0,
|
||||
})
|
||||
|
||||
invalid := s.Stats().ICMP.V6PacketsReceived.Invalid
|
||||
invalid := s.Stats().ICMP.V6.PacketsReceived.Invalid
|
||||
|
||||
// Invalid count should initially be 0.
|
||||
if got := invalid.Value(); got != 0 {
|
||||
@@ -606,7 +606,7 @@ func TestNeighorSolicitationResponse(t *testing.T) {
|
||||
DstAddr: test.nsDst,
|
||||
})
|
||||
|
||||
invalid := s.Stats().ICMP.V6PacketsReceived.Invalid
|
||||
invalid := s.Stats().ICMP.V6.PacketsReceived.Invalid
|
||||
|
||||
// Invalid count should initially be 0.
|
||||
if got := invalid.Value(); got != 0 {
|
||||
@@ -792,7 +792,7 @@ func TestNeighorAdvertisementWithTargetLinkLayerOption(t *testing.T) {
|
||||
DstAddr: lladdr0,
|
||||
})
|
||||
|
||||
invalid := s.Stats().ICMP.V6PacketsReceived.Invalid
|
||||
invalid := s.Stats().ICMP.V6.PacketsReceived.Invalid
|
||||
|
||||
// Invalid count should initially be 0.
|
||||
if got := invalid.Value(); got != 0 {
|
||||
@@ -905,7 +905,7 @@ func TestNeighorAdvertisementWithTargetLinkLayerOptionUsingNeighborCache(t *test
|
||||
DstAddr: lladdr0,
|
||||
})
|
||||
|
||||
invalid := s.Stats().ICMP.V6PacketsReceived.Invalid
|
||||
invalid := s.Stats().ICMP.V6.PacketsReceived.Invalid
|
||||
|
||||
// Invalid count should initially be 0.
|
||||
if got := invalid.Value(); got != 0 {
|
||||
@@ -1122,7 +1122,7 @@ func TestNDPValidation(t *testing.T) {
|
||||
s.SetForwarding(ProtocolNumber, true)
|
||||
}
|
||||
|
||||
stats := s.Stats().ICMP.V6PacketsReceived
|
||||
stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
invalid := stats.Invalid
|
||||
routerOnly := stats.RouterOnlyPacketsDroppedByHost
|
||||
typStat := typ.statCounter(stats)
|
||||
@@ -1358,7 +1358,7 @@ func TestRouterAdvertValidation(t *testing.T) {
|
||||
DstAddr: header.IPv6AllNodesMulticastAddress,
|
||||
})
|
||||
|
||||
stats := s.Stats().ICMP.V6PacketsReceived
|
||||
stats := s.Stats().ICMP.V6.PacketsReceived
|
||||
invalid := stats.Invalid
|
||||
rxRA := stats.RouterAdvert
|
||||
|
||||
|
||||
@@ -218,10 +218,10 @@ func TestMGPDisabled(t *testing.T) {
|
||||
protoNum: ipv6.ProtocolNumber,
|
||||
multicastAddr: ipv6MulticastAddr1,
|
||||
sentReportStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerReport
|
||||
},
|
||||
receivedQueryStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsReceived.MulticastListenerQuery
|
||||
return s.Stats().ICMP.V6.PacketsReceived.MulticastListenerQuery
|
||||
},
|
||||
rxQuery: func(e *channel.Endpoint) {
|
||||
createAndInjectMLDPacket(e, mldQuery, 0, header.IPv6Any)
|
||||
@@ -326,7 +326,7 @@ func TestMGPReceiveCounters(t *testing.T) {
|
||||
maxRespTime: 0,
|
||||
groupAddress: header.IPv6Any,
|
||||
statCounter: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsReceived.MulticastListenerQuery
|
||||
return s.Stats().ICMP.V6.PacketsReceived.MulticastListenerQuery
|
||||
},
|
||||
rxMGPkt: createAndInjectMLDPacket,
|
||||
},
|
||||
@@ -336,7 +336,7 @@ func TestMGPReceiveCounters(t *testing.T) {
|
||||
maxRespTime: 0,
|
||||
groupAddress: header.IPv6Any,
|
||||
statCounter: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsReceived.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsReceived.MulticastListenerReport
|
||||
},
|
||||
rxMGPkt: createAndInjectMLDPacket,
|
||||
},
|
||||
@@ -346,7 +346,7 @@ func TestMGPReceiveCounters(t *testing.T) {
|
||||
maxRespTime: 0,
|
||||
groupAddress: header.IPv6Any,
|
||||
statCounter: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsReceived.MulticastListenerDone
|
||||
return s.Stats().ICMP.V6.PacketsReceived.MulticastListenerDone
|
||||
},
|
||||
rxMGPkt: createAndInjectMLDPacket,
|
||||
},
|
||||
@@ -399,10 +399,10 @@ func TestMGPJoinGroup(t *testing.T) {
|
||||
multicastAddr: ipv6MulticastAddr1,
|
||||
maxUnsolicitedResponseDelay: ipv6.UnsolicitedReportIntervalMax,
|
||||
sentReportStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerReport
|
||||
},
|
||||
receivedQueryStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsReceived.MulticastListenerQuery
|
||||
return s.Stats().ICMP.V6.PacketsReceived.MulticastListenerQuery
|
||||
},
|
||||
validateReport: func(t *testing.T, p channel.PacketInfo) {
|
||||
t.Helper()
|
||||
@@ -497,10 +497,10 @@ func TestMGPLeaveGroup(t *testing.T) {
|
||||
protoNum: ipv6.ProtocolNumber,
|
||||
multicastAddr: ipv6MulticastAddr1,
|
||||
sentReportStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerReport
|
||||
},
|
||||
sentLeaveStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerDone
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerDone
|
||||
},
|
||||
validateReport: func(t *testing.T, p channel.PacketInfo) {
|
||||
t.Helper()
|
||||
@@ -597,10 +597,10 @@ func TestMGPQueryMessages(t *testing.T) {
|
||||
multicastAddr: ipv6MulticastAddr1,
|
||||
maxUnsolicitedResponseDelay: ipv6.UnsolicitedReportIntervalMax,
|
||||
sentReportStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerReport
|
||||
},
|
||||
receivedQueryStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsReceived.MulticastListenerQuery
|
||||
return s.Stats().ICMP.V6.PacketsReceived.MulticastListenerQuery
|
||||
},
|
||||
rxQuery: func(e *channel.Endpoint, maxRespTime uint8, groupAddress tcpip.Address) {
|
||||
createAndInjectMLDPacket(e, mldQuery, maxRespTime, groupAddress)
|
||||
@@ -744,10 +744,10 @@ func TestMGPReportMessages(t *testing.T) {
|
||||
protoNum: ipv6.ProtocolNumber,
|
||||
multicastAddr: ipv6MulticastAddr1,
|
||||
sentReportStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerReport
|
||||
},
|
||||
sentLeaveStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerDone
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerDone
|
||||
},
|
||||
rxReport: func(e *channel.Endpoint) {
|
||||
createAndInjectMLDPacket(e, mldReport, 0, ipv6MulticastAddr1)
|
||||
@@ -877,10 +877,10 @@ func TestMGPWithNICLifecycle(t *testing.T) {
|
||||
finalMulticastAddr: ipv6MulticastAddr3,
|
||||
maxUnsolicitedResponseDelay: ipv6.UnsolicitedReportIntervalMax,
|
||||
sentReportStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerReport
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerReport
|
||||
},
|
||||
sentLeaveStat: func(s *stack.Stack) *tcpip.StatCounter {
|
||||
return s.Stats().ICMP.V6PacketsSent.MulticastListenerDone
|
||||
return s.Stats().ICMP.V6.PacketsSent.MulticastListenerDone
|
||||
},
|
||||
validateReport: func(t *testing.T, p channel.PacketInfo, addr tcpip.Address) {
|
||||
t.Helper()
|
||||
|
||||
@@ -353,7 +353,7 @@ func TestDADDisabled(t *testing.T) {
|
||||
}
|
||||
|
||||
// We should not have sent any NDP NS messages.
|
||||
if got := s.Stats().ICMP.V6PacketsSent.NeighborSolicit.Value(); got != 0 {
|
||||
if got := s.Stats().ICMP.V6.PacketsSent.NeighborSolicit.Value(); got != 0 {
|
||||
t.Fatalf("got NeighborSolicit = %d, want = 0", got)
|
||||
}
|
||||
}
|
||||
@@ -525,7 +525,7 @@ func TestDADResolve(t *testing.T) {
|
||||
}
|
||||
|
||||
// Should not have sent any more NS messages.
|
||||
if got := s.Stats().ICMP.V6PacketsSent.NeighborSolicit.Value(); got != uint64(test.dupAddrDetectTransmits) {
|
||||
if got := s.Stats().ICMP.V6.PacketsSent.NeighborSolicit.Value(); got != uint64(test.dupAddrDetectTransmits) {
|
||||
t.Fatalf("got NeighborSolicit = %d, want = %d", got, test.dupAddrDetectTransmits)
|
||||
}
|
||||
|
||||
@@ -673,7 +673,7 @@ func TestDADFail(t *testing.T) {
|
||||
// Receive a packet to simulate an address conflict.
|
||||
test.rxPkt(e, addr1)
|
||||
|
||||
stat := test.getStat(s.Stats().ICMP.V6PacketsReceived)
|
||||
stat := test.getStat(s.Stats().ICMP.V6.PacketsReceived)
|
||||
if got := stat.Value(); got != 1 {
|
||||
t.Fatalf("got stat = %d, want = 1", got)
|
||||
}
|
||||
@@ -810,7 +810,7 @@ func TestDADStop(t *testing.T) {
|
||||
}
|
||||
|
||||
// Should not have sent more than 1 NS message.
|
||||
if got := s.Stats().ICMP.V6PacketsSent.NeighborSolicit.Value(); got > 1 {
|
||||
if got := s.Stats().ICMP.V6.PacketsSent.NeighborSolicit.Value(); got > 1 {
|
||||
t.Errorf("got NeighborSolicit = %d, want <= 1", got)
|
||||
}
|
||||
})
|
||||
@@ -5263,7 +5263,7 @@ func TestRouterSolicitation(t *testing.T) {
|
||||
waitForNothing(test.effectiveMaxRtrSolicitDelay)
|
||||
}
|
||||
|
||||
if got, want := s.Stats().ICMP.V6PacketsSent.RouterSolicit.Value(), uint64(test.maxRtrSolicit); got != want {
|
||||
if got, want := s.Stats().ICMP.V6.PacketsSent.RouterSolicit.Value(), uint64(test.maxRtrSolicit); got != want {
|
||||
t.Fatalf("got sent RouterSolicit = %d, want = %d", got, want)
|
||||
}
|
||||
})
|
||||
|
||||
+18
-6
@@ -1384,25 +1384,37 @@ type ICMPv6ReceivedPacketStats struct {
|
||||
RouterOnlyPacketsDroppedByHost *StatCounter
|
||||
}
|
||||
|
||||
// ICMPStats collects ICMP-specific stats (both v4 and v6).
|
||||
type ICMPStats struct {
|
||||
// ICMPv4Stats collects ICMPv4-specific stats.
|
||||
type ICMPv4Stats struct {
|
||||
// ICMPv4SentPacketStats contains counts of sent packets by ICMPv4 packet type
|
||||
// and a single count of packets which failed to write to the link
|
||||
// layer.
|
||||
V4PacketsSent ICMPv4SentPacketStats
|
||||
PacketsSent ICMPv4SentPacketStats
|
||||
|
||||
// ICMPv4ReceivedPacketStats contains counts of received packets by ICMPv4
|
||||
// packet type and a single count of invalid packets received.
|
||||
V4PacketsReceived ICMPv4ReceivedPacketStats
|
||||
PacketsReceived ICMPv4ReceivedPacketStats
|
||||
}
|
||||
|
||||
// ICMPv6Stats collects ICMPv6-specific stats.
|
||||
type ICMPv6Stats struct {
|
||||
// ICMPv6SentPacketStats contains counts of sent packets by ICMPv6 packet type
|
||||
// and a single count of packets which failed to write to the link
|
||||
// layer.
|
||||
V6PacketsSent ICMPv6SentPacketStats
|
||||
PacketsSent ICMPv6SentPacketStats
|
||||
|
||||
// ICMPv6ReceivedPacketStats contains counts of received packets by ICMPv6
|
||||
// packet type and a single count of invalid packets received.
|
||||
V6PacketsReceived ICMPv6ReceivedPacketStats
|
||||
PacketsReceived ICMPv6ReceivedPacketStats
|
||||
}
|
||||
|
||||
// ICMPStats collects ICMP-specific stats (both v4 and v6).
|
||||
type ICMPStats struct {
|
||||
// V4 contains the ICMPv4-specifics stats.
|
||||
V4 ICMPv4Stats
|
||||
|
||||
// V6 contains the ICMPv4-specifics stats.
|
||||
V6 ICMPv6Stats
|
||||
}
|
||||
|
||||
// IGMPPacketStats enumerates counts for all IGMP packet types.
|
||||
|
||||
@@ -264,7 +264,7 @@ func TestTCPResetsSentNoICMP(t *testing.T) {
|
||||
}
|
||||
|
||||
// Read outgoing ICMP stats and check no ICMP DstUnreachable was recorded.
|
||||
sent := stats.ICMP.V4PacketsSent
|
||||
sent := stats.ICMP.V4.PacketsSent
|
||||
if got, want := sent.DstUnreachable.Value(), uint64(0); got != want {
|
||||
t.Errorf("got ICMP DstUnreachable.Value() = %d, want = %d", got, want)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user