Public getters interface

MINDFul.getborderedgesMethod
getborderedges(
    ibnf::MINDFul.IBNFramework
) -> Vector{Graphs.SimpleGraphs.SimpleEdge{Int64}}

Return all border edges that contain at least one border node as endpoints

source
MINDFul.getborderglobaledgesMethod
getborderglobaledges(ibnf::MINDFul.IBNFramework) -> Vector

Return all border edges that contain at least one border node as endpoints as global

source
MINDFul.getconstraintsMethod
getconstraints(
    conintent::MINDFul.ConnectivityIntent
) -> Vector{T} where T<:MINDFul.AbstractIntentConstraint
source
MINDFul.getcurrentstateMethod
getcurrentstate(
    intentlogstate::Array{Tuple{Dates.DateTime, S}, 1} where S<:Enum{Int32}
) -> Enum{Int32}
source
MINDFul.getdistanceMethod
getdistance(
    s
) -> Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}
source
MINDFul.getdistanceMethod
getdistance(
    s::MINDFul.EdgeView
) -> Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}
source
MINDFul.getedgeviewMethod
getedgeview(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    ed::Graphs.SimpleGraphs.SimpleEdge
) -> MINDFul.EdgeView
source
MINDFul.getedgeviewsMethod
getedgeviews(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
) -> Vector
source
MINDFul.getfiberspectrumavailabilitiesMethod
getfiberspectrumavailabilities(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    edge::Graphs.SimpleGraphs.SimpleEdge{Int64};
    checkfirst
) -> Union{Nothing, Vector{Bool}}
source
MINDFul.getfiberspectrumavailabilitiesMethod
getfiberspectrumavailabilities(
    ibnf::MINDFul.IBNFramework,
    edge::Graphs.SimpleGraphs.SimpleEdge{Int64};
    checkfirst,
    verbose
) -> Union{Nothing, Symbol, Vector{Bool}}

Get the spectrum availability slots vector for edge

source
MINDFul.getglobalnodeMethod
getglobalnode(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    localnode::Int64
) -> MINDFul.GlobalNode

Return the global representation given the local representation. Return nothing if not found

source
MINDFul.getibnfhandlerMethod
getibnfhandler(
    s::MINDFul.IBNFramework
) -> MINDFul.IBNFramework

Get the handler of the given IBNFramework.

source
MINDFul.getibnfidMethod
getibnfid(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
) -> Base.UUID
source
MINDFul.getidagMethod
getidag(
    s::MINDFul.IBNFramework
) -> AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}

Get the IntentDAG

source
MINDFul.getidagcounterMethod
getidagcounter(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> Int64
source
MINDFul.getidagnodestateMethod
getidagnodestate(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    dagnodeid::Base.UUID
) -> MINDFul.IntentState.T
source
MINDFul.getintranodeviewsMethod
getintranodeviews(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
) -> Vector{T} where T<:MINDFul.NodeView
source
MINDFul.getlocalnodeMethod
getlocalnode(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    globalnode::MINDFul.GlobalNode
) -> Any

Return the localnode representation given the global representation. Return nothing if not found

source
MINDFul.getlogstateMethod
getlogstate(
    idagnode::MINDFul.IntentDAGNode
) -> Vector{Tuple{Dates.DateTime, MINDFul.IntentState.T}}
source
MINDFul.getnodeviewMethod
getnodeview(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    node::Int64
) -> MINDFul.NodeView
source
MINDFul.getnodeviewMethod
getnodeview(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    node::MINDFul.GlobalNode
) -> Any
source
MINDFul.getnodeviewsMethod
getnodeviews(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
) -> Vector{T} where T<:MINDFul.NodeView
source
MINDFul.getopticalinitiateconstraintMethod
getopticalinitiateconstraint(
    ibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID
) -> Union{Nothing, MINDFul.OpticalInitiateConstraint}

Get the OpticalInitiateConstraint for the current intent DAG. If the compilation is not optically terminated return nothing.

To me this has all the logic needed to be type stable but the compiler fails.

source
MINDFul.getopticalreachMethod
getopticalreach(
    tm::MINDFul.TransmissionMode
) -> Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}
source
MINDFul.getpathspectrumavailabilitiesMethod
getpathspectrumavailabilities(
    ibnf::MINDFul.IBNFramework,
    localnodespath::Vector{Int64};
    checkfirst
) -> Any

Get spectrum availabilities along a path of nodes as a BitVector

source
MINDFul.getrateMethod
getrate(
    conintent::MINDFul.ConnectivityIntent
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}
source
MINDFul.getrateMethod
getrate(
    s::MINDFul.RouterPort
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}
source
MINDFul.getrateMethod
getrate(
    tm::MINDFul.TransmissionMode
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}
source
MINDFul.getrateMethod
getrate(
    tmc::MINDFul.TransmissionModuleCompatibility
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}
source
MINDFul.getreservationsMethod
getreservations(
    nodeview::MINDFul.NodeView
) -> Union{Nothing, Dict{Base.UUID, MINDFul.TransmissionModuleLLI}}
source
MINDFul.getreservedtransmissionmodeMethod
getreservedtransmissionmode(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{MINDFul.TransmissionModuleLLI};
    verbose
) -> Union{MINDFul.TransmissionMode, Symbol}

Get the reserved transmission mode

source
MINDFul.gettransmissionmodeMethod
gettransmissionmode(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    oxclli::MINDFul.TransmissionModuleLLI
) -> MINDFul.TransmissionMode
source
MINDFul.gettransmissionmodeMethod
gettransmissionmode(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{MINDFul.TransmissionModuleLLI}
) -> MINDFul.TransmissionMode

Get the transmission mode

source
MINDFul.gettransmissionmodeMethod
gettransmissionmode(
    ibnf::MINDFul.IBNFramework,
    intent::MINDFul.TransmissionModuleLLI
) -> MINDFul.TransmissionMode

Get the transmission mode

source
MINDFul.gettransmissionmoduleMethod
gettransmissionmodule(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    oxclli::MINDFul.TransmissionModuleLLI
) -> MINDFul.TransmissionModuleView
source
MINDFul.gettransmissionmoduleMethod
gettransmissionmodule(
    ibnf::MINDFul.IBNFramework,
    intent::MINDFul.TransmissionModuleLLI
) -> MINDFul.TransmissionModuleView

Get the transmission mode

source
MINDFul.getweightsMethod
getweights(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
) -> Matrix
source

Other public interface

MINDFul.addintent!Method
addintent!(
    ibnf::MINDFul.IBNFramework,
    intent::MINDFul.AbstractIntent,
    intentissuer::MINDFul.IntentIssuer;
    offsettime
) -> Base.UUID

kk Add a new user intent to the IBN framework and return the id.

source
MINDFul.compileintent!Method
compileintent!(
    ibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    algorithm::MINDFul.IntentCompilationAlgorithm;
    verbose,
    offsettime
) -> Symbol
source
MINDFul.compileintent!Method
compileintent!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    kspffcomp::MINDFul.KShorestPathFirstFitCompilation;
    verbose,
    offsettime
) -> Symbol
source
MINDFul.compileintent!Method
compileintent!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.LightpathIntent},
    algorithm::MINDFul.IntentCompilationAlgorithm;
    verbose,
    offsettime
)
source
MINDFul.compileintent!Method
compileintent!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.RemoteIntent},
    algorithm::MINDFul.IntentCompilationAlgorithm;
    verbose,
    offsettime
)
source
MINDFul.findindexglobalnodeMethod
findindexglobalnode(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    globalnode::MINDFul.GlobalNode
) -> Union{Nothing, Int64}

Convenience function that returns the findfirst for the global node

source
MINDFul.isbordernodeMethod
isbordernode(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    localnode::Int64
) -> Bool

Return boolean if localnode is in ibnf as a border node

source
MINDFul.isbordernodeMethod
isbordernode(
    ibnf::MINDFul.IBNFramework,
    localnode::Int64
) -> Any

Return boolean if localnode is in ibnf as a border node

source
MINDFul.isbordernodeMethod
isbordernode(
    ibnf::MINDFul.IBNFramework,
    globalnode::MINDFul.GlobalNode
) -> Any

Return boolean if globalnode is in ibnf as a border node

source
MINDFul.isinternalnodeMethod
isinternalnode(
    ibnf::MINDFul.IBNFramework,
    globalnode::MINDFul.GlobalNode
) -> Bool

Return boolean if globalnode belongs to ibnf

source
MINDFul.remoteintent!Method
remoteintent!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode,
    remoteibnfid::Base.UUID;
    offsettime
) -> MINDFul.IntentDAGNode{I, MINDFul.MachineGenerated} where I<:MINDFul.RemoteIntent

Add a RemoteIntent as a child intent and delegate it to the ibn with id remoteibndif

source
MINDFul.removeintent!Method
removeintent!(
    ibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    verbose,
    offsettime
) -> Symbol
source

Public return codes

MINDFul.ReturnCodesModule

