API

MINDFul.addchild! โ€” Method
addchild!(
    idag::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64},
    parent::Base.UUID,
    child::Intent
) -> Union{Bool, IntentDAGNode{_A, MINDFul.MachineGenerated, MINDFul.LogState{Unitful.Quantity{Float64, ๐“, Unitful.FreeUnits{(hr,), ๐“, nothing}}, IntentState}} where _A<:Intent}
addchild!(
    idag::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64},
    parent::Base.UUID,
    child::Intent,
    ii::MINDFul.IntentIssuer
) -> Union{Bool, IntentDAGNode{_A, _B, MINDFul.LogState{Unitful.Quantity{Float64, ๐“, Unitful.FreeUnits{(hr,), ๐“, nothing}}, IntentState}} where {_A<:Intent, _B<:MINDFul.IntentIssuer}}

Add intent as to the DAG as a child to the intent with uuid parent.

source
MINDFul.addchild! โ€” Method
addchild!(
    idag::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64},
    intent::Intent
) -> Union{Bool, IntentDAGNode{_A, MINDFul.MachineGenerated, MINDFul.LogState{Unitful.Quantity{Float64, ๐“, Unitful.FreeUnits{(hr,), ๐“, nothing}}, IntentState}} where _A<:Intent}
addchild!(
    idag::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64},
    intent::Intent,
    ii::MINDFul.IntentIssuer
) -> Union{Bool, IntentDAGNode{_A, _B, MINDFul.LogState{Unitful.Quantity{Float64, ๐“, Unitful.FreeUnits{(hr,), ๐“, nothing}}, IntentState}} where {_A<:Intent, _B<:MINDFul.IntentIssuer}}

Add intent as to the DAG idag as a root.

source
MINDFul.addintent! โ€” Method
addintent!(ibn::IBN, intent::Intent) -> Base.UUID

Add intent to ibn as Network Operator. Returns the intent id.

source
MINDFul.addintent! โ€” Method
addintent!(
    ibnissuer::MINDFul.IBNIssuer,
    ibnp::IBN,
    intent::Intent
) -> Base.UUID

The IBN client ibnc asks to add intent intent to provider ibnp

source
MINDFul.bordernodes โ€” Method
bordernodes(ibn::IBN; subnetwork_view) -> Any

Return the border nodes, i.e. the nodes belonging to a different domain, of the IBN. If subnetwork_view = true the nodes are returned as a Vector{Tuple{Int,Int}} identifying (CONTROLLER_INDEX, NODE_ID). If subnetwork_view = false the nodes are returned as Vector{Int} with each element being the index of the node in ibn.

source
MINDFul.connectIBNs! โ€” Method
connectIBNs!(
    ibn::Vector{IBN},
    cedges::Vector{NestedGraphs.NestedEdge}
)

Connect the ibn domains ibn using the global indexed Edges cedges.

source
MINDFul.connectIBNs! โ€” Method
connectIBNs!(
    ibn1::IBN,
    ibn2::IBN,
    cedges::Array{NestedGraphs.NestedEdge{T}, 1}
) -> Bool
connectIBNs!(
    ibn1::IBN,
    ibn2::IBN,
    cedges::Array{NestedGraphs.NestedEdge{T}, 1},
    dprops::Union{Nothing, Array{Dict{Symbol, R}, 1}}
) -> Bool

Connect ibn1 and ibn2 with the edges cedges with properties dprops.

source
MINDFul.deploy! โ€” Method

"

deploy!(
    ibnc::IBN,
    ibns::IBN,
    idagn::IntentDAGNode,
    itra::IntentTransition,
    strategy::MINDFul.IBNModus,
    algmethod;
    time,
    algargs...
)

The IBN customer ibnc accesses the intent state machine of IBN server ibns and commands the IntentTransition itra for the intent DAG node idagn following the state-machine strategy IBNModus and the transition methodology algmethod.

