diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-08-25 15:14:34 +0200 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-10-21 22:13:04 +0200 |
| commit | 7f7b6226e6f50da698080177f6298bf8baac32b9 (patch) | |
| tree | 674097d32e3d0c04970c1a6473c99c10ef12d162 /opendc-simulator/opendc-simulator-network/src/main/kotlin | |
| parent | 5abcbaa672d029fb390156a83c29d8d47a215f4f (diff) | |
refactor(sim/net): Re-implement network sim using flow2
Diffstat (limited to 'opendc-simulator/opendc-simulator-network/src/main/kotlin')
5 files changed, 0 insertions, 298 deletions
diff --git a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkLink.kt b/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkLink.kt deleted file mode 100644 index 67562640..00000000 --- a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkLink.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2021 AtLarge Research - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package org.opendc.simulator.network - -/** - * A physical bi-directional communication link between two [SimNetworkPort]s. - * - * @param left The first port of the link. - * @param right The second port of the link. - */ -public class SimNetworkLink(public val left: SimNetworkPort, public val right: SimNetworkPort) { - /** - * Determine whether the specified [port] participates in this network link. - */ - public operator fun contains(port: SimNetworkPort): Boolean = port == left || port == right - - /** - * Obtain the opposite port to which the specified [port] is connected through this link. - */ - public fun opposite(port: SimNetworkPort): SimNetworkPort { - return when (port) { - left -> right - right -> left - else -> throw IllegalArgumentException("Invalid port given") - } - } - - override fun toString(): String = "SimNetworkLink[left=$left,right=$right]" -} diff --git a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkPort.kt b/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkPort.kt deleted file mode 100644 index 4b66d5cf..00000000 --- a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkPort.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2021 AtLarge Research - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package org.opendc.simulator.network - -import org.opendc.simulator.flow.FlowConsumer -import org.opendc.simulator.flow.FlowSource - -/** - * A network port allows network devices to be connected to network through links. - */ -public abstract class SimNetworkPort { - /** - * A flag to indicate that the network port is connected to another port. - */ - public val isConnected: Boolean - get() = _link != null - - /** - * The network link which connects this port to another port. - */ - public val link: SimNetworkLink? - get() = _link - private var _link: SimNetworkLink? = null - - /** - * Connect this port to the specified [port]. - */ - public fun connect(port: SimNetworkPort) { - require(port !== this) { "Circular reference" } - check(!isConnected) { "Port already connected" } - check(!port.isConnected) { "Target port already connected" } - - val link = SimNetworkLink(this, port) - _link = link - port._link = link - - // Start bi-directional flow channel between the two ports - try { - provider.startConsumer(port.createConsumer()) - port.provider.startConsumer(createConsumer()) - } catch (e: Throwable) { - disconnect() - throw e - } - } - - /** - * Disconnect the current network link if it exists. - */ - public fun disconnect() { - val link = _link ?: return - val opposite = link.opposite(this) - _link = null - opposite._link = null - - provider.cancel() - opposite.provider.cancel() - } - - /** - * Create a [FlowSource] which generates the outgoing traffic of this port. - */ - protected abstract fun createConsumer(): FlowSource - - /** - * The [FlowConsumer] which processes the ingoing traffic of this port. - */ - protected abstract val provider: FlowConsumer - - override fun toString(): String = "SimNetworkPort[isConnected=$isConnected]" -} diff --git a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSink.kt b/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSink.kt deleted file mode 100644 index 684b4a14..00000000 --- a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSink.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2021 AtLarge Research - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package org.opendc.simulator.network - -import org.opendc.simulator.flow.FlowConnection -import org.opendc.simulator.flow.FlowConsumer -import org.opendc.simulator.flow.FlowEngine -import org.opendc.simulator.flow.FlowSink -import org.opendc.simulator.flow.FlowSource - -/** - * A network sink which discards all received traffic and does not generate any traffic itself. - */ -public class SimNetworkSink( - engine: FlowEngine, - public val capacity: Double -) : SimNetworkPort() { - override fun createConsumer(): FlowSource = object : FlowSource { - override fun onPull(conn: FlowConnection, now: Long): Long = Long.MAX_VALUE - - override fun toString(): String = "SimNetworkSink.Consumer" - } - - override val provider: FlowConsumer = FlowSink(engine, capacity) - - override fun toString(): String = "SimNetworkSink[capacity=$capacity]" -} diff --git a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSwitch.kt b/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSwitch.kt deleted file mode 100644 index 7dc249ab..00000000 --- a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSwitch.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2021 AtLarge Research - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package org.opendc.simulator.network - -/** - * A network device connects devices on a network by switching the traffic over its ports. - */ -public interface SimNetworkSwitch { - /** - * The ports of the switch. - */ - public val ports: List<SimNetworkPort> -} diff --git a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtual.kt b/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtual.kt deleted file mode 100644 index c59c44f1..00000000 --- a/opendc-simulator/opendc-simulator-network/src/main/kotlin/org/opendc/simulator/network/SimNetworkSwitchVirtual.kt +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2021 AtLarge Research - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package org.opendc.simulator.network - -import org.opendc.simulator.flow.FlowConsumer -import org.opendc.simulator.flow.FlowEngine -import org.opendc.simulator.flow.FlowSource -import org.opendc.simulator.flow.mux.MaxMinFlowMultiplexer - -/** - * A [SimNetworkSwitch] that can support new networking ports on demand. - */ -public class SimNetworkSwitchVirtual(private val engine: FlowEngine) : SimNetworkSwitch { - /** - * The ports of this switch. - */ - override val ports: List<Port> - get() = _ports - private val _ports = mutableListOf<Port>() - - /** - * The [MaxMinFlowMultiplexer] to actually perform the switching. - */ - private val mux = MaxMinFlowMultiplexer(engine) - - /** - * Open a new port on the switch. - */ - public fun newPort(): Port { - val port = Port() - _ports.add(port) - return port - } - - /** - * A port on the network switch. - */ - public inner class Port : SimNetworkPort(), AutoCloseable { - /** - * A flag to indicate that this virtual port was removed from the switch. - */ - private var isClosed: Boolean = false - - override val provider: FlowConsumer - get() = _provider - private val _provider = mux.newInput() - - private val _source = mux.newOutput() - - override fun createConsumer(): FlowSource = _source - - override fun close() { - isClosed = true - mux.removeInput(_provider) - _ports.remove(this) - } - } -} |