The return codes defined for functions to give back explaining the situation. Mostly used for the compilation of an intent. All the const variables have a Symbol value that is the same as the variable name but only the first letter capitalized.

source

Non-public interface

MINDFul.AbstractOperationModeType

How the IBN frameworks operates generally. It has effect of the available compilation algorithms In the future it could also have effect on different intent state machines

source
MINDFul.ConnectivityIntentType
struct ConnectivityIntent{T<:MINDFul.AbstractIntentConstraint} <: MINDFul.AbstractIntent
  • sourcenode::MINDFul.GlobalNode: Source node

  • destinationnode::MINDFul.GlobalNode: Destination node

  • rate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}: Bandwidth request value (Gbps)

  • constraints::Vector{T} where T<:MINDFul.AbstractIntentConstraint: Constraints for the Connecivity intent

source
MINDFul.CrossLightpathIntentType
struct CrossLightpathIntent{C1<:MINDFul.ConnectivityIntent, C2<:MINDFul.ConnectivityIntent} <: MINDFul.AbstractIntent
  • lightpathconnectivityintent::MINDFul.ConnectivityIntent

  • remoteconnectivityintent::MINDFul.ConnectivityIntent

The only intent that is being built from its children to be offered as a straight grooming possibility. It is composed by a LightpathIntent and a RemoteIntent which are also its children intents.

source
MINDFul.EdgePropertiesType
struct EdgeProperties
  • distance::Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}: The distance of the edge (assumed km)

An immutable description of the edge properties

source
MINDFul.EndNodeAllocationsType
struct EndNodeAllocations
  • localnode::Int64

  • routerportindex::Union{Nothing, Int64}

  • transmissionmoduleviewpoolindex::Union{Nothing, Int64}

  • transmissionmodesindex::Union{Nothing, Int64}

  • localnode_input::Union{Nothing, Int64}

  • adddropport::Union{Nothing, Int64}

Basically an aggregator of RouterPortLLI, TransmissionModuleLLI, OXCAddDropBypassSpectrumLLI in a node.

source
MINDFul.IBNAttributeGraphType
The graph of the IBN Framework is expressed with this `AttributeGraph`.
Border nodes are assumed to be visible from both sides.
However only the official owner can issue an intent.
source
MINDFul.IBNFrameworkType
struct IBNFramework{O<:MINDFul.AbstractOperationMode, S<:MINDFul.AbstractSDNController, T<:(AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView), H<:MINDFul.AbstractIBNFHandler} <: MINDFul.AbstractIBNFHandler
  • operationmode::MINDFul.AbstractOperationMode: The operation mode of the IBN framework

  • ibnfid::Base.UUID: The id of this IBN Framework instance

  • intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}: The intent dag tree that contains all intents (can be disconnected graph)

  • ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView: Single-domain internal graph with border nodes included

  • ibnfhandlers::Vector{H} where H<:MINDFul.AbstractIBNFHandler: Other IBN Frameworks handles

  • sdncontroller::MINDFul.AbstractSDNController: SDN controller handle

source
MINDFul.IBNFrameworkMethod
IBNFramework(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
) -> MINDFul.IBNFramework{MINDFul.DefaultOperationMode, MINDFul.SDNdummy, T, H} where {T<:(AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView), H<:(MINDFul.IBNFramework{MINDFul.DefaultOperationMode, MINDFul.SDNdummy})}

The most default construct with abstract type of IBN handlers

source
MINDFul.IBNFrameworkMethod
IBNFramework(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    ibnfhandlers::Array{H<:MINDFul.AbstractIBNFHandler, 1}
) -> MINDFul.IBNFramework{MINDFul.DefaultOperationMode, MINDFul.SDNdummy}

Constructor that specify IBNFHandlers to make it potentially type stable

source
MINDFul.IBNIssuerType
struct IBNIssuer <: MINDFul.IntentIssuer

Intent is issued by an IBN Framework domain

  • ibnfid::Base.UUID: the id of the IBNF issued the intent

  • idagnodeid::Base.UUID: The id of the intent node in the DAG. The issuer of this intent node points back in this IBNIssuer instance.

source
MINDFul.IntentDAGInfoType
mutable struct IntentDAGInfo
  • intentcounter::Int64: The counter of the number of intents to give increasing ids to intents

  • installedlightpaths::Dict{Base.UUID, MINDFul.LightpathRepresentation}: Logical representation of the installed intents as lightpaths (must be direct parent of the LLIs)

source
MINDFul.IntentDAGNodeType
struct IntentDAGNode{I<:MINDFul.AbstractIntent, II<:MINDFul.IntentIssuer}
  • intent::MINDFul.AbstractIntent: The intent itself

  • idagnodeid::Base.UUID: The id of the intent w.r.t. the intent DAG it belongs

  • intentissuer::MINDFul.IntentIssuer: The intent issuer

  • logstate::Vector{Tuple{Dates.DateTime, MINDFul.IntentState.T}}: The history of states of the intent with the last being the current state

source
MINDFul.IntentLogStateType
IntentLogState(

) -> Vector{Tuple{Dates.DateTime, MINDFul.IntentState.T}}
IntentLogState(
    intentstate::MINDFul.IntentState.T
) -> Vector{Tuple{Dates.DateTime, MINDFul.IntentState.T}}
IntentLogState(
    intentstate::MINDFul.IntentState.T,
    logtime::Dates.DateTime
) -> Vector{Tuple{Dates.DateTime, MINDFul.IntentState.T}}
source
MINDFul.LightpathIntentType
struct LightpathIntent <: MINDFul.AbstractIntent
  • sourcenodeallocations::MINDFul.EndNodeAllocations

  • destinationnodeallocations::MINDFul.EndNodeAllocations

  • spectrumslotsrange::UnitRange{Int64}

  • path::Vector{Int64}

Basicaly an aggregator of LowLevelIntents. One lightpath intent can translate trivially to LowLevelIntents. It's core use is for grooming, where several Connectivity Intents can be linked to one LightpathIntent If the field does not apply, put 0

source
MINDFul.LightpathRepresentationType
struct LightpathRepresentation
  • path::Vector{Int64}: The nodes comprising the lightpath

  • startsoptically::Bool: true if it starts optically (due to OpticalInitiateConstraint) or false otherwise

  • terminatessoptically::Bool: true if it terminates optically (due to OpticalTerminateConstraint) or false otherwise

  • totalbandwidth::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}: total bandwidth that can be allocated

  • destinationnode::MINDFul.GlobalNode: final node of the signal entering this lightpath. This could be a GlobalNode intrnally in the domain for a single lightpath. Or an external GlobalNode in a different domain for a cross-lightpath. In the second case, the signal might go over different lightpaths to reach the destination.

Represents an implementation of a ConnectivityIntent as a lightpath

source
MINDFul.NoGroomingConstraintType
struct NoGroomingConstraint <: MINDFul.AbstractIntentConstraint

Constraint that requires the intent is compiled without use of grooming techniques.

source
MINDFul.NodePropertiesType
struct NodeProperties
  • localnode::Int64

  • globalnode::MINDFul.GlobalNode

  • latitude::Float64

  • longitude::Float64

  • inneighbors::Vector{Int64}: The list of neighbohrs coming in

  • outneighbors::Vector{Int64}: The list of neighbohrs going out

An immutable description of the node properties

source
MINDFul.NodeViewType
struct NodeView{R<:MINDFul.RouterView, O<:MINDFul.OXCView, T<:MINDFul.TransmissionModuleView} <: MINDFul.ReservableResourceView
  • nodeproperties::MINDFul.NodeProperties: The NodeProperties

  • routerview::Union{Nothing, R} where R<:MINDFul.RouterView: The router in use

  • oxcview::Union{Nothing, O} where O<:MINDFul.OXCView: The OXC in use

  • transmissionmoduleviewpool::Union{Nothing, Vector{T}} where T<:MINDFul.TransmissionModuleView: The transmission modules contained

  • transmissionmodulereservations::Union{Nothing, Dict{Base.UUID, MINDFul.TransmissionModuleLLI}}: intent reservation of the transmission modules

  • transmissionmodulestaged::Union{Nothing, Set{MINDFul.TransmissionModuleLLI}}: intent staged of the transmission modules

The view of the current node settings Reservables resources reservations are nothing if it represents a border node.

source
MINDFul.OXCAddDropBypassSpectrumLLIType
struct OXCAddDropBypassSpectrumLLI <: MINDFul.LowLevelIntent
  • localnode::Int64: Target node

  • localnode_input::Int64: The node in graph entering the OXC (or 0 if invalid)

  • adddropport::Int64: The port index adding or dropping an optical signal (or 0 if invalid)

  • localnode_output::Int64: The node in graph exiting the OXC (or 0 if invalid)

  • spectrumslotsrange::UnitRange{Int64}: The spectrum range allocated 1-based indexed

A value-based interpretation of (input, adddrop, output). At least one of the 3 elements must be 0. (x, 0, y) means optical bypass from the localnode x to the localnode y (0, x, y) means adding an optical signal from add port x going to the localnode y (x, y, 0) means droping an optical signal from the localnode x to the drop port y (0, x, 0) mean that an add/drop allocation port is only reserved (is needed on top for an add/drop signal)