source
MINDFul.descendants โ€” Method
descendants(
    dag::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64},
    idn::IntentDAGNode;
    exclusive
) -> Vector{IntentDAGNode}

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

source
MINDFul.getdistance โ€” Method
getdistance(
    fv::FiberView
) -> Unitful.Quantity{Float64, ๐‹, Unitful.FreeUnits{(km,), ๐‹, nothing}}

Get length of the fiber fv

source
MINDFul.getintentidxsfromissuer โ€” Method
getintentidxsfromissuer(
    ibn::IBN,
    ibnid::Int64,
    dagid::Int64
)

Get all intent indices from ibn to which the issuer is the IBN with id ibnid and delegated intent dagid.

source
MINDFul.getnode โ€” Method
getnode(i::MINDFul.NodeRouterPortIntent) -> Any

Get all intents from the intent DAG dag

source
MINDFul.getremoteintentsid โ€” Method
getremoteintentsid(
    ibn::IBN,
    idn::IntentDAGNode
) -> Vector{Tuple{Int64, Base.UUID}}

Get all RemoteIntents of dag of ibn

source
MINDFul.globalnode โ€” Method
globalnode(ibn::IBN, node::Int64) -> Tuple{Int64, Int64}

Return the global indexing of the node Tuple{Int,Int}, i.e., (IBN_ID, NODE_ID)

source
MINDFul.issatisfied โ€” Method
issatisfied(
    ibn::IBN,
    idagn::IntentDAGNode{I<:Intent};
    exactly
) -> Bool

Check if intent of ibn,idagn is satisfied. It checks whether the implementation of the intent makes sense and if all constraints are satisfied. Internally it retrieves all low-level intents, assembles them, and decides whether or not they satisfy the intent.

This function assumes global knowledge to reach a verdict. For this reason it is clearly a function used for simulation purposes.

source
MINDFul.issatisfied โ€” Method
issatisfied(
    globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
    vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
    cc::CapacityConstraint
) -> Bool

Check whether the gloval low-level intents globalIBNnllis and their logical states vcs satisfy the capacity constraints cc. Low Level Intents are assumed to be installed now.

source
MINDFul.issatisfied โ€” Method
issatisfied(
    globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
    vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
    cc::DelayConstraint
) -> Bool

Check whether the gloval low-level intents globalIBNnllis and their logical states vcs satisfy the constraints cc. Low Level Intents are assumed to be installed now.

source
MINDFul.issatisfied โ€” Method
issatisfied(
    globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
    vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
    cc::GoThroughConstraint
) -> Bool
source
MINDFul.issatisfied โ€” Method
issatisfied(
    globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
    vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
    cc::MINDFul.BorderInitiateConstraint
) -> Bool
source
MINDFul.issatisfied โ€” Method
issatisfied(
    globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
    vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
    cc::MINDFul.ReverseConstraint
) -> Bool
source
MINDFul.issatisfied โ€” Method
issatisfied(
    ibn::IBN,
    nri::IntentDAGNode{R<:MINDFul.NodeRouterPortIntent}
) -> Bool

Check if the NodeRouterIntent nri of is satisfied in ibn.

source
MINDFul.issatisfied โ€” Method
issatisfied(
    ibn::IBN,
    nsi::IntentDAGNode{R<:MINDFul.NodeSpectrumIntent}
) -> Bool

Check if the NodeSpectrumIntent nsi is satisfied in ibn.

source
MINDFul.issatisfied โ€” Method
issatisfied(
    ibn::IBN,
    nri::IntentDAGNode{R<:MINDFul.NodeTransmoduleIntent}
) -> Bool

Check if the NodeRouterIntent nri of is satisfied in ibn.

source
MINDFul.nestedGraph2IBNs! โ€” Method
nestedGraph2IBNs!(
    globalnet::NestedGraphs.NestedGraph
) -> Vector{IBN{SDNdummy{Int64}}}

Convert globalnet to a NestedGraph using IBN framework instances and SDN controllers.

