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 }