X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fe2pdus%2Fx2_setup_requests.go;h=b22e59d3bc0d1d7e329dc48d4aba36c11f3aef4e;hb=5660067626f34d1fac7753ea4eb5c5c99f93192e;hp=938506bfa508ef874e959fe766b183c32d428b54;hpb=b2e5e2b6d746c95f64a68631bb41b2f63a247daf;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/e2pdus/x2_setup_requests.go b/E2Manager/e2pdus/x2_setup_requests.go index 938506b..b22e59d 100644 --- a/E2Manager/e2pdus/x2_setup_requests.go +++ b/E2Manager/e2pdus/x2_setup_requests.go @@ -25,10 +25,12 @@ import "C" import ( "fmt" "github.com/pkg/errors" + "os" "unsafe" ) const ( + EnvRicId = "RIC_ID" ShortMacro_eNB_ID = 18 Macro_eNB_ID = 20 LongMacro_eNB_ID = 21 @@ -40,7 +42,13 @@ var PackedX2setupRequest []byte var PackedEndcX2setupRequestAsString string var PackedX2setupRequestAsString string -func PreparePackedEndcX2SetupRequest(maxAsn1PackedBufferSize int, maxAsn1CodecMessageBufferSize int, pLMNId []byte, eNB_Id []byte /*18, 20, 21, 28 bits length*/, bitqty uint, ricFlag []byte) ([]byte, string, error) { +/*The Ric Id is the combination of pLMNId and ENBId*/ +var pLMNId []byte +var eNBId []byte +var eNBIdBitqty uint +var ricFlag = []byte{0xbb, 0xbc, 0xcc} /*pLMNId [3]bytes*/ + +func preparePackedEndcX2SetupRequest(maxAsn1PackedBufferSize int, maxAsn1CodecMessageBufferSize int, pLMNId []byte, eNB_Id []byte /*18, 20, 21, 28 bits length*/, bitqty uint, ricFlag []byte) ([]byte, string, error) { packedBuf := make([]byte, maxAsn1PackedBufferSize) errBuf := make([]C.char, maxAsn1CodecMessageBufferSize) packedBufSize := C.ulong(len(packedBuf)) @@ -68,7 +76,7 @@ func PreparePackedEndcX2SetupRequest(maxAsn1PackedBufferSize int, maxAsn1CodecMe return packedBuf[:packedBufSize], pduAsString, nil } -func PreparePackedX2SetupRequest(maxAsn1PackedBufferSize int, maxAsn1CodecMessageBufferSize int, pLMNId []byte, eNB_Id []byte /*18, 20, 21, 28 bits length*/, bitqty uint, ricFlag []byte) ([]byte, string, error) { +func preparePackedX2SetupRequest(maxAsn1PackedBufferSize int, maxAsn1CodecMessageBufferSize int, pLMNId []byte, eNB_Id []byte /*18, 20, 21, 28 bits length*/, bitqty uint, ricFlag []byte) ([]byte, string, error) { packedBuf := make([]byte, maxAsn1PackedBufferSize) errBuf := make([]C.char, maxAsn1CodecMessageBufferSize) packedBufSize := C.ulong(len(packedBuf)) @@ -94,3 +102,46 @@ func PreparePackedX2SetupRequest(maxAsn1PackedBufferSize int, maxAsn1CodecMessag } return packedBuf[:packedBufSize], pduAsString, nil } + +//Expected value in RIC_ID = pLMN_Identity-eNB_ID/ +//<6 hex digits>-<6 or 8 hex digits>/<18|20|21|28> +//Each byte is represented by two hex digits, the value in the lowest byte of the eNB_ID must be assigned to the lowest bits +//For example, to get the value of ffffeab/28 the last byte must be 0x0b, not 0xb0 (-ffffea0b/28). +func parseRicID(ricId string) error { + if _, err := fmt.Sscanf(ricId, "%6x-%8x/%2d", &pLMNId, &eNBId, &eNBIdBitqty); err != nil { + return fmt.Errorf("unable to extract the value of %s: %s", EnvRicId, err) + } + + if len(pLMNId) < 3 { + return fmt.Errorf("invalid value for %s, len(pLMNId:%v) != 3", EnvRicId, pLMNId) + } + + if len(eNBId) < 3 { + return fmt.Errorf("invalid value for %s, len(eNBId:%v) != 3 or 4", EnvRicId, eNBId) + } + + if eNBIdBitqty != ShortMacro_eNB_ID && eNBIdBitqty != Macro_eNB_ID && eNBIdBitqty != LongMacro_eNB_ID && eNBIdBitqty != Home_eNB_ID { + return fmt.Errorf("invalid value for %s, eNBIdBitqty: %d", EnvRicId, eNBIdBitqty) + } + + return nil +} + +func init() { + var err error + ricId := os.Getenv(EnvRicId) + //ricId="bbbccc-ffff0e/20" + //ricId="bbbccc-abcd0e/20" + if err = parseRicID(ricId); err != nil { + panic(err) + } + + PackedEndcX2setupRequest, PackedEndcX2setupRequestAsString, err = preparePackedEndcX2SetupRequest(MaxAsn1PackedBufferSize, MaxAsn1CodecMessageBufferSize, pLMNId, eNBId, eNBIdBitqty, ricFlag) + if err != nil { + panic(err) + } + PackedX2setupRequest, PackedX2setupRequestAsString, err = preparePackedX2SetupRequest(MaxAsn1PackedBufferSize, MaxAsn1CodecMessageBufferSize, pLMNId, eNBId, eNBIdBitqty, ricFlag) + if err != nil { + panic(err) + } +}