# UT intermediate container
FROM rtmgrbuild as rtmgrut
RUN go test ./pkg/sbi ./pkg/rpe ./pkg/nbi ./pkg/sdl -cover -race
-
# Final, executable container
FROM ubuntu:16.04
COPY --from=rtmgrbuild /go/bin/rtmgr /
COPY --from=rtmgrbuild /run_rtmgr.sh /
-RUN apt update && apt install -y iputils-ping net-tools curl tcpdump
+RUN apt-get update && apt-get install -y iputils-ping net-tools curl tcpdump
RUN mkdir /db && touch /db/rt.json && chmod 777 /db/rt.json
RUN chmod 755 /run_rtmgr.sh
CMD /run_rtmgr.sh
+### v0.3.9
+* Added RSM platform component routes for message types RAN_CONNECTED, RAN_RESTARTED, RAN_RECONFIGURED, RIC_RES_STATUS_REQ,RIC_RES_STATUS_RESP and RIC_RES_STATUS_FAILURE
+* xApp manager interface changes for Subscription Request API
+
+### v0.3.8
+* Adding docs and updating release notes for routing manager
+
### v0.3.7
* Fix routes for RIC_ENDC_X2_SETUP_REQ, RIC_ENDC_X2_SETUP_RESP and RIC_ENDC_X2_SETUP_FAILURE
# By default this file is in the docker build directory,
# but the location can configured in the JJB template.
---
-tag: 0.3.8
+tag: 0.3.9
func CreateSubReq(restUrl string, restPort string) *appmgr_model.SubscriptionRequest {
// TODO: parameterize function
- subReq := appmgr_model.SubscriptionRequest{
- TargetURL: swag.String(restUrl + ":" + restPort + "/ric/v1/handles/xapp-handle/"),
- EventType: swag.String("all"),
+ subData := appmgr_model.SubscriptionData{
+ TargetURL: swag.String(restUrl + ":" + restPort + "/ric/v1/handles/xapp-handle/"),
+ EventType: appmgr_model.EventTypeAll,
MaxRetries: swag.Int64(5),
RetryTimer: swag.Int64(10),
}
+ subReq := appmgr_model.SubscriptionRequest{
+ Data: &subData,
+ }
+
return &subReq
}
}
}
}
-
func TestCreateSubReq(t *testing.T) {
- var subReq = appmgr_model.SubscriptionRequest{
+ var subData = appmgr_model.SubscriptionData{
TargetURL: swag.String("localhost:8000/ric/v1/handles/xapp-handle/"),
- EventType: swag.String("all"),
+ EventType: appmgr_model.EventTypeAll,
MaxRetries: swag.Int64(5),
RetryTimer: swag.Int64(10),
}
+ subReq := appmgr_model.SubscriptionRequest{
+ Data: &subData,
+ }
subReq2 := CreateSubReq("localhost", "8000")
if reflect.TypeOf(subReq) != reflect.TypeOf(*subReq2) {
t.Errorf("Invalid type, got: %v, want: %v.", reflect.TypeOf(subReq), reflect.TypeOf(*subReq2))
}
- if *(subReq.TargetURL) != *(subReq2.TargetURL) {
- t.Errorf("Invalid TargetURL generated, got %v, want %v", *subReq.TargetURL, *subReq2.TargetURL)
+ if *(subReq.Data.TargetURL) != *(subReq2.Data.TargetURL) {
+ t.Errorf("Invalid TargetURL generated, got %v, want %v", *subReq.Data.TargetURL, *subReq2.Data.TargetURL)
}
- if *(subReq.EventType) != *(subReq2.EventType) {
- t.Errorf("Invalid EventType generated, got %v, want %v", *subReq.EventType, *subReq2.EventType)
+
+ if (subReq.Data.EventType) != (subReq2.Data.EventType) {
+ t.Errorf("Invalid EventType generated, got %v, want %v", subReq.Data.EventType, subReq2.Data.EventType)
}
- if *(subReq.MaxRetries) != *(subReq2.MaxRetries) {
- t.Errorf("Invalid MaxRetries generated, got %v, want %v", *subReq.MaxRetries, *subReq2.MaxRetries)
+
+ if *(subReq.Data.MaxRetries) != *(subReq2.Data.MaxRetries) {
+ t.Errorf("Invalid MaxRetries generated, got %v, want %v", *subReq.Data.MaxRetries, *subReq2.Data.MaxRetries)
}
- if *(subReq.RetryTimer) != *(subReq2.RetryTimer) {
- t.Errorf("Invalid RetryTimer generated, got %v, want %v", *subReq.RetryTimer, *subReq2.RetryTimer)
+ if *(subReq.Data.RetryTimer) != *(subReq2.Data.RetryTimer) {
+ t.Errorf("Invalid RetryTimer generated, got %v, want %v", *subReq.Data.RetryTimer, *subReq2.Data.RetryTimer)
}
+
}
func TestPostSubReq(t *testing.T) {
}
}
-func (r *Rpe) generatePlatformRoutes(e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.Endpoint, e2ManEp *rtmgr.Endpoint, ueManEp *rtmgr.Endpoint, routeTable *rtmgr.RouteTable) {
+func (r *Rpe) generatePlatformRoutes(e2TermEp *rtmgr.Endpoint, subManEp *rtmgr.Endpoint, e2ManEp *rtmgr.Endpoint, ueManEp *rtmgr.Endpoint, rsmEp *rtmgr.Endpoint, routeTable *rtmgr.RouteTable) {
rtmgr.Logger.Debug("rpe.generatePlatformRoutes invoked")
//Platform Routes --- Subscription Routes
//Subscription Manager -> E2 Termination
r.addRoute("RIC_ERROR_INDICATION", e2TermEp, e2ManEp, routeTable, -1)
r.addRoute("RIC_ENB_CONF_UPDATE", e2TermEp, e2ManEp, routeTable, -1)
r.addRoute("RIC_ENB_LOAD_INFORMATION", e2TermEp, e2ManEp, routeTable, -1)
+ //E2 Manager -> Resource Status Manager
+ r.addRoute("RAN_CONNECTED", e2ManEp, rsmEp, routeTable, -1)
+ r.addRoute("RAN_RESTARTED", e2ManEp, rsmEp, routeTable, -1)
+ r.addRoute("RAN_RECONFIGURED", e2ManEp, rsmEp, routeTable, -1)
+ //Resource Status Manager -> E2 Termination
+ r.addRoute("RIC_RES_STATUS_REQ", rsmEp, e2TermEp, routeTable, -1)
+ //E2 Termination -> Resource Status Manager
+ r.addRoute("RIC_RES_STATUS_RESP", e2TermEp, rsmEp, routeTable, -1)
+ r.addRoute("RIC_RES_STATUS_FAILURE", e2TermEp, rsmEp, routeTable, -1)
}
func (r *Rpe) generateRouteTable(endPointList rtmgr.Endpoints) *rtmgr.RouteTable {
rtmgr.Logger.Error("Platform component not found: %v", "UE Manger")
rtmgr.Logger.Debug("Endpoints: %v", endPointList)
}
- r.generatePlatformRoutes(e2TermEp, subManEp, e2ManEp, ueManEp, routeTable)
+ rsmEp := getEndpointByName(&endPointList, "RSM")
+ if rsmEp == nil {
+ rtmgr.Logger.Error("Platform component not found: %v", "Resource Status Manager")
+ rtmgr.Logger.Debug("Endpoints: %v", endPointList)
+ }
+ r.generatePlatformRoutes(e2TermEp, subManEp, e2ManEp, ueManEp, rsmEp, routeTable)
for _, endPoint := range endPointList {
rtmgr.Logger.Debug("Endpoint: %v, xAppType: %v", endPoint.Name, endPoint.XAppType)
"X2Setup": "6",
"Reset": "7",
"E2_TERM_INIT": "1100",
+ "RAN_CONNECTED": "1200",
+ "RAN_RESTARTED": "1210",
+ "RAN_RECONFIGURED": "1220",
"RIC_SCTP_CLEAR_ALL": "1090",
"RIC_SCTP_CONNECTION_FAILURE": "1080",
"RIC_X2_SETUP": "10000",
"E2MAN": {"tx": []string{"RIC_X2_SETUP_REQ", "RIC_X2_SETUP_RESP", "RIC_X2_SETUP_FAILURE", "RIC_X2_RESET", "RIC_X2_RESET_RESP", "RIC_ENDC_X2_SETUP_REQ", "RIC_ENDC_X2_SETUP_RESP", "RIC_ENDC_X2_SETUP_FAILURE"}, "rx": []string{"RIC_X2_SETUP_REQ", "RIC_X2_SETUP_RESP", "RIC_X2_SETUP_FAILURE", "RIC_X2_RESET", "RIC_X2_RESET_RESP", "RIC_ENDC_X2_SETUP_REQ", "RIC_ENDC_X2_SETUP_RESP", "RIC_ENDC_X2_SETUP_FAILURE"}},
"SUBMAN": {"tx": []string{"RIC_SUB_REQ", "RIC_SUB_DEL_REQ"}, "rx": []string{"RIC_SUB_RESP", "RIC_SUB_FAILURE", "RIC_SUB_DEL_RESP", "RIC_SUB_DEL_FAILURE"}},
"UEMAN": {"tx": []string{"RIC_CONTROL_REQ"}, "rx": []string{}},
+ "RSM": {"tx": []string{"RIC_RES_STATUS_REQ"}, "rx": []string{"RAN_CONNECTED", "RAN_RESTARTED", "RAN_RECONFIGURED"}},
}
Logger = lumber.NewConsoleLogger(lumber.INFO)