From: Mohamed Abukar Date: Mon, 1 Jul 2019 14:14:44 +0000 (+0300) Subject: Add support for MEID X-Git-Tag: v0.0.6~3 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=d969b203c9d3b7e3bbf98257ed17edaddd2453b1;p=ric-plt%2Fxapp-frame.git Add support for MEID Change-Id: I35815afadbf4757ee337dc704316396ce9edd941 Signed-off-by: Mohamed Abukar --- diff --git a/pkg/xapp/mtypes.go b/pkg/xapp/mtypes.go index 9a84447..2965e1e 100755 --- a/pkg/xapp/mtypes.go +++ b/pkg/xapp/mtypes.go @@ -24,6 +24,9 @@ package xapp */ import "C" +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- var RICMessageTypes = map[string]int{ "RIC_SUB_REQ": C.RIC_SUB_REQ, "RIC_SUB_RESP": C.RIC_SUB_RESP, @@ -63,3 +66,90 @@ var RICMessageTypes = map[string]int{ "DC_ADM_INT_CONTROL": C.DC_ADM_INT_CONTROL, "DC_ADM_INT_CONTROL_ACK": C.DC_ADM_INT_CONTROL_ACK, } + + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +const ( + RIC_SUB_REQ = C.RIC_SUB_REQ + RIC_SUB_RESP = C.RIC_SUB_RESP + RIC_SUB_FAILURE = C.RIC_SUB_FAILURE + RIC_SUB_DEL_REQ = C.RIC_SUB_DEL_REQ + RIC_SUB_DEL_RESP = C.RIC_SUB_DEL_RESP + RIC_SUB_DEL_FAILURE = C.RIC_SUB_DEL_FAILURE + RIC_SERVICE_UPDATE = C.RIC_SERVICE_UPDATE + RIC_SERVICE_UPDATE_ACK = C.RIC_SERVICE_UPDATE_ACK + RIC_SERVICE_UPDATE_FAILURE = C.RIC_SERVICE_UPDATE_FAILURE + RIC_CONTROL_REQ = C.RIC_CONTROL_REQ + RIC_CONTROL_ACK = C.RIC_CONTROL_ACK + RIC_CONTROL_FAILURE = C.RIC_CONTROL_FAILURE + RIC_INDICATION = C.RIC_INDICATION + RIC_SERVICE_QUERY = C.RIC_SERVICE_QUERY + RIC_X2_SETUP_REQ = C.RIC_X2_SETUP_REQ + RIC_X2_SETUP_RESP = C.RIC_X2_SETUP_RESP + RIC_X2_SETUP_FAILURE = C.RIC_X2_SETUP_FAILURE + RIC_X2_RESET = C.RIC_X2_RESET + RIC_X2_RESET_RESP = C.RIC_X2_RESET_RESP + RIC_ENDC_X2_SETUP_REQ = C.RIC_ENDC_X2_SETUP_REQ + RIC_ENDC_X2_SETUP_RESP = C.RIC_ENDC_X2_SETUP_RESP + RIC_ENDC_X2_SETUP_FAILURE = C.RIC_ENDC_X2_SETUP_FAILURE + RIC_ENDC_CONF_UPDATE = C.RIC_ENDC_CONF_UPDATE + RIC_ENDC_CONF_UPDATE_ACK = C.RIC_ENDC_CONF_UPDATE_ACK + RIC_ENDC_CONF_UPDATE_FAILURE = C.RIC_ENDC_CONF_UPDATE_FAILURE + RIC_RES_STATUS_REQ = C.RIC_RES_STATUS_REQ + RIC_RES_STATUS_RESP = C.RIC_RES_STATUS_RESP + RIC_RES_STATUS_FAILURE = C.RIC_RES_STATUS_FAILURE + RIC_ENB_CONF_UPDATE = C.RIC_ENB_CONF_UPDATE + RIC_ENB_CONF_UPDATE_ACK = C.RIC_ENB_CONF_UPDATE_ACK + RIC_ENB_CONF_UPDATE_FAILURE = C.RIC_ENB_CONF_UPDATE_FAILURE + RIC_ENB_LOAD_INFORMATION = C.RIC_ENB_LOAD_INFORMATION + RIC_GNB_STATUS_INDICATION = C.RIC_GNB_STATUS_INDICATION + RIC_RESOURCE_STATUS_UPDATE = C.RIC_RESOURCE_STATUS_UPDATE + RIC_ERROR_INDICATION = C.RIC_ERROR_INDICATION + DC_ADM_INT_CONTROL = C.DC_ADM_INT_CONTROL + DC_ADM_INT_CONTROL_ACK = C.DC_ADM_INT_CONTROL_ACK +) + +//----------------------------------------------------------------------------- +// +//----------------------------------------------------------------------------- +var RicMessageTypeToName = map[int]string{ + RIC_SUB_REQ: "RIC SUBSCRIPTION REQUEST", + RIC_SUB_RESP: "RIC SUBSCRIPTION RESPONSE", + RIC_SUB_FAILURE: "RIC SUBSCRIPTION FAILURE", + RIC_SUB_DEL_REQ: "RIC SUBSCRIPTION DELETE REQUEST", + RIC_SUB_DEL_RESP: "RIC SUBSCRIPTION DELETE RESPONSE", + RIC_SUB_DEL_FAILURE: "RIC SUBSCRIPTION DELETE FAILURE", + RIC_SERVICE_UPDATE: "RIC SERVICE UPDATE", + RIC_SERVICE_UPDATE_ACK: "RIC SERVICE UPDATE ACKNOWLEDGE", + RIC_SERVICE_UPDATE_FAILURE: "RIC SERVICE UPDATE FAILURE", + RIC_CONTROL_REQ: "RIC CONTROL REQUEST", + RIC_CONTROL_ACK: "RIC CONTROL ACKNOWLEDGE", + RIC_CONTROL_FAILURE: "RIC CONTROL FAILURE", + RIC_INDICATION: "RIC INDICATION", + RIC_SERVICE_QUERY: "RIC SERVICE QUERY", + RIC_X2_SETUP_REQ: "RIC X2 SETUP REQUEST", + RIC_X2_SETUP_RESP: "RIC X2 SETUP RESPONSE", + RIC_X2_SETUP_FAILURE: "RIC X2 SETUP FAILURE", + RIC_X2_RESET: "RIC X2 RESET REQUEST", + RIC_X2_RESET_RESP: "RIC X2 RESET RESPONSE", + RIC_ENDC_X2_SETUP_REQ: "RIC EN-DC X2 SETUP REQUEST", + RIC_ENDC_X2_SETUP_RESP: "RIC EN-DC X2 SETUP RESPONSE", + RIC_ENDC_X2_SETUP_FAILURE: "RIC EN-DC X2 SETUP FAILURE", + RIC_ENDC_CONF_UPDATE: "RIC EN-DC CONFIGURATION UPDATE", + RIC_ENDC_CONF_UPDATE_ACK: "RIC EN-DC CONFIGURATION UPDATE ACKNOWLEDGE", + RIC_ENDC_CONF_UPDATE_FAILURE:"RIC EN-DC CONFIGURATION UPDATE FAILURE", + RIC_RES_STATUS_REQ: "RIC RESOURCE STATUS REQUEST", + RIC_RES_STATUS_RESP: "RIC RESOURCE STATUS RESPONSE", + RIC_RES_STATUS_FAILURE: "RIC RESOURCE STATUS FAILURE", + RIC_ENB_CONF_UPDATE: "RIC ENB CONFIGURATION UPDATE", + RIC_ENB_CONF_UPDATE_ACK: "RIC ENB CONFIGURATION UPDATE ACKNOWLEDGE", + RIC_ENB_CONF_UPDATE_FAILURE: "RIC ENB CONFIGURATION UPDATE FAILURE", + RIC_ENB_LOAD_INFORMATION: "RIC ENB LOAD INFORMATION", + RIC_GNB_STATUS_INDICATION: "RIC GNB STATUS INDICATION", + RIC_RESOURCE_STATUS_UPDATE: "RIC RESOURCE STATUS UPDATE", + RIC_ERROR_INDICATION: "RIC ERROR INDICATION", + DC_ADM_INT_CONTROL: "DC ADMISSION INTERVAL CONTROL", + DC_ADM_INT_CONTROL_ACK: "DC ADMISSION INTERVAL CONTROL ACK", +} diff --git a/pkg/xapp/rmr.go b/pkg/xapp/rmr.go index c835408..0b643d5 100755 --- a/pkg/xapp/rmr.go +++ b/pkg/xapp/rmr.go @@ -39,7 +39,7 @@ import "C" import ( "github.com/spf13/viper" "strconv" - "sync" + "strings" "time" "unsafe" ) @@ -51,24 +51,6 @@ var RMRCounterOpts = []CounterOpts{ {Name: "ReceiveError", Help: "The total number of RMR receive errors"}, } -// To be removed ... -type RMRStatistics struct{} - -type RMRClient struct { - context unsafe.Pointer - ready int - wg sync.WaitGroup - mux sync.Mutex - stat map[string]Counter - consumers []MessageConsumer - readyCb ReadyCB - readyCbParams interface{} -} - -type MessageConsumer interface { - Consume(mtype int, sid int, len int, payload []byte) error -} - func NewRMRClient() *RMRClient { p := C.CString(viper.GetString("rmr.protPort")) m := C.int(viper.GetInt("rmr.maxSize")) @@ -87,6 +69,10 @@ func NewRMRClient() *RMRClient { } func (m *RMRClient) Start(c MessageConsumer) { + if c != nil { + m.consumers = append(m.consumers, c) + } + for { Logger.Info("rmrClient: Waiting for RMR to be ready ...") @@ -97,18 +83,13 @@ func (m *RMRClient) Start(c MessageConsumer) { } m.wg.Add(viper.GetInt("rmr.numWorkers")) - if c != nil { - m.consumers = append(m.consumers, c) + if m.readyCb != nil { + go m.readyCb(m.readyCbParams) } for w := 0; w < viper.GetInt("rmr.numWorkers"); w++ { go m.Worker("worker-"+strconv.Itoa(w), 0) } - - if m.readyCb != nil { - m.readyCb(m.readyCbParams) - } - m.Wait() } @@ -135,11 +116,18 @@ func (m *RMRClient) parseMessage(rxBuffer *C.rmr_mbuf_t) { return } + meid := &RMRMeid{} + meidBuf := make([]byte, int(C.RMR_MAX_MEID)) + if meidCstr := C.rmr_get_meid(rxBuffer, (*C.uchar)(unsafe.Pointer(&meidBuf[0]))); meidCstr != nil { + meid.PlmnID = strings.TrimRight(string(meidBuf[0:16]), "\000") + meid.EnbID = strings.TrimRight(string(meidBuf[16:32]), "\000") + } + for _, c := range m.consumers { cptr := unsafe.Pointer(rxBuffer.payload) payload := C.GoBytes(cptr, C.int(rxBuffer.len)) - err := c.Consume(int(rxBuffer.mtype), int(rxBuffer.sub_id), int(rxBuffer.len), payload) + err := c.Consume(int(rxBuffer.mtype), int(rxBuffer.sub_id), payload, meid) if err != nil { Logger.Warn("rmrClient: Consumer returned error: %v", err) } @@ -155,16 +143,22 @@ func (m *RMRClient) Allocate() *C.rmr_mbuf_t { return buf } -func (m *RMRClient) Send(mtype int, sid int, len int, payload []byte) bool { +func (m *RMRClient) Send(mtype int, sid int, payload []byte, meid *RMRMeid) bool { buf := m.Allocate() buf.mtype = C.int(mtype) buf.sub_id = C.int(sid) - buf.len = C.int(len) + buf.len = C.int(len(payload)) datap := C.CBytes(payload) defer C.free(datap) - C.write_bytes_array(buf.payload, datap, C.int(len)) + if meid != nil { + b := make([]byte, int(C.RMR_MAX_MEID)) + copy(b, []byte(meid.PlmnID)) + copy(b[16:], []byte(meid.EnbID)) + C.rmr_bytes2meid(buf, (*C.uchar)(unsafe.Pointer(&b[0])), C.int(len(b))) + } + C.write_bytes_array(buf.payload, datap, buf.len) return m.SendBuf(buf) } @@ -204,11 +198,6 @@ func (m *RMRClient) RegisterMetrics() { m.stat = Metric.RegisterCounterGroup(RMRCounterOpts, "RMR") } -// To be removed ... -func (m *RMRClient) GetStat() (r RMRStatistics) { - return -} - func (m *RMRClient) Wait() { m.wg.Wait() } @@ -235,3 +224,8 @@ func (m *RMRClient) GetRicMessageName(id int) (s string) { } return } + +// To be removed ... +func (m *RMRClient) GetStat() (r RMRStatistics) { + return +} diff --git a/test/xapp/forwarder.go b/test/xapp/forwarder.go index 03a3154..88a99a0 100755 --- a/test/xapp/forwarder.go +++ b/test/xapp/forwarder.go @@ -7,8 +7,8 @@ import ( type Forwarder struct { } -func (m Forwarder) Consume(mtype, subId, len int, payload []byte) (err error) { - xapp.Logger.Debug("Message received - type=%d subId=%d len=%d", mtype, subId, len) +func (m Forwarder) Consume(mtype, subId int, payload []byte, meid *xapp.RMRMeid) (err error) { + xapp.Logger.Debug("Message received - type=%d subId=%d meid=%v", mtype, subId, meid) // Store data and reply with the same message payload if xapp.Config.GetInt("test.store") != 0 { @@ -27,7 +27,7 @@ func (m Forwarder) Consume(mtype, subId, len int, payload []byte) (err error) { subId = sid } - if ok := xapp.Rmr.Send(mtype, subId, len, payload); !ok { + if ok := xapp.Rmr.Send(mtype, subId, payload, nil); !ok { xapp.Logger.Info("Rmr.Send failed ...") } return diff --git a/test/xapp/generator.go b/test/xapp/generator.go index 4a86edb..9f3527d 100755 --- a/test/xapp/generator.go +++ b/test/xapp/generator.go @@ -17,8 +17,8 @@ var ( type Generator struct { } -func (m Generator) Consume(mtype, subId, len int, payload []byte) (err error) { - xapp.Logger.Debug("message received - type=%d subId=%d len=%d", mtype, subId, len) +func (m Generator) Consume(mtype, subId int, payload []byte, meid *xapp.RMRMeid) (err error) { + xapp.Logger.Debug("message received - type=%d subId=%d meid=%v", mtype, subId, meid) mux.Lock() rx++ @@ -54,7 +54,7 @@ func runTests(mtype, subId, amount, msize, ack int) { start := time.Now() for i := 0; i < amount; i++ { - if ok := xapp.Rmr.Send(mtype, subId, msize, s); ok { + if ok := xapp.Rmr.Send(mtype, subId, s, &xapp.RMRMeid{PlmnID: "123456", EnbID: "7788"}); ok { tx++ if ack != 0 { wg.Add(1)