// #include <x2setup_response_wrapper.h>
import "C"
import (
+ "e2mgr/e2pdus"
"e2mgr/logger"
"fmt"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
maxnoofNeighbours = 512
)
+type X2SetupResponseConverter struct {
+ logger *logger.Logger
+}
+
+type IX2SetupResponseConverter interface {
+ UnpackX2SetupResponseAndExtract(packedBuf []byte) (*entities.GlobalNbId, *entities.Enb, error)
+}
+
+func NewX2SetupResponseConverter(logger *logger.Logger) *X2SetupResponseConverter {
+ return &X2SetupResponseConverter{
+ logger: logger,
+ }
+}
// The following are possible values of a choice field, find which the pdu contains.
func getENB_ID_choice(eNB_ID C.ENB_ID_t) (entities.EnbType, []byte) {
enbIdAsBitString := (*C.BIT_STRING_t)(unsafe.Pointer(&eNB_ID.choice[0]))
- switch eNB_ID.present{
+ switch eNB_ID.present {
case C.ENB_ID_PR_macro_eNB_ID:
- return entities.EnbType_MACRO_ENB, C.GoBytes(unsafe.Pointer(enbIdAsBitString.buf), C.int(enbIdAsBitString.size))
+ return entities.EnbType_MACRO_ENB, C.GoBytes(unsafe.Pointer(enbIdAsBitString.buf), C.int(enbIdAsBitString.size))
case C.ENB_ID_PR_home_eNB_ID:
return entities.EnbType_HOME_ENB, C.GoBytes(unsafe.Pointer(enbIdAsBitString.buf), C.int(enbIdAsBitString.size))
case C.ENB_ID_PR_short_Macro_eNB_ID:
extIEs := (*C.ProtocolExtensionContainer_170P145_t)(unsafe.Pointer(fdd.iE_Extensions))
if extIEs != nil && extIEs.list.count > 0 {
- count:= int(extIEs.list.count)
+ count := int(extIEs.list.count)
extIEs_slice := (*[1 << 30]*C.FDD_Info_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
for _, member := range extIEs_slice {
switch member.extensionValue.present {
}
func getAdditionalSpecialSubframeExtensionInfo(info *C.AdditionalSpecialSubframeExtension_Info_t) *entities.AdditionalSpecialSubframeExtensionInfo {
- additionalSpecialSubframeExtensionInfo := &entities.AdditionalSpecialSubframeExtensionInfo{AdditionalSpecialSubframePatternsExtension: entities.AdditionalSpecialSubframePatterns_Extension(1 +info.additionalspecialSubframePatternsExtension)}
+ additionalSpecialSubframeExtensionInfo := &entities.AdditionalSpecialSubframeExtensionInfo{AdditionalSpecialSubframePatternsExtension: entities.AdditionalSpecialSubframePatterns_Extension(1 + info.additionalspecialSubframePatternsExtension)}
additionalSpecialSubframeExtensionInfo.CyclicPrefixDl = entities.CyclicPrefix(1 + info.cyclicPrefixDL)
additionalSpecialSubframeExtensionInfo.CyclicPrefixUl = entities.CyclicPrefix(1 + info.cyclicPrefixUL)
extIEs := (*C.ProtocolExtensionContainer_170P206_t)(unsafe.Pointer(tdd.iE_Extensions))
if extIEs != nil && extIEs.list.count > 0 {
- count:= int(extIEs.list.count)
+ count := int(extIEs.list.count)
extIEs_slice := (*[1 << 30]*C.TDD_Info_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
for _, member := range extIEs_slice {
switch member.extensionValue.present {
func getMBSFN_Subframe_Infolist(mBSFN_Subframe_Infolist *C.MBSFN_Subframe_Infolist_t) ([]*entities.MbsfnSubframe, error) {
var mBSFNSubframes []*entities.MbsfnSubframe
- if mBSFN_Subframe_Infolist.list.count > 0 && mBSFN_Subframe_Infolist.list.count <= maxnoofMBSFN {
- count:=int(mBSFN_Subframe_Infolist.list.count)
+ if mBSFN_Subframe_Infolist.list.count > 0 && mBSFN_Subframe_Infolist.list.count <= maxnoofMBSFN {
+ count := int(mBSFN_Subframe_Infolist.list.count)
BSFN_Subframe_Infolist_slice := (*[1 << 30]*C.MBSFN_Subframe_Info_t)(unsafe.Pointer(mBSFN_Subframe_Infolist.list.array))[:count:count]
for _, member := range BSFN_Subframe_Infolist_slice {
mBSFNSubframe := &entities.MbsfnSubframe{RadioframeAllocationPeriod: entities.RadioframeAllocationPeriod(1 + member.radioframeAllocationPeriod)}
mBSFNSubframe.RadioframeAllocationOffset = uint32(member.radioframeAllocationOffset)
- allocType, subframeAllocation, err:= getSubframeAllocation_choice(member.subframeAllocation)
+ allocType, subframeAllocation, err := getSubframeAllocation_choice(member.subframeAllocation)
if err != nil {
return nil, err
}
}
func getServedCellsInfoExt(extIEs *C.ProtocolExtensionContainer_170P192_t, servedCellInfo *entities.ServedCellInfo) error {
- if extIEs != nil && extIEs.list.count > 0 {
- count:=int(extIEs.list.count)
+ if extIEs != nil && extIEs.list.count > 0 {
+ count := int(extIEs.list.count)
extIEs_slice := (*[1 << 30]*C.ServedCell_Information_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
for _, member := range extIEs_slice {
switch member.extensionValue.present {
ports := (*C.Number_of_Antennaports_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
servedCellInfo.NumberOfAntennaPorts = entities.NumberOfAntennaPorts(1 + *ports)
case C.ServedCell_Information_ExtIEs__extensionValue_PR_PRACH_Configuration:
- prachConfiguration:= getPRACHConfiguration((*C.PRACH_Configuration_t)(unsafe.Pointer(&member.extensionValue.choice[0])))
+ prachConfiguration := getPRACHConfiguration((*C.PRACH_Configuration_t)(unsafe.Pointer(&member.extensionValue.choice[0])))
servedCellInfo.PrachConfiguration = prachConfiguration
case C.ServedCell_Information_ExtIEs__extensionValue_PR_MBSFN_Subframe_Infolist:
mBSFN_Subframe_Infolist, err := getMBSFN_Subframe_Infolist((*C.MBSFN_Subframe_Infolist_t)(unsafe.Pointer(&member.extensionValue.choice[0])))
servedCellInfo.MbsfnSubframeInfos = mBSFN_Subframe_Infolist
case C.ServedCell_Information_ExtIEs__extensionValue_PR_CSG_Id:
csgId := (*C.CSG_Id_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
- servedCellInfo.CsgId = fmt.Sprintf("%02x", C.GoBytes(unsafe.Pointer(csgId.buf), C.int(csgId.size)))
+ servedCellInfo.CsgId = fmt.Sprintf("%02x", C.GoBytes(unsafe.Pointer(csgId.buf), C.int(csgId.size)))
case C.ServedCell_Information_ExtIEs__extensionValue_PR_MBMS_Service_Area_Identity_List:
mBMS_Service_Area_Identity_List := (*C.MBMS_Service_Area_Identity_List_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
if mBMS_Service_Area_Identity_List.list.count > 0 && mBMS_Service_Area_Identity_List.list.count < maxnoofMBMSServiceAreaIdentities {
- count:= int(mBMS_Service_Area_Identity_List.list.count)
+ count := int(mBMS_Service_Area_Identity_List.list.count)
mBMS_Service_Area_Identity_List_slice := (*[1 << 30]*C.MBMS_Service_Area_Identity_t)(unsafe.Pointer(mBMS_Service_Area_Identity_List.list.array))[:count:count]
for _, identity := range mBMS_Service_Area_Identity_List_slice {
- servedCellInfo.MbmsServiceAreaIdentities = append(servedCellInfo.MbmsServiceAreaIdentities, fmt.Sprintf("%02x",C.GoBytes(unsafe.Pointer(identity.buf), C.int(identity.size))))
+ servedCellInfo.MbmsServiceAreaIdentities = append(servedCellInfo.MbmsServiceAreaIdentities, fmt.Sprintf("%02x", C.GoBytes(unsafe.Pointer(identity.buf), C.int(identity.size))))
}
}
case C.ServedCell_Information_ExtIEs__extensionValue_PR_MultibandInfoList:
multibandInfoList := (*C.MultibandInfoList_t)(unsafe.Pointer(&member.extensionValue.choice[0]))
if multibandInfoList.list.count > 0 && multibandInfoList.list.count < maxnoofBands {
- count:= int(multibandInfoList.list.count)
+ count := int(multibandInfoList.list.count)
multibandInfoList_slice := (*[1 << 30]*C.BandInfo_t)(unsafe.Pointer(multibandInfoList.list.array))[:count:count]
for _, bandInfo := range multibandInfoList_slice {
servedCellInfo.MultibandInfos = append(servedCellInfo.MultibandInfos, uint32(bandInfo.freqBandIndicator))
return nil
}
-func getServedCellsNeighbour_Info(neighbour_Information*C.Neighbour_Information_t) ([]*entities.NeighbourInformation, error) {
+func getServedCellsNeighbour_Info(neighbour_Information *C.Neighbour_Information_t) ([]*entities.NeighbourInformation, error) {
var neighbours []*entities.NeighbourInformation
if neighbour_Information != nil && neighbour_Information.list.count > 0 && neighbour_Information.list.count <= maxnoofNeighbours {
- count:= int(neighbour_Information.list.count)
+ count := int(neighbour_Information.list.count)
neighbour_Information_slice := (*[1 << 30]*C.Neighbour_Information__Member)(unsafe.Pointer(neighbour_Information.list.array))[:count:count]
for _, member := range neighbour_Information_slice {
eUTRANcellIdentifier := C.GoBytes(unsafe.Pointer(member.eCGI.eUTRANcellIdentifier.buf), C.int(member.eCGI.eUTRANcellIdentifier.size))
neighbourInfo := &entities.NeighbourInformation{Ecgi: fmt.Sprintf("%02x:%02x", plmnId, eUTRANcellIdentifier)}
- neighbourInfo.Pci = uint32(member.pCI)
+ neighbourInfo.Pci = uint32(member.pCI)
neighbourInfo.EarFcn = uint32(member.eARFCN)
- extIEs:= (*C.ProtocolExtensionContainer_170P172_t)(unsafe.Pointer(member.iE_Extensions))
+ extIEs := (*C.ProtocolExtensionContainer_170P172_t)(unsafe.Pointer(member.iE_Extensions))
if extIEs != nil && extIEs.list.count > 0 {
- count:= int(extIEs.list.count)
+ count := int(extIEs.list.count)
neighbour_Information_ExtIEs_slice := (*[1 << 30]*C.Neighbour_Information_ExtIEs_t)(unsafe.Pointer(extIEs.list.array))[:count:count]
for _, neighbour_Information_ExtIE := range neighbour_Information_ExtIEs_slice {
switch neighbour_Information_ExtIE.extensionValue.present {
}
}
- neighbours = append(neighbours,neighbourInfo)
+ neighbours = append(neighbours, neighbourInfo)
}
}
func getServedCells(servedCellsIE *C.ServedCells_t) ([]*entities.ServedCellInfo, error) {
var servedCells []*entities.ServedCellInfo
- if servedCellsIE != nil && servedCellsIE.list.count > 0 && servedCellsIE.list.count < maxCellineNB {
- count:= int(servedCellsIE.list.count)
+ if servedCellsIE != nil && servedCellsIE.list.count > 0 && servedCellsIE.list.count < maxCellineNB {
+ count := int(servedCellsIE.list.count)
servedCells__Member_slice := (*[1 << 30]*C.ServedCells__Member)(unsafe.Pointer(servedCellsIE.list.array))[:count:count]
for _, member := range servedCells__Member_slice {
servedCellInfo := &entities.ServedCellInfo{Pci: uint32(member.servedCellInfo.pCI)}
var ids []string
if guGroupIDList != nil && guGroupIDList.list.count > 0 && guGroupIDList.list.count <= maxPools {
- count:=int(guGroupIDList.list.count)
+ count := int(guGroupIDList.list.count)
guGroupIDList_slice := (*[1 << 30]*C.GU_Group_ID_t)(unsafe.Pointer(guGroupIDList.list.array))[:count:count]
for _, guGroupID := range guGroupIDList_slice {
plmnId := C.GoBytes(unsafe.Pointer(guGroupID.pLMN_Identity.buf), C.int(guGroupID.pLMN_Identity.size))
case C.X2SetupResponse_IEs__value_PR_GlobalENB_ID:
globalENB_ID := (*C.GlobalENB_ID_t)(unsafe.Pointer(&x2SetupResponse_IE.value.choice[0]))
plmnId := C.GoBytes(unsafe.Pointer(globalENB_ID.pLMN_Identity.buf), C.int(globalENB_ID.pLMN_Identity.size))
- enbType, enbVal:= getENB_ID_choice(globalENB_ID.eNB_ID)
+ enbType, enbVal := getENB_ID_choice(globalENB_ID.eNB_ID)
globalNbId = &entities.GlobalNbId{}
globalNbId.NbId = fmt.Sprintf("%02x", enbVal)
}
enb.ServedCells = ServedCells
case C.X2SetupResponse_IEs__value_PR_GUGroupIDList:
- enb.GuGroupIds= getGUGroupIDList((*C.GUGroupIDList_t)(unsafe.Pointer(&x2SetupResponse_IE.value.choice[0])))
+ enb.GuGroupIds = getGUGroupIDList((*C.GUGroupIDList_t)(unsafe.Pointer(&x2SetupResponse_IE.value.choice[0])))
case C.X2SetupResponse_IEs__value_PR_CriticalityDiagnostics:
/*ignored*/
case C.X2SetupResponse_IEs__value_PR_LHN_ID:
}
}
-
return globalNbId, &enb, nil
}
-func UnpackX2SetupResponseAndExtract(logger *logger.Logger, allocationBufferSize int, packedBufferSize int, packedBuf []byte, maxMessageBufferSize int) (*entities.GlobalNbId, *entities.Enb, error) {
- pdu, err := UnpackX2apPdu(logger, allocationBufferSize, packedBufferSize, packedBuf, maxMessageBufferSize)
+func (c *X2SetupResponseConverter) UnpackX2SetupResponseAndExtract(packedBuf []byte) (*entities.GlobalNbId, *entities.Enb, error) {
+ pdu, err := UnpackX2apPdu(c.logger, e2pdus.MaxAsn1CodecAllocationBufferSize, len(packedBuf), packedBuf, e2pdus.MaxAsn1CodecMessageBufferSize)
if err != nil {
return nil, nil, err
}
defer C.delete_pdu(pdu)
return x2SetupResponseToProtobuf(pdu)
}
-