source
MINDFul.remintent! โ€” Method
remintent!(ibn::IBN, uuid::Base.UUID) -> Bool

Remove intent with id idi from ibn. Returns true if successful.

source
MINDFul.remintent! โ€” Method
remintent!(
    ibnc::MINDFul.IBNIssuer,
    ibns::IBN,
    uuid::Base.UUID
) -> Bool

The IBN client ibnc asks to remove intent with id intentid to provider ibnp

source
MINDFul.set_operation_status! โ€” Method
set_operation_status!(
    ibn::IBN,
    device::FiberView,
    status::Bool;
    time,
    forcelog
)

Set fiber device of ibn at status status in time time. Use forcelog to force or not a logging.

source
MINDFul.simgraph โ€” Method
simgraph(
    ng::NestedGraphs.NestedGraph;
    router_lcpool,
    router_lccpool,
    router_lcccap,
    transponderset,
    distance_method
)

Builds a nested graph from ng able to simulate.

source
MINDFul.simgraph โ€” Method
simgraph(
    mgr::MetaGraphs.MetaDiGraph;
    router_lcpool,
    router_lccpool,
    router_lcccap,
    transponderset,
    distance_method
)

Builds a graph from mgr able to simulate. Pass in mgr having:

  • :routerports as integer in every node
  • :xcoord as integer in every node
  • :ycoord as integer in every node
  • :oxc as boolean in every node
  • :fiberslots as int in every link

Get as an output a MetaGraph having:

  • :xcoord as integer in every node
  • :ycoord as integer in every node
  • :router as RouterView in every node
  • :link as FiberView in every edge
source
MINDFul.ConnectivityIntent โ€” Type
struct ConnectivityIntent{C, R} <: Intent
  • src::Tuple{Int64, Int64}: Source node as (IBN.id, node-id)

  • dst::Tuple{Int64, Int64}: Destination node as (IBN.id, node-id)

  • rate::Float64: Rate in Gbps

  • constraints::Any: Intents constraints

  • conditions::Any: Intents conditions

Intent for connecting 2 nodes

source
MINDFul.IBN โ€” Type
struct IBN{T<:SDN}
  • id::Int64: id of IBN

  • intents::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64}: The intent collection of the IBN Framework

  • controllers::Array{Union{IBN, T}, 1} where T<:SDN: The collection of SDNs controlled from this IBN Framework and interacting IBNs (future should be IBN-NBIs)

  • ngr::NestedGraphs.NestedMetaGraph{Int64, MetaGraphs.MetaDiGraph{Int64, Float64}, MetaGraphs.MetaDiGraph{Int64, Float64}}: Nested Graph consisting of the several SDNs ngr is a shallow copy of the sdn graphs, meaning all PHY information is available in the IBN

  • interprops::Dict{Int64, MINDFul.IBNInterProps}: InterIBN interoperability with key being the IBN id

The Intent Framework The intent id is the vector index controllers must have same length with ngr.grv

source
MINDFul.IntentDAGNode โ€” Type
mutable struct IntentDAGNode{T<:Intent, I<:MINDFul.IntentIssuer, L<:MINDFul.LogState}
  • intent::Intent

  • state::IntentState

  • id::Base.UUID

  • issuer::MINDFul.IntentIssuer

  • logstate::MINDFul.LogState

source
MINDFul.LightpathIntent โ€” Type
struct LightpathIntent{T, C} <: Intent
  • path::Vector{Int64}: Flow path

  • rate::Float64: Rate in Gbps

  • transmodl::Any

  • constraints::Any

source
MINDFul.SDNdummy โ€” Type

A dummy SDN controller to use for research and experiment purposes. This SDN controller is directly connected with the simulated physical layer network resources SimNetResou.jl

  • gr::MetaGraphs.MetaDiGraph{T} where T: network of SDN

  • interprops::Dict{NestedGraphs.NestedEdge, Dict{Symbol, Any}}: inter domain equipment(e.g. links)

source

Index