source
MINDFul.OXCViewType
struct OXCView{O<:MINDFul.AbstractOXC} <: MINDFul.ReservableResourceView
  • oxc::MINDFul.AbstractOXC: the underlying OXC

  • adddropportnumber::Int64: The number of add/drop ports in OXC

  • switchreservations::Dict{Base.UUID, MINDFul.OXCAddDropBypassSpectrumLLI}: The intent reservations together with the configuration

  • switchstaged::Set{MINDFul.OXCAddDropBypassSpectrumLLI}: The intent staged together with the configuration

  • linkspectrumavailabilities::Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, Vector{Bool}}: Link spectrum availability total view in sync with switchreservations. A vector showing the availability of the spectrum slots. true for available and false for reserved. The vector views should be the same with the ones on the opposite OXC view.

  • linkstates::Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, Vector{Tuple{Dates.DateTime, Bool}}}: History information of the status of the connected links (working or not). The last element is the current state.

A view of a OXC. This OXC view is also a view to the links connecting to the OXC. Since links are not devices under control, MINDFul does not model them directly.

source
MINDFul.OpticalInitiateConstraintType
struct OpticalInitiateConstraint <: MINDFul.AbstractIntentConstraint

Constraint that requires the intent to initiate optically. It's combined with an (@ref)[OpticalTerminateConstraint] before. It contains some requirements for the connection to work out.

  • globalnode_input::MINDFul.GlobalNode: The incoming border node entering the OXC

  • spectrumslotsrange::UnitRange{Int64}: The spectrum range allocated 1-based indexed

  • opticalreach::Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}: the remaining optical reach to use

  • transmissionmodulecompat::MINDFul.TransmissionModuleCompatibility: Requirements for termination in the electical layer

source
MINDFul.OpticalTerminateConstraintType
struct OpticalTerminateConstraint <: MINDFul.AbstractIntentConstraint

Constraint that requires the intent to terminate optically one node before the destination. It's combined with an (@ref)[OpticalInitiateConstraint] after.

  • finaldestination::MINDFul.GlobalNode: The final destination (intra domain or inter-domain) Used primarily for grooming cross lightpaths.
source
MINDFul.RemoteIBNFHandlerType
struct RemoteIBNFHandler <: MINDFul.AbstractIBNFHandler

Fabian Gobantes implementation. Should consist of basic information all handlers should have (e.g. ibnfid). And a parametric type specific to the protocol used.

    struct HandlerProperties
        ibnfid::UUID
        # ...
    end

    struct IBNFHTTP2Comm <: AbstractIBNFComm
        # example
    end

    struct IBNFSameProcess{T<:IBNFramework} <: AbstractIBNFComm
        # this can  be the new dummy and substitute the current dummy implementation
        ibng::T
    end

    struct RemoteIBNFHandler{T<:AbstractIBNFComm} <: AbstractIBNFHandler
        handlerproperties::HandlerProperties
        ibnfcomm::T
    end
source
MINDFul.RemoteIntentType
struct RemoteIntent{I<:MINDFul.AbstractIntent} <: MINDFul.AbstractIntent
  • ibnfid::Base.UUID: The id of the remote IBN framework

  • idagnodeid::Base.UUID: The dag node id of the remote IBN framework

  • intent::MINDFul.AbstractIntent: The intent to be transferred

  • isinitiator::Bool: true if the intent originates here and false otherwise

source
MINDFul.ReservableResourceViewType

The following functions should be implemented for subtypes:

  • getreservations(subtype::ReservableResourceView)::Set{T}
  • canreserve(subtype::ReservableResourceView, reservation::T)::Bool

The following default functions exist that should already work

  • reserve!(subtype::ReservableResourceView, dagnodeid::UUID, reservation::T; checkfirst::Bool=true)::Bool
  • unreserve!(subtype::ReservableResourceView, dagnodeid::UUID)::Bool
  • insertreservation!(subtype::ReservableResourceView, dagnodeid::UUID, reservation::T)
  • deletereservation!(subtype::ReservableResourceView, dagnodeid::UUID)
source
MINDFul.RouterPortType
struct RouterPort

A representation of a router port.

  • rate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}
source
MINDFul.RouterPortLLIType
struct RouterPortLLI <: MINDFul.LowLevelIntent
  • localnode::Int64: Target node

  • routerportindex::Int64: The router port index to be reserved

source
MINDFul.RouterViewType
struct RouterView{R<:MINDFul.AbstractRouter} <: MINDFul.ReservableResourceView

A view of a router with several ports.

  • router::MINDFul.AbstractRouter: The underlying router

  • ports::Vector{MINDFul.RouterPort}: number of ports in router

  • portreservations::Dict{Base.UUID, MINDFul.RouterPortLLI}: The intent reservations together with the low level intent of reserved port

  • portstaged::Set{MINDFul.RouterPortLLI}: The intent reservations together with the low level intent of a staged port

source
MINDFul.TransmissionModeType
struct TransmissionMode

Represents a transmission mode. A transponder, if flexible, might support many of them.

  • opticalreach::Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}: Optical reach in kilometers

  • rate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}: rate in Gbps

  • spectrumslotsneeded::Int64: Number of 12.5 GHz frequency slots needed

source
MINDFul.TransmissionModuleCompatibilityType
struct TransmissionModuleCompatibility
  • rate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}: The bandwidth of the connection

  • spectrumslotsneeded::Int64: Number of 12.5Gz frequency slots needed

  • name::String: descriptive name of the transmission module

Describe what requirements are needed to establish transmission module end-to-end connection Modulation should be here but it's not. Dissagregetation data should be here but it's not. Both are covered by the name which must be equal in both ends

source
MINDFul.TransmissionModuleIntentType
struct TransmissionModuleIntent <: MINDFul.AbstractIntent

Contains the requirements to compile down to TransmissionModuleLLI

  • rate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}: The data rate requierement

  • opticalreach::Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}: Optical reach requirements in kilometres

  • spectrumslotsneeded::Int64: Number of 12.5 GHz frequency slots needed

source
MINDFul.TransmissionModuleLLIType
struct TransmissionModuleLLI <: MINDFul.LowLevelIntent
  • localnode::Int64: Target node

  • transmissionmoduleviewpoolindex::Int64: The index of the transmission module pool to be reserved

  • transmissionmodesindex::Int64: The selected mode of the transmission module. 0 means nothing is still selected. Non elastic modules can have only 1.

  • routerportindex::Int64: The router port index to be connected

  • adddropport::Int64: The port index adding or dropping the optical signal to be connected

source
MINDFul.TransmissionModuleViewType
struct TransmissionModuleView{T<:MINDFul.AbstractTransmissionModule}
  • transmissionmodule::MINDFul.AbstractTransmissionModule: The underlying transmission module

  • name::String: descriptive name of the transmission module

  • transmissionmodes::Vector{MINDFul.TransmissionMode}: operating transmission modes

  • cost::Float64: Cost of the transmission module (in unit costs)

A view of a transmission module.

source
MINDFul._rec_deletenodesedgesuntilgroomingfound!Method
_rec_deletenodesedgesuntilgroomingfound!(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID,
    idagnodeid2dlt::Vector{Base.UUID}
) -> Bool

Returns true if grooming is found and the idagnodeid to delete

source
MINDFul.addidagedge!Method
addidagedge!(
    ibnf::MINDFul.IBNFramework,
    fromnode::Base.UUID,
    tonode::Base.UUID;
    offsettime
) -> Bool
source
MINDFul.addidagnode!Method
addidagnode!(
    ibnf::MINDFul.IBNFramework,
    intent::MINDFul.AbstractIntent;
    parentids,
    childids,
    intentissuer,
    offsettime
) -> MINDFul.IntentDAGNode{I, MINDFul.MachineGenerated} where I<:MINDFul.AbstractIntent

Return the IntentDAGNode

source
MINDFul.addidagnode!Method
addidagnode!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode;
    parentids,
    childids,
    intentissuer
) -> Base.UUID

Return the UUID

source
MINDFul.addtoinstalledlightpaths!Method
addtoinstalledlightpaths!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent}
) -> Bool

If idagnode represents a direct parent of LLIs that are a lightpath, add representation to the IntentDAGInfo Return true if done. Otherwise false

source
MINDFul.addtoinstalledlightpaths!Method
addtoinstalledlightpaths!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:Union{MINDFul.LightpathIntent, MINDFul.CrossLightpathIntent}}
) -> Bool

If idagnode represents a direct parent of LLIs that are a lightpath, add representation to the IntentDAGInfo Return true if done. Otherwise false

