Skip to content

Commit fad2700

Browse files
committed
update docs
1 parent 8f876f6 commit fad2700

5 files changed

Lines changed: 113 additions & 70 deletions

File tree

docs/make.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ makedocs(
5858
modules = [MINDFul],
5959
pages = [
6060
"Introduction" => "index.md",
61+
"Architecture" => "architecture.md",
6162
"Developing" => "dev.md",
62-
"ROADMap" => "roadmap.md",
6363
"API" => "API.md",
6464
"Distributed Operation" => [
6565
"HTTP-API" => "HTTP.md",

docs/src/architecture.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Architecture and Concepts
2+
3+
MINDFul.jl models IP-optical routing, modulation, and spectrum assignment (RMSA) operations where high-level connectivity intents are recursively compiled into lower-level intents down to router and OXC configurations.
4+
5+
## IBN-over-SDN
6+
7+
When designing a multi-domain IBN system, MINDFul.jl embraces the **IBN-over-SDN** architecture. This approach decouples intent handling from the underlying SDN paradigm. The intent handling is separated into its own dedicated framework, operating independently and utilizing the underlying SDN controller strictly as a device driver for physical deployment. This separation of concerns fosters modularity and allows each layer to evolve independently.
8+
9+
## IP-Optical Layer Model
10+
11+
The architecture modeled by MINDFul.jl holds on to the pure IP-optical architecture signified by two layers:
12+
- **Electrical Layer:** Composed of IP routers and virtual links.
13+
- **Optical Layer:** Composed of Optical Cross Connects (OXCs) and physical fiber links.
14+
15+
Currently, the library focuses on 3 primary devices:
16+
- The network node as a whole
17+
- The IP router
18+
- The optical cross connect (OXC)
19+
20+
## Intent DAGs and Delegation
21+
22+
MINDFul.jl uses **intent DAGs** (Directed Acyclic Graphs) to represent relationships between different intents. This hierarchical structure connects higher-level intents, which have a logical objective (e.g., establishing a connectivity service), with low-level intents (LLIs), which are responsible for resource allocation and hardware configurations on the specific devices.
23+
24+
If an intent spans multiple domains, it is split at border nodes, and the external portion is securely **delegated** to the adjacent domain without exposing internal topological details. This structure enables seamless interoperability between domains.
25+
26+
## Intent States and Operations
27+
28+
Intents are highly dynamic and transition through several states during their lifecycle. MINDFul.jl commonly identifies four core intent states:
29+
- `uncompiled`: Unprocessed intents inside the system.
30+
- `compiled`: Processed intents with a well-defined implementation derived.
31+
- `installed`: Active intents whose implementation has been realized in the appropriate network devices.
32+
- `failed`: Active intents that malfunction after some failure during operation.
33+
34+
To enable state transitions, several operations and algorithms are modeled:
35+
- **Intent Compilation:** Deriving an intent implementation and transitioning an intent to the `compiled` state.
36+
- **Intent Monitoring:** Ensuring that the installed intents satisfy all the requirements and triggering fallbacks in case of failure.
37+
- **Intent Conflict Resolution:** Handling situations when several intents require the same resources.
38+
39+
## References
40+
41+
- [F. Christou, "Decentralized Intent-driven Coordination of Multi-Domain IP-Optical Networks," 2022 18th International Conference on Network and Service Management (CNSM), Thessaloniki, Greece, 2022, pp. 359-363, doi: 10.23919/CNSM55787.2022.9964606](https://ieeexplore.ieee.org/document/9964606/)
42+
- [F. Christou and A. Kirstaedter, "Grooming Connectivity Intents in IP-Optical Networks Using Directed Acyclic Graphs," Photonic Networks; 24th ITG-Symposium, Berlin, 2023, pp. 1-4.](https://ieeexplore.ieee.org/document/10173072)
43+
- [F. Christou and A. Kirstädter, "Using Intent Directed Acyclic Graphs in Multi-Domain IP-Optical Networks," 2023 33rd International Telecommunication Networks and Applications Conference, Melbourne, Australia, 2023, pp. 176-179, doi: 10.1109/ITNAC59571.2023.10368533](https://ieeexplore.ieee.org/document/10368533)

docs/src/dev.md

Lines changed: 60 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,50 @@
1-
# Notes for developes and contributors
2-
3-
## Mental classification of functions per functionality
4-
(must clarify these notes)
5-
To expand upon:
6-
allocate - deallocate
7-
reserve - unreserve
8-
function getters
9-
get... -> get field
10-
new... -> construct something new
11-
prioritize -> return a vector of indices
12-
choose -> return a specific (scalar) index
13-
comp -> compilation
14-
15-
16-
## How to read variables
17-
transmission -> trans\
18-
module -> mdl\
19-
mode -> mode\
20-
index -> idx\
21-
uuid -> id\
22-
ibn framework -> ibnf\
23-
24-
## Create a new availability-aware IP-Optical Algorithm
25-
Look at `src/IBNLayer/ibn_bestempiricalavailabilitymatch.jl` where the algorithm `BestEmpiricalAvailabilityCompilation` is defined.
26-
More specifically, assume your new algorithm is a struct `MyNewAlgorithm`.
27-
We suggest you make it a subtype of `<: IntentCompilationAlgorithmWithMemory` and contain the following fields in your struct:
1+
# Developer Guide
2+
3+
Welcome to the MINDFul.jl developer documentation. This section covers common conventions, how to extend MINDFul.jl algorithms, and how to run tests.
4+
5+
## Variable Naming Conventions
6+
7+
To keep the codebase consistent and readable, MINDFul.jl uses the following abbreviations for common variables:
8+
9+
| Abbreviation | Meaning |
10+
| :--- | :--- |
11+
| `trans` | transmission |
12+
| `mdl` | module |
13+
| `mode` | mode |
14+
| `idx` | index |
15+
| `id` | uuid |
16+
| `ibnf` | IBN framework |
17+
18+
## Creating a new Availability-Aware IP-Optical Algorithm
19+
20+
MINDFul.jl is designed to be easily extensible. You can define your own intent compilation algorithms. As an example, look at `src/IBNLayer/ibn_bestempiricalavailabilitymatch.jl` where the algorithm `BestEmpiricalAvailabilityCompilation` is defined.
21+
22+
To create a new algorithm `MyNewAlgorithm`, we recommend making it a subtype of `<: IntentCompilationAlgorithmWithMemory` and including the following fields:
23+
2824
```julia
25+
struct MyNewAlgorithm <: IntentCompilationAlgorithmWithMemory
2926
"How many k paths to check"
3027
candidatepathsnum::Int
31-
"""
32-
How many m paths to consider for joint protection.
33-
It investigates all possible pair of the first m paths
34-
"""
28+
"How many m paths to consider for joint protection."
3529
pathsforprotectionnum::Int
36-
"cached information"
30+
"Cached information"
3731
cachedresults::CachedResults
3832
"The algorithm memory that is updated"
3933
basicalgmem::BasicAlgorithmMemory
34+
end
35+
```
36+
37+
### 1. Define an IBNFramework alias
38+
39+
Define a constant for your new framework configuration:
40+
```julia
41+
const IBNFrameworkMNA = IBNFramework{A,B,C,D,MyNewAlgorithm} where {A,B,C,D}
4042
```
4143

42-
1. Define a `const IBNFrameworkMNA = IBNFramework{A,B,C,D,MyNewAlgorithm} where {A,B,C,D}` to use it later
44+
### 2. Define Constructors
45+
46+
Provide convenient constructors to initialize your algorithm's memory and cache:
4347

44-
2. Define 3 cosntructors
4548
```julia
4649
function MyNewAlgorithm(ibnag::IBNAttributeGraph, candidatepathsnum::Int, pathforprotectionnum::Int)
4750
cachedresults = CachedResults(ibnag, candidatepathsnum)
@@ -57,25 +60,37 @@ function MyNewAlgorithm(mna::MyNewAlgorithm, cachedresults::CachedResults)
5760
end
5861
```
5962

60-
3. Define a `compileintent!` for your new type `@recvtime function compileintent!(ibnf::IBNFrameworkMNA, idagnode::IntentDAGNode{<:ConnectivityIntent}; verbose::Bool = false)`
61-
Inside your function you can use [`MINDFul.intradomaincompilationtemplate`](@ref) and [`MINDFul.compileintenttemplate!](@ref) for easier development.
62-
Read the docs of the two functions for a better understanding. Now that's all.
63-
For multi-domain availability research the most important configurations you might want to add are `prioritizepaths` from `intradomaincompilationtemplate` and `prioritizesplitbordernodes` from `compileintenttemplate!`.
64-
The first one determines the internal domain paths and the second the split border nodes between the domains.
63+
### 3. Define the Compilation Function
64+
65+
Define the `compileintent!` function for your new algorithm type. You can use the provided templates `intradomaincompilationtemplate` and `compileintenttemplate!` to jumpstart your development.
66+
67+
```julia
68+
@recvtime function compileintent!(ibnf::IBNFrameworkMNA, idagnode::IntentDAGNode{<:ConnectivityIntent}; verbose::Bool = false)
69+
# Your compilation logic here using intradomaincompilationtemplate and compileintenttemplate!
70+
end
71+
```
72+
73+
For multi-domain availability research, the most important configurations to hook into are:
74+
- `prioritizepaths` (from `intradomaincompilationtemplate`): Determines the internal domain paths.
75+
- `prioritizesplitbordernodes` (from `compileintenttemplate!`): Determines the split border nodes between domains.
76+
77+
## Event-Based Simulations and Visualizations
6578

66-
## Further APIs
79+
MINDFul.jl provides a hackable interface designed to conduct event-based simulations under diverse scenarios. You can interact with the API to change intent states and monitor network resources over time.
80+
81+
Additionally, the companion package `MINDFulMakie.jl` can be used to visualize your simulations, draw intent DAGs, or render a compiled connectivity intent across the network topology.
6782

6883
## Testing
6984

70-
Usefull testing functions are in the `TestModule` weak dependency.
71-
To access them you first need to load `Test` and `JET` and then use `Base.get_extention`.
85+
Useful testing functions are located in the `TestModule` weak dependency. To access them, first load `Test` and `JET`, and then use `Base.get_extension`.
86+
7287
```julia
73-
# get the test module from MINDFul
7488
import Test, JET
7589
TestModule = Base.get_extension(MINDFul, :TestModule)
76-
@test !isnothing(TM)
90+
@test !isnothing(TestModule)
7791
```
78-
Now, with dot notation (`TestModule.`) you can access all the following functions.
92+
93+
Now, you can access testing utilities with dot notation (`TestModule.`).
7994

8095
### Testing API
8196

docs/src/index.md

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
Welcome to `MINDFul.jl` documentation
1+
# Welcome to MINDFul.jl
22

3+
MINDFul.jl is an open-source Julia library designed to facilitate research on multi-domain Intent-Based Networking (IBN), specifically focusing on pure IP-optical networks. It fills a noticeable gap in currently available tools by providing a stateful, modular representation of common IP-optical network equipment as well as common intent operations.
34

4-
MINDFul.jl is an open source tool for studying IP-optical intent-based networking.
5+
Network coordination across multiple domains is a complex task requiring seamless communication between network entities. While Software-Defined Networking (SDN) allows for efficient centralized control within domains, multi-domain networking often remains decentralized. MINDFul.jl tackles this by utilizing an intent-driven approach, which offers higher flexibility of interactions and support for much wider network capabilities than traditional protocols like BGP.
56

6-
Intents are compiled down to further lower level intets forming an Directed Acyclic Graph (DAG).
7-
The leafs of the DAG are called "low level intents" and are basically hardware configurations for the devices.
7+
## Key Features
88

9-
There are currently 3 devices to consider:
10-
- the node as a whole
11-
- the router
12-
- the optical cross connect (OXC)
9+
- **IBN-over-SDN Architecture:** Separates intent handling into its own dedicated framework, utilizing the underlying SDN controller strictly as a device driver for physical deployment.
10+
- **Intent DAGs & Delegation:** Uses Directed Acyclic Graphs (DAGs) to represent relationships between different intents, linking logical objectives to low-level resource allocations. If an intent spans multiple domains, it can be securely delegated to adjacent domains.
11+
- **Event-Based Simulations:** Provides a hackable interface designed to accelerate algorithmic research and conduct (event-based) simulations under diverse scenarios.
12+
- **Visualizations:** The companion package `MINDFulMakie.jl` offers out-of-the-box visualizations for intent DAGs and network topologies.
1313

14-
For each of those devices a LLI is corresponding
15-
16-
MINDFul.jl was rewritten. Better docs soon.
14+
MINDFul.jl provides the foundation to develop experimental intent system architectures and customized algorithms to advance the adaptation of IBN in modern multi-domain networks.

docs/src/roadmap.md

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)