Files
LearnGO/go/pkg/mod/github.com/cilium/ebpf@v0.11.0/cmd/bpf2go/output.tpl
T
2024-09-19 21:38:24 -04:00

138 lines
3.3 KiB
Smarty

// Code generated by bpf2go; DO NOT EDIT.
{{ with .Constraints }}//go:build {{ . }}{{ end }}
package {{ .Package }}
import (
"bytes"
_ "embed"
"fmt"
"io"
"{{ .Module }}"
)
{{- if .Types }}
{{- range $type := .Types }}
{{ $.TypeDeclaration (index $.TypeNames $type) $type }}
{{ end }}
{{- end }}
// {{ .Name.Load }} returns the embedded CollectionSpec for {{ .Name }}.
func {{ .Name.Load }}() (*ebpf.CollectionSpec, error) {
reader := bytes.NewReader({{ .Name.Bytes }})
spec, err := ebpf.LoadCollectionSpecFromReader(reader)
if err != nil {
return nil, fmt.Errorf("can't load {{ .Name }}: %w", err)
}
return spec, err
}
// {{ .Name.LoadObjects }} loads {{ .Name }} and converts it into a struct.
//
// The following types are suitable as obj argument:
//
// *{{ .Name.Objects }}
// *{{ .Name.Programs }}
// *{{ .Name.Maps }}
//
// See ebpf.CollectionSpec.LoadAndAssign documentation for details.
func {{ .Name.LoadObjects }}(obj interface{}, opts *ebpf.CollectionOptions) (error) {
spec, err := {{ .Name.Load }}()
if err != nil {
return err
}
return spec.LoadAndAssign(obj, opts)
}
// {{ .Name.Specs }} contains maps and programs before they are loaded into the kernel.
//
// It can be passed ebpf.CollectionSpec.Assign.
type {{ .Name.Specs }} struct {
{{ .Name.ProgramSpecs }}
{{ .Name.MapSpecs }}
}
// {{ .Name.Specs }} contains programs before they are loaded into the kernel.
//
// It can be passed ebpf.CollectionSpec.Assign.
type {{ .Name.ProgramSpecs }} struct {
{{- range $name, $id := .Programs }}
{{ $id }} *ebpf.ProgramSpec `ebpf:"{{ $name }}"`
{{- end }}
}
// {{ .Name.MapSpecs }} contains maps before they are loaded into the kernel.
//
// It can be passed ebpf.CollectionSpec.Assign.
type {{ .Name.MapSpecs }} struct {
{{- range $name, $id := .Maps }}
{{ $id }} *ebpf.MapSpec `ebpf:"{{ $name }}"`
{{- end }}
}
// {{ .Name.Objects }} contains all objects after they have been loaded into the kernel.
//
// It can be passed to {{ .Name.LoadObjects }} or ebpf.CollectionSpec.LoadAndAssign.
type {{ .Name.Objects }} struct {
{{ .Name.Programs }}
{{ .Name.Maps }}
}
func (o *{{ .Name.Objects }}) Close() error {
return {{ .Name.CloseHelper }}(
&o.{{ .Name.Programs }},
&o.{{ .Name.Maps }},
)
}
// {{ .Name.Maps }} contains all maps after they have been loaded into the kernel.
//
// It can be passed to {{ .Name.LoadObjects }} or ebpf.CollectionSpec.LoadAndAssign.
type {{ .Name.Maps }} struct {
{{- range $name, $id := .Maps }}
{{ $id }} *ebpf.Map `ebpf:"{{ $name }}"`
{{- end }}
}
func (m *{{ .Name.Maps }}) Close() error {
return {{ .Name.CloseHelper }}(
{{- range $id := .Maps }}
m.{{ $id }},
{{- end }}
)
}
// {{ .Name.Programs }} contains all programs after they have been loaded into the kernel.
//
// It can be passed to {{ .Name.LoadObjects }} or ebpf.CollectionSpec.LoadAndAssign.
type {{ .Name.Programs }} struct {
{{- range $name, $id := .Programs }}
{{ $id }} *ebpf.Program `ebpf:"{{ $name }}"`
{{- end }}
}
func (p *{{ .Name.Programs }}) Close() error {
return {{ .Name.CloseHelper }}(
{{- range $id := .Programs }}
p.{{ $id }},
{{- end }}
)
}
func {{ .Name.CloseHelper }}(closers ...io.Closer) error {
for _, closer := range closers {
if err := closer.Close(); err != nil {
return err
}
}
return nil
}
// Do not access this directly.
//go:embed {{ .File }}
var {{ .Name.Bytes }} []byte