source
MINDFul.allocate_transmissionmoduleMethod
allocate_transmissionmodule(
    ibnf::MINDFul.IBNFramework,
    dagnodeid::Base.UUID,
    localnode::Int64,
    transmissionmodulereservationentry::MINDFul.TransmissionModuleLLI
)
source
MINDFul.canreserveMethod
canreserve(
    sdn::MINDFul.AbstractSDNController,
    nodeview::MINDFul.NodeView,
    transmissionmodulelli::MINDFul.TransmissionModuleLLI;
    verbose
) -> Bool

Set verbose=true to see where the reservation fails

source
MINDFul.canreserveMethod
canreserve(
    sdn::MINDFul.AbstractSDNController,
    oxcview::MINDFul.OXCView,
    oxcswitchreservationentry::MINDFul.OXCAddDropBypassSpectrumLLI;
    verbose
) -> Bool

Check whether

  • add/drop port exists
  • add/drop port already in use
  • spectrum in fibers in use

Set verbose=true to see where the reservation fails

source
MINDFul.canreserveMethod
canreserve(
    sdn::MINDFul.AbstractSDNController,
    routerview::MINDFul.RouterView,
    routerportlli::MINDFul.RouterPortLLI;
    verbose
) -> Bool

Check if router port exists and whether it is already used

Set verbose=true to see where the reservation fails

source
MINDFul.chooseoxcadddropport_firstMethod
chooseoxcadddropport_first(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    node::Int64
) -> Union{Nothing, Int64}

Return the uniformly random available oxc add/drop port and nothing if none found

source
MINDFul.choosespectrum_firstfitMethod
choosespectrum_firstfit(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    path::Vector{Int64},
    demandslotsneeded::Int64
) -> Union{Nothing, Int64}
source
MINDFul.compilegroomingpossibilityMethod
compilegroomingpossibility(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    groomingpossibility::Vector{Union{Base.UUID, Graphs.SimpleGraphs.SimpleEdge{Int64}}},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    intradomainalgfun::Function;
    verbose,
    offsettime
) -> Symbol

Returns ReturnCode on whether it managed to compile the grooming possibility passed.

source
MINDFul.compileintenttemplate!Method
compileintenttemplate!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm;
    verbose,
    intradomainalgfun,
    externaldomainalgkeyword,
    prioritizegrooming,
    prioritizesplitnodes,
    prioritizesplitbordernodes,
    offsettime
)

A template compilation function that can be extended

Pass in the intent compilation algorithm intentcompilationalgorithm

Give in the following hook functions:

  • intradomainalgfun is used as compilation algorithm for the intents handled internally.

It should return a Symbol as a return code. Common return codes are found in MINDFul.ReturnCodes

intradomainalgfun(
    ibnf::IBNFramework, 
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm
    ; datetime::DateTime
) -> Symbol
  • prioritizesplitnodes is called when optical reach is not enough to have a lightpath end-to-end to serve the intent and a path to split was already selected.

The node selected will break the intent into two pieces with the node standing in between. This function should return a vector of GlobalNodes with decreasing priority of which node should be chosen.

prioritizesplitnodes(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode,
    intentcompilationalgorithm::IntentCompilationAlgorithm,
) -> Vector{GlobalNode}
  • prioritizesplitbordernodes is called to select the border node to work as the source node for the delegated intent in a neighboring domain.

This function should return a vector of GlobalNodes with decreasing priority of which node should be chosen.

prioritizesplitbordernodes(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm)
) -> Vector{GlobalNode}
source
MINDFul.consecutivelightpathsidxMethod
Pass a `Vector{Vector{Int}}` where `Int` are the nodes of each lightpath.
Return a `Vector{Vector{Int}}` where `Int` is the index of the contained lightpaths.
if `startingnode = true`, `node` is starting else is ending.
source
MINDFul.construct_BoolLogStateFunction
construct_BoolLogState(

) -> Vector{Tuple{Dates.DateTime, Bool}}
construct_BoolLogState(
    initialstate
) -> Vector{T} where T<:Tuple{Dates.DateTime, Any}

Implementing BoolLogState() is type piracy.

source
MINDFul.constructfromdictMethod
constructfromdict(
    _::Type{T},
    dict::Dict{Symbol},
    dict2::Dict{Symbol}
) -> MINDFul.NodeProperties

Convenience function to construct any struct of type T by passing a Dict corresponding to the fields needed. A further dict dict2 is searched for data.

source
MINDFul.constructfromdictMethod
constructfromdict(
    _::Type{T},
    dict::Dict{Symbol}
) -> MINDFul.EdgeProperties

using Core: ReturnNode

Convenience function to construct any struct of type T by passing a Dict corresponding to the fields needed.

source
MINDFul.default_OXCviewMethod
default_OXCview(
    nodeproperties::MINDFul.NodeProperties,
    spectrumslots::Int64
) -> MINDFul.OXCView{MINDFul.OXCDummy}
source
MINDFul.deletenodesedgesuntilgroomingfoundMethod
deletenodesedgesuntilgroomingfound(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
)

Delete all nodes and edges until the grooming node is found. If no grooming node is found, delete nothing. Start from idagnodeid

source
MINDFul.deletereservation!Method
deletereservation!(
    sdn::MINDFul.AbstractSDNController,
    resourceview::MINDFul.ReservableResourceView,
    dagnodeid::Base.UUID;
    verbose
)
source
MINDFul.deletereservationhook!Method
deletereservationhook!(
    sdn::MINDFul.AbstractSDNController,
    resourceview::MINDFul.ReservableResourceView,
    dagnodeid::Base.UUID;
    verbose
) -> Symbol

Implement this function to do custom actions per specific ReservableResourceView

source
MINDFul.edgeifyMethod
edgeify(
    path::Vector{Int64}
) -> Vector{Graphs.SimpleGraphs.SimpleEdge{Int64}}
source
MINDFul.emptyaggraphwithnewuuidMethod
emptyaggraphwithnewuuid(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Array{T<:MINDFul.NodeView, 1}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID},
    uuid::Base.UUID
) -> AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView
source
MINDFul.findconsecutiveblocksMethod
findconsecutiveblocks(
    predicate::Function,
    vec::Vector
) -> Vector{Tuple{Int64, Int64}}

Return a Vector{Tuple{Int, Int}} with the consecutive blocks that satisfy function predicate. The first element of the tuple is the starting index and the second the last index of the block.

source
MINDFul.firstfitMethod
firstfit(
    boolvec::AbstractVector{Bool},
    lenghrequire::Int64
) -> Union{Nothing, Int64}

Finds first contiguous slot range of length lengthrequire that satisfies the boolvec. Return the starting index of the range or nothing if none available

source
MINDFul.generatelightpathoxcadddropbypassspectrumlliMethod
generatelightpathoxcadddropbypassspectrumlli(
    path::Vector{Int64},
    spectrumslotsrange::UnitRange{Int64};
    sourceadddropport,
    opticalinitincomingnode,
    destadddropport
) -> Vector{MINDFul.OXCAddDropBypassSpectrumLLI}

Return a list of (@ref)[OXCAddDropBypassSpectrumLLI] that constitute a lightpath. According to the arguments a "starting lightpath", an "ending lightpath", or a "lightpath segment" can be created. The arguments are the following:

  • sourceadddropport: nothing for a starting lightpath and an Integer denating the add/drop port otherwise
  • opticalinitincomingnode : the (@ref)[LocalNode] denoting the incoming optical connection from the specified node for a starting lightpath. Set to nothing if not a starting lightpath
  • destadddropport: nothing for an ending lightpath and an Integer denating the add/drop port otherwise

Note: not both sourceadddropport and opticalinitincomingnode can be nothing or have a values at the same time.

source
MINDFul.getafterlliidxMethod
getafterlliidx(
    ibnf::MINDFul.IBNFramework,
    conintent::MINDFul.ConnectivityIntent,
    llis,
    oxclli::MINDFul.OXCAddDropBypassSpectrumLLI;
    verbose
) -> Any

Return all next logical low level intent indices from llis given that now signal is positioned in OXCAddDropBypassSpectrumLLI such that the conintent is satisfied. Return an empty vector if no logical next is found.

source
MINDFul.getafterlliidxMethod
getafterlliidx(
    ibnf::MINDFul.IBNFramework,
    conintent::MINDFul.ConnectivityIntent,
    llis,
    rplli::MINDFul.RouterPortLLI;
    verbose
) -> Any

Return all next logical low level intent indices from llis given that now signal is positioned in RouterPortLLI such that the conintent is satisfied. Return an empty vector if no logical next is found.

source
MINDFul.getafterlliidxMethod
getafterlliidx(
    ibnf::MINDFul.IBNFramework,
    conintent::MINDFul.ConnectivityIntent,
    llis,
    tmlli::MINDFul.TransmissionModuleLLI;
    verbose
) -> Any

Return all next logical low level intent indices from llis given that now signal is positioned in TransmissionModuleLLI such that the conintent is satisfied. Return an empty vector if no logical next is found.

source
MINDFul.getcurrentlinkstateMethod
getcurrentlinkstate(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    edge::Graphs.SimpleGraphs.SimpleEdge;
    checkfirst,
    verbose
) -> Union{Nothing, Bool, Symbol}

