github.com/metacubex/mihomo@v1.18.5/component/ebpf/redir/bpf_bpfeb.go (about)

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