apply make update-vendor
This commit is contained in:
parent
233a552bbe
commit
a0f64616f7
13
go.sum
13
go.sum
|
@ -59,10 +59,6 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5
|
|||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
|
||||
github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
|
||||
github.com/armon/go-metrics v0.3.4 h1:Xqf+7f2Vhl9tsqDYmXhnXInUdcrtgpRNpIA15/uldSc=
|
||||
github.com/armon/go-metrics v0.3.4/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-metrics v0.3.5-0.20200914211745-2bc64ebd2914 h1:Yiw8vrY+7jX6pCOdAkIUNU8QBS9c6HJAct+K36MeANw=
|
||||
github.com/armon/go-metrics v0.3.5-0.20200914211745-2bc64ebd2914/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-metrics v0.3.5-0.20201104215618-6fd5a4ddf425 h1:23nUvGE+8HYFc0AUXuYxgFws6IdyzOrSJJmKfPMJmi8=
|
||||
github.com/armon/go-metrics v0.3.5-0.20201104215618-6fd5a4ddf425/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
|
@ -136,7 +132,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrp
|
|||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.8.0/go.mod h1:3l45GVGkyrnYNl9HoIjnp2NnNWvh6hLAqD8yTfGjnw8=
|
||||
github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||
|
@ -350,10 +345,6 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
|
|||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
|
||||
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
|
||||
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
||||
|
@ -461,7 +452,6 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
|
|||
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/rakyll/govalidate v0.0.0-20200309190753-85a79ffbadda/go.mod h1:BMxf9VPxGt01MzO77zVdp2TindDWEIGSwVCukQwSMnY=
|
||||
github.com/rboyer/safeio v0.2.1 h1:05xhhdRNAdS3apYm7JRjOqngf4xruaW959jmRxGDuSU=
|
||||
github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig=
|
||||
github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 h1:Wdi9nwnhFNAlseAOekn6B5G/+GMtks9UKbvRU/CMM/o=
|
||||
|
@ -594,7 +584,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o=
|
||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -624,8 +613,6 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf h1:AvBTl0xbF/KtHyvm61X4gSPF7/dKJ/xQqJwKr1Qu9no=
|
||||
golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
|
||||
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
|
@ -5,6 +5,7 @@ package prometheus
|
|||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
|
@ -29,6 +30,26 @@ type PrometheusOpts struct {
|
|||
// untracked. If the value is zero, a metric is never expired.
|
||||
Expiration time.Duration
|
||||
Registerer prometheus.Registerer
|
||||
|
||||
// Gauges, Summaries, and Counters allow us to pre-declare metrics by giving their Name, Help, and ConstLabels to
|
||||
// the PrometheusSink when it is created. Metrics declared in this way will be initialized at zero and will not be
|
||||
// deleted when their expiry is reached.
|
||||
// - Gauges and Summaries will be set to NaN when they expire.
|
||||
// - Counters continue to Collect their last known value.
|
||||
// Ex:
|
||||
// PrometheusOpts{
|
||||
// Expiration: 10 * time.Second,
|
||||
// Gauges: []GaugeDefinition{
|
||||
// {
|
||||
// Name: []string{ "application", "component", "measurement"},
|
||||
// Help: "application_component_measurement provides an example of how to declare static metrics",
|
||||
// ConstLabels: []metrics.Label{ { Name: "my_label", Value: "does_not_change" }, },
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
GaugeDefinitions []GaugeDefinition
|
||||
SummaryDefinitions []SummaryDefinition
|
||||
CounterDefinitions []CounterDefinition
|
||||
}
|
||||
|
||||
type PrometheusSink struct {
|
||||
|
@ -39,19 +60,44 @@ type PrometheusSink struct {
|
|||
expiration time.Duration
|
||||
}
|
||||
|
||||
type PrometheusGauge struct {
|
||||
// GaugeDefinition can be provided to PrometheusOpts to declare a constant gauge that is not deleted on expiry.
|
||||
type GaugeDefinition struct {
|
||||
Name []string
|
||||
ConstLabels []metrics.Label
|
||||
Help string
|
||||
}
|
||||
|
||||
type gauge struct {
|
||||
prometheus.Gauge
|
||||
updatedAt time.Time
|
||||
// canDelete is set if the metric is created during runtime so we know it's ephemeral and can delete it on expiry.
|
||||
canDelete bool
|
||||
}
|
||||
|
||||
type PrometheusSummary struct {
|
||||
// SummaryDefinition can be provided to PrometheusOpts to declare a constant summary that is not deleted on expiry.
|
||||
type SummaryDefinition struct {
|
||||
Name []string
|
||||
ConstLabels []metrics.Label
|
||||
Help string
|
||||
}
|
||||
|
||||
type summary struct {
|
||||
prometheus.Summary
|
||||
updatedAt time.Time
|
||||
canDelete bool
|
||||
}
|
||||
|
||||
type PrometheusCounter struct {
|
||||
// CounterDefinition can be provided to PrometheusOpts to declare a constant counter that is not deleted on expiry.
|
||||
type CounterDefinition struct {
|
||||
Name []string
|
||||
ConstLabels []metrics.Label
|
||||
Help string
|
||||
}
|
||||
|
||||
type counter struct {
|
||||
prometheus.Counter
|
||||
updatedAt time.Time
|
||||
canDelete bool
|
||||
}
|
||||
|
||||
// NewPrometheusSink creates a new PrometheusSink using the default options.
|
||||
|
@ -68,6 +114,10 @@ func NewPrometheusSinkFrom(opts PrometheusOpts) (*PrometheusSink, error) {
|
|||
expiration: opts.Expiration,
|
||||
}
|
||||
|
||||
initGauges(&sink.gauges, opts.GaugeDefinitions)
|
||||
initSummaries(&sink.summaries, opts.SummaryDefinitions)
|
||||
initCounters(&sink.counters, opts.CounterDefinitions)
|
||||
|
||||
reg := opts.Registerer
|
||||
if reg == nil {
|
||||
reg = prometheus.DefaultRegisterer
|
||||
|
@ -90,43 +140,101 @@ func (p *PrometheusSink) Collect(c chan<- prometheus.Metric) {
|
|||
expire := p.expiration != 0
|
||||
now := time.Now()
|
||||
p.gauges.Range(func(k, v interface{}) bool {
|
||||
if v != nil {
|
||||
lastUpdate := v.(*PrometheusGauge).updatedAt
|
||||
if expire && lastUpdate.Add(p.expiration).Before(now) {
|
||||
p.gauges.Delete(k)
|
||||
} else {
|
||||
v.(*PrometheusGauge).Collect(c)
|
||||
}
|
||||
if v == nil {
|
||||
return true
|
||||
}
|
||||
g := v.(*gauge)
|
||||
lastUpdate := g.updatedAt
|
||||
if expire && lastUpdate.Add(p.expiration).Before(now) {
|
||||
if g.canDelete {
|
||||
p.gauges.Delete(k)
|
||||
return true
|
||||
}
|
||||
// We have not observed the gauge this interval so we don't know its value.
|
||||
g.Set(math.NaN())
|
||||
}
|
||||
g.Collect(c)
|
||||
return true
|
||||
})
|
||||
p.summaries.Range(func(k, v interface{}) bool {
|
||||
if v != nil {
|
||||
lastUpdate := v.(*PrometheusSummary).updatedAt
|
||||
if expire && lastUpdate.Add(p.expiration).Before(now) {
|
||||
p.summaries.Delete(k)
|
||||
} else {
|
||||
v.(*PrometheusSummary).Collect(c)
|
||||
}
|
||||
if v == nil {
|
||||
return true
|
||||
}
|
||||
s := v.(*summary)
|
||||
lastUpdate := s.updatedAt
|
||||
if expire && lastUpdate.Add(p.expiration).Before(now) {
|
||||
if s.canDelete {
|
||||
p.summaries.Delete(k)
|
||||
return true
|
||||
}
|
||||
// We have observed nothing in this interval.
|
||||
s.Observe(math.NaN())
|
||||
}
|
||||
s.Collect(c)
|
||||
return true
|
||||
})
|
||||
p.counters.Range(func(k, v interface{}) bool {
|
||||
if v != nil {
|
||||
lastUpdate := v.(*PrometheusCounter).updatedAt
|
||||
if expire && lastUpdate.Add(p.expiration).Before(now) {
|
||||
p.counters.Delete(k)
|
||||
} else {
|
||||
v.(*PrometheusCounter).Collect(c)
|
||||
}
|
||||
if v == nil {
|
||||
return true
|
||||
}
|
||||
count := v.(*counter)
|
||||
lastUpdate := count.updatedAt
|
||||
if expire && lastUpdate.Add(p.expiration).Before(now) {
|
||||
if count.canDelete {
|
||||
p.counters.Delete(k)
|
||||
return true
|
||||
}
|
||||
// Counters remain at their previous value when not observed, so we do not set it to NaN.
|
||||
}
|
||||
count.Collect(c)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
func initGauges(m *sync.Map, gauges []GaugeDefinition) {
|
||||
for _, g := range gauges {
|
||||
key, hash := flattenKey(g.Name, g.ConstLabels)
|
||||
pG := prometheus.NewGauge(prometheus.GaugeOpts{
|
||||
Name: key,
|
||||
Help: g.Help,
|
||||
ConstLabels: prometheusLabels(g.ConstLabels),
|
||||
})
|
||||
m.Store(hash, &gauge{ Gauge: pG })
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func initSummaries(m *sync.Map, summaries []SummaryDefinition) {
|
||||
for _, s := range summaries {
|
||||
key, hash := flattenKey(s.Name, s.ConstLabels)
|
||||
pS := prometheus.NewSummary(prometheus.SummaryOpts{
|
||||
Name: key,
|
||||
Help: s.Help,
|
||||
MaxAge: 10 * time.Second,
|
||||
ConstLabels: prometheusLabels(s.ConstLabels),
|
||||
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
|
||||
})
|
||||
m.Store(hash, &summary{ Summary: pS })
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func initCounters(m *sync.Map, counters []CounterDefinition) {
|
||||
for _, c := range counters {
|
||||
key, hash := flattenKey(c.Name, c.ConstLabels)
|
||||
pC := prometheus.NewCounter(prometheus.CounterOpts{
|
||||
Name: key,
|
||||
Help: c.Help,
|
||||
ConstLabels: prometheusLabels(c.ConstLabels),
|
||||
})
|
||||
m.Store(hash, &counter{ Counter: pC })
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var forbiddenChars = regexp.MustCompile("[ .=\\-/]")
|
||||
|
||||
func (p *PrometheusSink) flattenKey(parts []string, labels []metrics.Label) (string, string) {
|
||||
func flattenKey(parts []string, labels []metrics.Label) (string, string) {
|
||||
key := strings.Join(parts, "_")
|
||||
key = forbiddenChars.ReplaceAllString(key, "_")
|
||||
|
||||
|
@ -151,7 +259,7 @@ func (p *PrometheusSink) SetGauge(parts []string, val float32) {
|
|||
}
|
||||
|
||||
func (p *PrometheusSink) SetGaugeWithLabels(parts []string, val float32, labels []metrics.Label) {
|
||||
key, hash := p.flattenKey(parts, labels)
|
||||
key, hash := flattenKey(parts, labels)
|
||||
pg, ok := p.gauges.Load(hash)
|
||||
|
||||
// The sync.Map underlying gauges stores pointers to our structs. If we need to make updates,
|
||||
|
@ -161,10 +269,12 @@ func (p *PrometheusSink) SetGaugeWithLabels(parts []string, val float32, labels
|
|||
// so there's no issues there. It's possible for racy updates to occur to the updatedAt
|
||||
// value, but since we're always setting it to time.Now(), it doesn't really matter.
|
||||
if ok {
|
||||
localGauge := *pg.(*PrometheusGauge)
|
||||
localGauge := *pg.(*gauge)
|
||||
localGauge.Set(float64(val))
|
||||
localGauge.updatedAt = time.Now()
|
||||
p.gauges.Store(hash, &localGauge)
|
||||
|
||||
// The gauge does not exist, create the gauge and allow it to be deleted
|
||||
} else {
|
||||
g := prometheus.NewGauge(prometheus.GaugeOpts{
|
||||
Name: key,
|
||||
|
@ -172,8 +282,10 @@ func (p *PrometheusSink) SetGaugeWithLabels(parts []string, val float32, labels
|
|||
ConstLabels: prometheusLabels(labels),
|
||||
})
|
||||
g.Set(float64(val))
|
||||
pg = &PrometheusGauge{
|
||||
g, time.Now(),
|
||||
pg = &gauge{
|
||||
Gauge: g,
|
||||
updatedAt: time.Now(),
|
||||
canDelete: true,
|
||||
}
|
||||
p.gauges.Store(hash, pg)
|
||||
}
|
||||
|
@ -184,14 +296,17 @@ func (p *PrometheusSink) AddSample(parts []string, val float32) {
|
|||
}
|
||||
|
||||
func (p *PrometheusSink) AddSampleWithLabels(parts []string, val float32, labels []metrics.Label) {
|
||||
key, hash := p.flattenKey(parts, labels)
|
||||
key, hash := flattenKey(parts, labels)
|
||||
ps, ok := p.summaries.Load(hash)
|
||||
|
||||
// Does the summary already exist for this sample type?
|
||||
if ok {
|
||||
localSummary := *ps.(*PrometheusSummary)
|
||||
localSummary := *ps.(*summary)
|
||||
localSummary.Observe(float64(val))
|
||||
localSummary.updatedAt = time.Now()
|
||||
p.summaries.Store(hash, &localSummary)
|
||||
|
||||
// The summary does not exist, create the Summary and allow it to be deleted
|
||||
} else {
|
||||
s := prometheus.NewSummary(prometheus.SummaryOpts{
|
||||
Name: key,
|
||||
|
@ -201,8 +316,10 @@ func (p *PrometheusSink) AddSampleWithLabels(parts []string, val float32, labels
|
|||
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
|
||||
})
|
||||
s.Observe(float64(val))
|
||||
ps = &PrometheusSummary{
|
||||
s, time.Now(),
|
||||
ps = &summary{
|
||||
Summary: s,
|
||||
updatedAt: time.Now(),
|
||||
canDelete: true,
|
||||
}
|
||||
p.summaries.Store(hash, ps)
|
||||
}
|
||||
|
@ -219,14 +336,17 @@ func (p *PrometheusSink) IncrCounter(parts []string, val float32) {
|
|||
}
|
||||
|
||||
func (p *PrometheusSink) IncrCounterWithLabels(parts []string, val float32, labels []metrics.Label) {
|
||||
key, hash := p.flattenKey(parts, labels)
|
||||
key, hash := flattenKey(parts, labels)
|
||||
pc, ok := p.counters.Load(hash)
|
||||
|
||||
// Does the counter exist?
|
||||
if ok {
|
||||
localCounter := *pc.(*PrometheusCounter)
|
||||
localCounter := *pc.(*counter)
|
||||
localCounter.Add(float64(val))
|
||||
localCounter.updatedAt = time.Now()
|
||||
p.counters.Store(hash, &localCounter)
|
||||
|
||||
// The counter does not exist yet, create it and allow it to be deleted
|
||||
} else {
|
||||
c := prometheus.NewCounter(prometheus.CounterOpts{
|
||||
Name: key,
|
||||
|
@ -234,13 +354,17 @@ func (p *PrometheusSink) IncrCounterWithLabels(parts []string, val float32, labe
|
|||
ConstLabels: prometheusLabels(labels),
|
||||
})
|
||||
c.Add(float64(val))
|
||||
pc = &PrometheusCounter{
|
||||
c, time.Now(),
|
||||
pc = &counter{
|
||||
Counter: c,
|
||||
updatedAt: time.Now(),
|
||||
canDelete: true,
|
||||
}
|
||||
p.counters.Store(hash, pc)
|
||||
}
|
||||
}
|
||||
|
||||
// PrometheusPushSink wraps a normal prometheus sink and provides an address and facilities to export it to an address
|
||||
// on an interval.
|
||||
type PrometheusPushSink struct {
|
||||
*PrometheusSink
|
||||
pusher *push.Pusher
|
||||
|
@ -249,7 +373,8 @@ type PrometheusPushSink struct {
|
|||
stopChan chan struct{}
|
||||
}
|
||||
|
||||
func NewPrometheusPushSink(address string, pushIterval time.Duration, name string) (*PrometheusPushSink, error) {
|
||||
// NewPrometheusPushSink creates a PrometheusPushSink by taking an address, interval, and destination name.
|
||||
func NewPrometheusPushSink(address string, pushInterval time.Duration, name string) (*PrometheusPushSink, error) {
|
||||
promSink := &PrometheusSink{
|
||||
gauges: sync.Map{},
|
||||
summaries: sync.Map{},
|
||||
|
@ -263,7 +388,7 @@ func NewPrometheusPushSink(address string, pushIterval time.Duration, name strin
|
|||
promSink,
|
||||
pusher,
|
||||
address,
|
||||
pushIterval,
|
||||
pushInterval,
|
||||
make(chan struct{}),
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ import (
|
|||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
|
@ -28,7 +27,6 @@ const (
|
|||
backgroundRed = 0x40
|
||||
backgroundIntensity = 0x80
|
||||
backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)
|
||||
commonLvbUnderscore = 0x8000
|
||||
|
||||
cENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
|
||||
)
|
||||
|
@ -95,7 +93,6 @@ type Writer struct {
|
|||
oldattr word
|
||||
oldpos coord
|
||||
rest bytes.Buffer
|
||||
mutex sync.Mutex
|
||||
}
|
||||
|
||||
// NewColorable returns new instance of Writer which handles escape sequence from File.
|
||||
|
@ -435,8 +432,6 @@ func atoiWithDefault(s string, def int) (int, error) {
|
|||
|
||||
// Write writes data on console
|
||||
func (w *Writer) Write(data []byte) (n int, err error) {
|
||||
w.mutex.Lock()
|
||||
defer w.mutex.Unlock()
|
||||
var csbi consoleScreenBufferInfo
|
||||
procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))
|
||||
|
||||
|
@ -688,19 +683,14 @@ loop:
|
|||
switch {
|
||||
case n == 0 || n == 100:
|
||||
attr = w.oldattr
|
||||
case n == 4:
|
||||
attr |= commonLvbUnderscore
|
||||
case (1 <= n && n <= 3) || n == 5:
|
||||
case 1 <= n && n <= 5:
|
||||
attr |= foregroundIntensity
|
||||
case n == 7 || n == 27:
|
||||
attr =
|
||||
(attr &^ (foregroundMask | backgroundMask)) |
|
||||
((attr & foregroundMask) << 4) |
|
||||
((attr & backgroundMask) >> 4)
|
||||
case n == 22:
|
||||
attr &^= foregroundIntensity
|
||||
case n == 24:
|
||||
attr &^= commonLvbUnderscore
|
||||
case n == 7:
|
||||
attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
|
||||
case n == 22 || n == 25:
|
||||
attr |= foregroundIntensity
|
||||
case n == 27:
|
||||
attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)
|
||||
case 30 <= n && n <= 37:
|
||||
attr &= backgroundMask
|
||||
if (n-30)&1 != 0 {
|
||||
|
|
|
@ -94,6 +94,7 @@ includes_DragonFly='
|
|||
#include <sys/ioctl.h>
|
||||
#include <net/bpf.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_clone.h>
|
||||
#include <net/if_types.h>
|
||||
#include <net/route.h>
|
||||
#include <netinet/in.h>
|
||||
|
|
|
@ -62,6 +62,7 @@ const (
|
|||
B28800 = 0x7080
|
||||
B300 = 0x12c
|
||||
B38400 = 0x9600
|
||||
B460800 = 0x70800
|
||||
B4800 = 0x12c0
|
||||
B50 = 0x32
|
||||
B57600 = 0xe100
|
||||
|
@ -69,12 +70,15 @@ const (
|
|||
B7200 = 0x1c20
|
||||
B75 = 0x4b
|
||||
B76800 = 0x12c00
|
||||
B921600 = 0xe1000
|
||||
B9600 = 0x2580
|
||||
BIOCFEEDBACK = 0x8004427d
|
||||
BIOCFLUSH = 0x20004268
|
||||
BIOCGBLEN = 0x40044266
|
||||
BIOCGDLT = 0x4004426a
|
||||
BIOCGDLTLIST = 0xc0104279
|
||||
BIOCGETIF = 0x4020426b
|
||||
BIOCGFEEDBACK = 0x4004427c
|
||||
BIOCGHDRCMPLT = 0x40044274
|
||||
BIOCGRSIG = 0x40044272
|
||||
BIOCGRTIMEOUT = 0x4010426e
|
||||
|
@ -88,6 +92,7 @@ const (
|
|||
BIOCSETF = 0x80104267
|
||||
BIOCSETIF = 0x8020426c
|
||||
BIOCSETWF = 0x8010427b
|
||||
BIOCSFEEDBACK = 0x8004427d
|
||||
BIOCSHDRCMPLT = 0x80044275
|
||||
BIOCSRSIG = 0x80044273
|
||||
BIOCSRTIMEOUT = 0x8010426d
|
||||
|
@ -125,6 +130,7 @@ const (
|
|||
BPF_MINBUFSIZE = 0x20
|
||||
BPF_MINOR_VERSION = 0x1
|
||||
BPF_MISC = 0x7
|
||||
BPF_MOD = 0x90
|
||||
BPF_MSH = 0xa0
|
||||
BPF_MUL = 0x20
|
||||
BPF_NEG = 0x80
|
||||
|
@ -139,6 +145,7 @@ const (
|
|||
BPF_TXA = 0x80
|
||||
BPF_W = 0x0
|
||||
BPF_X = 0x8
|
||||
BPF_XOR = 0xa0
|
||||
BRKINT = 0x2
|
||||
CFLUSH = 0xf
|
||||
CLOCAL = 0x8000
|
||||
|
@ -156,6 +163,12 @@ const (
|
|||
CLOCK_UPTIME_FAST = 0x8
|
||||
CLOCK_UPTIME_PRECISE = 0x7
|
||||
CLOCK_VIRTUAL = 0x1
|
||||
CPUSTATES = 0x5
|
||||
CP_IDLE = 0x4
|
||||
CP_INTR = 0x3
|
||||
CP_NICE = 0x1
|
||||
CP_SYS = 0x2
|
||||
CP_USER = 0x0
|
||||
CREAD = 0x800
|
||||
CRTSCTS = 0x30000
|
||||
CS5 = 0x0
|
||||
|
@ -175,6 +188,7 @@ const (
|
|||
DLT_A429 = 0xb8
|
||||
DLT_A653_ICM = 0xb9
|
||||
DLT_AIRONET_HEADER = 0x78
|
||||
DLT_AOS = 0xde
|
||||
DLT_APPLE_IP_OVER_IEEE1394 = 0x8a
|
||||
DLT_ARCNET = 0x7
|
||||
DLT_ARCNET_LINUX = 0x81
|
||||
|
@ -184,22 +198,33 @@ const (
|
|||
DLT_AX25 = 0x3
|
||||
DLT_AX25_KISS = 0xca
|
||||
DLT_BACNET_MS_TP = 0xa5
|
||||
DLT_BLUETOOTH_BREDR_BB = 0xff
|
||||
DLT_BLUETOOTH_HCI_H4 = 0xbb
|
||||
DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
|
||||
DLT_BLUETOOTH_LE_LL = 0xfb
|
||||
DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100
|
||||
DLT_BLUETOOTH_LINUX_MONITOR = 0xfe
|
||||
DLT_CAN20B = 0xbe
|
||||
DLT_CAN_SOCKETCAN = 0xe3
|
||||
DLT_CHAOS = 0x5
|
||||
DLT_CHDLC = 0x68
|
||||
DLT_CISCO_IOS = 0x76
|
||||
DLT_C_HDLC = 0x68
|
||||
DLT_C_HDLC_WITH_DIR = 0xcd
|
||||
DLT_DBUS = 0xe7
|
||||
DLT_DECT = 0xdd
|
||||
DLT_DOCSIS = 0x8f
|
||||
DLT_DVB_CI = 0xeb
|
||||
DLT_ECONET = 0x73
|
||||
DLT_EN10MB = 0x1
|
||||
DLT_EN3MB = 0x2
|
||||
DLT_ENC = 0x6d
|
||||
DLT_EPON = 0x103
|
||||
DLT_ERF = 0xc5
|
||||
DLT_ERF_ETH = 0xaf
|
||||
DLT_ERF_POS = 0xb0
|
||||
DLT_FC_2 = 0xe0
|
||||
DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
|
||||
DLT_FDDI = 0xa
|
||||
DLT_FLEXRAY = 0xd2
|
||||
DLT_FRELAY = 0x6b
|
||||
|
@ -209,6 +234,8 @@ const (
|
|||
DLT_GPF_F = 0xab
|
||||
DLT_GPF_T = 0xaa
|
||||
DLT_GPRS_LLC = 0xa9
|
||||
DLT_GSMTAP_ABIS = 0xda
|
||||
DLT_GSMTAP_UM = 0xd9
|
||||
DLT_HHDLC = 0x79
|
||||
DLT_IBM_SN = 0x92
|
||||
DLT_IBM_SP = 0x91
|
||||
|
@ -218,18 +245,28 @@ const (
|
|||
DLT_IEEE802_11_RADIO_AVS = 0xa3
|
||||
DLT_IEEE802_15_4 = 0xc3
|
||||
DLT_IEEE802_15_4_LINUX = 0xbf
|
||||
DLT_IEEE802_15_4_NOFCS = 0xe6
|
||||
DLT_IEEE802_15_4_NONASK_PHY = 0xd7
|
||||
DLT_IEEE802_16_MAC_CPS = 0xbc
|
||||
DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1
|
||||
DLT_INFINIBAND = 0xf7
|
||||
DLT_IPFILTER = 0x74
|
||||
DLT_IPMB = 0xc7
|
||||
DLT_IPMB_LINUX = 0xd1
|
||||
DLT_IPMI_HPM_2 = 0x104
|
||||
DLT_IPNET = 0xe2
|
||||
DLT_IPOIB = 0xf2
|
||||
DLT_IPV4 = 0xe4
|
||||
DLT_IPV6 = 0xe5
|
||||
DLT_IP_OVER_FC = 0x7a
|
||||
DLT_ISO_14443 = 0x108
|
||||
DLT_JUNIPER_ATM1 = 0x89
|
||||
DLT_JUNIPER_ATM2 = 0x87
|
||||
DLT_JUNIPER_ATM_CEMIC = 0xee
|
||||
DLT_JUNIPER_CHDLC = 0xb5
|
||||
DLT_JUNIPER_ES = 0x84
|
||||
DLT_JUNIPER_ETHER = 0xb2
|
||||
DLT_JUNIPER_FIBRECHANNEL = 0xea
|
||||
DLT_JUNIPER_FRELAY = 0xb4
|
||||
DLT_JUNIPER_GGSN = 0x85
|
||||
DLT_JUNIPER_ISM = 0xc2
|
||||
|
@ -242,25 +279,40 @@ const (
|
|||
DLT_JUNIPER_PPPOE = 0xa7
|
||||
DLT_JUNIPER_PPPOE_ATM = 0xa8
|
||||
DLT_JUNIPER_SERVICES = 0x88
|
||||
DLT_JUNIPER_SRX_E2E = 0xe9
|
||||
DLT_JUNIPER_ST = 0xc8
|
||||
DLT_JUNIPER_VP = 0xb7
|
||||
DLT_JUNIPER_VS = 0xe8
|
||||
DLT_LAPB_WITH_DIR = 0xcf
|
||||
DLT_LAPD = 0xcb
|
||||
DLT_LIN = 0xd4
|
||||
DLT_LINUX_EVDEV = 0xd8
|
||||
DLT_LINUX_IRDA = 0x90
|
||||
DLT_LINUX_LAPD = 0xb1
|
||||
DLT_LINUX_SLL = 0x71
|
||||
DLT_LOOP = 0x6c
|
||||
DLT_LTALK = 0x72
|
||||
DLT_MATCHING_MAX = 0x109
|
||||
DLT_MATCHING_MIN = 0x68
|
||||
DLT_MFR = 0xb6
|
||||
DLT_MOST = 0xd3
|
||||
DLT_MPEG_2_TS = 0xf3
|
||||
DLT_MPLS = 0xdb
|
||||
DLT_MTP2 = 0x8c
|
||||
DLT_MTP2_WITH_PHDR = 0x8b
|
||||
DLT_MTP3 = 0x8d
|
||||
DLT_MUX27010 = 0xec
|
||||
DLT_NETANALYZER = 0xf0
|
||||
DLT_NETANALYZER_TRANSPARENT = 0xf1
|
||||
DLT_NETLINK = 0xfd
|
||||
DLT_NFC_LLCP = 0xf5
|
||||
DLT_NFLOG = 0xef
|
||||
DLT_NG40 = 0xf4
|
||||
DLT_NULL = 0x0
|
||||
DLT_PCI_EXP = 0x7d
|
||||
DLT_PFLOG = 0x75
|
||||
DLT_PFSYNC = 0x12
|
||||
DLT_PKTAP = 0x102
|
||||
DLT_PPI = 0xc0
|
||||
DLT_PPP = 0x9
|
||||
DLT_PPP_BSDOS = 0x10
|
||||
|
@ -269,22 +321,51 @@ const (
|
|||
DLT_PPP_SERIAL = 0x32
|
||||
DLT_PPP_WITH_DIR = 0xcc
|
||||
DLT_PRISM_HEADER = 0x77
|
||||
DLT_PROFIBUS_DL = 0x101
|
||||
DLT_PRONET = 0x4
|
||||
DLT_RAIF1 = 0xc6
|
||||
DLT_RAW = 0xc
|
||||
DLT_RDS = 0x109
|
||||
DLT_REDBACK_SMARTEDGE = 0x20
|
||||
DLT_RIO = 0x7c
|
||||
DLT_RTAC_SERIAL = 0xfa
|
||||
DLT_SCCP = 0x8e
|
||||
DLT_SCTP = 0xf8
|
||||
DLT_SITA = 0xc4
|
||||
DLT_SLIP = 0x8
|
||||
DLT_SLIP_BSDOS = 0xf
|
||||
DLT_STANAG_5066_D_PDU = 0xed
|
||||
DLT_SUNATM = 0x7b
|
||||
DLT_SYMANTEC_FIREWALL = 0x63
|
||||
DLT_TZSP = 0x80
|
||||
DLT_USB = 0xba
|
||||
DLT_USBPCAP = 0xf9
|
||||
DLT_USB_FREEBSD = 0xba
|
||||
DLT_USB_LINUX = 0xbd
|
||||
DLT_USB_LINUX_MMAPPED = 0xdc
|
||||
DLT_USER0 = 0x93
|
||||
DLT_USER1 = 0x94
|
||||
DLT_USER10 = 0x9d
|
||||
DLT_USER11 = 0x9e
|
||||
DLT_USER12 = 0x9f
|
||||
DLT_USER13 = 0xa0
|
||||
DLT_USER14 = 0xa1
|
||||
DLT_USER15 = 0xa2
|
||||
DLT_USER2 = 0x95
|
||||
DLT_USER3 = 0x96
|
||||
DLT_USER4 = 0x97
|
||||
DLT_USER5 = 0x98
|
||||
DLT_USER6 = 0x99
|
||||
DLT_USER7 = 0x9a
|
||||
DLT_USER8 = 0x9b
|
||||
DLT_USER9 = 0x9c
|
||||
DLT_WATTSTOPPER_DLM = 0x107
|
||||
DLT_WIHART = 0xdf
|
||||
DLT_WIRESHARK_UPPER_PDU = 0xfc
|
||||
DLT_X2E_SERIAL = 0xd5
|
||||
DLT_X2E_XORAYA = 0xd6
|
||||
DLT_ZWAVE_R1_R2 = 0x105
|
||||
DLT_ZWAVE_R3 = 0x106
|
||||
DT_BLK = 0x6
|
||||
DT_CHR = 0x2
|
||||
DT_DBF = 0xf
|
||||
|
@ -323,10 +404,11 @@ const (
|
|||
EV_EOF = 0x8000
|
||||
EV_ERROR = 0x4000
|
||||
EV_FLAG1 = 0x2000
|
||||
EV_HUP = 0x800
|
||||
EV_NODATA = 0x1000
|
||||
EV_ONESHOT = 0x10
|
||||
EV_RECEIPT = 0x40
|
||||
EV_SYSFLAGS = 0xf000
|
||||
EV_SYSFLAGS = 0xf800
|
||||
EXTA = 0x4b00
|
||||
EXTB = 0x9600
|
||||
EXTEXIT_LWP = 0x10000
|
||||
|
@ -365,8 +447,9 @@ const (
|
|||
IFF_ALLMULTI = 0x200
|
||||
IFF_ALTPHYS = 0x4000
|
||||
IFF_BROADCAST = 0x2
|
||||
IFF_CANTCHANGE = 0x118e72
|
||||
IFF_CANTCHANGE = 0x318e72
|
||||
IFF_DEBUG = 0x4
|
||||
IFF_IDIRECT = 0x200000
|
||||
IFF_LINK0 = 0x1000
|
||||
IFF_LINK1 = 0x2000
|
||||
IFF_LINK2 = 0x4000
|
||||
|
@ -441,7 +524,6 @@ const (
|
|||
IFT_EPLRS = 0x57
|
||||
IFT_ESCON = 0x49
|
||||
IFT_ETHER = 0x6
|
||||
IFT_FAITH = 0xf2
|
||||
IFT_FAST = 0x7d
|
||||
IFT_FASTETHER = 0x3e
|
||||
IFT_FASTETHERFX = 0x45
|
||||
|
@ -614,6 +696,7 @@ const (
|
|||
IN_CLASSD_NET = 0xf0000000
|
||||
IN_CLASSD_NSHIFT = 0x1c
|
||||
IN_LOOPBACKNET = 0x7f
|
||||
IN_RFC3021_MASK = 0xfffffffe
|
||||
IPPROTO_3PC = 0x22
|
||||
IPPROTO_ADFS = 0x44
|
||||
IPPROTO_AH = 0x33
|
||||
|
@ -735,7 +818,6 @@ const (
|
|||
IPV6_DEFHLIM = 0x40
|
||||
IPV6_DONTFRAG = 0x3e
|
||||
IPV6_DSTOPTS = 0x32
|
||||
IPV6_FAITH = 0x1d
|
||||
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||
IPV6_FRAGTTL = 0x78
|
||||
|
@ -747,7 +829,6 @@ const (
|
|||
IPV6_HLIMDEC = 0x1
|
||||
IPV6_HOPLIMIT = 0x2f
|
||||
IPV6_HOPOPTS = 0x31
|
||||
IPV6_IPSEC_POLICY = 0x1c
|
||||
IPV6_JOIN_GROUP = 0xc
|
||||
IPV6_LEAVE_GROUP = 0xd
|
||||
IPV6_MAXHLIM = 0xff
|
||||
|
@ -795,16 +876,22 @@ const (
|
|||
IP_DUMMYNET_DEL = 0x3d
|
||||
IP_DUMMYNET_FLUSH = 0x3e
|
||||
IP_DUMMYNET_GET = 0x40
|
||||
IP_FAITH = 0x16
|
||||
IP_FW_ADD = 0x32
|
||||
IP_FW_DEL = 0x33
|
||||
IP_FW_FLUSH = 0x34
|
||||
IP_FW_GET = 0x36
|
||||
IP_FW_RESETLOG = 0x37
|
||||
IP_FW_TBL_ADD = 0x2a
|
||||
IP_FW_TBL_CREATE = 0x28
|
||||
IP_FW_TBL_DEL = 0x2b
|
||||
IP_FW_TBL_DESTROY = 0x29
|
||||
IP_FW_TBL_EXPIRE = 0x2f
|
||||
IP_FW_TBL_FLUSH = 0x2c
|
||||
IP_FW_TBL_GET = 0x2d
|
||||
IP_FW_TBL_ZERO = 0x2e
|
||||
IP_FW_X = 0x31
|
||||
IP_FW_ZERO = 0x35
|
||||
IP_HDRINCL = 0x2
|
||||
IP_IPSEC_POLICY = 0x15
|
||||
IP_MAXPACKET = 0xffff
|
||||
IP_MAX_MEMBERSHIPS = 0x14
|
||||
IP_MF = 0x2000
|
||||
|
@ -1080,12 +1167,10 @@ const (
|
|||
RTM_MISS = 0x7
|
||||
RTM_NEWADDR = 0xc
|
||||
RTM_NEWMADDR = 0xf
|
||||
RTM_OLDADD = 0x9
|
||||
RTM_OLDDEL = 0xa
|
||||
RTM_REDIRECT = 0x6
|
||||
RTM_RESOLVE = 0xb
|
||||
RTM_RTTUNIT = 0xf4240
|
||||
RTM_VERSION = 0x6
|
||||
RTM_VERSION = 0x7
|
||||
RTV_EXPIRE = 0x4
|
||||
RTV_HOPCOUNT = 0x2
|
||||
RTV_IWCAPSEGS = 0x400
|
||||
|
@ -1106,13 +1191,13 @@ const (
|
|||
SHUT_RDWR = 0x2
|
||||
SHUT_WR = 0x1
|
||||
SIOCADDMULTI = 0x80206931
|
||||
SIOCADDRT = 0x8040720a
|
||||
SIOCAIFADDR = 0x8040691a
|
||||
SIOCAIFGROUP = 0x80286987
|
||||
SIOCALIFADDR = 0x8118691b
|
||||
SIOCATMARK = 0x40047307
|
||||
SIOCDELMULTI = 0x80206932
|
||||
SIOCDELRT = 0x8040720b
|
||||
SIOCDIFADDR = 0x80206919
|
||||
SIOCDIFGROUP = 0x80286989
|
||||
SIOCDIFPHYADDR = 0x80206949
|
||||
SIOCDLIFADDR = 0x8118691d
|
||||
SIOCGDRVSPEC = 0xc028697b
|
||||
|
@ -1120,6 +1205,7 @@ const (
|
|||
SIOCGETVIFCNT = 0xc028720f
|
||||
SIOCGHIWAT = 0x40047301
|
||||
SIOCGIFADDR = 0xc0206921
|
||||
SIOCGIFALIAS = 0xc0406929
|
||||
SIOCGIFBRDADDR = 0xc0206923
|
||||
SIOCGIFCAP = 0xc020691f
|
||||
SIOCGIFCONF = 0xc0106924
|
||||
|
@ -1128,6 +1214,7 @@ const (
|
|||
SIOCGIFFLAGS = 0xc0206911
|
||||
SIOCGIFGENERIC = 0xc020693a
|
||||
SIOCGIFGMEMB = 0xc028698a
|
||||
SIOCGIFGROUP = 0xc0286988
|
||||
SIOCGIFINDEX = 0xc0206920
|
||||
SIOCGIFMEDIA = 0xc0306938
|
||||
SIOCGIFMETRIC = 0xc0206917
|
||||
|
@ -1194,6 +1281,7 @@ const (
|
|||
SO_RCVBUF = 0x1002
|
||||
SO_RCVLOWAT = 0x1004
|
||||
SO_RCVTIMEO = 0x1006
|
||||
SO_RERROR = 0x2000
|
||||
SO_REUSEADDR = 0x4
|
||||
SO_REUSEPORT = 0x200
|
||||
SO_SNDBUF = 0x1001
|
||||
|
@ -1233,6 +1321,9 @@ const (
|
|||
S_IXGRP = 0x8
|
||||
S_IXOTH = 0x1
|
||||
S_IXUSR = 0x40
|
||||
TAB0 = 0x0
|
||||
TAB3 = 0x4
|
||||
TABDLY = 0x4
|
||||
TCIFLUSH = 0x1
|
||||
TCIOFF = 0x3
|
||||
TCIOFLUSH = 0x3
|
||||
|
@ -1259,6 +1350,8 @@ const (
|
|||
TCP_NOPUSH = 0x4
|
||||
TCP_SIGNATURE_ENABLE = 0x10
|
||||
TCSAFLUSH = 0x2
|
||||
TIMER_ABSTIME = 0x1
|
||||
TIMER_RELTIME = 0x0
|
||||
TIOCCBRK = 0x2000747a
|
||||
TIOCCDTR = 0x20007478
|
||||
TIOCCONS = 0x80047462
|
||||
|
@ -1272,7 +1365,6 @@ const (
|
|||
TIOCGETD = 0x4004741a
|
||||
TIOCGPGRP = 0x40047477
|
||||
TIOCGSID = 0x40047463
|
||||
TIOCGSIZE = 0x40087468
|
||||
TIOCGWINSZ = 0x40087468
|
||||
TIOCISPTMASTER = 0x20007455
|
||||
TIOCMBIC = 0x8004746b
|
||||
|
@ -1317,7 +1409,6 @@ const (
|
|||
TIOCSETD = 0x8004741b
|
||||
TIOCSIG = 0x2000745f
|
||||
TIOCSPGRP = 0x80047476
|
||||
TIOCSSIZE = 0x80087467
|
||||
TIOCSTART = 0x2000746e
|
||||
TIOCSTAT = 0x20007465
|
||||
TIOCSTI = 0x80017472
|
||||
|
@ -1326,6 +1417,8 @@ const (
|
|||
TIOCTIMESTAMP = 0x40107459
|
||||
TIOCUCNTL = 0x80047466
|
||||
TOSTOP = 0x400000
|
||||
UTIME_NOW = -0x1
|
||||
UTIME_OMIT = -0x2
|
||||
VCHECKPT = 0x13
|
||||
VDISCARD = 0xf
|
||||
VDSUSP = 0xb
|
||||
|
@ -1350,9 +1443,12 @@ const (
|
|||
VWERASE = 0x4
|
||||
WCONTINUED = 0x4
|
||||
WCOREFLAG = 0x80
|
||||
WEXITED = 0x10
|
||||
WLINUXCLONE = 0x80000000
|
||||
WNOHANG = 0x1
|
||||
WSTOPPED = 0x7f
|
||||
WNOWAIT = 0x8
|
||||
WSTOPPED = 0x2
|
||||
WTRAPPED = 0x20
|
||||
WUNTRACED = 0x2
|
||||
)
|
||||
|
||||
|
@ -1452,11 +1548,6 @@ const (
|
|||
ETIMEDOUT = syscall.Errno(0x3c)
|
||||
ETOOMANYREFS = syscall.Errno(0x3b)
|
||||
ETXTBSY = syscall.Errno(0x1a)
|
||||
EUNUSED94 = syscall.Errno(0x5e)
|
||||
EUNUSED95 = syscall.Errno(0x5f)
|
||||
EUNUSED96 = syscall.Errno(0x60)
|
||||
EUNUSED97 = syscall.Errno(0x61)
|
||||
EUNUSED98 = syscall.Errno(0x62)
|
||||
EUSERS = syscall.Errno(0x44)
|
||||
EWOULDBLOCK = syscall.Errno(0x23)
|
||||
EXDEV = syscall.Errno(0x12)
|
||||
|
@ -1600,12 +1691,7 @@ var errorList = [...]struct {
|
|||
{91, "ENOLINK", "link has been severed"},
|
||||
{92, "EPROTO", "protocol error"},
|
||||
{93, "ENOMEDIUM", "no medium found"},
|
||||
{94, "EUNUSED94", "unknown error: 94"},
|
||||
{95, "EUNUSED95", "unknown error: 95"},
|
||||
{96, "EUNUSED96", "unknown error: 96"},
|
||||
{97, "EUNUSED97", "unknown error: 97"},
|
||||
{98, "EUNUSED98", "unknown error: 98"},
|
||||
{99, "ELAST", "unknown error: 99"},
|
||||
{99, "EASYNC", "unknown error: 99"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
|
|
@ -214,22 +214,6 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(mib) > 0 {
|
||||
_p0 = unsafe.Pointer(&mib[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func utimes(path string, timeval *[2]Timeval) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
@ -439,6 +423,22 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(mib) > 0 {
|
||||
_p0 = unsafe.Pointer(&mib[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Access(path string, mode uint32) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
|
|
@ -6,129 +6,125 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
|
||||
SYS_EXIT = 1 // { void exit(int rval); }
|
||||
SYS_FORK = 2 // { int fork(void); }
|
||||
SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
|
||||
SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
|
||||
SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
|
||||
SYS_CLOSE = 6 // { int close(int fd); }
|
||||
SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int
|
||||
SYS_LINK = 9 // { int link(char *path, char *link); }
|
||||
SYS_UNLINK = 10 // { int unlink(char *path); }
|
||||
SYS_CHDIR = 12 // { int chdir(char *path); }
|
||||
SYS_FCHDIR = 13 // { int fchdir(int fd); }
|
||||
SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
|
||||
SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
|
||||
SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
|
||||
SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
|
||||
SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
|
||||
SYS_GETPID = 20 // { pid_t getpid(void); }
|
||||
SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
|
||||
SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
|
||||
SYS_SETUID = 23 // { int setuid(uid_t uid); }
|
||||
SYS_GETUID = 24 // { uid_t getuid(void); }
|
||||
SYS_GETEUID = 25 // { uid_t geteuid(void); }
|
||||
SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
|
||||
SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
|
||||
SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); }
|
||||
SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }
|
||||
SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); }
|
||||
SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); }
|
||||
SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); }
|
||||
SYS_ACCESS = 33 // { int access(char *path, int flags); }
|
||||
SYS_CHFLAGS = 34 // { int chflags(char *path, int flags); }
|
||||
SYS_FCHFLAGS = 35 // { int fchflags(int fd, int flags); }
|
||||
SYS_SYNC = 36 // { int sync(void); }
|
||||
SYS_KILL = 37 // { int kill(int pid, int signum); }
|
||||
SYS_GETPPID = 39 // { pid_t getppid(void); }
|
||||
SYS_DUP = 41 // { int dup(int fd); }
|
||||
SYS_PIPE = 42 // { int pipe(void); }
|
||||
SYS_GETEGID = 43 // { gid_t getegid(void); }
|
||||
SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
|
||||
SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
|
||||
SYS_GETGID = 47 // { gid_t getgid(void); }
|
||||
SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
|
||||
SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
|
||||
SYS_ACCT = 51 // { int acct(char *path); }
|
||||
SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
|
||||
SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
|
||||
SYS_REBOOT = 55 // { int reboot(int opt); }
|
||||
SYS_REVOKE = 56 // { int revoke(char *path); }
|
||||
SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
|
||||
SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); }
|
||||
SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
|
||||
SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
|
||||
SYS_CHROOT = 61 // { int chroot(char *path); }
|
||||
SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
|
||||
SYS_VFORK = 66 // { pid_t vfork(void); }
|
||||
SYS_SBRK = 69 // { int sbrk(int incr); }
|
||||
SYS_SSTK = 70 // { int sstk(int incr); }
|
||||
SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
|
||||
SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); }
|
||||
SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
|
||||
SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
|
||||
SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
|
||||
SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
|
||||
SYS_GETPGRP = 81 // { int getpgrp(void); }
|
||||
SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
|
||||
SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
|
||||
SYS_SWAPON = 85 // { int swapon(char *name); }
|
||||
SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
|
||||
SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
|
||||
SYS_DUP2 = 90 // { int dup2(int from, int to); }
|
||||
SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
|
||||
SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
|
||||
SYS_FSYNC = 95 // { int fsync(int fd); }
|
||||
SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
|
||||
SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
|
||||
SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
|
||||
SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
|
||||
SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
|
||||
SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
|
||||
SYS_LISTEN = 106 // { int listen(int s, int backlog); }
|
||||
SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
|
||||
SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
|
||||
SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
|
||||
SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
|
||||
SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
|
||||
SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
|
||||
SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
|
||||
SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
|
||||
SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
|
||||
SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
|
||||
SYS_RENAME = 128 // { int rename(char *from, char *to); }
|
||||
SYS_FLOCK = 131 // { int flock(int fd, int how); }
|
||||
SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
|
||||
SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
|
||||
SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
|
||||
SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
|
||||
SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
|
||||
SYS_RMDIR = 137 // { int rmdir(char *path); }
|
||||
SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
|
||||
SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
|
||||
SYS_SETSID = 147 // { int setsid(void); }
|
||||
SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
|
||||
SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); }
|
||||
SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); }
|
||||
SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
|
||||
SYS_GETDOMAINNAME = 162 // { int getdomainname(char *domainname, int len); }
|
||||
SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); }
|
||||
SYS_UNAME = 164 // { int uname(struct utsname *name); }
|
||||
SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
|
||||
SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
|
||||
SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }
|
||||
SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }
|
||||
SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
|
||||
SYS_SETGID = 181 // { int setgid(gid_t gid); }
|
||||
SYS_SETEGID = 182 // { int setegid(gid_t egid); }
|
||||
SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
|
||||
SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
|
||||
SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
|
||||
SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
|
||||
SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
|
||||
SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
|
||||
// SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int
|
||||
SYS_EXIT = 1 // { void exit(int rval); }
|
||||
SYS_FORK = 2 // { int fork(void); }
|
||||
SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
|
||||
SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
|
||||
SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
|
||||
SYS_CLOSE = 6 // { int close(int fd); }
|
||||
SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int
|
||||
// SYS_NOSYS = 8; // { int nosys(void); } __nosys nosys_args int
|
||||
SYS_LINK = 9 // { int link(char *path, char *link); }
|
||||
SYS_UNLINK = 10 // { int unlink(char *path); }
|
||||
SYS_CHDIR = 12 // { int chdir(char *path); }
|
||||
SYS_FCHDIR = 13 // { int fchdir(int fd); }
|
||||
SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
|
||||
SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
|
||||
SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
|
||||
SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
|
||||
SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
|
||||
SYS_GETPID = 20 // { pid_t getpid(void); }
|
||||
SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
|
||||
SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
|
||||
SYS_SETUID = 23 // { int setuid(uid_t uid); }
|
||||
SYS_GETUID = 24 // { uid_t getuid(void); }
|
||||
SYS_GETEUID = 25 // { uid_t geteuid(void); }
|
||||
SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
|
||||
SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
|
||||
SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); }
|
||||
SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }
|
||||
SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); }
|
||||
SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); }
|
||||
SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); }
|
||||
SYS_ACCESS = 33 // { int access(char *path, int flags); }
|
||||
SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
|
||||
SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
|
||||
SYS_SYNC = 36 // { int sync(void); }
|
||||
SYS_KILL = 37 // { int kill(int pid, int signum); }
|
||||
SYS_GETPPID = 39 // { pid_t getppid(void); }
|
||||
SYS_DUP = 41 // { int dup(int fd); }
|
||||
SYS_PIPE = 42 // { int pipe(void); }
|
||||
SYS_GETEGID = 43 // { gid_t getegid(void); }
|
||||
SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
|
||||
SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
|
||||
SYS_GETGID = 47 // { gid_t getgid(void); }
|
||||
SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, size_t namelen); }
|
||||
SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
|
||||
SYS_ACCT = 51 // { int acct(char *path); }
|
||||
SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
|
||||
SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
|
||||
SYS_REBOOT = 55 // { int reboot(int opt); }
|
||||
SYS_REVOKE = 56 // { int revoke(char *path); }
|
||||
SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
|
||||
SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); }
|
||||
SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
|
||||
SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
|
||||
SYS_CHROOT = 61 // { int chroot(char *path); }
|
||||
SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
|
||||
SYS_VFORK = 66 // { pid_t vfork(void); }
|
||||
SYS_SBRK = 69 // { caddr_t sbrk(size_t incr); }
|
||||
SYS_SSTK = 70 // { int sstk(size_t incr); }
|
||||
SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
|
||||
SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); }
|
||||
SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
|
||||
SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
|
||||
SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
|
||||
SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
|
||||
SYS_GETPGRP = 81 // { int getpgrp(void); }
|
||||
SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
|
||||
SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
|
||||
SYS_SWAPON = 85 // { int swapon(char *name); }
|
||||
SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
|
||||
SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
|
||||
SYS_DUP2 = 90 // { int dup2(int from, int to); }
|
||||
SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
|
||||
SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
|
||||
SYS_FSYNC = 95 // { int fsync(int fd); }
|
||||
SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
|
||||
SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
|
||||
SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
|
||||
SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
|
||||
SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
|
||||
SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
|
||||
SYS_LISTEN = 106 // { int listen(int s, int backlog); }
|
||||
SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
|
||||
SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
|
||||
SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
|
||||
SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
|
||||
SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
|
||||
SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
|
||||
SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
|
||||
SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
|
||||
SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
|
||||
SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
|
||||
SYS_RENAME = 128 // { int rename(char *from, char *to); }
|
||||
SYS_FLOCK = 131 // { int flock(int fd, int how); }
|
||||
SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
|
||||
SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
|
||||
SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
|
||||
SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
|
||||
SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
|
||||
SYS_RMDIR = 137 // { int rmdir(char *path); }
|
||||
SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
|
||||
SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
|
||||
SYS_SETSID = 147 // { int setsid(void); }
|
||||
SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
|
||||
SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); }
|
||||
SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); }
|
||||
SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
|
||||
SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
|
||||
SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
|
||||
SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }
|
||||
SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }
|
||||
SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
|
||||
SYS_SETGID = 181 // { int setgid(gid_t gid); }
|
||||
SYS_SETEGID = 182 // { int setegid(gid_t egid); }
|
||||
SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
|
||||
SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
|
||||
SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
|
||||
SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
|
||||
SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
|
||||
SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
|
||||
SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); }
|
||||
SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); }
|
||||
SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); }
|
||||
|
@ -161,8 +157,8 @@ const (
|
|||
SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
|
||||
SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
|
||||
SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
|
||||
SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, u_int iovcnt, int flags, off_t offset); }
|
||||
SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,u_int iovcnt, int flags, off_t offset); }
|
||||
SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); }
|
||||
SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); }
|
||||
SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
|
||||
SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
|
||||
SYS_MODNEXT = 300 // { int modnext(int modid); }
|
||||
|
@ -225,7 +221,7 @@ const (
|
|||
SYS_KQUEUE = 362 // { int kqueue(void); }
|
||||
SYS_KEVENT = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
|
||||
SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
|
||||
SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); }
|
||||
SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
|
||||
SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
|
||||
SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
|
||||
SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); }
|
||||
|
@ -302,7 +298,7 @@ const (
|
|||
SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }
|
||||
SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); }
|
||||
SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); }
|
||||
SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);}
|
||||
SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, u_long flags, int atflags);}
|
||||
SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); }
|
||||
SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); }
|
||||
SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); }
|
||||
|
@ -312,4 +308,9 @@ const (
|
|||
SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }
|
||||
SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }
|
||||
SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }
|
||||
SYS_GETCPUCLOCKID = 547 // { int getcpuclockid(pid_t pid, lwpid_t lwp_id, clockid_t *clock_id); }
|
||||
SYS_WAIT6 = 548 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
|
||||
SYS_LWP_GETNAME = 549 // { int lwp_getname(lwpid_t tid, char *name, size_t len); }
|
||||
SYS_GETRANDOM = 550 // { ssize_t getrandom(void *buf, size_t len, unsigned flags); }
|
||||
SYS___REALPATH = 551 // { ssize_t __realpath(const char *path, char *buf, size_t len); }
|
||||
)
|
||||
|
|
|
@ -92,9 +92,9 @@ type Statfs_t struct {
|
|||
Type uint32
|
||||
Flags uint32
|
||||
Fssubtype uint32
|
||||
Fstypename [16]int8
|
||||
Mntonname [1024]int8
|
||||
Mntfromname [1024]int8
|
||||
Fstypename [16]byte
|
||||
Mntonname [1024]byte
|
||||
Mntfromname [1024]byte
|
||||
Reserved [8]uint32
|
||||
}
|
||||
|
||||
|
@ -305,7 +305,6 @@ type IfMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Data IfData
|
||||
}
|
||||
|
||||
|
@ -348,7 +347,6 @@ type IfaMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Metric int32
|
||||
}
|
||||
|
||||
|
@ -369,7 +367,6 @@ type IfmaMsghdr2 struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Refcount int32
|
||||
}
|
||||
|
||||
|
@ -378,7 +375,6 @@ type RtMsghdr struct {
|
|||
Version uint8
|
||||
Type uint8
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Pid int32
|
||||
|
@ -400,7 +396,8 @@ type RtMetrics struct {
|
|||
Rtt uint32
|
||||
Rttvar uint32
|
||||
Pksent uint32
|
||||
Filler [4]uint32
|
||||
State uint32
|
||||
Filler [3]uint32
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
|
@ -70,7 +70,6 @@ type Stat_t struct {
|
|||
Uid uint32
|
||||
Gid uint32
|
||||
Rdev int32
|
||||
_ [4]byte
|
||||
Atim Timespec
|
||||
Mtim Timespec
|
||||
Ctim Timespec
|
||||
|
@ -97,10 +96,11 @@ type Statfs_t struct {
|
|||
Type uint32
|
||||
Flags uint32
|
||||
Fssubtype uint32
|
||||
Fstypename [16]int8
|
||||
Mntonname [1024]int8
|
||||
Mntfromname [1024]int8
|
||||
Reserved [8]uint32
|
||||
Fstypename [16]byte
|
||||
Mntonname [1024]byte
|
||||
Mntfromname [1024]byte
|
||||
Flags_ext uint32
|
||||
Reserved [7]uint32
|
||||
}
|
||||
|
||||
type Flock_t struct {
|
||||
|
@ -133,8 +133,7 @@ type Fbootstraptransfer_t struct {
|
|||
|
||||
type Log2phys_t struct {
|
||||
Flags uint32
|
||||
_ [8]byte
|
||||
_ [8]byte
|
||||
_ [16]byte
|
||||
}
|
||||
|
||||
type Fsid struct {
|
||||
|
@ -225,10 +224,8 @@ type IPv6Mreq struct {
|
|||
type Msghdr struct {
|
||||
Name *byte
|
||||
Namelen uint32
|
||||
_ [4]byte
|
||||
Iov *Iovec
|
||||
Iovlen int32
|
||||
_ [4]byte
|
||||
Control *byte
|
||||
Controllen uint32
|
||||
Flags int32
|
||||
|
@ -313,7 +310,6 @@ type IfMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Data IfData
|
||||
}
|
||||
|
||||
|
@ -356,7 +352,6 @@ type IfaMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Metric int32
|
||||
}
|
||||
|
||||
|
@ -377,7 +372,6 @@ type IfmaMsghdr2 struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Refcount int32
|
||||
}
|
||||
|
||||
|
@ -386,7 +380,6 @@ type RtMsghdr struct {
|
|||
Version uint8
|
||||
Type uint8
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Pid int32
|
||||
|
@ -408,7 +401,8 @@ type RtMetrics struct {
|
|||
Rtt uint32
|
||||
Rttvar uint32
|
||||
Pksent uint32
|
||||
Filler [4]uint32
|
||||
State uint32
|
||||
Filler [3]uint32
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -431,7 +425,6 @@ type BpfStat struct {
|
|||
|
||||
type BpfProgram struct {
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
Insns *BpfInsn
|
||||
}
|
||||
|
||||
|
@ -456,7 +449,6 @@ type Termios struct {
|
|||
Cflag uint64
|
||||
Lflag uint64
|
||||
Cc [20]uint8
|
||||
_ [4]byte
|
||||
Ispeed uint64
|
||||
Ospeed uint64
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// NOTE: cgo can't generate struct Stat_t and struct Statfs_t yet
|
||||
// Created by cgo -godefs - DO NOT EDIT
|
||||
// cgo -godefs types_darwin.go
|
||||
// cgo -godefs types_darwin.go | go run mkpost.go
|
||||
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||
|
||||
// +build arm,darwin
|
||||
|
||||
|
@ -31,7 +30,7 @@ type Timeval struct {
|
|||
Usec int32
|
||||
}
|
||||
|
||||
type Timeval32 [0]byte
|
||||
type Timeval32 struct{}
|
||||
|
||||
type Rusage struct {
|
||||
Utime Timeval
|
||||
|
@ -93,9 +92,9 @@ type Statfs_t struct {
|
|||
Type uint32
|
||||
Flags uint32
|
||||
Fssubtype uint32
|
||||
Fstypename [16]int8
|
||||
Mntonname [1024]int8
|
||||
Mntfromname [1024]int8
|
||||
Fstypename [16]byte
|
||||
Mntonname [1024]byte
|
||||
Mntfromname [1024]byte
|
||||
Reserved [8]uint32
|
||||
}
|
||||
|
||||
|
@ -306,7 +305,6 @@ type IfMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Data IfData
|
||||
}
|
||||
|
||||
|
@ -349,7 +347,6 @@ type IfaMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Metric int32
|
||||
}
|
||||
|
||||
|
@ -370,7 +367,6 @@ type IfmaMsghdr2 struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Refcount int32
|
||||
}
|
||||
|
||||
|
@ -379,7 +375,6 @@ type RtMsghdr struct {
|
|||
Version uint8
|
||||
Type uint8
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Pid int32
|
||||
|
@ -401,7 +396,8 @@ type RtMetrics struct {
|
|||
Rtt uint32
|
||||
Rttvar uint32
|
||||
Pksent uint32
|
||||
Filler [4]uint32
|
||||
State uint32
|
||||
Filler [3]uint32
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
|
@ -70,7 +70,6 @@ type Stat_t struct {
|
|||
Uid uint32
|
||||
Gid uint32
|
||||
Rdev int32
|
||||
_ [4]byte
|
||||
Atim Timespec
|
||||
Mtim Timespec
|
||||
Ctim Timespec
|
||||
|
@ -97,10 +96,11 @@ type Statfs_t struct {
|
|||
Type uint32
|
||||
Flags uint32
|
||||
Fssubtype uint32
|
||||
Fstypename [16]int8
|
||||
Mntonname [1024]int8
|
||||
Mntfromname [1024]int8
|
||||
Reserved [8]uint32
|
||||
Fstypename [16]byte
|
||||
Mntonname [1024]byte
|
||||
Mntfromname [1024]byte
|
||||
Flags_ext uint32
|
||||
Reserved [7]uint32
|
||||
}
|
||||
|
||||
type Flock_t struct {
|
||||
|
@ -133,8 +133,7 @@ type Fbootstraptransfer_t struct {
|
|||
|
||||
type Log2phys_t struct {
|
||||
Flags uint32
|
||||
_ [8]byte
|
||||
_ [8]byte
|
||||
_ [16]byte
|
||||
}
|
||||
|
||||
type Fsid struct {
|
||||
|
@ -225,10 +224,8 @@ type IPv6Mreq struct {
|
|||
type Msghdr struct {
|
||||
Name *byte
|
||||
Namelen uint32
|
||||
_ [4]byte
|
||||
Iov *Iovec
|
||||
Iovlen int32
|
||||
_ [4]byte
|
||||
Control *byte
|
||||
Controllen uint32
|
||||
Flags int32
|
||||
|
@ -313,7 +310,6 @@ type IfMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Data IfData
|
||||
}
|
||||
|
||||
|
@ -356,7 +352,6 @@ type IfaMsghdr struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Metric int32
|
||||
}
|
||||
|
||||
|
@ -377,7 +372,6 @@ type IfmaMsghdr2 struct {
|
|||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Refcount int32
|
||||
}
|
||||
|
||||
|
@ -386,7 +380,6 @@ type RtMsghdr struct {
|
|||
Version uint8
|
||||
Type uint8
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Pid int32
|
||||
|
@ -408,7 +401,8 @@ type RtMetrics struct {
|
|||
Rtt uint32
|
||||
Rttvar uint32
|
||||
Pksent uint32
|
||||
Filler [4]uint32
|
||||
State uint32
|
||||
Filler [3]uint32
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -431,7 +425,6 @@ type BpfStat struct {
|
|||
|
||||
type BpfProgram struct {
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
Insns *BpfInsn
|
||||
}
|
||||
|
||||
|
@ -456,7 +449,6 @@ type Termios struct {
|
|||
Cflag uint64
|
||||
Lflag uint64
|
||||
Cc [20]uint8
|
||||
_ [4]byte
|
||||
Ispeed uint64
|
||||
Ospeed uint64
|
||||
}
|
||||
|
|
|
@ -70,11 +70,11 @@ type Stat_t struct {
|
|||
Ctim Timespec
|
||||
Size int64
|
||||
Blocks int64
|
||||
Blksize uint32
|
||||
_ uint32
|
||||
Flags uint32
|
||||
Gen uint32
|
||||
Lspare int32
|
||||
Qspare1 int64
|
||||
Blksize int64
|
||||
Qspare2 int64
|
||||
}
|
||||
|
||||
|
@ -91,17 +91,15 @@ type Statfs_t struct {
|
|||
Owner uint32
|
||||
Type int32
|
||||
Flags int32
|
||||
_ [4]byte
|
||||
Syncwrites int64
|
||||
Asyncwrites int64
|
||||
Fstypename [16]int8
|
||||
Mntonname [80]int8
|
||||
Fstypename [16]byte
|
||||
Mntonname [80]byte
|
||||
Syncreads int64
|
||||
Asyncreads int64
|
||||
Spares1 int16
|
||||
Mntfromname [80]int8
|
||||
Mntfromname [80]byte
|
||||
Spares2 int16
|
||||
_ [4]byte
|
||||
Spare [2]int64
|
||||
}
|
||||
|
||||
|
@ -202,10 +200,8 @@ type IPv6Mreq struct {
|
|||
type Msghdr struct {
|
||||
Name *byte
|
||||
Namelen uint32
|
||||
_ [4]byte
|
||||
Iov *Iovec
|
||||
Iovlen int32
|
||||
_ [4]byte
|
||||
Control *byte
|
||||
Controllen uint32
|
||||
Flags int32
|
||||
|
@ -269,7 +265,7 @@ type FdSet struct {
|
|||
const (
|
||||
SizeofIfMsghdr = 0xb0
|
||||
SizeofIfData = 0xa0
|
||||
SizeofIfaMsghdr = 0x14
|
||||
SizeofIfaMsghdr = 0x18
|
||||
SizeofIfmaMsghdr = 0x10
|
||||
SizeofIfAnnounceMsghdr = 0x18
|
||||
SizeofRtMsghdr = 0x98
|
||||
|
@ -280,10 +276,9 @@ type IfMsghdr struct {
|
|||
Msglen uint16
|
||||
Version uint8
|
||||
Type uint8
|
||||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Data IfData
|
||||
}
|
||||
|
||||
|
@ -294,7 +289,6 @@ type IfData struct {
|
|||
Hdrlen uint8
|
||||
Recvquota uint8
|
||||
Xmitquota uint8
|
||||
_ [2]byte
|
||||
Mtu uint64
|
||||
Metric uint64
|
||||
Link_state uint64
|
||||
|
@ -316,24 +310,23 @@ type IfData struct {
|
|||
}
|
||||
|
||||
type IfaMsghdr struct {
|
||||
Msglen uint16
|
||||
Version uint8
|
||||
Type uint8
|
||||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Metric int32
|
||||
Msglen uint16
|
||||
Version uint8
|
||||
Type uint8
|
||||
Index uint16
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Addrflags int32
|
||||
Metric int32
|
||||
}
|
||||
|
||||
type IfmaMsghdr struct {
|
||||
Msglen uint16
|
||||
Version uint8
|
||||
Type uint8
|
||||
Addrs int32
|
||||
Flags int32
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
}
|
||||
|
||||
type IfAnnounceMsghdr struct {
|
||||
|
@ -350,7 +343,6 @@ type RtMsghdr struct {
|
|||
Version uint8
|
||||
Type uint8
|
||||
Index uint16
|
||||
_ [2]byte
|
||||
Flags int32
|
||||
Addrs int32
|
||||
Pid int32
|
||||
|
@ -374,7 +366,6 @@ type RtMetrics struct {
|
|||
Hopcount uint64
|
||||
Mssopt uint16
|
||||
Pad uint16
|
||||
_ [4]byte
|
||||
Msl uint64
|
||||
Iwmaxsegs uint64
|
||||
Iwcapsegs uint64
|
||||
|
@ -400,7 +391,6 @@ type BpfStat struct {
|
|||
|
||||
type BpfProgram struct {
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
Insns *BpfInsn
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,10 @@
|
|||
package svc
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
|
@ -23,6 +27,8 @@ func allocSid(subAuth0 uint32) (*windows.SID, error) {
|
|||
// IsAnInteractiveSession determines if calling process is running interactively.
|
||||
// It queries the process token for membership in the Interactive group.
|
||||
// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s
|
||||
//
|
||||
// Deprecated: Use IsWindowsService instead.
|
||||
func IsAnInteractiveSession() (bool, error) {
|
||||
interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID)
|
||||
if err != nil {
|
||||
|
@ -57,3 +63,95 @@ func IsAnInteractiveSession() (bool, error) {
|
|||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
var (
|
||||
ntdll = windows.NewLazySystemDLL("ntdll.dll")
|
||||
_NtQueryInformationProcess = ntdll.NewProc("NtQueryInformationProcess")
|
||||
|
||||
kernel32 = windows.NewLazySystemDLL("kernel32.dll")
|
||||
_QueryFullProcessImageNameA = kernel32.NewProc("QueryFullProcessImageNameA")
|
||||
)
|
||||
|
||||
// IsWindowsService reports whether the process is currently executing
|
||||
// as a Windows service.
|
||||
func IsWindowsService() (bool, error) {
|
||||
// This code was copied from runtime.isWindowsService function.
|
||||
|
||||
// The below technique looks a bit hairy, but it's actually
|
||||
// exactly what the .NET framework does for the similarly named function:
|
||||
// https://github.com/dotnet/extensions/blob/f4066026ca06984b07e90e61a6390ac38152ba93/src/Hosting/WindowsServices/src/WindowsServiceHelpers.cs#L26-L31
|
||||
// Specifically, it looks up whether the parent process has session ID zero
|
||||
// and is called "services".
|
||||
const _CURRENT_PROCESS = ^uintptr(0)
|
||||
// pbi is a PROCESS_BASIC_INFORMATION struct, where we just care about
|
||||
// the 6th pointer inside of it, which contains the pid of the process
|
||||
// parent:
|
||||
// https://github.com/wine-mirror/wine/blob/42cb7d2ad1caba08de235e6319b9967296b5d554/include/winternl.h#L1294
|
||||
var pbi [6]uintptr
|
||||
var pbiLen uint32
|
||||
r0, _, _ := syscall.Syscall6(_NtQueryInformationProcess.Addr(), 5, _CURRENT_PROCESS, 0, uintptr(unsafe.Pointer(&pbi[0])), uintptr(unsafe.Sizeof(pbi)), uintptr(unsafe.Pointer(&pbiLen)), 0)
|
||||
if r0 != 0 {
|
||||
return false, errors.New("NtQueryInformationProcess failed: error=" + itoa(int(r0)))
|
||||
}
|
||||
var psid uint32
|
||||
err := windows.ProcessIdToSessionId(uint32(pbi[5]), &psid)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if psid != 0 {
|
||||
// parent session id should be 0 for service process
|
||||
return false, nil
|
||||
}
|
||||
|
||||
pproc, err := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, uint32(pbi[5]))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer windows.CloseHandle(pproc)
|
||||
|
||||
// exeName gets the path to the executable image of the parent process
|
||||
var exeName [261]byte
|
||||
exeNameLen := uint32(len(exeName) - 1)
|
||||
r0, _, e0 := syscall.Syscall6(_QueryFullProcessImageNameA.Addr(), 4, uintptr(pproc), 0, uintptr(unsafe.Pointer(&exeName[0])), uintptr(unsafe.Pointer(&exeNameLen)), 0, 0)
|
||||
if r0 == 0 {
|
||||
if e0 != 0 {
|
||||
return false, e0
|
||||
} else {
|
||||
return false, syscall.EINVAL
|
||||
}
|
||||
}
|
||||
const (
|
||||
servicesLower = "services.exe"
|
||||
servicesUpper = "SERVICES.EXE"
|
||||
)
|
||||
i := int(exeNameLen) - 1
|
||||
j := len(servicesLower) - 1
|
||||
if i < j {
|
||||
return false, nil
|
||||
}
|
||||
for {
|
||||
if j == -1 {
|
||||
return i == -1 || exeName[i] == '\\', nil
|
||||
}
|
||||
if exeName[i] != servicesLower[j] && exeName[i] != servicesUpper[j] {
|
||||
return false, nil
|
||||
}
|
||||
i--
|
||||
j--
|
||||
}
|
||||
}
|
||||
|
||||
func itoa(val int) string { // do it here rather than with fmt to avoid dependency
|
||||
if val < 0 {
|
||||
return "-" + itoa(-val)
|
||||
}
|
||||
var buf [32]byte // big enough for int64
|
||||
i := len(buf) - 1
|
||||
for val >= 10 {
|
||||
buf[i] = byte(val%10 + '0')
|
||||
i--
|
||||
val /= 10
|
||||
}
|
||||
buf[i] = byte(val + '0')
|
||||
return string(buf[i:])
|
||||
}
|
||||
|
|
|
@ -270,6 +270,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|||
//sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW
|
||||
//sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW
|
||||
//sys GetCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId
|
||||
//sys ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) = kernel32.ProcessIdToSessionId
|
||||
//sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode
|
||||
//sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode
|
||||
//sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo
|
||||
|
@ -389,11 +390,7 @@ func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err
|
|||
r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0)
|
||||
proc = uintptr(r0)
|
||||
if proc == 0 {
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -1090,11 +1087,7 @@ func WSASendMsg(fd Handle, msg *WSAMsg, flags uint32, bytesSent *uint32, overlap
|
|||
}
|
||||
r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.sendAddr, 6, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(flags), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)))
|
||||
if r1 == socket_error {
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
@ -1106,11 +1099,7 @@ func WSARecvMsg(fd Handle, msg *WSAMsg, bytesReceived *uint32, overlapped *Overl
|
|||
}
|
||||
r1, _, e1 := syscall.Syscall6(sendRecvMsgFunc.recvAddr, 5, uintptr(fd), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(bytesReceived)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0)
|
||||
if r1 == socket_error {
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
} else {
|
||||
err = syscall.EINVAL
|
||||
}
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -32,7 +32,7 @@ github.com/NYTimes/gziphandler
|
|||
github.com/StackExchange/wmi
|
||||
# github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e
|
||||
github.com/armon/circbuf
|
||||
# github.com/armon/go-metrics v0.3.5-0.20200914211745-2bc64ebd2914
|
||||
# github.com/armon/go-metrics v0.3.5-0.20201104215618-6fd5a4ddf425
|
||||
github.com/armon/go-metrics
|
||||
github.com/armon/go-metrics/circonus
|
||||
github.com/armon/go-metrics/datadog
|
||||
|
@ -316,7 +316,7 @@ github.com/konsorten/go-windows-terminal-sequences
|
|||
github.com/kr/text
|
||||
# github.com/linode/linodego v0.7.1
|
||||
github.com/linode/linodego
|
||||
# github.com/mattn/go-colorable v0.1.7
|
||||
# github.com/mattn/go-colorable v0.1.6
|
||||
github.com/mattn/go-colorable
|
||||
# github.com/mattn/go-isatty v0.0.12
|
||||
github.com/mattn/go-isatty
|
||||
|
@ -504,7 +504,7 @@ golang.org/x/oauth2/jwt
|
|||
# golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
|
||||
golang.org/x/sync/errgroup
|
||||
golang.org/x/sync/singleflight
|
||||
# golang.org/x/sys v0.0.0-20201007082116-8445cc04cbdf
|
||||
# golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634
|
||||
golang.org/x/sys/cpu
|
||||
golang.org/x/sys/internal/unsafeheader
|
||||
golang.org/x/sys/unix
|
||||
|
|
Loading…
Reference in New Issue