API
MINDFul.addchild!
โ Methodaddchild!(
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
.
MINDFul.addchild!
โ Methodaddchild!(
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.
MINDFul.addintent!
โ Methodaddintent!(ibn::IBN, intent::Intent) -> Base.UUID
Add intent
to ibn
as Network Operator. Returns the intent id.
MINDFul.addintent!
โ Methodaddintent!(
ibnissuer::MINDFul.IBNIssuer,
ibnp::IBN,
intent::Intent
) -> Base.UUID
The IBN client ibnc
asks to add intent intent
to provider ibnp
MINDFul.anyreservations
โ Methodanyreservations(ibn) -> Bool
Checks if ibn
has reserved something due to an intent or not
MINDFul.bordernodes
โ Methodbordernodes(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
.
MINDFul.connectIBNs!
โ MethodconnectIBNs!(
ibn::Vector{IBN},
cedges::Vector{NestedGraphs.NestedEdge}
)
Connect the ibn domains ibn
using the global indexed Edges cedges
.
MINDFul.connectIBNs!
โ MethodconnectIBNs!(
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
.
MINDFul.deploy!
โ MethodAssume intent is root of DAG
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
.
MINDFul.deploy!
โ MethodNo algmethod
provided
MINDFul.deploy!
โ MethodAssume intent comes from Network Operator
MINDFul.descendants
โ Methoddescendants(
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
MINDFul.edgeify
โ MethodConverts a node path to a sequence of edges
MINDFul.getdistance
โ Methodgetdistance(
fv::FiberView
) -> Unitful.Quantity{Float64, ๐, Unitful.FreeUnits{(km,), ๐, nothing}}
Get length of the fiber fv
MINDFul.getdistance
โ Methodgetdistance(ibn::IBN, path) -> Any
Get total distance of path
in ibn
MINDFul.getintent
โ Methodgetintent(ibn::IBN, uuid::Base.UUID) -> Intent
MINDFul.getintentidxsfromissuer
โ Methodgetintentidxsfromissuer(
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
.
MINDFul.getintentidxsfromissuer
โ Methodgetintentidxsfromissuer(ibn::IBN, ibnid::Int64)
Get all intent indices from ibn
to which the issuer is the IBN with id ibnid
.
MINDFul.getintentissuer
โ Methodgetintentissuer(ibn::IBN, uuid::Int64)
Get the issuer of the intent with id intid
in ibn
MINDFul.getintentnode
โ Methodgetintentnode(ibn::IBN, uuid::Base.UUID) -> IntentDAGNode
MINDFul.getnode
โ Methodgetnode(i::MINDFul.NodeRouterPortIntent) -> Any
Get all intents from the intent DAG dag
MINDFul.getremoteintentsid
โ Methodgetremoteintentsid(
ibn::IBN,
idn::IntentDAGNode
) -> Vector{Tuple{Int64, Base.UUID}}
Get all RemoteIntent
s of dag
of ibn
MINDFul.globalnode
โ Methodglobalnode(ibn::IBN, node::Int64) -> Tuple{Int64, Int64}
Return the global indexing of the node Tuple{Int,Int}, i.e., (IBN_ID, NODE_ID)
MINDFul.issatisfied
โ Methodonlylogic is WIP
MINDFul.issatisfied
โ Methodissatisfied(
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.
MINDFul.issatisfied
โ Methodissatisfied(
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.
MINDFul.issatisfied
โ Methodissatisfied(
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.
MINDFul.issatisfied
โ Methodissatisfied(
globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
cc::GoThroughConstraint
) -> Bool
MINDFul.issatisfied
โ Methodissatisfied(
globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
cc::MINDFul.BorderInitiateConstraint
) -> Bool
MINDFul.issatisfied
โ Methodissatisfied(
globalIBNnllis::Vector{MINDFul.IBNnIntentGLLI},
vcs::Array{K<:Union{Missing, MINDFul.ConnectionState}, 1},
cc::MINDFul.ReverseConstraint
) -> Bool
MINDFul.issatisfied
โ Methodissatisfied(
ibn::IBN,
nri::IntentDAGNode{R<:MINDFul.NodeRouterPortIntent}
) -> Bool
Check if the NodeRouterIntent
nri
of is satisfied in ibn
.
MINDFul.issatisfied
โ Methodissatisfied(
ibn::IBN,
nsi::IntentDAGNode{R<:MINDFul.NodeSpectrumIntent}
) -> Bool
Check if the NodeSpectrumIntent
nsi
is satisfied in ibn
.
MINDFul.issatisfied
โ Methodissatisfied(
ibn::IBN,
nri::IntentDAGNode{R<:MINDFul.NodeTransmoduleIntent}
) -> Bool
Check if the NodeRouterIntent
nri
of is satisfied in ibn
.
MINDFul.nestedGraph2IBNs!
โ MethodnestedGraph2IBNs!(
globalnet::NestedGraphs.NestedGraph
) -> Vector{IBN{SDNdummy{Int64}}}
Convert globalnet
to a NestedGraph
using IBN
framework instances and SDN
controllers.
MINDFul.remintent!
โ Methodremintent!(ibn::IBN, uuid::Base.UUID) -> Bool
Remove intent with id idi
from ibn
. Returns true
if successful.
MINDFul.remintent!
โ Methodremintent!(
ibnc::MINDFul.IBNIssuer,
ibns::IBN,
uuid::Base.UUID
) -> Bool
The IBN client ibnc
asks to remove intent with id intentid
to provider ibnp
MINDFul.set_operation_status!
โ Methodset_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.
MINDFul.simgraph
โ Methodsimgraph(
ng::NestedGraphs.NestedGraph;
router_lcpool,
router_lccpool,
router_lcccap,
transponderset,
distance_method
)
Builds a nested graph from ng
able to simulate.
MINDFul.simgraph
โ Methodsimgraph(
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
asRouterView
in every node:link
asFiberView
in every edge
MINDFul.ConnectivityIntent
โ Typestruct 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 Gbpsconstraints::Any
: Intents constraintsconditions::Any
: Intents conditions
Intent for connecting 2 nodes
MINDFul.IBN
โ Typestruct IBN{T<:SDN}
id::Int64
: id of IBNintents::MetaGraphsNext.MetaGraph{Int64, Graphs.SimpleGraphs.SimpleDiGraph{Int64}, Base.UUID, IntentDAGNode, Nothing, MINDFul.IntentDAGInfo, MetaGraphsNext.var"#11#13", Float64}
: The intent collection of the IBN Frameworkcontrollers::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
MINDFul.IBN
โ MethodEmpty constructor
MINDFul.IntentDAGNode
โ Typemutable struct IntentDAGNode{T<:Intent, I<:MINDFul.IntentIssuer, L<:MINDFul.LogState}
intent::Intent
state::IntentState
id::Base.UUID
issuer::MINDFul.IntentIssuer
logstate::MINDFul.LogState
MINDFul.LightpathIntent
โ Typestruct LightpathIntent{T, C} <: Intent
path::Vector{Int64}
: Flow pathrate::Float64
: Rate in Gbpstransmodl::Any
constraints::Any
MINDFul.SDNdummy
โ TypeA 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 SDNinterprops::Dict{NestedGraphs.NestedEdge, Dict{Symbol, Any}}
: inter domain equipment(e.g. links)
Index
MINDFul.ConnectivityIntent
MINDFul.IBN
MINDFul.IBN
MINDFul.IntentDAGNode
MINDFul.LightpathIntent
MINDFul.SDNdummy
MINDFul.addchild!
MINDFul.addchild!
MINDFul.addintent!
MINDFul.addintent!
MINDFul.anyreservations
MINDFul.bordernodes
MINDFul.connectIBNs!
MINDFul.connectIBNs!
MINDFul.deploy!
MINDFul.deploy!
MINDFul.deploy!
MINDFul.deploy!
MINDFul.descendants
MINDFul.edgeify
MINDFul.getdistance
MINDFul.getdistance
MINDFul.getintent
MINDFul.getintentidxsfromissuer
MINDFul.getintentidxsfromissuer
MINDFul.getintentissuer
MINDFul.getintentnode
MINDFul.getnode
MINDFul.getremoteintentsid
MINDFul.globalnode
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.issatisfied
MINDFul.nestedGraph2IBNs!
MINDFul.remintent!
MINDFul.remintent!
MINDFul.set_operation_status!
MINDFul.simgraph
MINDFul.simgraph