GateScheduleConfiguratorBase

Package: inet.linklayer.configurator.gatescheduling.base

GateScheduleConfiguratorBase

simple module

C++ definition

Serves as a basis for gate scheduling configurator modules. It provides methods for derived modules to easily extract the input parameters from the network topology and also to carry out the actual configuration of the resulting schedule. The schedule is automatically configured in all of the ~PeriodicGate submodules of all queue submodules in the network interface MAC layer submodules. Besides, the application start offsets are also configured. This allows the derived modules to focus on the implementation of the actual scheduling algorithm.

The configuration is an array of objects where each object describes a packet flow through the network.

  • name: the name of the flow
  • PCP: the PCP header field of the packets
  • gateIndex: the gate index of the traffic class in all network interfaces along the path
  • application (optional): the name of the application module in the source where the start time will be configured, not used by default
  • source: the network node name of the packet flow source
  • destination: the network node name of the packet flow destination
  • packetLength: the expected packet length of the packets in the flow (may also be used to have extra margin in the schedule)
  • packetInterval: the expected interval between packets
  • maxLatency (optional): the allowed maximum end-to-end delay of packets, not used by default
  • maxJitter (optional): the allowed maximum jitter among the packets, 0 by default
  • pathFragments (optional): array of arrays, where each array contains a list of network node names, supports multicast trees, shortest path is used when omitted

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Known subclasses

Name Type Description
AlwaysOpenGateScheduleConfigurator simple module

Provides a trivial gate scheduling algorithm that keeps all gates in the network open all the time.

EagerGateScheduleConfigurator simple module

Provides a gate scheduling algorithm that eagerly reserves time slots for the configured streams in the order of their priority (0 being the lowest). The allocation makes sure that only one gate (traffic category) is open in all network interfaces at any given moment of time. This strategy may result in wasting too much time of the gate cycle and thus end up failing.

TSNschedGateScheduleConfigurator simple module

Provides a gate scheduling configurator that uses the TSNsched tool which is available at https://github.com/ACassimiro/TSNsched. Tested revision: 3f3bf663d196ec6c03e81a1e1392d4aefd158e3e

Z3GateScheduleConfigurator simple module

Provides a gate scheduling algorithm that uses the open source z3 SAT solver from Microsoft. In order to be able to use this module, the corresponding 'Z3 Gate Scheduling Configurator' feature must be enabled and the libz3-dev package must be installed.

Extends

Name Type Description
SimpleModule simple module

Base module for all INET simple modules.

Parameters

Name Type Default value Description
displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

gateCycleDuration double

The globally used gate scheduling period in each PeriodicGate module

configuration object []

Array of objects, see ~GateScheduleConfiguratorBase module documentation for more details example: [{name: "s1", type: "unicast", application: "app[0]", pcp: 0, gateIndex: 0, source: "wheel*", destination: "hud", packetLength: 100B, packetInterval: 5ms, maxLatency: 100us, maxJitter: 10us, pathFragments: [["a", "b", "c"]]}]

Properties

Name Value Description
class GateScheduleConfiguratorBase
display i=block/cogwheel

Source code

//
// Serves as a basis for gate scheduling configurator modules. It
// provides methods for derived modules to easily extract the input parameters
// from the network topology and also to carry out the actual configuration of
// the resulting schedule. The schedule is automatically configured in all of
// the ~PeriodicGate submodules of all queue submodules in the network interface
// MAC layer submodules. Besides, the application start offsets are also configured.
// This allows the derived modules to focus on the implementation of the actual
// scheduling algorithm.
//
// The configuration is an array of objects where each object describes a packet
// flow through the network.
//   - name: the name of the flow
//   - PCP: the PCP header field of the packets
//   - `gateIndex`: the gate index of the traffic class in all network interfaces along the path
//   - application (optional): the name of the application module in the source where the start time will be configured, not used by default
//   - source: the network node name of the packet flow source
//   - destination: the network node name of the packet flow destination
//   - `packetLength`: the expected packet length of the packets in the flow (may also be used to have extra margin in the schedule)
//   - `packetInterval`: the expected interval between packets
//   - `maxLatency` (optional): the allowed maximum end-to-end delay of packets, not used by default
//   - `maxJitter` (optional): the allowed maximum jitter among the packets, 0 by default
//   - `pathFragments` (optional): array of arrays, where each array contains a list of network node names, supports multicast trees, shortest path is used when omitted
//
simple GateScheduleConfiguratorBase extends SimpleModule
{
    parameters:
        @class(GateScheduleConfiguratorBase);
        double gateCycleDuration @unit(s); // The globally used gate scheduling period in each PeriodicGate module
        object configuration @mutable = default([]); // Array of objects, see ~GateScheduleConfiguratorBase module documentation for more details
                                                     // example: [{name: "s1", type: "unicast", application: "app[0]", pcp: 0, gateIndex: 0, source: "wheel*", destination: "hud", packetLength: 100B, packetInterval: 5ms, maxLatency: 100us, maxJitter: 10us, pathFragments: [["a", "b", "c"]]}]
        @display("i=block/cogwheel");
}

File: src/inet/linklayer/configurator/gatescheduling/base/GateScheduleConfiguratorBase.ned