Same as getcurrentlinkstate(ibnf::IBNFramework) but doesn't send a request to other domains.

source
MINDFul.getcurrentlinkstateMethod
getcurrentlinkstate(
    ibnf::MINDFul.IBNFramework,
    edge::Graphs.SimpleGraphs.SimpleEdge;
    checkfirst,
    verbose
) -> Union{Nothing, Bool, Symbol}
source
MINDFul.getfirstMethod
getfirst(predicate::Function, ar::AbstractArray) -> Any

Returns the element is predicate is satisfied or nothing otherwise.

source
MINDFul.getfirstcompatibletransmoduleidxandmodeidxMethod
getfirstcompatibletransmoduleidxandmodeidx(
    transmissionmoduleviewpool::Vector{<:MINDFul.TransmissionModuleView},
    availtransmdlidxs::Vector{Int64},
    transmissionmodulecompat::MINDFul.TransmissionModuleCompatibility
) -> Union{Nothing, Tuple{Int64, Int64}}

Return a integer tuple (Int, Int) denoting the first available and compatible transmission module index and its transmission mode index. If non found return nothing.

source
MINDFul.getidaginfoMethod
getidaginfo(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> MINDFul.IntentDAGInfo
source
MINDFul.getidagnextuuidcounterMethod
getidagnextuuidcounter(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> Base.UUID
source
MINDFul.getidagnodeMethod
getidagnode(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    dagnodeid::Base.UUID
) -> MINDFul.IntentDAGNode
source
MINDFul.getidagnodechildrenMethod
getidagnodechildren(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
) -> Vector{MINDFul.IntentDAGNode}
source
MINDFul.getidagnodechildrenMethod
getidagnodechildren(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnode::MINDFul.IntentDAGNode
) -> Vector{MINDFul.IntentDAGNode}
source
MINDFul.getidagnodedescendantsMethod
getidagnodedescendants(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID;
    exclusive,
    includeroot,
    parentsfirst
) -> Vector{MINDFul.IntentDAGNode}

Get all descendants of DAG dag starting from node idagnodeid Set exclusive=true to get nodes that have idagnodeid as the only ancestor Set parentsfirst=true to get the upper level children first and false to get the leafs first.

source
MINDFul.getidagnodeidxMethod
getidagnodeidx(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    dagnodeid::Base.UUID
) -> Int64

Get the vertex index of the intent DAG node with id dagnodeid. Errors if UUID doesn't exist. It's slow: maybe keep a dict/table ?

source
MINDFul.getidagnodeidxsconnectedMethod
getidagnodeidxsconnected(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
) -> Vector{Int64}

Get all connected nodes of DAG dag starting from node idagnodeid. Return as node indices of the graph.

source
MINDFul.getidagnodeidxsdescendantsMethod
getidagnodeidxsdescendants(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID;
    exclusive,
    includeroot
) -> Vector{Int64}

Get all descendants of DAG dag starting from node idagnodeid. Return as node indices of the graph. Set exclusive=true to get nodes that have idagnodeid as the only ancestor

source
MINDFul.getidagnodeleafsMethod
getidagnodeleafs(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID;
    exclusive
) -> Vector{MINDFul.IntentDAGNode}

Get the leafs of DAG dag starting from node idn. Set exclusive=true to get nodes that have idn as the only ancestor

source
MINDFul.getidagnodellisMethod
getidagnodellis(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID;
    exclusive
) -> Vector{MINDFul.IntentDAGNode}

Get all the Low Level Intents that are leafs of idagnodeid Set exclusive=true to get nodes that have idn as the only ancestor

source
MINDFul.getidagnodellisMethod
getidagnodellis(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> Vector{MINDFul.IntentDAGNode}

Get all the Low Level Intents that exist on the DAG

source
MINDFul.getidagnodeparentsMethod
getidagnodeparents(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
) -> Vector{MINDFul.IntentDAGNode}
source
MINDFul.getidagnodeparentsMethod
getidagnodeparents(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnode::MINDFul.IntentDAGNode
) -> Vector{MINDFul.IntentDAGNode}
source
MINDFul.getidagnoderootsMethod
getidagnoderoots(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
) -> Vector{MINDFul.IntentDAGNode}

Get the roots of DAG dag starting from node idn.

source
MINDFul.getidagnodesMethod
getidagnodes(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> Vector{MINDFul.IntentDAGNode}
source
MINDFul.getlinkstatesMethod
getlinkstates(
    ibnf::MINDFul.IBNFramework,
    edge::Graphs.SimpleGraphs.SimpleEdge;
    checkfirst,
    verbose
) -> Union{Nothing, Symbol, Vector{Tuple{Dates.DateTime, Bool}}}
source
MINDFul.getlinkstatesMethod
getlinkstates(
    oxcview::MINDFul.OXCView,
    ed::Graphs.SimpleGraphs.SimpleEdge
) -> Vector{Tuple{Dates.DateTime, Bool}}
source
MINDFul.getlinkstatesMethod
getlinkstates(
    oxcview::MINDFul.OXCView
) -> Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, Vector{Tuple{Dates.DateTime, Bool}}}
source
MINDFul.getlocalnodenumMethod
getlocalnodenum(ibnf::MINDFul.IBNFramework) -> Any

Return the number of local nodes, i.e. not border nodes.

source
MINDFul.getlowestratetransmissionmodeMethod
getlowestratetransmissionmode(
    transmissionmoduleview::MINDFul.TransmissionModuleView,
    demandrate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}},
    demanddistance::Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}
) -> Union{Nothing, Int64}

Return the index with the lowest GBPS rate that can get deployed for the given demand rate and distance. If non is find return nothing.

source
MINDFul.getnetworkoperatoridagnodesMethod
getnetworkoperatoridagnodes(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> Vector{MINDFul.IntentDAGNode}

Request topology information

source
MINDFul.getnodeindexMethod
getnodeindex(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    globalnode::MINDFul.GlobalNode
) -> Union{Nothing, Int64}

Return the index given the global representation. Return nothing if not found

source
MINDFul.getpathdistanceMethod
getpathdistance(
    ibnag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView,
    path::Vector{Int64}
) -> Any
source
MINDFul.getresidualbandwidthMethod
getresidualbandwidth(
    ibnf::MINDFul.IBNFramework,
    lightpathuuid::Base.UUID,
    residualbandwidth::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}};
    onlyinstalled
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}

Return how much bandwidth is left unused in the lightpath

source
MINDFul.getresidualbandwidthMethod
getresidualbandwidth(
    ibnf::MINDFul.IBNFramework,
    intentuuid::Base.UUID;
    onlyinstalled
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}

Return 0 GBPS if invalid intent

source
MINDFul.getrouterportMethod
getrouterport(
    ibnf::MINDFul.IBNFramework,
    intent::MINDFul.RouterPortLLI
) -> MINDFul.RouterPort

Get the router port

source
MINDFul.getrouterportrateMethod
getrouterportrate(
    ibnf::MINDFul.IBNFramework,
    intent::MINDFul.RouterPortLLI
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}

Get the router port

source
MINDFul.getstagedMethod
getstaged(
    nodeview::MINDFul.NodeView
) -> Union{Nothing, Set{MINDFul.TransmissionModuleLLI}}
source
MINDFul.getstagedMethod
getstaged(
    oxcview::MINDFul.OXCView
) -> Set{MINDFul.OXCAddDropBypassSpectrumLLI}
source
MINDFul.gettotalbandwidthMethod
gettotalbandwidth(
    lpr::MINDFul.LightpathRepresentation
) -> Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}}
source
MINDFul.hasidagnodechildrenMethod
hasidagnodechildren(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
) -> Bool
source
MINDFul.hasidagnodechildrenMethod
hasidagnodechildren(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnode::MINDFul.IntentDAGNode
) -> Bool
source
MINDFul.hasidagnodeparentsMethod
hasidagnodeparents(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnodeid::Base.UUID
) -> Bool
source
MINDFul.hasidagnodeparentsMethod
hasidagnodeparents(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    idagnode::MINDFul.IntentDAGNode
) -> Bool
source
MINDFul.increaseidagcounter!Method
increaseidagcounter!(
    intentdag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}
) -> Int64
source
MINDFul.insertreservation!Method
insertreservation!(
    sdn::MINDFul.AbstractSDNController,
    resourceview::MINDFul.ReservableResourceView,
    dagnodeid::Base.UUID,
    reservationdescription;
    verbose
) -> Symbol
source
MINDFul.insertreservationhook!Method
insertreservationhook!(
    sdn::MINDFul.AbstractSDNController,
    oxcview::MINDFul.OXCView,
    dagnodeid::Base.UUID,
    reservationdescription::MINDFul.OXCAddDropBypassSpectrumLLI;
    verbose
) -> Symbol
source
MINDFul.insertreservationhook!Method
insertreservationhook!(
    sdn::MINDFul.AbstractSDNController,
    resourceview::MINDFul.ReservableResourceView,
    dagnodeid::Base.UUID,
    reservationdescription;
    verbose
) -> Symbol

