github.com/cilium/cilium@v1.16.2/pkg/maps/eventsmap/cell.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package eventsmap
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/cilium/ebpf"
    10  	"github.com/cilium/hive/cell"
    11  
    12  	"github.com/cilium/cilium/pkg/bpf"
    13  )
    14  
    15  // Cell provides eventsmap.Map, which is the hive representation of the cilium
    16  // events perf event ring buffer.
    17  var Cell = cell.Module(
    18  	"events-map",
    19  	"eBPF ring buffer of cilium events",
    20  
    21  	cell.Provide(newEventsMap),
    22  )
    23  
    24  var (
    25  	MaxEntries int
    26  )
    27  
    28  type Map interface{}
    29  
    30  func newEventsMap(lifecycle cell.Lifecycle) bpf.MapOut[Map] {
    31  	eventsMap := &eventsMap{}
    32  
    33  	lifecycle.Append(cell.Hook{
    34  		OnStart: func(context cell.HookContext) error {
    35  			cpus, err := ebpf.PossibleCPU()
    36  			if err != nil {
    37  				return fmt.Errorf("failed to get number of possible CPUs: %w", err)
    38  			}
    39  			err = eventsMap.init(cpus)
    40  			if err != nil {
    41  				return fmt.Errorf("initializing events map: %w", err)
    42  			}
    43  			return nil
    44  		},
    45  		OnStop: func(context cell.HookContext) error {
    46  			// We don't currently care for cleaning up.
    47  			return nil
    48  		},
    49  	})
    50  
    51  	return bpf.NewMapOut(Map(eventsMap))
    52  }