WORKDIR /tmp
# Install RMr shared library
-RUN wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/rmr_1.6.0_amd64.deb/download.deb && dpkg -i rmr_1.6.0_amd64.deb && rm -rf rmr_1.6.0_amd64.deb
+RUN wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/rmr_1.9.0_amd64.deb/download.deb && dpkg -i rmr_1.9.0_amd64.deb && rm -rf rmr_1.9.0_amd64.deb
# Install RMr development header files
-RUN wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/rmr-dev_1.6.0_amd64.deb/download.deb && dpkg -i rmr-dev_1.6.0_amd64.deb && rm -rf rmr-dev_1.6.0_amd64.deb
+RUN wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/rmr-dev_1.9.0_amd64.deb/download.deb && dpkg -i rmr-dev_1.9.0_amd64.deb && rm -rf rmr-dev_1.9.0_amd64.deb
# "PULLING LOG and COMPILING LOG"
RUN git clone "https://gerrit.o-ran-sc.org/r/com/log" /opt/log && cd /opt/log && \
/usr/local/go/bin/swagger generate client -f api/routing_manager.yaml -t pkg/ -m rtmgr_models -c rtmgr_client
+RUN /usr/local/go/bin/go mod tidy
COPY pkg pkg
COPY cmd cmd
-RUN /usr/local/go/bin/go mod tidy
RUN git clone -b v0.0.8 "https://gerrit.o-ran-sc.org/r/ric-plt/xapp-frame" /tmp/xapp-frame
COPY tmp/rmr.go /tmp/xapp-frame/pkg/xapp/rmr.go
FROM ubuntu:18.04
+RUN apt update && apt install -y iputils-ping net-tools curl tcpdump
+
COPY --from=submgrbuild /opt/bin/submgr /opt/submgr/config/submgr.yaml /
COPY run_submgr.sh /
COPY --from=submgrbuild /usr/local/include /usr/local/include
+### v0.10.3
+* The following tools made available in the final docker image: iputils-ping, net-tools, curl and tcpdump
+
+### v0.10.2
+* Taking in use the most recent RMr version
+
+### v0.10.1
+* Sequential execution of message handling to avoid parallel read/write of internal hash maps
+
### v0.10.0
* Tracking Mbuf in transaction table
registry *Registry
rtmgrClient *RtmgrClient
tracker *Tracker
+ rc_chan chan *xapp.RMRParams
}
type RMRMeid struct {
delete_handle := rtmgrhandle.NewDeleteXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
rtmgrClient := RtmgrClient{client, handle, delete_handle}
- return Control{new(E2ap), registry, &rtmgrClient, tracker}
+ return Control{new(E2ap), registry, &rtmgrClient, tracker, make(chan *xapp.RMRParams)}
}
func (c *Control) Run() {
+ go c.controlLoop()
xapp.Run(c)
}
func (c *Control) Consume(rp *xapp.RMRParams) (err error) {
- switch rp.Mtype {
- case C.RIC_SUB_REQ:
- err = c.handleSubscriptionRequest(rp)
- case C.RIC_SUB_RESP:
- err = c.handleSubscriptionResponse(rp)
- case C.RIC_SUB_DEL_REQ:
- err = c.handleSubscriptionDeleteRequest(rp)
- case C.RIC_SUB_DEL_RESP:
- err = c.handleSubscriptionDeleteResponse(rp)
- default:
- err = errors.New("Message Type " + strconv.Itoa(rp.Mtype) + " is discarded")
- }
+ c.rc_chan <- rp
return
}
return
}
+func (c *Control) controlLoop() {
+ for {
+ msg := <-c.rc_chan
+ switch msg.Mtype {
+ case C.RIC_SUB_REQ:
+ c.handleSubscriptionRequest(msg)
+ case C.RIC_SUB_RESP:
+ c.handleSubscriptionResponse(msg)
+ case C.RIC_SUB_DEL_REQ:
+ c.handleSubscriptionDeleteRequest(msg)
+ case C.RIC_SUB_DEL_RESP:
+ c.handleSubscriptionDeleteResponse(msg)
+ default:
+ err := errors.New("Message Type " + strconv.Itoa(msg.Mtype) + " is discarded")
+ xapp.Logger.Error("Unknown message type: %v", err)
+ }
+ }
+}
+
func (c *Control) handleSubscriptionRequest(params *xapp.RMRParams) (err error) {
payload_seq_num, err := c.e2ap.GetSubscriptionRequestSequenceNumber(params.Payload)
if err != nil {