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  }