github.com/cilium/cilium@v1.16.2/pkg/datapath/linux/datapath.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package linux 5 6 import ( 7 "github.com/cilium/statedb" 8 9 "github.com/cilium/cilium/pkg/datapath/tables" 10 datapath "github.com/cilium/cilium/pkg/datapath/types" 11 "github.com/cilium/cilium/pkg/maps/lbmap" 12 "github.com/cilium/cilium/pkg/maps/nodemap" 13 "github.com/cilium/cilium/pkg/node/manager" 14 ) 15 16 // DatapathConfiguration is the static configuration of the datapath. The 17 // configuration cannot change throughout the lifetime of a datapath object. 18 type DatapathConfiguration struct { 19 // HostDevice is the name of the device to be used to access the host. 20 HostDevice string 21 22 // TunnelDevice is the name of the tunnel device (if any). 23 TunnelDevice string 24 } 25 26 type linuxDatapath struct { 27 datapath.ConfigWriter 28 datapath.IptablesManager 29 nodeHandler datapath.NodeHandler 30 nodeIDHandler datapath.NodeIDHandler 31 nodeNeighbors datapath.NodeNeighbors 32 nodeAddressing datapath.NodeAddressing 33 loader datapath.Loader 34 wgAgent datapath.WireguardAgent 35 lbmap datapath.LBMap 36 bwmgr datapath.BandwidthManager 37 orchestrator datapath.Orchestrator 38 } 39 40 type DatapathParams struct { 41 ConfigWriter datapath.ConfigWriter 42 RuleManager datapath.IptablesManager 43 WGAgent datapath.WireguardAgent 44 NodeMap nodemap.MapV2 45 BWManager datapath.BandwidthManager 46 NodeAddressing datapath.NodeAddressing 47 MTU datapath.MTUConfiguration 48 Loader datapath.Loader 49 NodeManager manager.NodeManager 50 DB *statedb.DB 51 Devices statedb.Table[*tables.Device] 52 Orchestrator datapath.Orchestrator 53 NodeHandler datapath.NodeHandler 54 NodeIDHandler datapath.NodeIDHandler 55 NodeNeighbors datapath.NodeNeighbors 56 } 57 58 // NewDatapath creates a new Linux datapath 59 func NewDatapath(p DatapathParams) datapath.Datapath { 60 dp := &linuxDatapath{ 61 ConfigWriter: p.ConfigWriter, 62 IptablesManager: p.RuleManager, 63 nodeAddressing: p.NodeAddressing, 64 loader: p.Loader, 65 wgAgent: p.WGAgent, 66 lbmap: lbmap.New(), 67 bwmgr: p.BWManager, 68 orchestrator: p.Orchestrator, 69 nodeHandler: p.NodeHandler, 70 nodeIDHandler: p.NodeIDHandler, 71 nodeNeighbors: p.NodeNeighbors, 72 } 73 74 return dp 75 } 76 77 func (l *linuxDatapath) Name() string { 78 return "linux-datapath" 79 } 80 81 // Node returns the handler for node events 82 func (l *linuxDatapath) Node() datapath.NodeHandler { 83 return l.nodeHandler 84 } 85 86 func (l *linuxDatapath) NodeIDs() datapath.NodeIDHandler { 87 return l.nodeIDHandler 88 } 89 90 func (l *linuxDatapath) NodeNeighbors() datapath.NodeNeighbors { 91 return l.nodeNeighbors 92 } 93 94 // LocalNodeAddressing returns the node addressing implementation of the local 95 // node 96 func (l *linuxDatapath) LocalNodeAddressing() datapath.NodeAddressing { 97 return l.nodeAddressing 98 } 99 100 func (l *linuxDatapath) Loader() datapath.Loader { 101 return l.loader 102 } 103 104 func (l *linuxDatapath) WireguardAgent() datapath.WireguardAgent { 105 return l.wgAgent 106 } 107 108 func (l *linuxDatapath) LBMap() datapath.LBMap { 109 return l.lbmap 110 } 111 112 func (l *linuxDatapath) BandwidthManager() datapath.BandwidthManager { 113 return l.bwmgr 114 } 115 116 func (l *linuxDatapath) Orchestrator() datapath.Orchestrator { 117 return l.orchestrator 118 }