github.com/cilium/cilium@v1.16.2/pkg/datapath/fake/cells.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package fake
     5  
     6  import (
     7  	"net"
     8  	"net/netip"
     9  
    10  	"github.com/cilium/hive/cell"
    11  	"github.com/cilium/statedb"
    12  	"golang.org/x/sys/unix"
    13  
    14  	"github.com/cilium/cilium/pkg/datapath"
    15  	fakeTypes "github.com/cilium/cilium/pkg/datapath/fake/types"
    16  	"github.com/cilium/cilium/pkg/datapath/iptables"
    17  	"github.com/cilium/cilium/pkg/datapath/iptables/ipset"
    18  	"github.com/cilium/cilium/pkg/datapath/linux/bigtcp"
    19  	"github.com/cilium/cilium/pkg/datapath/linux/sysctl"
    20  	"github.com/cilium/cilium/pkg/datapath/loader"
    21  	"github.com/cilium/cilium/pkg/datapath/tables"
    22  	"github.com/cilium/cilium/pkg/datapath/tunnel"
    23  	"github.com/cilium/cilium/pkg/datapath/types"
    24  	"github.com/cilium/cilium/pkg/ip"
    25  	"github.com/cilium/cilium/pkg/maps/authmap"
    26  	fakeauthmap "github.com/cilium/cilium/pkg/maps/authmap/fake"
    27  	"github.com/cilium/cilium/pkg/maps/egressmap"
    28  	"github.com/cilium/cilium/pkg/maps/nat"
    29  	"github.com/cilium/cilium/pkg/maps/signalmap"
    30  	fakesignalmap "github.com/cilium/cilium/pkg/maps/signalmap/fake"
    31  	"github.com/cilium/cilium/pkg/mtu"
    32  	"github.com/cilium/cilium/pkg/promise"
    33  	"github.com/cilium/cilium/pkg/time"
    34  	wg "github.com/cilium/cilium/pkg/wireguard/agent"
    35  )
    36  
    37  // Cell provides a fake version of the datapath cell.
    38  //
    39  // Used in integration tests in daemon/cmd and test/controlplane.
    40  var Cell = cell.Module(
    41  	"fake-datapath",
    42  	"Fake Datapath",
    43  
    44  	cell.Provide(
    45  		func(na types.NodeAddressing) (*fakeTypes.FakeDatapath, types.Datapath, types.NodeIDHandler) {
    46  			dp := fakeTypes.NewDatapathWithNodeAddressing(na)
    47  			return dp, dp, dp.NodeIDs()
    48  		},
    49  
    50  		func() signalmap.Map { return fakesignalmap.NewFakeSignalMap([][]byte{}, time.Second) },
    51  		func() authmap.Map { return fakeauthmap.NewFakeAuthMap() },
    52  		func() egressmap.PolicyMap { return nil },
    53  		func() *bigtcp.Configuration { return &bigtcp.Configuration{} },
    54  		func() *iptables.Manager { return &iptables.Manager{} },
    55  		func() ipset.Manager { return &fakeTypes.IPSet{} },
    56  		func() types.BandwidthManager { return &fakeTypes.BandwidthManager{} },
    57  		func() types.IPsecKeyCustodian { return &ipsecKeyCustodian{} },
    58  		func() mtu.MTU { return &fakeTypes.MTU{} },
    59  		func() *wg.Agent { return nil },
    60  		func() types.Loader { return &fakeTypes.FakeLoader{} },
    61  		loader.NewCompilationLock,
    62  		func() sysctl.Sysctl { return &Sysctl{} },
    63  		func() (promise.Promise[nat.NatMap4], promise.Promise[nat.NatMap6]) {
    64  			r4, p4 := promise.New[nat.NatMap4]()
    65  			r6, p6 := promise.New[nat.NatMap6]()
    66  			r4.Reject(nat.MapDisabled)
    67  			r6.Reject(nat.MapDisabled)
    68  			return p4, p6
    69  		},
    70  
    71  		tables.NewDeviceTable,
    72  		tables.NewL2AnnounceTable, statedb.RWTable[*tables.L2AnnounceEntry].ToTable,
    73  		tables.NewRouteTable, statedb.RWTable[*tables.Route].ToTable,
    74  	),
    75  
    76  	tables.NodeAddressCell,
    77  	datapath.NodeAddressingCell,
    78  
    79  	cell.Invoke(
    80  		statedb.RegisterTable[*tables.Device],
    81  		statedb.RegisterTable[*tables.L2AnnounceEntry],
    82  		statedb.RegisterTable[*tables.Route],
    83  	),
    84  
    85  	tunnel.Cell,
    86  	cell.Provide(fakeDevices),
    87  )
    88  
    89  func fakeDevices(db *statedb.DB, devices statedb.RWTable[*tables.Device]) statedb.Table[*tables.Device] {
    90  	txn := db.WriteTxn(devices)
    91  	defer txn.Commit()
    92  
    93  	devices.Insert(txn, &tables.Device{
    94  		Index:        1,
    95  		MTU:          1500,
    96  		Name:         "test0",
    97  		HardwareAddr: []byte{1, 2, 3, 4, 5, 6},
    98  		Flags:        net.FlagUp,
    99  		Addrs: []tables.DeviceAddress{
   100  			{Addr: ip.MustAddrFromIP(fakeTypes.IPv4NodePortAddress), Scope: unix.RT_SCOPE_UNIVERSE},
   101  			{Addr: ip.MustAddrFromIP(fakeTypes.IPv6NodePortAddress), Scope: unix.RT_SCOPE_UNIVERSE},
   102  		},
   103  		Type:     "test",
   104  		Selected: true,
   105  	})
   106  
   107  	devices.Insert(txn, &tables.Device{
   108  		Index:        2,
   109  		MTU:          1500,
   110  		Name:         "test1",
   111  		HardwareAddr: []byte{2, 3, 4, 5, 6, 7},
   112  		Flags:        net.FlagUp,
   113  		Addrs: []tables.DeviceAddress{
   114  			{Addr: ip.MustAddrFromIP(fakeTypes.IPv4InternalAddress), Scope: unix.RT_SCOPE_UNIVERSE},
   115  			{Addr: ip.MustAddrFromIP(fakeTypes.IPv6InternalAddress), Scope: unix.RT_SCOPE_UNIVERSE},
   116  
   117  			{Addr: netip.MustParseAddr("10.0.0.4"), Scope: unix.RT_SCOPE_UNIVERSE, Secondary: true},
   118  			{Addr: netip.MustParseAddr("f00d::3"), Scope: unix.RT_SCOPE_UNIVERSE, Secondary: true},
   119  		},
   120  		Type:     "test",
   121  		Selected: true,
   122  	})
   123  
   124  	return devices
   125  }