Implement this function to do custom actions per specific ReservableResourceView

source
MINDFul.intradomaincompilationtemplateMethod
intradomaincompilationtemplate(
;
    prioritizepaths,
    prioritizegrooming,
    prioritizerouterport,
    prioritizetransmdlandmode,
    choosespectrum,
    chooseoxcadddropport,
    offsettime
) -> MINDFul.var"#224#234"{MINDFul.var"#224#225#235"{typeof(MINDFul.prioritizepaths_shortest), typeof(MINDFul.prioritizegrooming_default), typeof(MINDFul.prioritizerouterports_lowestrate), typeof(MINDFul.prioritizetransmdlmode_cheaplowrate), typeof(MINDFul.choosespectrum_firstfit), typeof(MINDFul.chooseoxcadddropport_first)}}

AIntra domain compilation algorithm template. Return function to do the intra domain compilation with the signature

intradomainalgfun(
    ibnf::IBNFramework, 
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm
) -> Symbol

The returned algorithm can be customized as follows.

The major selection process is made on the source.

Interfaces needed:

getcandidatepathsnum(
    intentcompilationalgorithm::IntentCompilationAlgorithm)
 -> Int

Return the candidate paths with highest priority first as Vector{Vector{Int}}}. Return empty collection if non available.

prioritizepaths(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
) -> Vector{Vector{LocalNode}}

Return a Vector of grooming possibilities. Return a Vector of grooming possibilities: Vector{Vector{Union{UUID, Edge{Int}}}} Each element is a Vector of either an intent UUID or a new connectivity intent defined with Edge.

prioritizegrooming(
    ibnf::IBNFramework, 
    idagnode::IntentDAGNode{<:ConnectivityIntent}, 
    intentcompilationalgorithm::IntentCompilationAlgorithm)

Return the candidate router ports with highest priority first Return empty collection if non available.

prioritizerouterport(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    node::LocalNode
) -> Vector{Int}

Return the transmission module index and the transmission mode index of that module as a Vector{Tuple{Int, Int}} with the first being the transmission module index and the second the transmission mode. If this is calculated for the source node (default) pass path::Vector{LocalNode} and transmdlcompat::Nothing. If this is calculated for the destination node pass path::Nothing and transmdlcompat::TransmissionModuleCompatibility Return empty collection if non available.

prioritizetransmdlandmode(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    node::LocalNode,
    path::Union{Nothing, Vector{LocalNode}},
    transmdlcompat::Union{Nothing, TransmissionModuleCompatibility}=nothing
) -> Vector{Tuple{Int, Int}}

Return the first index of the spectrum slot range to be allocated. If none found, return nothing

choosespectrum(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    path::Vector{LocalNode},
    demandslotsneeded::Int
) -> Vector{Int}

Return the index of the add/drop OXC port to allocate at node node If none found, return nothing

chooseoxcadddropport(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    node::LocalNode
) -> Vector{Int}
source
MINDFul.intradomaincompilationtemplate_destination!Method
intradomaincompilationtemplate_destination!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    transmissionmodulecompat,
    opticalincomingnode::Int64,
    spectrumslotsrange::UnitRange{Int64},
    prioritizerouterport::Function,
    prioritizetransmdlmode::Function,
    chooseoxcadddropport::Function,
    mena::MINDFul.MutableEndNodeAllocations;
    verbose,
    offsettime
) -> Symbol

Takes care of the final node (destination). Return the returncode of the procedure. Also mutate lowlevelintentstoadd to add the low-level intents found.

The following functions must be passed in (entry point from intradomaincompilationtemplate)

Return the candidate router ports with highest priority first Return empty collection if non available.

prioritizerouterport(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    node::LocalNode
) -> Vector{Int}

Return the transmission module index and the transmission mode index of that module as a Vector{Tuple{Int, Int}} with the first being the transmission module index and the second the transmission mode. If this is calculated for the source node (default) pass path::Vector{LocalNode} and transmdlcompat::Nothing. If this is calculated for the destination node pass path::Nothing and transmdlcompat::TransmissionModuleCompatibility Return empty collection if non available.

prioritizetransmdlandmode(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    node::LocalNode,
    path::Union{Nothing, Vector{LocalNode}},
    transmdlcompat::Union{Nothing, TransmissionModuleCompatibility}=nothing
) -> Vector{Tuple{Int, Int}}

Return the index of the add/drop OXC port to allocate at node node If none found, return nothing

chooseoxcadddropport(
    ibnf::IBNFramework,
    idagnode::IntentDAGNode{<:ConnectivityIntent},
    intentcompilationalgorithm::IntentCompilationAlgorithm,
    node::LocalNode
) -> Vector{Int}
source
MINDFul.isaddportallocationMethod
isaddportallocation(
    oxcswitchentry::MINDFul.OXCAddDropBypassSpectrumLLI
) -> Bool

Checks if this reservation reserves the add port, i.e., it's (0, x, y).

source
MINDFul.isdropportallocationMethod
isdropportallocation(
    oxcswitchentry::MINDFul.OXCAddDropBypassSpectrumLLI
) -> Bool

Checks if this reservation reserves the drop port, i.e., it's (x, y, 0).

source
MINDFul.isinternalorborderintentMethod
isinternalorborderintent(
    ibnf::MINDFul.IBNFramework,
    connectivityintent::MINDFul.ConnectivityIntent;
    noremoteintent
) -> Bool

Return true if at least source or destination is internal. Pass ; noremoteintent=true to check whether there is an OpticalTerminateConstraint or an OpticalInitiateConstraint such that no RemoteIntent is needed.

source
MINDFul.isonlyopticalMethod
isonlyoptical(ena::MINDFul.EndNodeAllocations) -> Bool

Return true if allocaitons on the node do not influence the electrical devices. This is equivalent to the OpticalInitiateConstraint and OpticalTerminateConstraint

source
MINDFul.isreservationvalidFunction
isreservationvalid(
    oxcswitchreservationentry::MINDFul.OXCAddDropBypassSpectrumLLI
) -> Union{Bool, Symbol}
isreservationvalid(
    oxcswitchreservationentry::MINDFul.OXCAddDropBypassSpectrumLLI,
    verbose::Bool
) -> Union{Bool, Symbol}
source
MINDFul.issatisfiedMethod
issatisfied(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:Union{MINDFul.ConnectivityIntent, MINDFul.CrossLightpathIntent}};
    onlyinstalled,
    noextrallis,
    verbose
) -> Union{Bool, Symbol}

Steps by step check if ibnf satisfies the intent For now works only with local view. The options are:

  • onlyinstalled: only consideres installed intents
  • noextrallis: all LLI must be used
  • orderedllis: pass list to access ordered llis

The function is not a definite assertion. The following cases are not covered:

  • transmission module compatibility
  • optical reach
source
MINDFul.issubpathMethod
issubpath(
    path::Vector{Int64},
    subpath::Vector{Int64}
) -> Bool
Return `true` if `subpath` is contained in `path`
source
MINDFul.istransmissionmoduleandmodecompatibleMethod
istransmissionmoduleandmodecompatible(
    transmissionmoduleview::MINDFul.TransmissionModuleView,
    transmissionmodesindex::Int64,
    transmissionmodulecompat::MINDFul.TransmissionModuleCompatibility
) -> Bool

Return true if the transmissionmoduleview and mode support the transmissionmodulecompat If onlymodecheck = true is passed then the disaggregation/protocol (aka name) will not be checked.

source
MINDFul.istransmissionmoduleandmodecompatibleMethod
istransmissionmoduleandmodecompatible(
    transmissionmoduleview::MINDFul.TransmissionModuleView,
    transmissionmode::MINDFul.TransmissionMode,
    transmissionmodulecompat::MINDFul.TransmissionModuleCompatibility
) -> Bool

Return true if the transmissionmoduleview and mode support the transmissionmodulecompat If onlymodecheck = true is passed then the disaggregation/protocol (aka name) will not be checked.

source
MINDFul.istransmissionmoduleappropriateMethod
istransmissionmoduleappropriate(
    transmissionmoduleview::MINDFul.TransmissionModuleView,
    demandrate::Unitful.Quantity{Float64, Data 𝐓^-1, Unitful.FreeUnits{(Gbps,), Data 𝐓^-1, nothing}},
    demanddistance::Unitful.Quantity{Float64, 𝐋, Unitful.FreeUnits{(km,), 𝐋, nothing}}
) -> Bool

Checks if the transmission module can get deployed for the given demand rate and distance

source
MINDFul.istransmissionmodulecompatibleMethod
istransmissionmodulecompatible(
    transmissionmoduleview::MINDFul.TransmissionModuleView,
    transmissionmodulecompat::MINDFul.TransmissionModuleCompatibility
) -> Bool

Return true if transmissionmoduleview can support with its modes the transmissionmodulecompat

