mirror of
https://github.com/prometheus/node_exporter.git
synced 2025-08-20 18:33:52 -07:00
* Add metrics from SNTPv4 packet to ntp collector & add ntpd sanity check 1. Checking local clock against remote NTP daemon is bad idea, local ntpd acting as a client should do it better and avoid excessive load on remote NTP server so the collector is refactored to query local NTP server. 2. Checking local clock against remote one does not check local ntpd itself. Local ntpd may be down or out of sync due to network issues, but clock will be OK. 3. Checking NTP server using sanity of it's response is tricky and depends on ntpd implementation, that's why common `node_ntp_sanity` variable is exported. * `govendor add golang.org/x/net/ipv4`, it is dependency of github.com/beevik/ntp * Update github.com/beevik/ntp to include boring SNTP fix * Use variable name from RFC5905 * ntp: move code to make export of raw metrics more explicit * Move NTP math to `github.com/beevik/ntp` * Make `golint` happy * Add some brief docs explaining `ntp` #655 and `timex` #664 modules * ntp: drop XXX comment that got its decision * ntp: add `_seconds` suffix to relevant metrics * Better `node_ntp_leap` comment * s/node_ntp_reftime/node_ntp_reference_timestamp_seconds/ as requested by @discordianfish * Extract subsystem name to const as suggested by @SuperQ
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ipv4
|
|
|
|
import "golang.org/x/net/internal/iana"
|
|
|
|
// An ICMPType represents a type of ICMP message.
|
|
type ICMPType int
|
|
|
|
func (typ ICMPType) String() string {
|
|
s, ok := icmpTypes[typ]
|
|
if !ok {
|
|
return "<nil>"
|
|
}
|
|
return s
|
|
}
|
|
|
|
// Protocol returns the ICMPv4 protocol number.
|
|
func (typ ICMPType) Protocol() int {
|
|
return iana.ProtocolICMP
|
|
}
|
|
|
|
// An ICMPFilter represents an ICMP message filter for incoming
|
|
// packets. The filter belongs to a packet delivery path on a host and
|
|
// it cannot interact with forwarding packets or tunnel-outer packets.
|
|
//
|
|
// Note: RFC 8200 defines a reasonable role model and it works not
|
|
// only for IPv6 but IPv4. A node means a device that implements IP.
|
|
// A router means a node that forwards IP packets not explicitly
|
|
// addressed to itself, and a host means a node that is not a router.
|
|
type ICMPFilter struct {
|
|
icmpFilter
|
|
}
|
|
|
|
// Accept accepts incoming ICMP packets including the type field value
|
|
// typ.
|
|
func (f *ICMPFilter) Accept(typ ICMPType) {
|
|
f.accept(typ)
|
|
}
|
|
|
|
// Block blocks incoming ICMP packets including the type field value
|
|
// typ.
|
|
func (f *ICMPFilter) Block(typ ICMPType) {
|
|
f.block(typ)
|
|
}
|
|
|
|
// SetAll sets the filter action to the filter.
|
|
func (f *ICMPFilter) SetAll(block bool) {
|
|
f.setAll(block)
|
|
}
|
|
|
|
// WillBlock reports whether the ICMP type will be blocked.
|
|
func (f *ICMPFilter) WillBlock(typ ICMPType) bool {
|
|
return f.willBlock(typ)
|
|
}
|