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 }