MaxMsgSize int
}
NotificationResponseBuffer int
- BigRedButtonTimeoutSec int
+ BigRedButtonTimeoutSec int
+ MaxConnectionAttempts int
}
func ParseConfiguration() *Configuration{
viper.AddConfigPath("E2Manager/resources/")
viper.AddConfigPath("./resources/") //For production
viper.AddConfigPath("../resources/") //For test under Docker
+ viper.AddConfigPath("../../resources/") //For test under Docker
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Sprintf("#http_server.parseConfiguration - failed to read configuration file: %s\n", err))
config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer")
config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec")
-
+ config.MaxConnectionAttempts = viper.GetInt("maxConnectionAttempts")
return &config
}
"e2mgr/e2managererrors"
"e2mgr/logger"
"e2mgr/models"
- "e2mgr/providers"
+ "e2mgr/providers/httpmsghandlerprovider"
"e2mgr/rNibWriter"
"e2mgr/services"
"encoding/json"
const (
ParamRanName = "ranName"
)
+
type Controller struct {
- logger *logger.Logger
- handlerProvider *providers.IncomingRequestHandlerProvider
+ logger *logger.Logger
+ handlerProvider *httpmsghandlerprovider.IncomingRequestHandlerProvider
}
func NewController(logger *logger.Logger, rmrService *services.RmrService, rNibReaderProvider func() reader.RNibReader, rNibWriterProvider func() rNibWriter.RNibWriter,
config *configuration.Configuration) *Controller {
- provider := providers.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider)
+ provider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider)
return &Controller{
- logger: logger,
+ logger: logger,
handlerProvider: provider,
}
}
-func (c *Controller)ShutdownHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params){
+func (c *Controller) ShutdownHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params) {
c.logger.Infof("[Client -> E2 Manager] #controller.ShutdownHandler - request: %v", prettifyRequest(r))
- c.handleRequest(writer, &r.Header, providers.ShutdownRequest,nil, false, http.StatusNoContent)
+ c.handleRequest(writer, &r.Header, httpmsghandlerprovider.ShutdownRequest, nil, false, http.StatusNoContent)
}
-func (c *Controller) X2ResetHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params){
+func (c *Controller) X2ResetHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params) {
c.logger.Infof("[Client -> E2 Manager] #controller.X2ResetHandler - request: %v", prettifyRequest(r))
- request:= models.ResetRequest{}
- ranName:= params.ByName(ParamRanName)
+ request := models.ResetRequest{}
+ ranName := params.ByName(ParamRanName)
- if !c.extractJsonBody(r, &request, writer){
+ if !c.extractJsonBody(r, &request, writer) {
return
}
request.RanName = ranName
- c.handleRequest(writer, &r.Header, providers.ResetRequest, request, false, http.StatusNoContent)
+ c.handleRequest(writer, &r.Header, httpmsghandlerprovider.ResetRequest, request, false, http.StatusNoContent)
}
-func (c *Controller) extractJsonBody(r *http.Request, request models.Request, writer http.ResponseWriter) bool{
+func (c *Controller) extractJsonBody(r *http.Request, request models.Request, writer http.ResponseWriter) bool {
if r.ContentLength <= 0 {
return true
}
return true
}
-func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Header, requestName providers.IncomingRequest,
+func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Header, requestName httpmsghandlerprovider.IncomingRequest,
request models.Request, validateHeader bool, httpStatusResponse int) {
if validateHeader {
}
}
- handler,err := c.handlerProvider.GetHandler(requestName)
+ handler, err := c.handlerProvider.GetHandler(requestName)
if err != nil {
c.handleErrorResponse(err, writer)
return
c.logger.Infof("[E2 Manager -> Client] #controller.handleRequest - status response: %v", httpStatusResponse)
}
-func (c *Controller) validateRequestHeader( header *http.Header) error {
+func (c *Controller) validateRequestHeader(header *http.Header) error {
- if header.Get("Content-Type") != "application/json"{
+ if header.Get("Content-Type") != "application/json" {
c.logger.Errorf("#controller.validateRequestHeader - validation failure, incorrect content type")
- return e2managererrors.NewHeaderValidationError()
+ return e2managererrors.NewHeaderValidationError()
}
return nil
}
-func (c *Controller) handleErrorResponse(err error, writer http.ResponseWriter){
+func (c *Controller) handleErrorResponse(err error, writer http.ResponseWriter) {
var errorResponseDetails models.ErrorResponse
var httpError int
if err != nil {
c.logger.Errorf("#controller.handleErrorResponse - Cannot send response. writer:%v", writer)
}
-}
\ No newline at end of file
+}
"e2mgr/logger"
"e2mgr/mocks"
"e2mgr/models"
- "e2mgr/providers"
+ "e2mgr/providers/httpmsghandlerprovider"
"e2mgr/rNibWriter"
"e2mgr/rmrCgo"
"e2mgr/tests"
header := &http.Header{}
- controller.handleRequest(writer, header, providers.ShutdownRequest, nil, true, http.StatusNoContent)
+ controller.handleRequest(writer, header, httpmsghandlerprovider.ShutdownRequest, nil, true, http.StatusNoContent)
var errorResponse = parseJsonRequest(t, writer.Body)
err := e2managererrors.NewHeaderValidationError()
assert.Equal(t, errorResponse.Message, err.Err.Message)
}
-func TestShutdownStatusNoContent(t *testing.T){
+func TestShutdownStatusNoContent(t *testing.T) {
log := initLog(t)
rmrMessengerMock := &mocks.RmrMessengerMock{}
assert.Equal(t, errorResponse.Message, err.Err.Message)
}
-func TestValidateHeaders(t *testing.T){
+func TestValidateHeaders(t *testing.T) {
log := initLog(t)
rmrMessengerMock := &mocks.RmrMessengerMock{}
return log
}
-
-func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T){
+func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) {
log := initLog(t)
ranName := "test1"
writerProvider := func() rNibWriter.RNibWriter {
return writerMock
}
- payload:= []byte {0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
+ payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
xaction := []byte(ranName)
- msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
+ msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
rmrMessengerMock := &mocks.RmrMessengerMock{}
- rmrMessengerMock.On("SendMsg",msg,mock.Anything).Return(msg,nil)
+ rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
config := configuration.ParseConfiguration()
- rmrService:=getRmrService(rmrMessengerMock, log)
+ rmrService := getRmrService(rmrMessengerMock, log)
writer := httptest.NewRecorder()
controller := NewController(log, rmrService, readerProvider, writerProvider, config)
- var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED }
- readerMock.On("GetNodeb",ranName).Return(nodeb, nil)
+ var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
+ readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
data4Req := map[string]interface{}{"cause": "protocol:transfer-syntax-error"}
b := new(bytes.Buffer)
_ = json.NewEncoder(b).Encode(data4Req)
req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b)
- param:= httprouter.Param{Key:"ranName", Value: ranName}
- controller.X2ResetHandler(writer, req, []httprouter.Param {param})
+ param := httprouter.Param{Key: "ranName", Value: ranName}
+ controller.X2ResetHandler(writer, req, []httprouter.Param{param})
assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
}
-func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T){
+func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) {
log := initLog(t)
ranName := "test1"
return writerMock
}
// o&m intervention
- payload:= []byte {0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
+ payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
xaction := []byte(ranName)
- msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
+ msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
rmrMessengerMock := &mocks.RmrMessengerMock{}
- rmrMessengerMock.On("SendMsg",msg,mock.Anything).Return(msg,nil)
+ rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
config := configuration.ParseConfiguration()
- rmrService:=getRmrService(rmrMessengerMock, log)
+ rmrService := getRmrService(rmrMessengerMock, log)
writer := httptest.NewRecorder()
controller := NewController(log, rmrService, readerProvider, writerProvider, config)
- var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED }
- readerMock.On("GetNodeb",ranName).Return(nodeb, nil)
+ var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
+ readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
// no body
b := new(bytes.Buffer)
req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b)
- param:= httprouter.Param{Key:"ranName", Value: ranName}
- controller.X2ResetHandler(writer, req, []httprouter.Param {param})
+ param := httprouter.Param{Key: "ranName", Value: ranName}
+ controller.X2ResetHandler(writer, req, []httprouter.Param{param})
assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
}
-func TestX2ResetHandleFailureInvalidBody(t *testing.T){
+func TestX2ResetHandleFailureInvalidBody(t *testing.T) {
log := initLog(t)
ranName := "test1"
rmrMessengerMock := &mocks.RmrMessengerMock{}
config := configuration.ParseConfiguration()
- rmrService:=getRmrService(rmrMessengerMock, log)
+ rmrService := getRmrService(rmrMessengerMock, log)
writer := httptest.NewRecorder()
controller := NewController(log, rmrService, readerProvider, writerProvider, config)
b := strings.NewReader("{cause:\"protocol:transfer-syntax-error\"")
req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b)
- param:= httprouter.Param{Key:"ranName", Value: ranName}
- controller.X2ResetHandler(writer, req, []httprouter.Param {param})
+ param := httprouter.Param{Key: "ranName", Value: ranName}
+ controller.X2ResetHandler(writer, req, []httprouter.Param{param})
assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
_, ok := rmrService.E2sessions[ranName]
}
-func TestHandleErrorResponse(t *testing.T){
+func TestHandleErrorResponse(t *testing.T) {
log := initLog(t)
readerMock := &mocks.RnibReaderMock{}
rmrMessengerMock := &mocks.RmrMessengerMock{}
config := configuration.ParseConfiguration()
- rmrService:=getRmrService(rmrMessengerMock, log)
-
+ rmrService := getRmrService(rmrMessengerMock, log)
controller := NewController(log, rmrService, readerProvider, writerProvider, config)
writer := httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewRnibDbError(),writer)
+ controller.handleErrorResponse(e2managererrors.NewRnibDbError(), writer)
assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewCommandAlreadyInProgressError(),writer)
+ controller.handleErrorResponse(e2managererrors.NewCommandAlreadyInProgressError(), writer)
assert.Equal(t, http.StatusMethodNotAllowed, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewHeaderValidationError(),writer)
+ controller.handleErrorResponse(e2managererrors.NewHeaderValidationError(), writer)
assert.Equal(t, http.StatusUnsupportedMediaType, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewWrongStateError("",""),writer)
+ controller.handleErrorResponse(e2managererrors.NewWrongStateError("", ""), writer)
assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewRequestValidationError(),writer)
+ controller.handleErrorResponse(e2managererrors.NewRequestValidationError(), writer)
assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewRmrError(),writer)
+ controller.handleErrorResponse(e2managererrors.NewRmrError(), writer)
assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(e2managererrors.NewResourceNotFoundError(),writer)
+ controller.handleErrorResponse(e2managererrors.NewResourceNotFoundError(), writer)
assert.Equal(t, http.StatusNotFound, writer.Result().StatusCode)
writer = httptest.NewRecorder()
- controller.handleErrorResponse(fmt.Errorf("ErrorError"),writer)
+ controller.handleErrorResponse(fmt.Errorf("ErrorError"), writer)
assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
}
import (
"e2mgr/logger"
"e2mgr/models"
- "e2mgr/providers"
+ "e2mgr/providers/httpmsghandlerprovider"
"e2mgr/rNibWriter"
"e2mgr/services"
"e2mgr/sessions"
}
}
-
func prettifyRequest(request *http.Request) string {
dump, _ := httputil.DumpRequest(request, true)
requestPrettyPrint := strings.Replace(string(dump), "\r\n", " ", -1)
rc.Logger.Infof("[Client -> E2 Manager] #nodeb_controller.HandleRequest - request: %v", prettifyRequest(request))
messageTypeParam := params.ByName("messageType")
- requestHandlerProvider := providers.NewRequestHandlerProvider(rc.rnibWriterProvider)
+ requestHandlerProvider := httpmsghandlerprovider.NewRequestHandlerProvider(rc.rnibWriterProvider)
handler, err := requestHandlerProvider.GetHandler(rc.Logger, messageTypeParam)
if err != nil {
printHandlingRequestElapsedTimeInMs(rc.Logger, startTime)
}
-func (rc NodebController) GetNodebIdList (writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
+func (rc NodebController) GetNodebIdList(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
startTime := time.Now()
rnibReaderService := services.NewRnibReaderService(rc.rnibReaderProvider)
nodebIdList, rnibError := rnibReaderService.GetNodebIdList()
if rnibError != nil {
rc.Logger.Errorf("%v", rnibError);
httpStatusCode, errorCode, errorMessage := rnibErrorToHttpError(rnibError)
- handleErrorResponse(rc.Logger,httpStatusCode,errorCode,errorMessage,writer,startTime )
+ handleErrorResponse(rc.Logger, httpStatusCode, errorCode, errorMessage, writer, startTime)
return;
}
- pmList:= utils.ConvertNodebIdListToProtoMessageList(*nodebIdList)
+ pmList := utils.ConvertNodebIdListToProtoMessageList(*nodebIdList)
result, err := utils.MarshalProtoMessageListToJsonArray(pmList)
if err != nil {
rc.Logger.Errorf("%v", err);
- handleErrorResponse(rc.Logger,http.StatusInternalServerError,internalErrorCode,internalErrorMessage,writer,startTime )
+ handleErrorResponse(rc.Logger, http.StatusInternalServerError, internalErrorCode, internalErrorMessage, writer, startTime)
return;
}
+++ /dev/null
-mode: set
-e2mgr/controllers/nodeb_controller.go:69.68,78.2 3 1
-e2mgr/controllers/nodeb_controller.go:81.52,85.2 3 1
-e2mgr/controllers/nodeb_controller.go:87.118,95.16 6 1
-e2mgr/controllers/nodeb_controller.go:100.2,102.16 2 1
-e2mgr/controllers/nodeb_controller.go:107.2,109.74 2 1
-e2mgr/controllers/nodeb_controller.go:114.2,116.16 2 1
-e2mgr/controllers/nodeb_controller.go:121.2,134.16 8 1
-e2mgr/controllers/nodeb_controller.go:139.2,139.59 1 1
-e2mgr/controllers/nodeb_controller.go:95.16,98.3 2 1
-e2mgr/controllers/nodeb_controller.go:102.16,105.3 2 0
-e2mgr/controllers/nodeb_controller.go:109.74,112.3 2 1
-e2mgr/controllers/nodeb_controller.go:116.16,119.3 2 0
-e2mgr/controllers/nodeb_controller.go:134.16,137.3 2 0
-e2mgr/controllers/nodeb_controller.go:142.120,147.22 4 1
-e2mgr/controllers/nodeb_controller.go:154.2,157.16 3 1
-e2mgr/controllers/nodeb_controller.go:163.2,165.30 3 1
-e2mgr/controllers/nodeb_controller.go:147.22,152.3 4 1
-e2mgr/controllers/nodeb_controller.go:157.16,161.3 3 0
-e2mgr/controllers/nodeb_controller.go:168.113,174.22 5 1
-e2mgr/controllers/nodeb_controller.go:181.2,184.16 3 1
-e2mgr/controllers/nodeb_controller.go:190.2,192.30 3 1
-e2mgr/controllers/nodeb_controller.go:174.22,179.3 4 1
-e2mgr/controllers/nodeb_controller.go:184.16,188.3 3 0
-e2mgr/controllers/nodeb_controller.go:195.129,198.2 1 1
-e2mgr/controllers/nodeb_controller.go:200.93,202.78 2 1
-e2mgr/controllers/nodeb_controller.go:206.2,206.28 1 1
-e2mgr/controllers/nodeb_controller.go:202.78,205.3 2 0
-e2mgr/controllers/nodeb_controller.go:209.96,211.33 1 1
-e2mgr/controllers/nodeb_controller.go:215.2,219.16 2 1
-e2mgr/controllers/nodeb_controller.go:223.2,223.12 1 1
-e2mgr/controllers/nodeb_controller.go:211.33,214.3 2 0
-e2mgr/controllers/nodeb_controller.go:219.16,221.3 1 1
-e2mgr/controllers/nodeb_controller.go:226.150,235.16 8 1
-e2mgr/controllers/nodeb_controller.go:235.16,237.3 1 0
-e2mgr/controllers/nodeb_controller.go:240.86,243.2 1 1
-e2mgr/controllers/nodeb_controller.go:245.75,246.29 1 1
-e2mgr/controllers/nodeb_controller.go:247.33,248.70 1 1
-e2mgr/controllers/nodeb_controller.go:249.29,250.81 1 1
-e2mgr/controllers/nodeb_controller.go:251.31,252.77 1 0
-e2mgr/controllers/nodeb_controller.go:253.10,254.81 1 0
-e2mgr/controllers/controller.go:40.107,48.2 2 1
-e2mgr/controllers/controller.go:50.107,53.2 1 1
-e2mgr/controllers/controller.go:57.72,61.20 2 1
-e2mgr/controllers/controller.go:70.2,71.16 2 1
-e2mgr/controllers/controller.go:76.2,78.16 2 1
-e2mgr/controllers/controller.go:83.2,84.110 2 1
-e2mgr/controllers/controller.go:61.20,64.17 2 1
-e2mgr/controllers/controller.go:64.17,67.4 2 1
-e2mgr/controllers/controller.go:71.16,74.3 2 0
-e2mgr/controllers/controller.go:78.16,81.3 2 1
-e2mgr/controllers/controller.go:87.72,89.53 1 1
-e2mgr/controllers/controller.go:94.2,94.12 1 1
-e2mgr/controllers/controller.go:89.53,93.3 2 1
-e2mgr/controllers/controller.go:97.80,102.16 3 1
-e2mgr/controllers/controller.go:122.2,130.16 6 1
-e2mgr/controllers/controller.go:102.16,103.21 1 1
-e2mgr/controllers/controller.go:104.37,107.46 3 1
-e2mgr/controllers/controller.go:108.55,111.43 3 1
-e2mgr/controllers/controller.go:112.47,115.47 3 1
-e2mgr/controllers/controller.go:116.11,119.46 3 1
-e2mgr/controllers/controller.go:130.16,132.3 1 0
-e2mgr/logger/logger.go:71.58,72.85 1 1
-e2mgr/logger/logger.go:75.2,75.27 1 1
-e2mgr/logger/logger.go:72.85,74.3 1 1
-e2mgr/logger/logger.go:78.54,81.19 3 1
-e2mgr/logger/logger.go:99.2,99.16 1 1
-e2mgr/logger/logger.go:102.2,102.36 1 1
-e2mgr/logger/logger.go:82.18,83.54 1 1
-e2mgr/logger/logger.go:84.17,85.53 1 1
-e2mgr/logger/logger.go:86.17,87.53 1 0
-e2mgr/logger/logger.go:88.18,89.54 1 0
-e2mgr/logger/logger.go:90.19,91.55 1 0
-e2mgr/logger/logger.go:92.18,93.54 1 0
-e2mgr/logger/logger.go:94.18,95.54 1 1
-e2mgr/logger/logger.go:96.10,97.58 1 1
-e2mgr/logger/logger.go:99.16,101.3 1 1
-e2mgr/logger/logger.go:105.29,108.2 2 1
-e2mgr/logger/logger.go:110.60,111.21 1 1
-e2mgr/logger/logger.go:111.21,114.3 2 1
-e2mgr/logger/logger.go:117.61,118.21 1 1
-e2mgr/logger/logger.go:118.21,121.3 2 1
-e2mgr/logger/logger.go:124.61,127.2 2 1
-e2mgr/logger/logger.go:129.60,132.2 2 0
-e2mgr/logger/logger.go:134.54,138.2 3 1
-e2mgr/logger/logger.go:140.34,142.2 1 1
-e2mgr/logger/logger.go:144.35,146.2 1 1
-e2mgr/logger/logger.go:148.62,151.2 2 1
-e2mgr/logger/logger.go:153.62,173.2 2 1
-e2mgr/logger/logger.go:175.92,177.2 1 1
-e2mgr/logger/logger.go:179.84,183.2 3 1
-e2mgr/main/http_server.go:39.13,43.16 4 0
-e2mgr/main/http_server.go:47.2,60.59 13 0
-e2mgr/main/http_server.go:43.16,46.3 2 0
-e2mgr/main/http_server.go:63.163,76.58 10 0
-e2mgr/main/http_server.go:76.58,78.3 1 0
-e2mgr/models/e2_request_message.go:33.59,35.2 1 1
-e2mgr/models/e2_request_message.go:37.65,39.2 1 1
-e2mgr/models/e2_request_message.go:41.128,43.2 1 1
-e2mgr/models/e2_request_message.go:45.90,52.2 4 1
-e2mgr/models/notification_request.go:30.125,38.2 1 0
-e2mgr/models/notification_response.go:31.86,33.2 1 0
-e2mgr/providers/incoming_request_handler_provider.go:41.79,47.2 1 0
-e2mgr/providers/incoming_request_handler_provider.go:50.91,55.2 1 0
-e2mgr/providers/incoming_request_handler_provider.go:57.121,60.9 2 0
-e2mgr/providers/incoming_request_handler_provider.go:65.2,65.21 1 0
-e2mgr/providers/incoming_request_handler_provider.go:60.9,63.3 2 0
-e2mgr/providers/notification_handler_provider.go:34.160,40.2 1 1
-e2mgr/providers/notification_handler_provider.go:42.164,54.2 1 1
-e2mgr/providers/notification_handler_provider.go:56.123,59.9 2 1
-e2mgr/providers/notification_handler_provider.go:63.2,63.21 1 1
-e2mgr/providers/notification_handler_provider.go:59.9,61.3 1 1
-e2mgr/providers/request_handler_provider.go:32.105,35.2 2 1
-e2mgr/providers/request_handler_provider.go:37.98,42.2 1 1
-e2mgr/providers/request_handler_provider.go:44.120,47.9 2 1
-e2mgr/providers/request_handler_provider.go:53.2,53.21 1 1
-e2mgr/providers/request_handler_provider.go:47.9,51.3 3 1
-e2mgr/rNibWriter/rNibWriter.go:47.43,49.22 1 1
-e2mgr/rNibWriter/rNibWriter.go:49.22,52.4 2 0
-e2mgr/rNibWriter/rNibWriter.go:53.25,55.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:60.86,62.2 1 1
-e2mgr/rNibWriter/rNibWriter.go:66.33,68.2 1 1
-e2mgr/rNibWriter/rNibWriter.go:72.119,76.72 2 1
-e2mgr/rNibWriter/rNibWriter.go:79.2,81.16 3 1
-e2mgr/rNibWriter/rNibWriter.go:84.2,86.19 3 1
-e2mgr/rNibWriter/rNibWriter.go:89.2,91.24 2 1
-e2mgr/rNibWriter/rNibWriter.go:99.2,99.28 1 1
-e2mgr/rNibWriter/rNibWriter.go:105.2,105.28 1 1
-e2mgr/rNibWriter/rNibWriter.go:111.2,112.16 2 1
-e2mgr/rNibWriter/rNibWriter.go:115.2,115.24 1 1
-e2mgr/rNibWriter/rNibWriter.go:125.2,125.12 1 1
-e2mgr/rNibWriter/rNibWriter.go:76.72,78.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:81.16,83.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:86.19,88.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:91.24,93.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:96.3,96.35 1 1
-e2mgr/rNibWriter/rNibWriter.go:93.20,95.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:99.28,101.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:101.20,103.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:105.28,107.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:107.20,109.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:112.16,114.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:115.24,117.17 2 1
-e2mgr/rNibWriter/rNibWriter.go:120.3,121.17 2 1
-e2mgr/rNibWriter/rNibWriter.go:117.17,119.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:121.17,123.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:131.142,137.20 3 1
-e2mgr/rNibWriter/rNibWriter.go:141.2,143.16 2 1
-e2mgr/rNibWriter/rNibWriter.go:147.2,152.16 4 1
-e2mgr/rNibWriter/rNibWriter.go:156.2,156.12 1 1
-e2mgr/rNibWriter/rNibWriter.go:137.20,139.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:143.16,145.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:152.16,154.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:162.13,164.2 1 1
-e2mgr/rNibWriter/rNibWriter.go:166.144,167.29 1 1
-e2mgr/rNibWriter/rNibWriter.go:184.2,184.19 1 1
-e2mgr/rNibWriter/rNibWriter.go:167.29,170.17 3 1
-e2mgr/rNibWriter/rNibWriter.go:173.3,174.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:177.3,179.20 3 1
-e2mgr/rNibWriter/rNibWriter.go:182.3,182.39 1 1
-e2mgr/rNibWriter/rNibWriter.go:170.17,172.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:174.20,176.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:179.20,181.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:187.143,188.29 1 1
-e2mgr/rNibWriter/rNibWriter.go:205.2,205.19 1 1
-e2mgr/rNibWriter/rNibWriter.go:188.29,191.17 3 1
-e2mgr/rNibWriter/rNibWriter.go:194.3,195.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:198.3,200.20 3 1
-e2mgr/rNibWriter/rNibWriter.go:203.3,203.39 1 1
-e2mgr/rNibWriter/rNibWriter.go:191.17,193.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:195.20,197.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:200.20,202.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:208.55,210.2 1 1
-e2mgr/rmrCgo/rmrCgoTypes.go:31.87,39.2 1 1
-e2mgr/rmrCgo/rmrCgoTypes.go:41.96,48.2 1 1
-e2mgr/rmrCgo/rmrCgoTypes.go:119.32,121.2 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:32.66,48.93 7 0
-e2mgr/rmrCgo/rmrCgoUtils.go:52.2,52.13 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:48.93,50.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:55.115,68.50 9 0
-e2mgr/rmrCgo/rmrCgoUtils.go:73.2,74.51 2 0
-e2mgr/rmrCgo/rmrCgoUtils.go:78.2,82.16 4 0
-e2mgr/rmrCgo/rmrCgoUtils.go:86.2,87.16 2 0
-e2mgr/rmrCgo/rmrCgoUtils.go:91.2,92.34 2 0
-e2mgr/rmrCgo/rmrCgoUtils.go:96.2,96.14 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:68.50,70.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:74.51,76.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:82.16,85.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:87.16,90.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:92.34,95.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:100.47,101.23 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:101.23,102.24 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:105.3,105.138 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:102.24,104.4 1 0
-e2mgr/rmrCgo/rmrCgoApi.go:34.99,41.21 6 1
-e2mgr/rmrCgo/rmrCgoApi.go:48.2,50.11 3 1
-e2mgr/rmrCgo/rmrCgoApi.go:41.21,43.39 2 1
-e2mgr/rmrCgo/rmrCgoApi.go:43.39,46.4 2 0
-e2mgr/rmrCgo/rmrCgoApi.go:53.71,59.21 6 0
-e2mgr/rmrCgo/rmrCgoApi.go:66.2,74.21 7 0
-e2mgr/rmrCgo/rmrCgoApi.go:80.2,81.50 2 0
-e2mgr/rmrCgo/rmrCgoApi.go:59.21,63.3 3 0
-e2mgr/rmrCgo/rmrCgoApi.go:74.21,78.3 3 0
-e2mgr/rmrCgo/rmrCgoApi.go:84.46,93.21 7 0
-e2mgr/rmrCgo/rmrCgoApi.go:99.2,103.18 5 0
-e2mgr/rmrCgo/rmrCgoApi.go:93.21,97.3 3 0
-e2mgr/rmrCgo/rmrCgoApi.go:106.39,112.2 5 0
-e2mgr/rmrCgo/rmrCgoApi.go:114.36,117.2 2 1
-e2mgr/rmrCgo/rmrCgoApi.go:119.29,123.2 3 0
-e2mgr/rnibBuilders/node_info_builder.go:25.111,35.2 8 1
-e2mgr/services/rmr_service.go:38.90,40.2 1 1
-e2mgr/services/rmr_service.go:53.61,62.2 1 1
-e2mgr/services/rmr_service.go:65.21,80.2 9 1
-e2mgr/services/rmr_service.go:82.76,93.16 6 0
-e2mgr/services/rmr_service.go:93.16,96.3 2 0
-e2mgr/services/rmr_service.go:100.40,102.6 1 1
-e2mgr/services/rmr_service.go:102.6,107.17 3 1
-e2mgr/services/rmr_service.go:111.3,111.79 1 0
-e2mgr/services/rmr_service.go:107.17,108.12 1 1
-e2mgr/services/rmr_service.go:115.36,116.5 1 0
-e2mgr/services/rmr_service.go:116.5,119.10 2 0
-e2mgr/services/rmr_service.go:125.3,126.29 2 0
-e2mgr/services/rmr_service.go:119.10,122.9 2 0
-e2mgr/services/rmr_service.go:130.37,131.35 1 1
-e2mgr/services/rmr_service.go:131.35,135.3 3 1
-e2mgr/services/rnib_reader_service.go:30.83,32.2 1 0
-e2mgr/services/rnib_reader_service.go:36.94,38.2 1 0
-e2mgr/services/rnib_reader_service.go:40.90,43.18 2 0
-e2mgr/services/rnib_reader_service.go:47.2,49.18 2 0
-e2mgr/services/rnib_reader_service.go:53.2,55.26 2 0
-e2mgr/services/rnib_reader_service.go:43.18,45.3 1 0
-e2mgr/services/rnib_reader_service.go:49.18,51.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:36.107,40.2 1 1
-e2mgr/handlers/endc_setup_request_handler.go:42.111,46.20 3 0
-e2mgr/handlers/endc_setup_request_handler.go:52.2,52.16 1 0
-e2mgr/handlers/endc_setup_request_handler.go:46.20,48.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:48.8,50.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:55.226,60.16 3 1
-e2mgr/handlers/endc_setup_request_handler.go:71.2,71.11 1 1
-e2mgr/handlers/endc_setup_request_handler.go:60.16,62.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:62.8,69.3 5 1
-e2mgr/handlers/endc_setup_request_handler.go:74.53,76.2 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:33.91,38.16 3 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:42.2,43.8 2 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:38.16,40.3 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:43.8,44.29 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:65.3,66.44 2 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:44.29,56.87 9 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:56.87,58.5 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:58.10,60.30 2 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:60.30,62.6 1 0
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:32.221,39.96 4 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:43.2,43.27 1 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:52.2,52.39 1 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:39.96,41.3 1 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:43.27,46.119 3 0
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:46.119,49.4 2 0
-e2mgr/handlers/setup_request_handler.go:58.99,62.2 1 1
-e2mgr/handlers/setup_request_handler.go:64.107,68.20 3 0
-e2mgr/handlers/setup_request_handler.go:74.2,74.16 1 0
-e2mgr/handlers/setup_request_handler.go:68.20,70.3 1 0
-e2mgr/handlers/setup_request_handler.go:70.8,72.3 1 0
-e2mgr/handlers/setup_request_handler.go:77.222,82.16 3 1
-e2mgr/handlers/setup_request_handler.go:93.2,93.11 1 1
-e2mgr/handlers/setup_request_handler.go:82.16,84.3 1 0
-e2mgr/handlers/setup_request_handler.go:84.8,91.3 5 1
-e2mgr/handlers/setup_request_handler.go:96.59,103.12 3 0
-e2mgr/handlers/setup_request_handler.go:108.2,108.19 1 0
-e2mgr/handlers/setup_request_handler.go:111.2,111.53 1 0
-e2mgr/handlers/setup_request_handler.go:103.12,106.3 1 0
-e2mgr/handlers/setup_request_handler.go:108.19,110.3 1 0
-e2mgr/handlers/setup_request_handler.go:118.37,119.91 1 1
-e2mgr/handlers/setup_request_handler.go:123.2,123.21 1 1
-e2mgr/handlers/setup_request_handler.go:127.2,127.20 1 1
-e2mgr/handlers/setup_request_handler.go:131.2,131.134 1 1
-e2mgr/handlers/setup_request_handler.go:135.2,135.12 1 1
-e2mgr/handlers/setup_request_handler.go:119.91,121.3 1 1
-e2mgr/handlers/setup_request_handler.go:123.21,125.3 1 1
-e2mgr/handlers/setup_request_handler.go:127.20,129.3 1 1
-e2mgr/handlers/setup_request_handler.go:131.134,133.3 1 1
-e2mgr/handlers/setup_request_handler.go:139.49,141.2 1 0
-e2mgr/handlers/setup_request_handler.go:143.13,147.42 2 1
-e2mgr/handlers/setup_request_handler.go:147.42,148.13 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:32.91,37.16 3 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:41.2,42.8 2 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:37.16,39.3 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:42.8,43.29 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:64.3,65.44 2 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:43.29,55.87 9 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:55.87,57.5 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:57.10,59.30 2 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:59.30,61.6 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:31.98,33.52 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:37.2,39.116 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:43.2,45.35 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:49.2,51.31 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:55.2,59.93 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:63.2,67.87 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:71.2,71.176 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:33.52,35.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:39.116,41.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:45.35,47.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:51.31,53.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:59.93,61.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:67.87,69.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:74.144,78.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:82.2,85.16 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:89.2,91.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:78.16,80.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:85.16,87.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:94.106,96.84 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:100.2,100.80 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:96.84,98.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:103.135,110.16 4 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:114.2,114.55 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:118.2,120.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:124.2,124.53 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:128.2,130.41 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:140.2,142.49 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:146.2,148.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:152.2,152.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:110.16,112.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:114.55,116.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:120.16,122.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:124.53,126.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:130.41,133.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:137.3,137.128 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:133.17,135.4 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:142.49,144.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:148.16,150.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:156.42,160.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:162.180,164.62 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:168.2,168.20 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:164.62,166.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:171.171,173.66 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:177.2,179.103 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:183.2,185.54 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:173.66,175.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:179.103,181.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:188.84,193.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:195.82,204.37 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:208.2,208.22 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:204.37,206.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:211.66,213.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:215.54,217.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:219.169,229.28 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:233.2,233.35 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:229.28,231.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:236.120,238.58 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:242.2,242.104 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:238.58,240.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:245.174,248.57 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:256.2,256.14 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:248.57,254.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:259.171,262.50 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:266.2,268.119 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:272.2,274.54 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:262.50,264.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:268.119,270.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:277.130,280.19 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:284.2,286.22 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:290.2,290.114 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:280.19,282.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:286.22,288.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:293.132,297.19 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:301.2,303.22 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:307.2,311.116 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:315.2,315.94 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:297.19,299.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:303.22,305.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:311.116,313.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:318.117,321.33 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:325.2,332.29 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:321.33,323.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:335.117,338.33 2 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:342.2,349.29 2 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:338.33,340.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:352.144,355.35 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:364.2,364.133 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:356.31,357.59 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:358.31,359.59 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:360.40,361.87 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:367.180,371.56 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:375.2,377.59 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:381.2,381.53 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:371.56,373.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:377.59,379.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:384.170,392.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:394.135,398.22 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:402.2,402.29 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:406.2,408.59 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:412.2,412.58 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:398.22,400.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:402.29,404.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:408.59,410.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:415.50,417.28 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:421.2,421.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:417.28,419.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:424.202,427.36 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:431.2,433.54 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:438.2,438.51 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:442.2,444.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:448.2,448.21 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:452.2,452.47 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:427.36,429.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:433.54,436.3 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:438.51,440.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:444.16,446.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:448.21,450.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:455.161,458.105 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:462.2,462.103 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:466.2,466.107 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:458.105,460.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:462.103,464.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:469.136,472.44 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:476.2,478.44 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:482.2,482.45 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:472.44,474.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:478.44,480.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:485.110,490.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:492.145,498.102 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:502.2,504.69 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:509.2,509.32 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:498.102,500.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:504.69,507.3 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:512.146,516.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:520.2,525.30 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:516.16,518.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:528.127,535.16 4 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:539.2,539.40 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:543.2,545.106 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:549.2,551.65 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:561.2,561.30 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:535.16,537.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:539.40,541.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:545.106,547.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:551.65,554.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:558.3,558.107 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:554.17,556.4 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:564.141,567.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:571.2,572.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:567.16,569.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:575.143,579.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:581.152,585.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:587.161,591.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:593.142,596.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:600.2,601.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:596.16,598.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:604.159,607.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:611.2,612.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:607.16,609.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:615.161,616.31 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:632.2,632.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:616.31,620.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:624.3,626.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:620.12,621.12 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:626.17,628.4 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:635.114,641.16 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:645.2,645.69 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:653.2,653.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:641.16,643.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:645.69,648.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:648.17,650.4 1 0
-e2mgr/handlers/endc_configuration_update_handler.go:36.54,43.16 6 1
-e2mgr/handlers/endc_configuration_update_handler.go:67.2,67.230 1 1
-e2mgr/handlers/endc_configuration_update_handler.go:43.16,45.13 2 1
-e2mgr/handlers/endc_configuration_update_handler.go:53.3,53.93 1 1
-e2mgr/handlers/endc_configuration_update_handler.go:45.13,50.4 4 1
-e2mgr/handlers/endc_configuration_update_handler.go:50.9,52.4 1 0
-e2mgr/handlers/endc_configuration_update_handler.go:54.8,58.13 4 0
-e2mgr/handlers/endc_configuration_update_handler.go:58.13,63.4 4 0
-e2mgr/handlers/endc_configuration_update_handler.go:63.9,65.4 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:34.91,40.16 3 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:44.2,45.8 2 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:40.16,42.3 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:45.8,47.17 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:72.3,73.44 2 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:47.17,62.87 12 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:62.87,64.5 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:64.10,66.30 2 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:66.30,68.6 1 0
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:32.94,35.54 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:68.2,68.27 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:35.54,38.124 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:38.124,40.82 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:40.82,43.72 3 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:43.72,44.38 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:44.38,45.50 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:46.53,49.22 3 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:52.58,53.135 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:54.70,56.66 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:49.22,51.9 1 0
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:56.66,58.9 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:58.14,60.9 1 0
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:71.196,73.16 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:77.2,79.50 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:73.16,75.3 1 0
-e2mgr/handlers/setup_response_notification_handler.go:33.91,36.16 2 1
-e2mgr/handlers/setup_response_notification_handler.go:40.2,42.8 3 1
-e2mgr/handlers/setup_response_notification_handler.go:46.2,46.136 1 1
-e2mgr/handlers/setup_response_notification_handler.go:36.16,38.3 1 1
-e2mgr/handlers/setup_response_notification_handler.go:42.8,45.3 2 0
-e2mgr/handlers/setup_response_notification_handler.go:49.104,51.2 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:32.217,39.96 4 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:43.2,43.27 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:51.2,51.39 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:39.96,41.3 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:43.27,46.119 3 0
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:46.119,49.4 2 0
-e2mgr/handlers/x2enb_configuration_update_handler.go:36.54,43.16 6 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:68.2,68.230 1 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:43.16,45.12 2 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:53.3,53.94 1 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:45.12,50.4 4 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:50.9,52.4 1 0
-e2mgr/handlers/x2enb_configuration_update_handler.go:54.8,59.13 4 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:59.13,64.4 4 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:64.9,66.4 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:45.69,48.23 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:59.2,59.47 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:49.32,50.116 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:51.31,52.114 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:53.38,54.121 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:55.37,56.120 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:62.63,65.16 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:96.2,96.21 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:65.16,72.45 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:72.45,75.40 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:75.40,76.42 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:77.63,79.60 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:82.6,82.60 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:85.82,85.82 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:87.68,87.68 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:89.81,89.81 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:79.60,81.7 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:82.60,84.7 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:99.90,107.2 5 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:109.121,116.2 4 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:118.148,125.2 4 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:127.63,130.16 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:154.2,154.21 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:130.16,138.45 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:138.45,141.40 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:141.40,142.42 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:143.78,144.167 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:145.63,146.104 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:147.87,148.194 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:158.127,160.36 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:168.2,168.133 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:161.40,163.154 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:164.42,166.155 2 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:171.122,174.99 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:193.2,193.28 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:174.99,177.55 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:177.55,183.18 4 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:186.4,189.58 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:183.18,185.5 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:196.93,204.40 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:208.2,208.27 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:204.40,206.3 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:210.123,212.45 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:265.2,265.12 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:212.45,215.39 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:215.39,216.41 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:217.83,219.84 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:220.80,222.59 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:223.84,225.19 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:228.5,228.64 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:229.67,231.105 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:232.92,234.136 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:241.78,243.88 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:250.86,252.97 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:253.79,255.77 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:256.93,256.93 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:225.19,227.6 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:234.136,237.69 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:237.69,239.7 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:243.88,246.55 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:246.55,248.7 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:268.126,271.131 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:305.2,305.24 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:271.131,274.54 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:274.54,286.46 7 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:301.4,301.49 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:286.46,289.84 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:289.84,290.64 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:291.65,293.99 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:294.77,296.45 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:308.89,311.102 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:362.2,362.25 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:311.102,314.52 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:314.52,324.127 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:332.4,332.57 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:347.4,348.18 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:351.4,353.160 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:357.4,357.53 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:324.127,327.55 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:327.55,329.6 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:333.34,334.142 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:339.34,340.142 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:334.142,336.6 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:336.11,338.6 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:340.142,342.6 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:342.11,344.6 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:348.18,350.5 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:353.160,355.5 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:365.66,368.98 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:378.2,378.12 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:368.98,371.49 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:371.49,375.4 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:383.96,388.52 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:427.2,427.30 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:388.52,391.115 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:391.115,393.76 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:393.76,396.66 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:396.66,397.46 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:398.56,406.28 7 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:408.55,410.21 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:413.7,413.36 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:414.57,415.114 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:416.66,416.66 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:418.50,418.50 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:410.21,412.8 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:430.198,432.16 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:436.2,437.39 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:432.16,434.3 1 0
-e2mgr/handlers/enb_load_information_notification_handler.go:17.134,21.2 1 1
-e2mgr/handlers/enb_load_information_notification_handler.go:23.43,25.2 1 1
-e2mgr/handlers/enb_load_information_notification_handler.go:27.201,42.16 2 1
-e2mgr/handlers/enb_load_information_notification_handler.go:47.2,53.18 4 1
-e2mgr/handlers/enb_load_information_notification_handler.go:58.2,62.20 3 1
-e2mgr/handlers/enb_load_information_notification_handler.go:67.2,67.190 1 1
-e2mgr/handlers/enb_load_information_notification_handler.go:42.16,45.3 2 1
-e2mgr/handlers/enb_load_information_notification_handler.go:53.18,56.3 2 0
-e2mgr/handlers/enb_load_information_notification_handler.go:62.20,65.3 2 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:39.80,43.36 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:53.2,53.104 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:71.2,71.18 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:43.36,46.100 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:46.100,48.4 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:48.9,50.4 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:53.104,56.55 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:56.55,59.130 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:67.4,67.68 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:59.130,62.73 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:62.73,64.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:74.78,81.2 4 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:83.134,86.63 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:92.2,92.63 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:98.2,98.55 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:104.2,104.55 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:110.2,110.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:86.63,88.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:88.8,90.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:92.63,94.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:94.8,96.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:98.55,100.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:100.8,102.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:104.55,106.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:106.8,108.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:113.134,116.60 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:123.2,123.52 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:129.2,129.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:116.60,118.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:118.8,121.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:123.52,125.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:125.8,127.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:132.168,135.63 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:141.2,141.63 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:147.2,147.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:135.63,137.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:137.8,139.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:141.63,143.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:143.8,145.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:149.168,152.60 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:158.2,158.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:152.60,154.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:154.8,156.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:161.121,164.131 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:199.2,199.24 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:164.131,167.54 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:167.54,175.32 5 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:180.4,180.36 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:183.4,183.46 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:194.4,194.41 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:175.32,178.5 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:180.36,182.5 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:184.71,185.200 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:189.71,190.200 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:185.200,187.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:190.200,192.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:202.125,205.146 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:257.2,257.27 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:205.146,208.109 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:208.109,217.42 6 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:221.4,221.46 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:225.4,225.117 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:232.4,232.47 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:247.4,248.18 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:251.4,253.55 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:217.42,219.5 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:221.46,223.5 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:225.117,228.55 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:228.55,230.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:233.55,234.166 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:239.55,240.166 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:234.166,236.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:236.11,238.6 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:240.166,242.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:242.11,244.6 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:248.18,250.5 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:263.100,268.52 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:315.2,315.29 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:268.52,271.119 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:271.119,273.84 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:273.84,276.74 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:276.74,277.116 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:277.116,279.41 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:280.63,282.112 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:306.60,306.60 0 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:282.112,285.86 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:285.86,286.58 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:287.68,290.64 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:296.89,298.25 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:301.11,302.42 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:290.64,295.12 4 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:298.25,300.12 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:318.202,320.16 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:324.2,325.43 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:320.16,322.3 1 0
-e2mgr/handlers/ranLostConnectionHandler.go:36.153,41.2 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:43.91,49.86 4 1
-e2mgr/handlers/ranLostConnectionHandler.go:63.2,65.8 3 1
-e2mgr/handlers/ranLostConnectionHandler.go:49.86,51.3 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:51.8,55.83 4 1
-e2mgr/handlers/ranLostConnectionHandler.go:55.83,57.4 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:57.9,61.4 2 1
-e2mgr/handlers/ranLostConnectionHandler.go:65.8,68.3 2 1
-e2mgr/handlers/ranLostConnectionHandler.go:72.70,73.28 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:74.131,75.63 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:76.46,77.153 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:78.10,79.60 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:31.162,34.16 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:38.2,41.159 3 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:45.2,45.27 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:50.2,50.17 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:34.16,36.3 1 0
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:41.159,43.3 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:45.27,48.3 2 0
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:78.158,81.16 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:85.2,88.132 3 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:92.2,92.27 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:97.2,97.17 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:81.16,83.3 1 0
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:88.132,90.3 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:92.27,95.3 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:100.175,102.16 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:106.2,109.27 3 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:115.2,115.62 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:102.16,104.3 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:109.27,113.3 3 1
-e2mgr/handlers/x2apSetup_response_notification_handler.go:33.91,38.16 3 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:42.2,44.8 2 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:38.16,40.3 1 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:44.8,45.17 1 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:69.3,70.44 2 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:45.17,60.87 12 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:60.87,62.5 1 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:62.10,64.30 2 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:64.30,66.6 1 0
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:36.78,37.25 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:51.2,51.12 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:38.31,40.130 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:41.28,43.131 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:44.27,46.113 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:47.23,49.128 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:54.114,57.37 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:63.2,63.41 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:71.2,71.44 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:79.2,79.171 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:98.2,98.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:57.37,61.3 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:63.41,64.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:67.3,67.93 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:64.22,66.4 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:71.44,72.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:75.3,75.93 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:72.22,74.4 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:79.171,80.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:83.3,87.91 5 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:95.3,95.67 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:80.22,82.4 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:87.91,94.4 4 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:102.90,105.54 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:138.2,138.27 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:105.54,108.120 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:108.120,110.74 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:110.74,113.64 3 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:113.64,114.34 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:114.34,115.46 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:116.49,119.22 3 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:122.54,123.131 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:124.66,126.66 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:119.22,121.9 1 0
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:126.66,128.9 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:128.14,130.9 1 0
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:141.192,143.16 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:147.2,149.46 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:143.16,145.3 1 0
-e2mgr/handlers/delete_all_request_handler.go:41.68,47.2 1 1
-e2mgr/handlers/delete_all_request_handler.go:49.158,52.16 2 1
-e2mgr/handlers/delete_all_request_handler.go:56.2,56.26 1 1
-e2mgr/handlers/delete_all_request_handler.go:61.2,68.16 6 1
-e2mgr/handlers/delete_all_request_handler.go:72.2,72.12 1 1
-e2mgr/handlers/delete_all_request_handler.go:52.16,54.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:56.26,58.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:68.16,70.3 1 0
-e2mgr/handlers/delete_all_request_handler.go:75.116,78.16 2 1
-e2mgr/handlers/delete_all_request_handler.go:83.2,83.30 1 1
-e2mgr/handlers/delete_all_request_handler.go:87.2,87.42 1 1
-e2mgr/handlers/delete_all_request_handler.go:105.2,106.18 2 1
-e2mgr/handlers/delete_all_request_handler.go:78.16,81.3 2 1
-e2mgr/handlers/delete_all_request_handler.go:83.30,85.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:87.42,91.17 2 1
-e2mgr/handlers/delete_all_request_handler.go:97.3,97.20 1 1
-e2mgr/handlers/delete_all_request_handler.go:102.3,102.55 1 1
-e2mgr/handlers/delete_all_request_handler.go:91.17,94.12 2 1
-e2mgr/handlers/delete_all_request_handler.go:97.20,100.12 2 1
-e2mgr/handlers/delete_all_request_handler.go:109.142,112.18 2 1
-e2mgr/handlers/delete_all_request_handler.go:116.2,120.16 3 1
-e2mgr/handlers/delete_all_request_handler.go:126.2,126.27 1 1
-e2mgr/handlers/delete_all_request_handler.go:112.18,114.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:120.16,124.3 2 1
-e2mgr/handlers/delete_all_request_handler.go:126.27,129.3 1 0
-e2mgr/handlers/delete_all_request_handler.go:132.146,134.65 1 1
-e2mgr/handlers/delete_all_request_handler.go:138.2,138.70 1 1
-e2mgr/handlers/delete_all_request_handler.go:143.2,147.16 3 1
-e2mgr/handlers/delete_all_request_handler.go:153.2,153.137 1 1
-e2mgr/handlers/delete_all_request_handler.go:134.65,136.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:138.70,141.3 2 0
-e2mgr/handlers/delete_all_request_handler.go:147.16,151.3 2 1
module e2mgr
require (
- gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.18
- gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.18
- gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.18
+ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.19
+ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.19
+ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.19
gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.2.0
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect
github.com/go-ozzo/ozzo-validation v3.5.0+incompatible
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.17/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.18 h1:JuWtnrDLcqEnZz3cMLQkJ/2cy/3AscuZuef8jkvidHs=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.18/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.19 h1:b6ggNQ4PdWxCkQupfus80nsCs0YD84u+cGc+nQ2W560=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.19/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.8 h1:25mglk3nUhSkVYnpxJH2SF9SccY2ecLio/OGBsJLNjk=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.8/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.9 h1:433mb6o1LXwDDxuq2k8NOWbo68HHgdlfxZo0s8X6n7g=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.17/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.18 h1:BKszWTZv/JpYn0vadQXUg8Ol8qqIrjFHs9BY58BHTtw=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.18/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.19 h1:5VGHtsiGnR/VfcsqhbKVScUTLBgoePp1KhSVylwlFKM=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.19/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.8 h1:nvJjn4VyRGuyp5irasfFSPKW4zNDTh12sfky53UaqL4=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.8/go.mod h1:wqyKCJkXzU/UqeuRBUv3QrMHYVI544wdoMav3aeJXdE=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.9 h1:ziuiw/eX0zBqdEGTz3Jdvp9KbirFt5mwjk6bx7c20pc=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.17/go.mod h1:kdgMqHn3InTc9qj24qbzXJo6zAyF1YTKDI/rca868pQ=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.18 h1:pkpyFGLV7hPd8AnheMnDl6r5a5gtIANjXhqLZmMxUz8=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.18/go.mod h1:kdgMqHn3InTc9qj24qbzXJo6zAyF1YTKDI/rca868pQ=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.19 h1:WwUWG3mp2uU9ouqAzj4d6dUGZUA+2HmutQBiH4s4UIw=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.19/go.mod h1:7fQ7/R9hBsCi5g6444ySaavYLB+/aCsCyDEiqWK+L34=
gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1 h1:D2fU0/YXdqSNYsmptSBbkDfG76uBFKjnhQiq5cD4WT4=
gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1/go.mod h1:2Y8gw2jqj9urI8VFqFQn7BX0J3A852+YrXVV9V8gOt4=
gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.2.0 h1:7edCLIQtk9xCwxTtLRUlXr8wQ6nmr/Mo4ZoqjF3m0NE=
import (
"e2mgr/logger"
+ "e2mgr/managers"
"e2mgr/models"
- "e2mgr/rNibWriter"
"e2mgr/sessions"
- "fmt"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
)
-type RanLostConnectionHandler struct{
- rnibReaderProvider func() reader.RNibReader
- rnibWriterProvider func() rNibWriter.RNibWriter
+type RanLostConnectionHandler struct {
+ ranReconnectionManager *managers.RanReconnectionManager
}
-func NewRanLostConnectionHandler(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) RanLostConnectionHandler {
+func NewRanLostConnectionHandler(ranReconnectionManager *managers.RanReconnectionManager) RanLostConnectionHandler {
return RanLostConnectionHandler{
- rnibReaderProvider: rnibReaderProvider,
- rnibWriterProvider: rnibWriterProvider,
+ ranReconnectionManager: ranReconnectionManager,
}
}
-func (src RanLostConnectionHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions,
- request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
+func (handler RanLostConnectionHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions, request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
logger.Warnf("#ranLostConnectionHandler.Handle - Received lost connection (transaction id = %s): %s", request.TransactionId, request.Payload)
- var nb *entities.NodebInfo
- var rNibErr common.IRNibError
- if nb, rNibErr = src.rnibReaderProvider().GetNodeb(request.RanName); rNibErr != nil {
- logger.Errorf("#ranLostConnectionHandler.Handle - transactionId %s: rNib reader failed to retrieve nb entity with RanName: %s. Error: %s", request.TransactionId, request.RanName, rNibErr.Error())
- } else {
- logger.Debugf("#ranLostConnectionHandler.Handle - transactionId %s: nb entity has been retrieved. RanName %s, ConnectionStatus %s", request.TransactionId, nb.RanName, nb.ConnectionStatus)
- changeNodebState(logger, nb)
- nbIdentity := &entities.NbIdentity{InventoryName:nb.RanName, GlobalNbId:nb.GlobalNbId}
- if rNibErr = src.rnibWriterProvider().SaveNodeb(nbIdentity, nb); rNibErr != nil {
- logger.Errorf("#ranLostConnectionHandler.Handle - transactionId %s: rNibWriter failed to save nb entity %s. Error: %s", request.TransactionId, nb.RanName, rNibErr.Error())
- } else {
- logger.Infof("#ranLostConnectionHandler.Handle - transactionId %s: saved to rNib. RanName %s, ConnectionStatus %v", request.TransactionId, nb.RanName, nb.ConnectionStatus)
- }
- }
- e2session, ok := e2Sessions[request.TransactionId]
- printHandlingSetupResponseElapsedTimeInMs(logger, "#ranLostConnectionHandler.Handle - Summary: Elapsed time for receiving and handling sctp error response from E2 terminator", request.StartTime)
- if ok {
- printHandlingSetupResponseElapsedTimeInMs(logger, fmt.Sprintf("#ranLostConnectionHandler.Handle- Summary: Total roundtrip elapsed time for transactionId %s", request.TransactionId), e2session.SessionStart)
- delete(e2Sessions, request.TransactionId) // Avoid pinning memory (help GC)
- }
-
-}
+ err := handler.ranReconnectionManager.ReconnectRan(request.RanName)
-func changeNodebState(logger *logger.Logger, nb *entities.NodebInfo) {
- switch nb.ConnectionStatus{
- case entities.ConnectionStatus_CONNECTED, entities.ConnectionStatus_CONNECTING, entities.ConnectionStatus_CONNECTED_SETUP_FAILED:
- nb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
- case entities.ConnectionStatus_DISCONNECTED:
- logger.Infof("#ranLostConnectionHandler.changeNodebState - nb entity with ConnectionStatus %v occurred. RanName: %s", nb.ConnectionStatus, nb.RanName)
- default:
- nb.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
+ if err != nil {
+ logger.Errorf("#ranLostConnectionHandler.Handle - An error occurred while trying to reconnect RAN, %v", err)
+ return
}
}
+////
+//// Copyright 2019 AT&T Intellectual Property
+//// Copyright 2019 Nokia
+////
+//// Licensed under the Apache License, Version 2.0 (the "License");
+//// you may not use this file except in compliance with the License.
+//// You may obtain a copy of the License at
+////
+//// http://www.apache.org/licenses/LICENSE-2.0
+////
+//// Unless required by applicable law or agreed to in writing, software
+//// distributed under the License is distributed on an "AS IS" BASIS,
+//// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//// See the License for the specific language governing permissions and
+//// limitations under the License.
+////
//
-// Copyright 2019 AT&T Intellectual Property
-// Copyright 2019 Nokia
+package handlers
//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
+//import (
+// "e2mgr/logger"
+// "e2mgr/mocks"
+// "e2mgr/models"
+// "e2mgr/rNibWriter"
+// "e2mgr/rmrCgo"
+// "e2mgr/sessions"
+// "e2mgr/tests"
+// "fmt"
+// "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+// "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+// "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+// "github.com/stretchr/testify/mock"
+// "testing"
+// "time"
+//)
//
-// http://www.apache.org/licenses/LICENSE-2.0
+///*
+// * Test an error response while in an x2 setup request session
+// */
+//func TestHandleInSession(t *testing.T){
+// log, err := logger.InitLogger(logger.InfoLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err)
+// }
//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
//
-
-package handlers
-
-import (
- "e2mgr/logger"
- "e2mgr/mocks"
- "e2mgr/models"
- "e2mgr/rNibWriter"
- "e2mgr/rmrCgo"
- "e2mgr/sessions"
- "e2mgr/tests"
- "fmt"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
- "github.com/stretchr/testify/mock"
- "testing"
- "time"
-)
-
-/*
- * Test an error response while in an x2 setup request session
- */
-func TestHandleInSession(t *testing.T){
- log, err := logger.InitLogger(logger.InfoLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- xaction := []byte(fmt.Sprintf("%32s", "1234"))
- e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
- StartTime: time.Now(), TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-
- if _, ok := e2Sessions[string(xaction)]; ok {
- t.Errorf("want: no session entry, got: session entry for: %s", string(xaction) )
- }
-}
-
-/*
- * Test an error response triggered by the E2 Term
- */
-
-func TestHandleNoSession(t *testing.T){
- log, err := logger.InitLogger(logger.InfoLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-
- if _, ok := e2Sessions[transactionId]; !ok {
- t.Errorf("want: session entry for %s, got: no session entry", transactionId )
- }
-}
-/*
- * Test an error response triggered by the E2 Term
- */
-func TestHandleUnsolicitedDisconnectionConnectedSuccess(t *testing.T){
- log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionNotConnectedSuccess(t *testing.T){
- log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionShuttingDownSuccess(t *testing.T){
- log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionShutDownSuccess(t *testing.T){
- log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionReaderFailure(t *testing.T){
- log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- var nb *entities.NodebInfo
- rnibErr := common.RNibError{}
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionWriterFailure(t *testing.T){
- log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
- t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
- }
-
- readerMock :=&mocks.RnibReaderMock{}
- rnibReaderProvider := func() reader.RNibReader {
- return readerMock
- }
- writerMock := &mocks.RnibWriterMock{}
- rnibWriterProvider := func() rNibWriter.RNibWriter {
- return writerMock
- }
- h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
- e2Sessions := make(sessions.E2Sessions)
- transactionId := "1234"
- xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
- e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
- payload := []byte("Error")
- mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
- notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
- TransactionId: string(xaction)}
- var messageChannel chan<- *models.NotificationResponse
-
- nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
- var rnibErr common.IRNibError
- readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
- updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
- writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(common.RNibError{})
-
- h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
-}
+// e2Sessions := make(sessions.E2Sessions)
+// xaction := []byte(fmt.Sprintf("%32s", "1234"))
+// e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
+// StartTime: time.Now(), TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//
+// if _, ok := e2Sessions[string(xaction)]; ok {
+// t.Errorf("want: no session entry, got: session entry for: %s", string(xaction) )
+// }
+//}
+//
+///*
+// * Test an error response triggered by the E2 Term
+// */
+//
+//func TestHandleNoSession(t *testing.T){
+// log, err := logger.InitLogger(logger.InfoLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//
+// if _, ok := e2Sessions[transactionId]; !ok {
+// t.Errorf("want: session entry for %s, got: no session entry", transactionId )
+// }
+//}
+///*
+// * Test an error response triggered by the E2 Term
+// */
+//func TestHandleUnsolicitedDisconnectionConnectedSuccess(t *testing.T){
+// log, err := logger.InitLogger(logger.DebugLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionNotConnectedSuccess(t *testing.T){
+// log, err := logger.InitLogger(logger.DebugLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionShuttingDownSuccess(t *testing.T){
+// log, err := logger.InitLogger(logger.DebugLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionShutDownSuccess(t *testing.T){
+// log, err := logger.InitLogger(logger.DebugLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionReaderFailure(t *testing.T){
+// log, err := logger.InitLogger(logger.DebugLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// var nb *entities.NodebInfo
+// rnibErr := common.RNibError{}
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionWriterFailure(t *testing.T){
+// log, err := logger.InitLogger(logger.DebugLevel)
+// if err!=nil{
+// t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+// }
+//
+// readerMock :=&mocks.RnibReaderMock{}
+// rnibReaderProvider := func() reader.RNibReader {
+// return readerMock
+// }
+// writerMock := &mocks.RnibWriterMock{}
+// rnibWriterProvider := func() rNibWriter.RNibWriter {
+// return writerMock
+// }
+// h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+// e2Sessions := make(sessions.E2Sessions)
+// transactionId := "1234"
+// xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+// e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+// payload := []byte("Error")
+// mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+// notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+// TransactionId: string(xaction)}
+// var messageChannel chan<- *models.NotificationResponse
+//
+// nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+// var rnibErr common.IRNibError
+// readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+// updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(common.RNibError{})
+//
+// h.Handle(log,e2Sessions, ¬ificationRequest, messageChannel)
+//}
wg.Done()
}
-func asn1bstringToString(val []byte, numBits uint) string {
- // Take the last byte
- c := val[len(val)-1]
-
- b := numBits % 8
-
- // If num bits is not evenly divisable by 8 ...
- if b != 0 {
- // ... shift the value to the higher bits (in our case: 0x0b -> 0xb0)
- c <<= 8 - b
- }
-
- if len(val) == 1 {
- return fmt.Sprintf("%02x", c)
- }
- return fmt.Sprintf("%02x%02x", val[:len(val)-1], c)
-}
-
//Expected value in RIC_ID = pLMN_Identity-eNB_ID/<eNB_ID size in bits>
//<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
"e2mgr/controllers"
"e2mgr/logger"
"e2mgr/managers"
+ "e2mgr/managers/notificationmanager"
"e2mgr/models"
"e2mgr/rNibWriter"
"e2mgr/rmrCgo"
"os"
)
-const MAX_RNIB_PULL_INSTANCES = 4
+const MAX_RNIB_POOL_INSTANCES = 4
func main() {
config := configuration.ParseConfiguration()
}
rmrConfig := services.NewRmrConfig(config.Rmr.Port, config.Rmr.MaxMsgSize, 0, logger)
var msgImpl *rmrCgo.Context
- rNibWriter.Init("e2Manager", MAX_RNIB_PULL_INSTANCES)
+ rNibWriter.Init("e2Manager", MAX_RNIB_POOL_INSTANCES)
defer rNibWriter.Close()
- reader.Init("e2Manager", MAX_RNIB_PULL_INSTANCES)
+ reader.Init("e2Manager", MAX_RNIB_POOL_INSTANCES)
defer reader.Close()
- var nManager = managers.NewNotificationManager(reader.GetRNibReader, rNibWriter.GetRNibWriter)
rmrResponseChannel := make(chan *models.NotificationResponse, config.NotificationResponseBuffer)
rmrService := services.NewRmrService(rmrConfig, msgImpl, controllers.E2Sessions, rmrResponseChannel)
+
+ var ranSetupManager = managers.NewRanSetupManager(logger, rmrService, reader.GetRNibReader, rNibWriter.GetRNibWriter)
+ var ranReconnectionManager = managers.NewRanReconnectionManager(logger, config, reader.GetRNibReader, rNibWriter.GetRNibWriter, ranSetupManager)
+ var nManager = notificationmanager.NewNotificationManager(reader.GetRNibReader, rNibWriter.GetRNibWriter, ranReconnectionManager)
+
rmrServiceReceiver := receivers.NewRmrServiceReceiver(*rmrService, nManager)
defer rmrService.CloseContext()
go rmrServiceReceiver.ListenAndHandle()
if err := http.ListenAndServe(port, router); err != nil {
log.Fatalf("#runNodebServer - fail to start http server. Error: %v", err)
}
-}
\ No newline at end of file
+}
// limitations under the License.
//
-package managers
+package notificationmanager
import (
"e2mgr/logger"
+ "e2mgr/managers"
"e2mgr/models"
- "e2mgr/providers"
+ "e2mgr/providers/rmrmsghandlerprovider"
"e2mgr/rNibWriter"
"e2mgr/rmrCgo"
"e2mgr/sessions"
)
type NotificationManager struct {
- notificationHandlerProvider *providers.NotificationHandlerProvider
+ notificationHandlerProvider *rmrmsghandlerprovider.NotificationHandlerProvider
}
-func NewNotificationManager(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *NotificationManager {
- notificationHandlerProvider := providers.NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider)
+func NewNotificationManager(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationManager {
+ notificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
return &NotificationManager{
notificationHandlerProvider: notificationHandlerProvider,
--- /dev/null
+package managers
+
+import (
+ "e2mgr/configuration"
+ "e2mgr/logger"
+ "e2mgr/rNibWriter"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+)
+
+type RanReconnectionManager struct {
+ logger *logger.Logger
+ config *configuration.Configuration
+ rnibReaderProvider func() reader.RNibReader
+ rnibWriterProvider func() rNibWriter.RNibWriter
+ ranSetupManager *RanSetupManager
+}
+
+func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranSetupManager *RanSetupManager) *RanReconnectionManager {
+ return &RanReconnectionManager{
+ logger: logger,
+ config: config,
+ rnibReaderProvider: rnibReaderProvider,
+ rnibWriterProvider: rnibWriterProvider,
+ ranSetupManager: ranSetupManager,
+ }
+}
+
+func (m *RanReconnectionManager) ReconnectRan(inventoryName string) error {
+ nodebInfo, rnibErr := m.rnibReaderProvider().GetNodeb(inventoryName)
+
+ if rnibErr != nil {
+ m.logger.Errorf("#ReconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, rnibErr)
+ return rnibErr
+ }
+
+ if !m.canReconnectRan(nodebInfo) {
+ m.logger.Warnf("#ReconnectRan - RAN name: %s - Cannot reconnect RAN", inventoryName)
+ return m.setConnectionStatusOfUnconnectableRan(nodebInfo)
+ }
+
+ err := m.ranSetupManager.ExecuteSetup(nodebInfo)
+
+ if err != nil {
+ m.logger.Errorf("#ReconnectRan - RAN name: %s - Failed executing setup. Error: %v", inventoryName, err)
+ return err
+ }
+
+ m.logger.Infof("#ReconnectRan - RAN name: %s - Successfully done executing setup", inventoryName)
+ return nil
+}
+
+func (m *RanReconnectionManager) canReconnectRan(nodebInfo *entities.NodebInfo) bool {
+ connectionStatus := nodebInfo.GetConnectionStatus()
+ return connectionStatus != entities.ConnectionStatus_SHUT_DOWN && connectionStatus != entities.ConnectionStatus_SHUTTING_DOWN &&
+ int(nodebInfo.GetConnectionAttempts()) < m.config.MaxConnectionAttempts
+}
+
+func (m *RanReconnectionManager) updateNodebInfoStatus(nodebInfo *entities.NodebInfo, connectionStatus entities.ConnectionStatus) common.IRNibError {
+ nodebInfo.ConnectionStatus = connectionStatus;
+ err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+
+ if err != nil {
+ m.logger.Errorf("#updateNodebInfoStatus - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
+ return err
+ }
+
+ m.logger.Infof("#updateNodebInfoStatus - RAN name: %s - Successfully updated RAN's connection status to %s in rNib", nodebInfo.RanName, connectionStatus)
+ return nil
+}
+
+func (m *RanReconnectionManager) setConnectionStatusOfUnconnectableRan(nodebInfo *entities.NodebInfo) common.IRNibError {
+ connectionStatus := nodebInfo.GetConnectionStatus()
+ m.logger.Warnf("#setConnectionStatusOfUnconnectableRan - RAN name: %s, RAN's connection status: %s, RAN's connection attempts: %d", nodebInfo.RanName, nodebInfo.ConnectionStatus, nodebInfo.ConnectionAttempts)
+
+ if connectionStatus == entities.ConnectionStatus_SHUTTING_DOWN {
+ return m.updateNodebInfoStatus(nodebInfo, entities.ConnectionStatus_SHUT_DOWN)
+ }
+
+ if int(nodebInfo.GetConnectionAttempts()) >= m.config.MaxConnectionAttempts {
+ m.logger.Warnf("#setConnectionStatusOfUnconnectableRan - RAN name: %s - RAN's connection attempts are greater than %d", nodebInfo.RanName, m.config.MaxConnectionAttempts)
+ return m.updateNodebInfoStatus(nodebInfo, entities.ConnectionStatus_DISCONNECTED)
+ }
+
+ return nil
+}
--- /dev/null
+package managers
+
+import (
+ "e2mgr/logger"
+ "e2mgr/rNibWriter"
+ "e2mgr/services"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+)
+
+type RanSetupManager struct {
+ logger *logger.Logger
+ rnibReaderProvider func() reader.RNibReader
+ rnibWriterProvider func() rNibWriter.RNibWriter
+ rmrService *services.RmrService
+}
+
+func NewRanSetupManager(logger *logger.Logger, rmrService *services.RmrService, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *RanSetupManager {
+ return &RanSetupManager{
+ logger: logger,
+ rnibReaderProvider: rnibReaderProvider,
+ rnibWriterProvider: rnibWriterProvider,
+ }
+}
+
+func (m *RanSetupManager) ExecuteSetup(nodebInfo *entities.NodebInfo) error {
+ return nil
+}
return nil
}
+func (rnibWriterMock *RnibWriterMock) UpdateNodebInfo(nodebInfo *entities.NodebInfo) common.IRNibError {
+ args := rnibWriterMock.Called(nodebInfo)
+
+ errArg := args.Get(0)
+
+ if errArg != nil {
+ return errArg.(common.IRNibError)
+ }
+
+ return nil
+}
+
func (rnibWriterMock *RnibWriterMock) SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) common.IRNibError {
args := rnibWriterMock.Called(inventoryName, ranLoadInformation)
return nil
}
-
// limitations under the License.
//
-package providers
+package httpmsghandlerprovider
import (
"e2mgr/configuration"
type IncomingRequest string
-const(
+const (
ShutdownRequest IncomingRequest = "Shutdown"
- ResetRequest IncomingRequest = "Reset"
+ ResetRequest IncomingRequest = "Reset"
)
-type IncomingRequestHandlerProvider struct{
+type IncomingRequestHandlerProvider struct {
requestMap map[IncomingRequest]handlers.RequestHandler
- logger *logger.Logger
+ logger *logger.Logger
}
func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
rNibReaderProvider func() reader.RNibReader) *IncomingRequestHandlerProvider {
return &IncomingRequestHandlerProvider{
- requestMap: initRequestHandlerMap(rmrService, config, rNibWriterProvider, rNibReaderProvider),
- logger: logger,
+ requestMap: initRequestHandlerMap(rmrService, config, rNibWriterProvider, rNibReaderProvider),
+ logger: logger,
}
}
-func initRequestHandlerMap(rmrService *services.RmrService,config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
+func initRequestHandlerMap(rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
rNibReaderProvider func() reader.RNibReader) map[IncomingRequest]handlers.RequestHandler {
return map[IncomingRequest]handlers.RequestHandler{
ShutdownRequest: handlers.NewDeleteAllRequestHandler(rmrService, config, rNibWriterProvider, rNibReaderProvider), //TODO change to pointer
- ResetRequest: handlers.NewX2ResetRequestHandler(rmrService, config, rNibWriterProvider, rNibReaderProvider), //TODO change to pointer
+ ResetRequest: handlers.NewX2ResetRequestHandler(rmrService, config, rNibWriterProvider, rNibReaderProvider), //TODO change to pointer
}
}
// limitations under the License.
//
-package providers
+package httpmsghandlerprovider
import (
"e2mgr/configuration"
rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
messageChannel := make(chan *models.NotificationResponse)
rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
- return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
+ return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
}
func TestNewIncomingRequestHandlerProvider(t *testing.T) {
expected := &e2managererrors.InternalError{}
assert.NotNil(t, actual)
- if reflect.TypeOf(actual) != reflect.TypeOf(expected){
+ if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
}
}
t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)
}
return log
-}
\ No newline at end of file
+}
// limitations under the License.
//
-package providers
+package httpmsghandlerprovider
import (
"e2mgr/handlers"
// limitations under the License.
//
-package providers
+package httpmsghandlerprovider
import (
"e2mgr/handlers"
// limitations under the License.
//
-package providers
+package rmrmsghandlerprovider
import (
"e2mgr/handlers"
+ "e2mgr/managers"
"e2mgr/rNibWriter"
"e2mgr/rmrCgo"
"fmt"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
)
-type NotificationHandlerProvider struct{
+type NotificationHandlerProvider struct {
notificationHandlers map[int]handlers.NotificationHandler
}
-func NewNotificationHandlerProvider(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *NotificationHandlerProvider {
+func NewNotificationHandlerProvider(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationHandlerProvider {
return &NotificationHandlerProvider{
- notificationHandlers: initNotificationHandlersMap(rnibReaderProvider, rnibWriterProvider),
+ notificationHandlers: initNotificationHandlersMap(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager),
}
}
-func initNotificationHandlersMap(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) map[int]handlers.NotificationHandler{
- return map[int]handlers.NotificationHandler{
+func initNotificationHandlersMap(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) map[int]handlers.NotificationHandler {
+ return map[int]handlers.NotificationHandler{
//TODO change handlers.NotificationHandler to *handlers.NotificationHandler
rmrCgo.RIC_X2_SETUP_RESP: handlers.X2SetupResponseNotificationHandler{},
rmrCgo.RIC_X2_SETUP_FAILURE: handlers.X2SetupFailureResponseNotificationHandler{},
rmrCgo.RIC_ENDC_X2_SETUP_RESP: handlers.EndcX2SetupResponseNotificationHandler{},
rmrCgo.RIC_ENDC_X2_SETUP_FAILURE: handlers.EndcX2SetupFailureResponseNotificationHandler{},
- rmrCgo.RIC_SCTP_CONNECTION_FAILURE: handlers.NewRanLostConnectionHandler(rnibReaderProvider, rnibWriterProvider),
+ rmrCgo.RIC_SCTP_CONNECTION_FAILURE: handlers.NewRanLostConnectionHandler(ranReconnectionManager),
rmrCgo.RIC_ENB_LOAD_INFORMATION: handlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider),
- rmrCgo.RIC_ENB_CONF_UPDATE: handlers.X2EnbConfigurationUpdateHandler{},
- rmrCgo.RIC_ENDC_CONF_UPDATE: handlers.EndcConfigurationUpdateHandler{},
- rmrCgo.RIC_X2_RESET_RESP: handlers.NewX2ResetResponseHandler(rnibReaderProvider),
- rmrCgo.RIC_X2_RESET: handlers.NewX2ResetRequestNotificationHandler(rnibReaderProvider),
+ rmrCgo.RIC_ENB_CONF_UPDATE: handlers.X2EnbConfigurationUpdateHandler{},
+ rmrCgo.RIC_ENDC_CONF_UPDATE: handlers.EndcConfigurationUpdateHandler{},
+ rmrCgo.RIC_X2_RESET_RESP: handlers.NewX2ResetResponseHandler(rnibReaderProvider),
+ rmrCgo.RIC_X2_RESET: handlers.NewX2ResetRequestNotificationHandler(rnibReaderProvider),
}
}
handler, ok := provider.notificationHandlers[messageType]
if !ok {
- return nil, fmt.Errorf("notification handler not found for message %d",messageType)
+ return nil, fmt.Errorf("notification handler not found for message %d", messageType)
}
return handler, nil
// limitations under the License.
//
-package providers
+package rmrmsghandlerprovider
import (
+ "e2mgr/configuration"
+ "e2mgr/logger"
+ "e2mgr/managers"
"e2mgr/mocks"
+ "e2mgr/models"
"e2mgr/rNibWriter"
+ "e2mgr/services"
+ "e2mgr/sessions"
+ "e2mgr/tests"
"fmt"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
"strings"
*/
func TestGetNotificationHandlerSuccess(t *testing.T) {
+
+ logger := initLog(t)
+ rmrService := getRmrService(&mocks.RmrMessengerMock{}, logger)
+
readerMock := &mocks.RnibReaderMock{}
rnibReaderProvider := func() reader.RNibReader {
return readerMock
rnibWriterProvider := func() rNibWriter.RNibWriter {
return writerMock
}
+
+ ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibReaderProvider, rnibWriterProvider)
+ ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+
var testCases = []struct {
msgType int
handler handlers.NotificationHandler
{rmrCgo.RIC_X2_SETUP_FAILURE /*unsuccessful x2 setup response*/, handlers.X2SetupFailureResponseNotificationHandler{}},
{rmrCgo.RIC_ENDC_X2_SETUP_RESP /*successful en-dc x2 setup response*/, handlers.EndcX2SetupResponseNotificationHandler{}},
{rmrCgo.RIC_ENDC_X2_SETUP_FAILURE /*unsuccessful en-dc x2 setup response*/, handlers.EndcX2SetupFailureResponseNotificationHandler{}},
- {rmrCgo.RIC_SCTP_CONNECTION_FAILURE /*sctp errors*/, handlers.NewRanLostConnectionHandler(rnibReaderProvider, rnibWriterProvider)},
+ {rmrCgo.RIC_SCTP_CONNECTION_FAILURE /*sctp errors*/, handlers.NewRanLostConnectionHandler(ranReconnectionManager)},
{rmrCgo.RIC_ENB_LOAD_INFORMATION, handlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider)},
{rmrCgo.RIC_ENB_CONF_UPDATE, handlers.X2EnbConfigurationUpdateHandler{}},
{rmrCgo.RIC_ENDC_CONF_UPDATE, handlers.EndcConfigurationUpdateHandler{}},
}
+
for _, tc := range testCases {
- provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider)
+ provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
handler, err := provider.GetNotificationHandler(tc.msgType)
if err != nil {
*/
func TestGetNotificationHandlerFailure(t *testing.T) {
+
+ logger := initLog(t)
+ rmrService := getRmrService(&mocks.RmrMessengerMock{}, logger)
+
var testCases = []struct {
msgType int
errorText string
rnibWriterProvider := func() rNibWriter.RNibWriter {
return writerMock
}
- provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider)
+
+ ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibReaderProvider, rnibWriterProvider)
+ ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+
+ provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
_, err := provider.GetNotificationHandler(tc.msgType)
if err == nil {
})
}
}
+
+// TODO: extract to test_utils
+func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
+ rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
+ messageChannel := make(chan *models.NotificationResponse)
+ rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
+ return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
+}
+
+// TODO: extract to test_utils
+func initLog(t *testing.T) *logger.Logger {
+ log, err := logger.InitLogger(logger.InfoLevel)
+ if err != nil {
+ t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)
+ }
+ return log
+}
package rNibWriter
import (
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
- "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
"errors"
"fmt"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+ "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
"gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
"github.com/golang/protobuf/proto"
)
-
-
var writerPool *common.Pool
type rNibWriterInstance struct {
sdl *common.ISdlInstance
namespace string
}
+
/*
RNibWriter interface allows saving data to the redis DB
- */
+*/
type RNibWriter interface {
SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) common.IRNibError
+ UpdateNodebInfo(nodebInfo *entities.NodebInfo) common.IRNibError
SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) common.IRNibError
}
+
/*
Init initializes the infrastructure required for the RNibWriter instance
- */
+*/
func Init(namespace string, poolSize int) {
initPool(poolSize,
func() interface{} {
(*obj.(*rNibWriterInstance).sdl).Close()
})
}
+
/*
InitPool initializes the writer's instances pool
- */
+*/
func initPool(poolSize int, newObj func() interface{}, destroyObj func(interface{})) {
writerPool = common.NewPool(poolSize, newObj, destroyObj)
}
+
/*
GetRNibWriter returns RNibWriter instance from the pool
- */
+*/
func GetRNibWriter() RNibWriter {
return writerPool.Get().(RNibWriter)
}
+
/*
SaveNodeb saves nodeB entity data in the redis DB according to the specified data model
- */
+*/
func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *entities.NodebInfo) common.IRNibError {
isNotEmptyIdentity := isNotEmpty(nbIdentity)
- if isNotEmptyIdentity && entity.GetNodeType() == entities.Node_UNKNOWN{
- return common.NewValidationError(errors.New( fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity)))
+ if isNotEmptyIdentity && entity.GetNodeType() == entities.Node_UNKNOWN {
+ return common.NewValidationError(errors.New(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity)))
}
defer writerPool.Put(w)
data, err := proto.Marshal(entity)
}
var pairs []interface{}
key, rNibErr := common.ValidateAndBuildNodeBNameKey(nbIdentity.InventoryName)
- if rNibErr != nil{
+ if rNibErr != nil {
return rNibErr
}
pairs = append(pairs, key, data)
if isNotEmptyIdentity {
key, rNibErr = common.ValidateAndBuildNodeBIdKey(entity.GetNodeType().String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
- if rNibErr != nil{
+ if rNibErr != nil {
return rNibErr
}
pairs = append(pairs, key, data)
if entity.GetEnb() != nil {
pairs, rNibErr = appendEnbCells(nbIdentity, entity.GetEnb().GetServedCells(), pairs)
- if rNibErr != nil{
+ if rNibErr != nil {
return rNibErr
}
}
if entity.GetGnb() != nil {
pairs, rNibErr = appendGnbCells(nbIdentity, entity.GetGnb().GetServedNrCells(), pairs)
- if rNibErr != nil{
+ if rNibErr != nil {
return rNibErr
}
}
ranNameIdentity := &entities.NbIdentity{InventoryName: nbIdentity.InventoryName}
- if isNotEmptyIdentity{
+ if isNotEmptyIdentity {
nbIdData, err := proto.Marshal(ranNameIdentity)
if err != nil {
return common.NewInternalError(err)
return nil
}
+/*
+UpdateNodebInfo...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) common.IRNibError {
+
+ defer writerPool.Put(w)
+
+ nodebNameKey, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.GetRanName())
+
+ if rNibErr != nil {
+ return rNibErr
+ }
+
+ nodebIdKey, rNibErr := common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+
+ if rNibErr != nil {
+ return rNibErr
+ }
+
+ data, err := proto.Marshal(nodebInfo)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ var pairs []interface{}
+ pairs = append(pairs, nodebNameKey, data, nodebIdKey, data)
+ err = (*w.sdl).Set(pairs)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ return nil
+}
+
/*
SaveRanLoadInformation stores ran load information for the provided ran
*/
defer writerPool.Put(w)
- key, rnibErr:= common.ValidateAndBuildRanLoadInformationKey(inventoryName)
+ key, rnibErr := common.ValidateAndBuildRanLoadInformationKey(inventoryName)
if rnibErr != nil {
return rnibErr
/*
Close closes writer's pool
- */
-func Close(){
+*/
+func Close() {
writerPool.Close()
}
func appendEnbCells(nbIdentity *entities.NbIdentity, cells []*entities.ServedCellInfo, pairs []interface{}) ([]interface{}, common.IRNibError) {
for _, cell := range cells {
- cellEntity := entities.Cell{Type:entities.Cell_LTE_CELL, Cell:&entities.Cell_ServedCellInfo{ServedCellInfo:cell}}
+ cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}}
cellData, err := proto.Marshal(&cellEntity)
if err != nil {
return pairs, common.NewInternalError(err)
}
key, rNibErr := common.ValidateAndBuildCellIdKey(cell.GetCellId())
- if rNibErr != nil{
+ if rNibErr != nil {
return pairs, rNibErr
}
pairs = append(pairs, key, cellData)
key, rNibErr = common.ValidateAndBuildCellNamePciKey(nbIdentity.InventoryName, cell.GetPci())
- if rNibErr != nil{
+ if rNibErr != nil {
return pairs, rNibErr
}
pairs = append(pairs, key, cellData)
return pairs, nil
}
-func appendGnbCells(nbIdentity *entities.NbIdentity, cells []*entities.ServedNRCell, pairs []interface{}) ([]interface{}, common.IRNibError) {
+func appendGnbCells(nbIdentity *entities.NbIdentity, cells []*entities.ServedNRCell, pairs []interface{}) ([]interface{}, common.IRNibError) {
for _, cell := range cells {
- cellEntity := entities.Cell{Type:entities.Cell_NR_CELL, Cell:&entities.Cell_ServedNrCell{ServedNrCell:cell}}
+ cellEntity := entities.Cell{Type: entities.Cell_NR_CELL, Cell: &entities.Cell_ServedNrCell{ServedNrCell: cell}}
cellData, err := proto.Marshal(&cellEntity)
if err != nil {
return pairs, common.NewInternalError(err)
}
key, rNibErr := common.ValidateAndBuildNrCellIdKey(cell.GetServedNrCellInformation().GetCellId())
- if rNibErr != nil{
+ if rNibErr != nil {
return pairs, rNibErr
}
pairs = append(pairs, key, cellData)
key, rNibErr = common.ValidateAndBuildCellNamePciKey(nbIdentity.InventoryName, cell.GetServedNrCellInformation().GetNrPci())
- if rNibErr != nil{
+ if rNibErr != nil {
return pairs, rNibErr
}
pairs = append(pairs, key, cellData)
return sdlInstanceMock
}
+func TestUpdateNodebInfoSuccess(t *testing.T) {
+ inventoryName := "name"
+ plmnId := "02f829"
+ nbId := "4a952a0a"
+ writerPool = nil
+ sdlInstanceMock := initSdlInstanceMock(namespace, 1)
+ w := GetRNibWriter()
+ nodebInfo := &entities.NodebInfo{}
+ nodebInfo.RanName = inventoryName
+ nodebInfo.GlobalNbId = &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
+ nodebInfo.NodeType = entities.Node_ENB
+ nodebInfo.ConnectionStatus = 1
+ enb := entities.Enb{}
+ nodebInfo.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
+ data, err := proto.Marshal(nodebInfo)
+ if err != nil {
+ t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
+ }
+ var e error
+ var setExpected []interface{}
+
+ nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName)
+ nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId)
+ setExpected = append(setExpected, nodebNameKey, data)
+ setExpected = append(setExpected, nodebIdKey, data)
+
+ sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
+
+ rNibErr := w.UpdateNodebInfo(nodebInfo)
+ assert.Nil(t, rNibErr)
+}
+
+func TestUpdateNodebInfoMissingInventoryNameFailure(t *testing.T) {
+ inventoryName := "name"
+ plmnId := "02f829"
+ nbId := "4a952a0a"
+ writerPool = nil
+ sdlInstanceMock := initSdlInstanceMock(namespace, 1)
+ w := GetRNibWriter()
+ nodebInfo := &entities.NodebInfo{}
+ data, err := proto.Marshal(nodebInfo)
+ if err != nil {
+ t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
+ }
+ var e error
+ var setExpected []interface{}
+
+ nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName)
+ nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId)
+ setExpected = append(setExpected, nodebNameKey, data)
+ setExpected = append(setExpected, nodebIdKey, data)
+
+ sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
+
+ rNibErr := w.UpdateNodebInfo(nodebInfo)
+
+ assert.NotNil(t, rNibErr)
+ assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
+}
+
+func TestUpdateNodebInfoMissingGlobalNbIdFailure(t *testing.T) {
+ inventoryName := "name"
+ plmnId := "02f829"
+ nbId := "4a952a0a"
+ writerPool = nil
+ sdlInstanceMock := initSdlInstanceMock(namespace, 1)
+ w := GetRNibWriter()
+ nodebInfo := &entities.NodebInfo{}
+ nodebInfo.RanName = inventoryName
+ data, err := proto.Marshal(nodebInfo)
+ if err != nil {
+ t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
+ }
+ var e error
+ var setExpected []interface{}
+
+ nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName)
+ nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId)
+ setExpected = append(setExpected, nodebNameKey, data)
+ setExpected = append(setExpected, nodebIdKey, data)
+
+ sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
+
+ rNibErr := w.UpdateNodebInfo(nodebInfo)
+
+ assert.NotNil(t, rNibErr)
+ assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
+}
+
func TestSaveEnb(t *testing.T) {
name := "name"
ranName := "RAN:" + name
nb.Ip = "localhost"
nb.Port = 5656
enb := entities.Enb{}
- cell := &entities.ServedCellInfo{CellId:"aaff", Pci:3}
- cellEntity := entities.Cell{Type:entities.Cell_LTE_CELL, Cell:&entities.Cell_ServedCellInfo{ServedCellInfo:cell}}
+ cell := &entities.ServedCellInfo{CellId: "aaff", Pci: 3}
+ cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}}
enb.ServedCells = []*entities.ServedCellInfo{cell}
- nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+ nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
data, err := proto.Marshal(&nb)
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
}
sdlInstanceMock.On("RemoveMember", entities.Node_UNKNOWN.String(), []interface{}{nbIdData}).Return(e)
- nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+ nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
nbIdData, err = proto.Marshal(nbIdentity)
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB Identity entity. Error: %v", err)
nb.Ip = "localhost"
nb.Port = 5656
enb := entities.Enb{}
- cell := &entities.ServedCellInfo{Pci:3}
+ cell := &entities.ServedCellInfo{Pci: 3}
enb.ServedCells = []*entities.ServedCellInfo{cell}
- nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+ nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
- nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+ nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
rNibErr := w.SaveNodeb(nbIdentity, &nb)
assert.NotNil(t, rNibErr)
assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
nb.Ip = "localhost"
nb.Port = 5656
enb := entities.Enb{}
- cell := &entities.ServedCellInfo{CellId:"aaa",Pci:3}
+ cell := &entities.ServedCellInfo{CellId: "aaa", Pci: 3}
enb.ServedCells = []*entities.ServedCellInfo{cell}
- nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+ nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
- nbIdentity := &entities.NbIdentity{InventoryName:"", GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+ nbIdentity := &entities.NbIdentity{InventoryName: "", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
rNibErr := w.SaveNodeb(nbIdentity, &nb)
assert.NotNil(t, rNibErr)
assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
nb.Ip = "localhost"
nb.Port = 5656
enb := entities.Enb{}
- nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+ nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
data, err := proto.Marshal(&nb)
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveEnbOnClosedPool - Failed to marshal NodeB entity. Error: %v", err)
sdlInstanceMock.On("Set", setExpected).Return(e)
writerPool.Close()
nbIdentity := &entities.NbIdentity{}
- assert.Panics(t, func(){w.SaveNodeb(nbIdentity, &nb)})
+ assert.Panics(t, func() { w.SaveNodeb(nbIdentity, &nb) })
}
func TestSaveGnbCellIdValidationFailure(t *testing.T) {
nb.Ip = "localhost"
nb.Port = 5656
gnb := entities.Gnb{}
- cellInfo:= &entities.ServedNRCellInformation{NrPci:2}
- cell := &entities.ServedNRCell{ServedNrCellInformation:cellInfo}
+ cellInfo := &entities.ServedNRCellInformation{NrPci: 2}
+ cell := &entities.ServedNRCell{ServedNrCellInformation: cellInfo}
gnb.ServedNrCells = []*entities.ServedNRCell{cell}
- nb.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb}
+ nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
- nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+ nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
rNibErr := w.SaveNodeb(nbIdentity, &nb)
assert.NotNil(t, rNibErr)
assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
nb.Ip = "localhost"
nb.Port = 5656
gnb := entities.Gnb{}
- cellInfo:= &entities.ServedNRCellInformation{NrPci:2,CellId:"ccdd"}
- cell := &entities.ServedNRCell{ServedNrCellInformation:cellInfo}
- cellEntity := entities.Cell{Type:entities.Cell_NR_CELL, Cell:&entities.Cell_ServedNrCell{ServedNrCell:cell}}
+ cellInfo := &entities.ServedNRCellInformation{NrPci: 2, CellId: "ccdd"}
+ cell := &entities.ServedNRCell{ServedNrCellInformation: cellInfo}
+ cellEntity := entities.Cell{Type: entities.Cell_NR_CELL, Cell: &entities.Cell_ServedNrCell{ServedNrCell: cell}}
gnb.ServedNrCells = []*entities.ServedNRCell{cell}
- nb.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb}
+ nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
data, err := proto.Marshal(&nb)
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal NodeB entity. Error: %v", err)
}
var e error
-
cellData, err := proto.Marshal(&cellEntity)
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal Cell entity. Error: %v", err)
setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", name, cell.GetServedNrCellInformation().GetNrPci()), cellData)
sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
- nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+ nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
nbIdData, err := proto.Marshal(nbIdentity)
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal NodeB Identity entity. Error: %v", err)
sdlInstanceMock := initSdlInstanceMock(namespace, 1)
w := GetRNibWriter()
-
ranLoadInformation := generateRanLoadInformation()
data, err := proto.Marshal(ranLoadInformation)
setExpected = append(setExpected, loadKey, data)
sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
-
rNibErr := w.SaveRanLoadInformation(inventoryName, ranLoadInformation)
assert.Nil(t, rNibErr)
}
w := GetRNibWriter()
expectedErr := common.NewInternalError(errors.New("proto: Marshal called with nil"))
- err:= w.SaveRanLoadInformation(inventoryName, nil)
+ err := w.SaveRanLoadInformation(inventoryName, nil)
assert.Equal(t, expectedErr, err)
}
initSdlInstanceMock(namespace, 1)
w := GetRNibWriter()
- err:= w.SaveRanLoadInformation(inventoryName, nil)
+ err := w.SaveRanLoadInformation(inventoryName, nil)
assert.NotNil(t, err)
assert.Equal(t, common.VALIDATION_ERROR, err.GetCode())
}
t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationSuccess - Failed to build ran load infromation key. Error: %v", validationErr)
}
-
writerPool = nil
sdlInstanceMock := initSdlInstanceMock(namespace, 1)
w := GetRNibWriter()
t.Errorf("#rNibWriter_test.TestSaveRanLoadInformation - Failed to marshal RanLoadInformation entity. Error: %v", err)
}
-
expectedErr := errors.New("expected error")
var setExpected []interface{}
setExpected = append(setExpected, loadKey, data)
sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr)
-
rNibErr := w.SaveRanLoadInformation(inventoryName, ranLoadInformation)
assert.NotNil(t, rNibErr)
assert.Equal(t, common.INTERNAL_ERROR, rNibErr.GetCode())
cellLoadInformation.UlInterferenceOverloadIndications = []entities.UlInterferenceOverloadIndication{ulInterferenceOverloadIndication}
ulHighInterferenceInformation := entities.UlHighInterferenceInformation{
- TargetCellId:"456",
- UlHighInterferenceIndication:"xxx",
+ TargetCellId: "456",
+ UlHighInterferenceIndication: "xxx",
}
- cellLoadInformation.UlHighInterferenceInfos = []*entities.UlHighInterferenceInformation{&ulHighInterferenceInformation }
+ cellLoadInformation.UlHighInterferenceInfos = []*entities.UlHighInterferenceInformation{&ulHighInterferenceInformation}
cellLoadInformation.RelativeNarrowbandTxPower = &entities.RelativeNarrowbandTxPower{
- RntpPerPrb:"xxx",
- RntpThreshold:entities.RntpThreshold_NEG_4,
+ RntpPerPrb: "xxx",
+ RntpThreshold: entities.RntpThreshold_NEG_4,
NumberOfCellSpecificAntennaPorts: entities.NumberOfCellSpecificAntennaPorts_V1_ANT_PRT,
- PB: 1,
- PdcchInterferenceImpact:2,
+ PB: 1,
+ PdcchInterferenceImpact: 2,
EnhancedRntp: &entities.EnhancedRntp{
- EnhancedRntpBitmap:"xxx",
- RntpHighPowerThreshold:entities.RntpThreshold_NEG_2,
- EnhancedRntpStartTime: &entities.StartTime{StartSfn:500,StartSubframeNumber:5},
+ EnhancedRntpBitmap: "xxx",
+ RntpHighPowerThreshold: entities.RntpThreshold_NEG_2,
+ EnhancedRntpStartTime: &entities.StartTime{StartSfn: 500, StartSubframeNumber: 5},
},
}
cellLoadInformation.AbsInformation = &entities.AbsInformation{
- Mode: entities.AbsInformationMode_ABS_INFO_FDD,
- AbsPatternInfo:"xxx",
- NumberOfCellSpecificAntennaPorts:entities.NumberOfCellSpecificAntennaPorts_V2_ANT_PRT,
- MeasurementSubset:"xxx",
+ Mode: entities.AbsInformationMode_ABS_INFO_FDD,
+ AbsPatternInfo: "xxx",
+ NumberOfCellSpecificAntennaPorts: entities.NumberOfCellSpecificAntennaPorts_V2_ANT_PRT,
+ MeasurementSubset: "xxx",
}
cellLoadInformation.InvokeIndication = entities.InvokeIndication_ABS_INFORMATION
cellLoadInformation.ExtendedUlInterferenceOverloadInfo = &entities.ExtendedUlInterferenceOverloadInfo{
- AssociatedSubframes:"xxx",
- ExtendedUlInterferenceOverloadIndications:cellLoadInformation.UlInterferenceOverloadIndications,
+ AssociatedSubframes: "xxx",
+ ExtendedUlInterferenceOverloadIndications: cellLoadInformation.UlInterferenceOverloadIndications,
}
compInformationItem := &entities.CompInformationItem{
- CompHypothesisSets: []*entities.CompHypothesisSet{&entities.CompHypothesisSet{CellId: "789", CompHypothesis:"xxx"}},
- BenefitMetric:50,
+ CompHypothesisSets: []*entities.CompHypothesisSet{&entities.CompHypothesisSet{CellId: "789", CompHypothesis: "xxx"}},
+ BenefitMetric: 50,
}
cellLoadInformation.CompInformation = &entities.CompInformation{
- CompInformationItems:[]*entities.CompInformationItem{compInformationItem},
- CompInformationStartTime:&entities.StartTime{StartSfn:123,StartSubframeNumber:456},
+ CompInformationItems: []*entities.CompInformationItem{compInformationItem},
+ CompInformationStartTime: &entities.StartTime{StartSfn: 123, StartSubframeNumber: 456},
}
cellLoadInformation.DynamicDlTransmissionInformation = &entities.DynamicDlTransmissionInformation{
- State: entities.NaicsState_NAICS_ACTIVE,
- TransmissionModes:"xxx",
- PB: 2,
- PAList:[]entities.PA{entities.PA_DB_NEG_3},
+ State: entities.NaicsState_NAICS_ACTIVE,
+ TransmissionModes: "xxx",
+ PB: 2,
+ PAList: []entities.PA{entities.PA_DB_NEG_3},
}
return &cellLoadInformation
ranLoadInformation.LoadTimestamp = uint64(time.Now().UnixNano())
-
cellLoadInformation := generateCellLoadInformation()
ranLoadInformation.CellLoadInfos = []*entities.CellLoadInformation{cellLoadInformation}
initSdlInstanceMock(namespace, 1)
w := GetRNibWriter()
expectedErr := common.NewValidationError(errors.New("#rNibWriter.saveNodeB - Unknown responding node type, entity: ip:\"localhost\" port:5656 "))
- nbIdentity := &entities.NbIdentity{InventoryName:"name", GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+ nbIdentity := &entities.NbIdentity{InventoryName: "name", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
nb := &entities.NodebInfo{}
nb.Port = 5656
nb.Ip = "localhost"
if err != nil {
t.Errorf("#rNibWriter_test.TestSaveEntityFailure - Failed to marshal NodeB entity. Error: %v", err)
}
- nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:plmnId, NbId:nbId}}
+ nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
setExpected := []interface{}{"RAN:" + name, data}
- setExpected = append(setExpected,"GNB:" + plmnId + ":" + nbId, data)
+ setExpected = append(setExpected, "GNB:"+plmnId+":"+nbId, data)
expectedErr := errors.New("expected error")
sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr)
rNibErr := w.SaveNodeb(nbIdentity, &gnb)
func TestGetRNibWriterPoolNotInitializedFailure(t *testing.T) {
writerPool = nil
- assert.Panics(t, func(){GetRNibWriter()})
+ assert.Panics(t, func() { GetRNibWriter() })
}
func TestGetRNibWriter(t *testing.T) {
var e error
instanceMock.On("Close").Return(e)
Close()
- assert.Panics(t, func(){Close()})
+ assert.Panics(t, func() { Close() })
}
func TestCloseFailure(t *testing.T) {
// if err != nil{
// t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationInteg - Failed to save RanLoadInformation entity. Error: %v", err)
// }
-//}
\ No newline at end of file
+//}
maxMsgSize: 4096
notificationResponseBuffer: 100
bigRedButtonTimeoutSec: 5
+maxConnectionAttempts: 20
package receivers
import (
- "e2mgr/managers"
+ "e2mgr/managers/notificationmanager"
"e2mgr/services"
)
// RmrService holds an instance of RMR messenger as well as its configuration
type RmrServiceReceiver struct {
services.RmrService
- nManager *managers.NotificationManager
+ nManager *notificationmanager.NotificationManager
}
// NewRmrService instantiates a new Rmr service instance
-func NewRmrServiceReceiver(rmrService services.RmrService, nManager *managers.NotificationManager) *RmrServiceReceiver {
+func NewRmrServiceReceiver(rmrService services.RmrService, nManager *notificationmanager.NotificationManager) *RmrServiceReceiver {
return &RmrServiceReceiver{
RmrService: rmrService,
package receivers
import (
+ "e2mgr/configuration"
"e2mgr/logger"
"e2mgr/managers"
+ "e2mgr/managers/notificationmanager"
"e2mgr/mocks"
"e2mgr/models"
"e2mgr/rNibWriter"
"time"
)
-func TestListenAndHandle(t *testing.T){
+func TestListenAndHandle(t *testing.T) {
log, err := logger.InitLogger(logger.DebugLevel)
- if err!=nil{
+ if err != nil {
t.Errorf("#rmr_service_test.TestListenAndHandle - failed to initialize logger, error: %s", err)
}
rmrMessengerMock := &mocks.RmrMessengerMock{}
e := fmt.Errorf("test error")
rmrMessengerMock.On("RecvMsg").Return(buf, e)
- go getRmrServiceReceiver(rmrMessengerMock,log).ListenAndHandle()
+ go getRmrServiceReceiver(rmrMessengerMock, log).ListenAndHandle()
- time.Sleep(time.Microsecond*10)
+ time.Sleep(time.Microsecond * 10)
}
func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
messageChannel := make(chan *models.NotificationResponse)
rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
- return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
+ return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
}
-func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *RmrServiceReceiver {
- readerMock :=&mocks.RnibReaderMock{}
+func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, logger *logger.Logger) *RmrServiceReceiver {
+ readerMock := &mocks.RnibReaderMock{}
rnibReaderProvider := func() reader.RNibReader {
return readerMock
}
rnibWriterProvider := func() rNibWriter.RNibWriter {
return writerMock
}
- nManager := managers.NewNotificationManager(rnibReaderProvider, rnibWriterProvider)
- rmrService := getRmrService(rmrMessengerMock,log)
+
+ rmrService := getRmrService(rmrMessengerMock, logger)
+
+ ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibReaderProvider, rnibWriterProvider)
+ ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+ nManager := notificationmanager.NewNotificationManager(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+
return NewRmrServiceReceiver(*rmrService, nManager)
-}
\ No newline at end of file
+}