...
- Below is the list of solvers used in OOF and its usage. The Route Optimiser Optimizer package will be used for the MDONS use case as well.
- Policy is not going to be involved to list the constraints for now.
- Once config policies are defined for MDONS use case , OOF wil will fetch these policies to get certain other constraints and apply them while running the algorithm.
...
- If two links between two controllers have the same specification then minizinc automatically chooses one. The implementation for Guilin release is based out of this logic.
Existing Solvers and Usage
Solver | Usage |
---|---|
License Optimizer | VNF license optimization |
PCI Optimizer | Pci optimization |
Placement Optimizer | VNF placement optimization |
Slice Optimizer | Slice selection and instantiation optimization |
Route Optimizer | Perform the route calculations and return the vpn-bindings for CCVPN use case |
Jira Legacy server System Jira columns key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key OPTFRA-
server | System Jira |
---|---|
columns | key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution |
serverId | 4733707d-2057-3a0f-ae5e-4fd8aff50176 |
key | OPTFRA- |
...
Existing Solvers and Usage
...
Perform the route calculations and return the vpn-bindings
...
753
753 |
Jira Legacy server System Jira columns key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution serverId 4733707d-2057-3a0f-ae5e-4fd8aff50176 key OPTFRA-820
Sequence Diagram
Request from SO or SDNC
Code Block | ||||
---|---|---|---|---|
| ||||
API: POST /api/oof/mdons/route/v1 BODY: { "requestInfo":{ "transactionId":"xxx-xxx-xxxxxxx", "requestId":"yyy-yyy-yyyyyyy", "callbackUrl":"", "callbackHeader": "", "sourceId":"SDNC", "requestType":"create", "numSolutions":1, "optimizers":[ "route" ], "timeout":600 }, "routeInfo":{ "routeRequest":{ "srcDetails":{ "interfaceId":"interface-id-1int19", "nodeId":"node-1pnf1", "controllerId":"Virtuora-TAPI1Controller1" }, "dstDetails":{ "interfaceId":"interface-id-2int20", "nodeId":"node-2pnf4", "controllerId":"Virtuora-TAPI2Controller3" }, "serviceRate":"ODU2" } } } |
Note: "Callbackurl" field will be empty . Has been added to just follow the request format standard in OOF. When SDNC sends this request the field will be empty.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"transactionId":"123456",
"requestId":"789101",
"requestStatus":"completed",
"statusMessage":"success",
"solution":{
"startTime":"2016-10-01T00:30+01:00",
"finishTime":"2016-10-01T00:40+01.00",
"routeInfo":[
{
"serviceRoute":[
{
"srcInterfaceId":"id20",
"destInterfaceId":"id8"
},
{
"srcInterfaceId":"id9",
"destInterfaceId":"id10"
},
{
"srcInterfaceId":"id11",
"destInterfaceId":"id21"
}
],
"linkList":[
"IDL-6",
"IDL-7"
]
}
]
}
}
|
State Diagram
OOF Impacts
- A new api should be defined in the osdfapp.py class in the optf-osdf repository for the MDONS route selection.
- Under the Route Optimizer section a new class has to be added to handle the MDONS route selection.
- The standard minizinc template which gives the shortest path in a graph data structure will be used for this use case, same as the CCVPN use case.
Algorithm Details
- Identify if the A and Z are from the same domain controller, if yes, linkName is set to null.
- If not from the same domain, retrieve all the inter domain links across both the controllers from AAI.
- The links will have information such as admin-state and rate. (Note: For now we are considering only these two fields to select the appropriate inter-domain-link).
- Based on the bandwidth required and available bandwidth and the status of the links (of the end points, NNIs), the appropriate link is chosen.
- The link name along with the names of NNI 1 and NN2 are sent to SDNC and SDNC/DG send the details request for service-creation to the domain controller(s).
Example Inter Domain Paths
Non Multiplexing Between the Domains
...
{
"requestId":"xxx-xxx-xxx,
"transactionId":"yyy-yyy-yyy",
"statusMessage":"SUCCESS",
"requestStatus":"accepted",
"solutions":{
"routeInfo":{
"serviceRoute":[
{
"srcInterfaceId":"int19",
"dstInterfaceId":"int1",
"controllerId":"Controller1"
},
{
"srcInterfaceId":"int3",
"dstInterfaceId":"int4",
"controllerId":"Controller2"
},
{
"srcInterfaceId":"int5",
"dstInterfaceId":"int20",
"controllerId":"Controller3"
}
],
"linkList":[
"link1",
"link2"
]
}
}
}
|
State Diagram
OOF Impacts
- A new api should be defined in the osdfapp.py class in the optf-osdf repository for the MDONS route selection.
- Under the Route Optimizer section a new class has to be added to handle the MDONS route selection.
- The standard minizinc template which gives the shortest path in a graph data structure will be used for this use case, same as the CCVPN use case.
Algorithm Details
- Identify if the A and Z are from the same domain controller, if yes, linkName is set to null.
- If not from the same domain, retrieve all the inter domain links across both the controllers from AAI.
- The links will have information such as admin-state and rate. (Note: For now we are considering only these two fields to select the appropriate inter-domain-link).
- Based on the bandwidth required and available bandwidth and the status of the links (of the end points, NNIs), the appropriate link is chosen.
- The link name along with the names of NNI 1 and NN2 are sent to SDNC and SDNC/DG send the details request for service-creation to the domain controller(s).
Minizinc Template
Here is the Minizinc Module used in IDL Path Optimizer.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
% Number of nodes
int: N;
% Start node
1..N: Start;
% End node
1..N: End;
% Number of edges (directed arcs)
int: M;
% The actual edges
set of int: Edges = 1..M;
% Edge lengths
array[Edges] of int: L;
% Edge start node
array[Edges] of 1..N: Edge_Start;
array[Edges] of 1..N: Edge_End;
% Variable indicating if edge is used
array[Edges] of var 0..1: x;
constraint
forall( i in 1..N ) (
if i = Start then
% outgoing flow
sum(e in Edges where Edge_Start[e] = i)(x[e]) -
% incoming flow
sum(e in Edges where Edge_End[e] = i)(x[e])
= 1
elseif i = End then
sum(e in Edges where Edge_Start[e] = i)(x[e]) -
sum(e in Edges where Edge_End[e] = i)(x[e])
= -1
else
sum(e in Edges where Edge_Start[e] = i)(x[e]) -
sum(e in Edges where Edge_End[e] = i)(x[e])
= 0
endif
);
solve minimize sum(e in Edges)( L[e] * x[e] );
output ["Length: ", show(sum(e in Edges)(L[e] * x[e])), "\n"] ++
["Start : ", show(Start), "\n"] ++
["End : ", show(End), "\n\n"] ++
["Edges in shortest path:\n"] ++
[ if fix(x[e]) = 1
then show(Edge_Start[e]) ++ " -> " ++ show(Edge_End[e]) ++ "\n"
else ""
endif | e in Edges
];
|
Example Inter Domain Paths
Non Multiplexing Between the Domains
- Route optimizer receives the service route request from SDNC with the source and destination interface ids.
- The controllers of both the points are found using the AAI queries.
- Then optimizer queries AAI to fetch all the possible Controllers in the inventory to send it to minizinc. It fetches all the inter-domain links from the inventory and filters it based on the "rate" mentioned in the request and the operational status "up".
- Since minizinc expects the data in a certain way, optimizer wil encode all the data retrieved using the sckit module in python and send it to minizinc.
- The pymzn module is used to interface python with the minizinc language.
- Once minizinc chooses the optimized path, the optimizer will again decode the data and find the chosen links from the source to the destination.
- The optimizer then would fetch the interface details from the link and form a proper service route list that would be sent back to SDNC along with the list of logical links.
- SDNC in turn will fetch the end points from the service routes list object from the response and create as many domain services as present in the service route list.
- The logical links in the response will be used to form the relationship with the access service which will be done by SDNC.
- For the above example if a route has to be found between the "id20" of Controller1 "id21" of Controller5 following request will be sent to OOF by SDNC defined above.
- After running the algorithm OOF wil return the following response defined above.
Multiplexing Between the Domains
...