source
MINDFul.logicalordergetlightpathsMethod
logicalordergetlightpaths(
    lo::Vector{<:MINDFul.LowLevelIntent}
) -> Vector
Return a Vector{Vector{Int}} being the lightpaths from the logical low level intent order
source
MINDFul.logicalordergetpathMethod
logicalordergetpath(
    lo::Vector{<:MINDFul.LowLevelIntent}
) -> Vector{Int64}
Return a Vector{Int} with the path given from the logical low level intent order
source
MINDFul.logicalorderissinglelightpathMethod
logicalorderissinglelightpath(
    lo::Vector{<:MINDFul.LowLevelIntent}
) -> Bool
Check that the LowLevelIntents are consisting a single LightPath implementation

This means that the order of the LLIs should be (RouterPortLLI) -> (TransmissionModuleLLI) -> OXCAddDropLLI -> (TranmsissionModuleLLI) -> (RouterPortLLI)

source
MINDFul.prioritizegrooming_defaultMethod
prioritizegrooming_default(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm
) -> Vector{Vector{Union{Base.UUID, Graphs.SimpleGraphs.SimpleEdge{Int64}}}}
Return a Vector of grooming possibilities.
Suggest grooming only if remains on the same path.
Suggest grooming only if one extra router port pair is used.

Return a `Vector` of grooming possibilities: `Vector{Vector{Union{UUID, Edge{Int}}}}`
Each element is a `Vector` of either an intent `UUID` or a new connectivity intent defined with `Edge`.

Sorting of the grooming possibilities is done just by minimizing lightpaths used
source
MINDFul.prioritizepaths_shortestMethod
prioritizepaths_shortest(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm
) -> Vector{T} where T<:(Vector{U} where U<:Integer)
source
MINDFul.prioritizerouterports_lowestrateMethod
prioritizerouterports_lowestrate(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    node::Int64
) -> Vector{Int64}
source
MINDFul.prioritizesplitbordernodes_shortestorshortestrandomMethod
prioritizesplitbordernodes_shortestorshortestrandom(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm
) -> Vector

Return a single choice of GlobalNode and not several candidates. If the target domain is known return the GlobalNode with the shortest distance. If the target domain is unknown return the border node with the shortest distance, excluding the (if) source domain.

source
MINDFul.prioritizesplitnodes_longestfirstshortestpathMethod
prioritizesplitnodes_longestfirstshortestpath(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm
) -> Vector{MINDFul.GlobalNode}

Return the GlobalNode contained in the shortest path that is the longest to reach given the optical reach situation. The GlobalNode is used to break up the ConnectivityIntent into two. Not several candidates are returned but only a single choice.

source
MINDFul.prioritizetransmdlmode_cheaplowrateFunction
prioritizetransmdlmode_cheaplowrate(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    node::Int64,
    path::Union{Nothing, Vector{Int64}}
) -> Vector{Tuple{Int64, Int64}}
prioritizetransmdlmode_cheaplowrate(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    node::Int64,
    path::Union{Nothing, Vector{Int64}},
    transmdlcompat::Union{Nothing, MINDFul.TransmissionModuleCompatibility}
) -> Vector{Tuple{Int64, Int64}}

Return the index with the lowest GBPS rate that can get deployed for the given demand rate and distance. If non is find return nothing.

source
MINDFul.pushstatetoidagnode!Method
pushstatetoidagnode!(
    intentlogstate::Array{Tuple{Dates.DateTime, S}, 1} where S<:Enum{Int32},
    intentstate::MINDFul.IntentState.T;
    offsettime
) -> Array{Tuple{Dates.DateTime, S}, 1} where S<:Enum{Int32}
source
MINDFul.pushstatetoidagnode!Method
pushstatetoidagnode!(
    idagnode::MINDFul.IntentDAGNode,
    intentstate::MINDFul.IntentState.T;
    offsettime
) -> Vector{Tuple{Dates.DateTime, MINDFul.IntentState.T}}
source
MINDFul.removefrominstalledlightpaths!Method
removefrominstalledlightpaths!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode
) -> Bool

Remove from the installedlightpaths representation if exists Return true if done. Otherwise false

source
MINDFul.removeidagedge!Method
removeidagedge!(
    idag::AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo},
    fromnode::Base.UUID,
    tonode::Base.UUID
) -> Bool
source
MINDFul.requestavailablecompilationalgorithmsMethod
requestavailablecompilationalgorithms(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework
) -> Vector{Symbol}

Compilation algorithms are given as symbols because they might not be available programmatically to different IBN frameworks

source
MINDFul.requestcompileintent_init!Function
requestcompileintent_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    ...
) -> Symbol
requestcompileintent_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    compilationalgorithmkey::Symbol;
    ...
) -> Symbol
requestcompileintent_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    compilationalgorithmkey::Symbol,
    compilationalgorithmargs::Tuple;
    verbose,
    offsettime
) -> Symbol

The initiator domain myibnf asks remoteibnf to compile the external remote intent idagnodeid with the specified compilation algorithm

source
MINDFul.requestcompileintent_init!Function
requestcompileintent_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnfhandler::MINDFul.RemoteIBNFHandler;
    ...
)
requestcompileintent_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    compilationalgorithm::Symbol;
    ...
)
requestcompileintent_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    compilationalgorithm::Symbol,
    compilationalgorithmkey::Tuple;
    verbose
)

MA1069 implementation

source
MINDFul.requestcompileintent_term!Function
requestcompileintent_term!(
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID
)
requestcompileintent_term!(
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    compilationalgorithmkey::Symbol
)
requestcompileintent_term!(
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    compilationalgorithmkey::Symbol,
    compilationalgorithmargs::Tuple
)

MA1069 implementation

The initiator domain remoteibnf asks this domain myibnf to compile the internal remote intent idagnodeid with the specified compilation algorithm

source
MINDFul.requestcompileintent_term!Function
requestcompileintent_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    ...
)
requestcompileintent_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    compilationalgorithmkey::Symbol;
    ...
)
requestcompileintent_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    compilationalgorithmkey::Symbol,
    compilationalgorithmargs::Tuple;
    verbose,
    offsettime
)

The initiator domain remoteibnf asks this domain myibnf to compile the internal remote intent idagnodeid with the specified compilation algorithm

source
MINDFul.requestcurrentlinkstate_initMethod
requestcurrentlinkstate_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    ge::MINDFul.GlobalEdge
) -> Union{Nothing, Bool}

Request the link state of the border edge Need to check whether ge is indeed an edge shared with myibnf

source
MINDFul.requestcurrentlinkstate_termMethod
requestcurrentlinkstate_term(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    ge::MINDFul.GlobalEdge
) -> Union{Nothing, Bool}
source
MINDFul.requestdelegateintent!Method
requestdelegateintent!(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    intent::MINDFul.AbstractIntent,
    internalidagnodeid::Base.UUID;
    offsettime
) -> Base.UUID

Return the id of the new dag node if successful and nothing otherwise

source
MINDFul.requestdelegateintent!Method
requestdelegateintent!(
    myibnf::MINDFul.IBNFramework,
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    intent::MINDFul.AbstractIntent,
    internalidagnodeid::Base.UUID
)

MA1069 implementation

Delegates an intent to another domain

Return the id of the new dag node if successful and nothing otherwise

source
MINDFul.requestglobalnodeelectricalpresence_initMethod
requestglobalnodeelectricalpresence_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    intentuuid::Base.UUID;
    onlyinstalled
) -> Any

Request the path that is implementing intent intentuuid in the remote IBN framework as global node vector

source
MINDFul.requestibnattributegraphMethod
requestibnattributegraph(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework
) -> AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{T}, Dict{Graphs.SimpleGraphs.SimpleEdge{Int64}, MINDFul.EdgeView}, Base.UUID} where T<:MINDFul.NodeView

Request topology information

source
MINDFul.requestibnattributegraphMethod
requestibnattributegraph(
    myibnf::MINDFul.IBNFramework,
    remoteibnfhandler::MINDFul.RemoteIBNFHandler
)

MA1069 implementation If far away, think about authorization and permissions. That's the reason why there are 2 arguments: The first argument should have the authorization.

source
MINDFul.requestibnfhandlers_initMethod
requestibnfhandlers_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework
) -> Vector{H} where H<:MINDFul.AbstractIBNFHandler

Request the handlers of the handler

source
MINDFul.requestidag_initMethod
requestidag_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework
) -> AttributeGraphs.AttributeGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Vector{MINDFul.IntentDAGNode}, Nothing, MINDFul.IntentDAGInfo}

Request intent dag information

source
MINDFul.requestinstallintent_term!Method
requestinstallintent_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    verbose,
    offsettime
) -> Symbol
source
MINDFul.requestintentgloballightpaths_initMethod
requestintentgloballightpaths_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    intentuuid::Base.UUID;
    onlyinstalled
) -> Vector

Request the path that is implementing intent intentuuid in the remote IBN framework as global node vector

source
MINDFul.requestintentglobalpath_initMethod
requestintentglobalpath_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    intentuuid::Base.UUID;
    onlyinstalled
) -> Vector

