github.com/cilium/cilium@v1.16.2/pkg/datapath/linux/utime/cell.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package utime
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  
    10  	"github.com/cilium/hive/cell"
    11  
    12  	"github.com/cilium/cilium/pkg/controller"
    13  	"github.com/cilium/cilium/pkg/maps/configmap"
    14  	"github.com/cilium/cilium/pkg/time"
    15  )
    16  
    17  const (
    18  	syncControllerName     = "sync-utime"
    19  	syncControllerInterval = 1 * time.Minute
    20  )
    21  
    22  var syncControllerGroupName = controller.NewGroup("sync-utime")
    23  
    24  // Cell initializes and manages the utime offset synchronization.
    25  var Cell = cell.Module(
    26  	"utime",
    27  	"Synchronizes utime offset between userspace and datapath",
    28  
    29  	cell.Invoke(initUtimeSync),
    30  )
    31  
    32  func initUtimeSync(lifecycle cell.Lifecycle, configMap configmap.Map) {
    33  	controllerManager := controller.NewManager()
    34  
    35  	lifecycle.Append(cell.Hook{
    36  		OnStart: func(startCtx cell.HookContext) error {
    37  			ctrl := &utimeController{configMap: configMap}
    38  
    39  			// Add controller for keeping clock in sync for NTP time jumps and any difference
    40  			// between monotonic and boottime clocks.
    41  			controllerManager.UpdateController(syncControllerName,
    42  				controller.ControllerParams{
    43  					Group: syncControllerGroupName,
    44  					DoFunc: func(ctx context.Context) error {
    45  						return ctrl.sync()
    46  					},
    47  					RunInterval: syncControllerInterval,
    48  				},
    49  			)
    50  			return nil
    51  		},
    52  		OnStop: func(stopCtx cell.HookContext) error {
    53  			if err := controllerManager.RemoveController(syncControllerName); err != nil {
    54  				return fmt.Errorf("failed to remove controller: %w", err)
    55  			}
    56  			return nil
    57  		},
    58  	})
    59  }