Add/Update/Delete eNB & Update gNB REST APIs Design
Introduction
This design matches the requirements in the following USs:
https://lf-o-ran-sc.atlassian.net/browse/RIC-431
https://lf-o-ran-sc.atlassian.net/browse/RIC-432
https://lf-o-ran-sc.atlassian.net/browse/RIC-433
https://lf-o-ran-sc.atlassian.net/browse/RIC-434
RnibReader Changes
We shall add a new proto message, named AdditionalCellInformation:
message AdditionalCellInformation {
float cell_latitude = 1;
float cell_longitude = 2;
float antenna_height = 3;
float antenna_azimuth_direction = 4;
float antenna_tilt_angle = 5;
float antenna_max_transmit = 6;
float antenna_max_gain = 7;
uint32 sector_id = 8;
}Expand ServedCellInfo (enb.proto) with this proto message:
enb.proto
message Enb {
EnbType enb_type = 1;
repeated ServedCellInfo served_cells = 2;
repeated string gu_group_ids = 3;
}
message ServedCellInfo {
...
AdditionalCellInformation additional_cell_information = 16;
}
Expand ServedNRCellInformation (gnb.proto) with this proto message:
gnb.proto
message Gnb {
repeated ServedNRCell served_nr_cells = 1;
repeated RanFunction ran_functions = 2;
}
message ServedNRCell {
ServedNRCellInformation served_nr_cell_information = 1;
repeated NrNeighbourInformation nr_neighbour_infos = 2;
}
message ServedNRCellInformation {
...
AdditionalCellInformation additional_cell_information = 16;
}E2 Manager Configuration Changes
Add a new configuration key to the yaml file.
Recently we've added:
stateChangeMessageChannel: RAN_CONNECTION_STATUS_CHANGE
Now we shall add a new channel for RAN changes:
ranManipulationMessageChannel: RAN_MANIPULATION
This key, as others, should be read to the app's configuration which is injected to various flows.
This key will be used by RnibWriter for adding/updating/deleting eNBs and updating gNBs.
RnibWriter will trigger Sdl.SetAndPublish method, sending the RAN_MANIPULATION channel, and one of the following events:
<RAN_NAME>_ADDED<RAN_NAME>_UPDATED<RAN_NAME>_DELETED
RnibWriter Changes
Modify the following method:
SaveNodeb(nbIdentity *entities.NbIdentity, nodebInfo *entities.NodebInfo) error→ For Gnb type, we execute sdl's Set method.
→ For Enb type, we execute sdl's SetAndPublish method instead, sending RAN_MANIPULATION channel and <RAN_NAME>_ADDED event.
Add the following methods:
RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error
UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error
DeleteEnb(nodebInfo *entities.NodebInfo) error
I've already added the below method as part of the gNB update cells US (for a case we get an empty list from the client):
RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error
Add eNB REST API
Agenda
POST /v1/nodeb/enbis triggered, request body is validatedExecute
GetNodebwith RAN name coming from the request.If we have a DB error or if it already exists → error
Create a NodebInfo struct with an Enb configuration, populate it with the request data and set its connection status to DISCONNECTED
Execute
SaveNodeb, wheresdl.SetAndPublishwill be triggered for eNB type, sending the RAN_MANIPULATION channel and the <RAN_NAME>_ADDED event.Return 201 Created with NodebInfo response.
POST /v1/nodeb/enb
Request Body
{
"ranName": "",
"globalNbId": {
plmnId: "",
nbId: ""
},
"ip": "",
"port": 1234,
"enb": {
"enbType": "",
"servedCells": [{}],
"guGroupIds": [""]
}
}
AddEnbRequestHandler
AddEnbRequestHandler
type AddEnbRequestHandler struct {
logger *logger.Logger
rnibDataService services.RNibDataService
}
Sequence Diagram
Update eNB REST API & Update gNB REST API
Agenda
PUT /v1/nodeb/enb/<RAN_NAME> | PUT /v1/nodeb/gnb/<RAN_NAME> |
Request Body{
"enb": {
"enbType": "",
"servedCells": [{}],
"guGroupIds": [""]
}
} | Request Body{
"servedNrCells": [
{
"servedNrCellInformation": {},
"nrNeighbourInfos": [{}]
}
]
} |
UpdateNodebHandler
Sequence Diagram
Delete eNB REST API
Agenda
DELETE /v1/nodeb/enb/<RAN_NAME>is triggered.Execute
GetNodebwith RAN name coming from the request.If we have a DB error or if it doesn't exist → error
If nodeb is of type gNB → error
Execute
RemoveEnbRemove cells from both Cell ID key & PCI key (call RemoveServedCells)
Remove nodeb from both RAN ID key & RAN NAME key
Remove nbIdentity
Execute sdl.SetAndPublish(data,"RAN_MANIPULATION", "<RAN_NAME>_DELETED")
Return 204 No Content response.
DELETE /v1/nodeb/enb/<RAN_NAME>
DeleteEnbRequestHandler
type DeleteEnbRequestHandler struct {
logger *logger.Logger
rnibDataService services.RNibDataService
}
Sequence Diagram