發表文章

目前顯示的是 8月, 2023的文章

[ORAN] FlexRIC Sevice Model (2): Encode/Decode

圖片
在定義好 Service Model 的 Indication 之後, 我們接著去修改 Encode/Decode 的相關程式, 位置的路徑一樣是位於: ~/flexric/src/sm/new_sm 在此路徑下, 有兩個資料夾: dec, enc, 分別對應於 decode 和 encode 的功能 其中, 我們也可以看到, 在 encode/decode 中也對應了三種格式: ASN.1, fb (flatBuffer) 以及 plain, 對應於在 SM 建立的格式, 考慮到我們使用 plain 作為此次的範例, 相關的檔案就包括: enc/new_enc_plain.h, enc/new_enc_plain.c, dec/new_dec_plain.h, dec/new_dec_plain.c, 其中, header 檔 (.h) 只定義了程式,不須修改, 和 SM 相關修改的範例如下: enc/new_enc_plain.c: // 根據定義的 SM 資料格式長度宣告記憶體大小 // 並把 SM 中的資料直接 memcpy 至傳送的資料格式中 byte_array_t new_enc_ind_msg_plain(new_ind_msg_t const* ind_msg) {   assert(ind_msg != NULL);   byte_array_t ba = {0};   size_t const sz = sizeof(ind_msg->len) +                    sizeof(new_ng_u_tunnel_stats_t)*ind_msg->len +                    sizeof(ind_msg->tstamp); // 長度為 SM 定義的格式加上 timestamp 長度 //  printf("Size of the byte array = %lu\n", sz);   ba.buf = malloc(sz);    assert(ba.buf != NULL && "Memory exhausted");   memcpy(ba.buf, &ind_msg->len, sizeof(ind_msg-

[ORAN] FlexRIC Sevice Model (1): Indication Definition

圖片
在 FlexRIC 的架構中,  其 Service Model (SM) 包裝成 library 供 xApp 和 E2 Agent 使用, 因此, 在使用 SM 進行資料交換前, 必須先定義 SM, 並將定義好的 SM 封裝, 使得 xApp 和 E2 Agent 皆可使用. 詳細的說明, 可以參考官網建立 SM 的教學文件: https://gitlab.eurecom.fr/mosaic5g/flexric/-/wikis/Create-a-service-model 來自:  https://gitlab.eurecom.fr/mosaic5g/flexric/-/wikis/Create-a-service-model 為了要建立 SM, 首先我們要建立相對應的檔案系統, 方法為執行: cd flexric/src/sm && python3 gen_sm.py 執行後輸入 SM 名稱 (default 為 new), 產生 new_sm 的資料夾與對應程式, 其資料結構如下圖所示:   產生完新的 SM 之後, 我們就要修改 CMakeLists, 將新的 SM 加入編譯路徑, 一共有兩層 CMakeLists.txt 需要修改: ~/flexric/src/sm/CMakeLists.txt ## 在此文件中, 加入新的 SM 路徑: add_subdirectory(kpm_sm_v2.02) .... add_subdirectory(new_sm) #在文件尾端加入產生的資料夾名稱 ~/flexric/CMakeLists.txt ####### ## Service Models ####### # KPM service Model encoding definitions set(SM_ENCODING_KPM "ASN" CACHE STRING "The KPM SM encoding to use") set_property(CACHE SM_ENCODING_KPM PROPERTY STRINGS "PLAIN" "ASN" "FLATBUFFERS") message(STATUS "Selected