github.com/cilium/ebpf@v0.15.1-0.20240517100537-8079b37aa138/examples/fentry/bpf_bpfeb.go (about)

     1  // Code generated by bpf2go; DO NOT EDIT.
     2  //go:build mips || mips64 || ppc64 || s390x
     3  
     4  package main
     5  
     6  import (
     7  	"bytes"
     8  	_ "embed"
     9  	"fmt"
    10  	"io"
    11  
    12  	"github.com/cilium/ebpf"
    13  )
    14  
    15  type bpfEvent struct {
    16  	Comm  [16]uint8
    17  	Sport uint16
    18  	Dport uint16
    19  	Saddr uint32
    20  	Daddr uint32
    21  }
    22  
    23  // loadBpf returns the embedded CollectionSpec for bpf.
    24  func loadBpf() (*ebpf.CollectionSpec, error) {
    25  	reader := bytes.NewReader(_BpfBytes)
    26  	spec, err := ebpf.LoadCollectionSpecFromReader(reader)
    27  	if err != nil {
    28  		return nil, fmt.Errorf("can't load bpf: %w", err)
    29  	}
    30  
    31  	return spec, err
    32  }
    33  
    34  // loadBpfObjects loads bpf and converts it into a struct.
    35  //
    36  // The following types are suitable as obj argument:
    37  //
    38  //	*bpfObjects
    39  //	*bpfPrograms
    40  //	*bpfMaps
    41  //
    42  // See ebpf.CollectionSpec.LoadAndAssign documentation for details.
    43  func loadBpfObjects(obj interface{}, opts *ebpf.CollectionOptions) error {
    44  	spec, err := loadBpf()
    45  	if err != nil {
    46  		return err
    47  	}
    48  
    49  	return spec.LoadAndAssign(obj, opts)
    50  }
    51  
    52  // bpfSpecs contains maps and programs before they are loaded into the kernel.
    53  //
    54  // It can be passed ebpf.CollectionSpec.Assign.
    55  type bpfSpecs struct {
    56  	bpfProgramSpecs
    57  	bpfMapSpecs
    58  }
    59  
    60  // bpfSpecs contains programs before they are loaded into the kernel.
    61  //
    62  // It can be passed ebpf.CollectionSpec.Assign.
    63  type bpfProgramSpecs struct {
    64  	TcpConnect *ebpf.ProgramSpec `ebpf:"tcp_connect"`
    65  }
    66  
    67  // bpfMapSpecs contains maps before they are loaded into the kernel.
    68  //
    69  // It can be passed ebpf.CollectionSpec.Assign.
    70  type bpfMapSpecs struct {
    71  	Events *ebpf.MapSpec `ebpf:"events"`
    72  }
    73  
    74  // bpfObjects contains all objects after they have been loaded into the kernel.
    75  //
    76  // It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
    77  type bpfObjects struct {
    78  	bpfPrograms
    79  	bpfMaps
    80  }
    81  
    82  func (o *bpfObjects) Close() error {
    83  	return _BpfClose(
    84  		&o.bpfPrograms,
    85  		&o.bpfMaps,
    86  	)
    87  }
    88  
    89  // bpfMaps contains all maps after they have been loaded into the kernel.
    90  //
    91  // It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
    92  type bpfMaps struct {
    93  	Events *ebpf.Map `ebpf:"events"`
    94  }
    95  
    96  func (m *bpfMaps) Close() error {
    97  	return _BpfClose(
    98  		m.Events,
    99  	)
   100  }
   101  
   102  // bpfPrograms contains all programs after they have been loaded into the kernel.
   103  //
   104  // It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign.
   105  type bpfPrograms struct {
   106  	TcpConnect *ebpf.Program `ebpf:"tcp_connect"`
   107  }
   108  
   109  func (p *bpfPrograms) Close() error {
   110  	return _BpfClose(
   111  		p.TcpConnect,
   112  	)
   113  }
   114  
   115  func _BpfClose(closers ...io.Closer) error {
   116  	for _, closer := range closers {
   117  		if err := closer.Close(); err != nil {
   118  			return err
   119  		}
   120  	}
   121  	return nil
   122  }
   123  
   124  // Do not access this directly.
   125  //
   126  //go:embed bpf_bpfeb.o
   127  var _BpfBytes []byte