Request the path that is implementing intent intentuuid in the remote IBN framework as global node vector

source
MINDFul.requestintentglobalpath_termMethod
requestintentglobalpath_term(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    intentuuid::Base.UUID;
    onlyinstalled
) -> Vector
source
MINDFul.requestissatisfiedMethod
requestissatisfied(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    onlyinstalled,
    noextrallis
) -> Union{Bool, Symbol}

Request to remoteibnf whether the idagnode is theoretically satisfied

source
MINDFul.requestissatisfiedMethod
requestissatisfied(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.RemoteIBNFHandler,
    idagnode::MINDFul.IntentDAGNode;
    onlyinstalled,
    noextrallis
)

MA1069 implementation

Request to remoteibnf whether the idagnode is theoretically satisfied

source
MINDFul.requestlinkstates_initMethod
requestlinkstates_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    ge::MINDFul.GlobalEdge
) -> Union{Nothing, Vector{Tuple{Dates.DateTime, Bool}}}

Request all the link states of the border edge Need to check whether ge is indeed an edge shared with myibnf

source
MINDFul.requestlogicallliorder_initMethod
requestlogicallliorder_init(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    intentuuid::Base.UUID;
    onlyinstalled,
    verbose
) -> Union{Bool, Vector{MINDFul.LowLevelIntent}}

Request logical low level intent sequence

source
MINDFul.requestremoteintentstateupdate!Method
requestremoteintentstateupdate!(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID,
    newstate::MINDFul.IntentState.T;
    offsettime
) -> Bool

Request the initiator remoteibnf to update the state of its mirrored remote intent

source
MINDFul.requestsetlinkstate_init!Method
requestsetlinkstate_init!(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    ge::MINDFul.GlobalEdge,
    operatingstate::Bool;
    offsettime
) -> Union{Nothing, Symbol}

Request to set the state of the neighboring link

source
MINDFul.requestsetlinkstate_term!Method
requestsetlinkstate_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    ge::MINDFul.GlobalEdge,
    operatingstate::Bool;
    offsettime
) -> Union{Nothing, Symbol}
source
MINDFul.requestspectrumavailabilityMethod
requestspectrumavailability(
    myibnf::MINDFul.IBNFramework,
    remoteibnf::MINDFul.IBNFramework,
    ge::MINDFul.GlobalEdge
) -> Union{Nothing, Vector{Bool}}

Request spectrum slot availabilities of the border edge Need to check whether ge is indeed an edge shared with myibnf

source
MINDFul.requestspectrumavailabilityMethod
requestspectrumavailability(
    myibnf::MINDFul.IBNFramework,
    remoteibnfhandler::MINDFul.RemoteIBNFHandler,
    ge::MINDFul.GlobalEdge
)

MA1069 implementation

Request spectr /um slot availabilities of the border edge Need to check whether ge is indeed an edge shared with myibnf

source
MINDFul.requestuncompileintent_term!Method
requestuncompileintent_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    verbose,
    offsettime
) -> Symbol
source
MINDFul.requestuninstallintent_term!Method
requestuninstallintent_term!(
    remoteibnfhandler::MINDFul.AbstractIBNFHandler,
    myibnf::MINDFul.IBNFramework,
    idagnodeid::Base.UUID;
    verbose,
    offsettime
) -> Symbol
source
MINDFul.reserve!Method
reserve!(
    sdn::MINDFul.AbstractSDNController,
    resourceview::MINDFul.ReservableResourceView,
    lowlevelintent::MINDFul.LowLevelIntent,
    dagnodeid::Base.UUID;
    checkfirst,
    verbose
) -> Symbol
source
MINDFul.reserveunreserveleafintents!Method
reserveunreserveleafintents!(
    ibnf::MINDFul.IBNFramework,
    idagnodeleaf::MINDFul.IntentDAGNode,
    doinstall::Bool;
    verbose,
    offsettime
) -> Bool

to reserve pass doinstall=true, and to unreserve doinstall=false

source
MINDFul.setadddropport!Method
setadddropport!(
    ena::MINDFul.MutableEndNodeAllocations,
    intval::Union{Nothing, Int64}
) -> Union{Nothing, Int64}
source
MINDFul.setlinkstate!Method
setlinkstate!(
    ibnf::MINDFul.IBNFramework,
    edge::Graphs.SimpleGraphs.SimpleEdge,
    operatingstate::Bool;
    offsettime
) -> Union{Nothing, Symbol}

Set the link state on both OXCView ends of edge

source
MINDFul.setlinkstate!Method
setlinkstate!(
    ibnf::MINDFul.IBNFramework,
    oxcview::MINDFul.OXCView,
    edge::Graphs.SimpleGraphs.SimpleEdge,
    operatingstate::Bool;
    offsettime
) -> Symbol

Set the operating state of the edge in oxcview and trigger the state update of the relevant low level intents.

source
MINDFul.setlocalnode!Method
setlocalnode!(
    ena::MINDFul.MutableEndNodeAllocations,
    intval::Union{Nothing, Int64}
) -> Union{Nothing, Int64}
source
MINDFul.setoxcviewlinkavailabilities!Method
setoxcviewlinkavailabilities!(
    oxcview::MINDFul.OXCView,
    oxcadddropbypassspectrumlli::MINDFul.OXCAddDropBypassSpectrumLLI,
    setflag::Bool;
    verbose
) -> Symbol

Set the link spectrum availabilities of the oxcview based on the OXC low level intent to setflags

source
MINDFul.splitandcompilecrossdomainconnectivityintentMethod
splitandcompilecrossdomainconnectivityintent(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    intradomainalgfun::Function,
    externaldomainalgkeyword::Symbol,
    mediatorbordernode::MINDFul.GlobalNode;
    verbose,
    offsettime
) -> Symbol
source
MINDFul.splitandcompileintradomainconnecivityintent!Method
splitandcompileintradomainconnecivityintent!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode{<:MINDFul.ConnectivityIntent},
    intentcompilationalgorithm::MINDFul.IntentCompilationAlgorithm,
    intradomainalgfun::Function,
    splitglobalnode::MINDFul.GlobalNode;
    verbose,
    offsettime
) -> Any

Splits connectivity intent on splitglobalnode

source
MINDFul.stage!Method
stage!(
    resourceview::MINDFul.ReservableResourceView,
    lli::MINDFul.LowLevelIntent
) -> Symbol
source
MINDFul.stageaddidagnode!Method
stageaddidagnode!(
    ibnf::MINDFul.IBNFramework,
    lli::MINDFul.LowLevelIntent;
    parentid,
    intentissuer,
    offsettime
) -> Union{Nothing, Symbol, Set}

Stage lli as compiled in the equipment and add LLI in the intent DAG. Staged LLIs are not reserved but used to know that they will be in the future.

source
MINDFul.stageunstageleafintent!Method
stageunstageleafintent!(
    ibnf::MINDFul.IBNFramework,
    lli::MINDFul.LowLevelIntent,
    dostage::Bool
) -> Union{Nothing, Symbol, Set}

dostage true for stage, false for unstage

source
MINDFul.unreserve!Method
unreserve!(
    sdn::MINDFul.AbstractSDNController,
    resourceview::MINDFul.ReservableResourceView,
    dagnodeid::Base.UUID;
    verbose
) -> Symbol
source
MINDFul.unstage!Method
unstage!(
    resourceview::MINDFul.ReservableResourceView,
    lli::MINDFul.LowLevelIntent
) -> Set
source
MINDFul.updateidagnodestates!Function
updateidagnodestates!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode;
    ...
) -> Bool
updateidagnodestates!(
    ibnf::MINDFul.IBNFramework,
    idagnode::MINDFul.IntentDAGNode,
    makestate::Union{Nothing, MINDFul.IntentState.T};
    offsettime
) -> Bool

Return value is true if state is changed.

source
MINDFul.@logtimeMacro

This macro is used to calculate the current (simulated) time as offsettime + (now() - entrytime)

source
MINDFul.@passtimeMacro

This macro is used to pass the (simulated) timing information. It basically passes (; offsettime)

This strategy calls now() every time before passing the arguments. If that proves to slow down the implementation consider to pass offsettime, entrytime around and calcualte @logtime once in the end. Another caveat is that the communication overhead between domains is not measured. An offsetime=nothing logs the time of the current system.

source
MINDFul.@recvtimeMacro

This macro is used to receive the (simulated) timing information. This macro does two things:

  • puts the offsettime::DateTime=now() in the input keyword parameters
  • puts entrytime = now() as the first command to happen in the function

Use @logtime to calculate the current time inside the function. Use @passtime to pass the timing information to another function.

source
MINDFul.@returnfalseiffalseMacro

Return a return false if the expression ex evaluates to false. If verbose=true print the statement and the location. If the expression passed is true do nothing.

source
MINDFul.@returniffalseMacro

Return a return ReturnCodes.Fail if the expression ex evaluates to false. If verbose=true print the statement and the location. If the expression passed is true do nothing. TODO: have also a helper message be printed

source