Table of Contents |
OOF/PCI Create/Update API
Interface Defintion | Description |
---|---|
URI | https://{host}:{port}/api/oof/v1/route |
Operation Type | POST |
Content-Type | application/json |
Request Header
Header Name | Required? | Description |
---|---|---|
Accept | N | Determines the format of the body of the response. Valid value is “application/json” |
Authorization | Y | Supplies Basic Authentication credentials for the request. If the Authorization header is missing, then an HTTP 400 Invalid Request response is returned. If the string supplied is invalid, then an HTTP 401 Unauthorized response is returned. |
Content-Type | Y | Determines the format of the request content. Only application/json is supported. |
Content-Length | N | Number of bytes in the body of the request. Note that content length is limited to 1 MB. |
Request Body
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
requestInfo | Y | 1 | RequestInfo Object | The content of the RequestInfo object. | |
routeInfo | Y | 1 | RouteInfo | The content of Router request object |
RequestInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
transactionId | Y | 1 | UUID/String | A unique ID to track an ONAP transaction. | |
requestId | Y | 1 | UUID/String | A unique ID to track multiple requests associated with a transaction. | |
callbackUrl | Y | 1 | URL | The end point of a callback service where recommendations are posted. | |
callbackHeader | N | 1 | JSON blob | The header information a client expecting in a async callback. | |
sourceId | Y | 1 | String | The unique ID of a client making an optimization call. | |
requestType | Y | 1 | String | create, update, delete | The type of a request |
numSolutions | N | 1 | Integer | Expected number of solutions. numSolution can also be specified using an optimization query policies, where the default configured value is 1. The value from a request gets higher precedence over the value defined in a policy. | |
optimizers | Y | 1..N | List of Strings | placement | A list of optimization services. |
timeout | N | 1 | Integer | A tolerance window (in secs) for expecting solutions. Default is 600 secs. |
RouteInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
routeRequest | Y | 1 | RouteRequestInfo | The content of Router request object |
RouteRequestInfo Object
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
srcPort | Y | 1 | RoutePortInfo | Source port info | |
destPort | Y | 1 | RoutePortInfo | Destination Port info |
RoutePortInfo Object
Attribute | Required? | Cardinality | Content | Values | Description | Additional dependency Information |
---|---|---|---|---|---|---|
accessTopologyId | N | 1 | String | Access Topology Id | Any one of this attribute MUST be provided in both source and destination RoutePortInfo object. | |
accessClientId | N | 1 | String | Client Id | ||
accessProviderId | N | 1 | String | |||
accessNodeId | N | 1 | String | |||
accessLtpId | N | 1 | Integer |
Synchronous Response Body
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
requestId | Y | 1 | UUID/String | A unique Id for an ONAP transaction. | |
transactionId | Y | 1 | UUID/String | A unique ID to track multiple requests associated with a transaction. | |
statusMessage | N | 1 | String | Reasoning if a requestStatus is failure. | |
requestStatus | Y | 1 | String | accepted, failed | The status of a request. |
solutions | Y | 1..N | List of RouteSolutionInfo | Solutions related to a request. |
Route Solution Info
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
startTime | Y | 1 | Timestamp | ||
finishTime | Y | 1 | Timestamp | ||
VPNs | N | 0..N | List of VPNInfo | List of VPN's |
VPN Info
Attribute | Required? | Cardinality | Content | Values | Description |
---|---|---|---|---|---|
accessTopologyId | Y | 1 | String | Access Topology Id | |
accessClientId | Y | 1 | String | ||
accessProviderId | Y | 1 | String | ||
accessNodeId | Y | 1 | String | ||
srcAccessLtpId | Y | 1 | Integer | ||
dstAccessLtpId | Y | 1 | Integer |
HTTP Response Code
HTTP Code | Response Phrase | Description |
---|---|---|
201 | Created | An optimization solution is found. |
202 | Accepted | An optimization request is accepted. |
400 | Bad request | Bad request. |
401 | Unauthorized | Request body is not compliant with the API definition. |
404 | Not found | The server cannot find the requested URI. |
405 | Method not found | The requested method is not supported by a server. |
500 | Internal server error | The server encountered an internal server error or timed out. |
520 | Solver error | Requested number of solutions cannot be found. |
4 Comments
Avteet Chayal
To keep it align with the existing API (placement) for OSDF, I would suggest the following structure for the new routeRequest API as shown below:
{
"requestInfo": {
"transactionId": "xxx-xxx-xxxx",
"requestId": "yyy-yyy-yyyy",
"callbackUrl": "https://wiki.onap.org:5000/callbackUrl",
"sourceId": "",
"requestType": "create",
"numSolutions": 1,
"optimizers": [
"route"
],
"timeout": 600
},
"routeInfo": {
"routeRequests": [
{
"srcPort": {
"accessTopologyId": "Topo113",
"accessClientId": "clientU12",
"accessProviderId": "VDF1234",
"accessNodeId": "Node123",
"accessLtpId": "1345"
},
"dstPort": {
"accessTopologyId": "Topo3421",
"accessClientId": "clientD123",
"accessProviderId": "VDF3214",
"accessNodeId": "node323",
"accessLtpId": "3452"
}
}
]
}
}
Avteet Chayal
Keeping the existing APIs response structure, I would like to share the below suggestions to synchronous response:
1. requestStatus should be "completed" (since the final response is synchronous)
2. "startTime": and "finishTime" is not part of the existing response structure but could be added if necessary.
3. routeSolutions can be a separate block. It would enable extensibilty for the APIs in future.
4. List of list would help if there are multiple routeRequests and each can have multiple "routeSolutions".
{
"transactionId": "xxx-xxx-xxxx",
"requestId": "yyy-yyy-yyyy",
"requestStatus": "completed",
"statusMessage": "",
"solutions": {
"routeSolutions": [
[
{
"VPNs": [
{
"accessTopologyId": "Topo123",
"accessClientId": "client-123",
"accessProviderId": "provider-123",
"accessNodeId": "node-123",
"srcAccessLtpId": "ltp-src-123",
"dstAccessLtpId": "ltp-dst-123"
}
]
}
]
]
}
}
THIRILOSHINI KRISHNAKUMAR
Hi Isaac Manuel Raj,
This is Thiriloshini from Fujitsu working on MDONS use case with ATT and Orange for ONAP. We are currently working on interdomain link selection and trying to see if we could re-use the route optimization that you have implemented or follow your footsteps of your implementation based on our requirement if we could not re-use as is.
I’m trying to understand how the route calculation logic has been implemented and I have some questions regarding the same. Since you were the one who worked on route optimization, thought of checking with you. Please find my questions below.
relationshipStartNodeID = relationshipStartNode["related-link"].split("/")[-1]
start_accessNodeId = relationshipStartNodeID.split("-")[-3]
Edge_Start.append(start_accessNodeId)
If you could provide a sample of the logical-link data itself that CCVPN uses, that would be very useful for us to understand.
Any pointer is much appreciated.
Thanks,
Thiriloshini
Alessandro Gerardo D'Alessandro
Hi, I see a misalignment between this page (modified on Jan 14, 2020) and OOF Functional Impacts/Interaction Flow/APIs (modified on Jan 20, 2020) about Route Solution Info object. In fact in this page it contains the "VPNs" attribute while in the latter case it contains the "Links" attribute.
In addition, what is the semantic of "accessNodeId" attribute in the "VPN Info" object?
thanks
Alessandro