/
Get Nodeb Design

Get Nodeb Design

1. Controller Layer

  • Add Route:

    GET("/v1/nodeb/:ranName", controller.GetNodeb)
  • Change name of requestController to nodebController:

controller := controllers.NewNodebController(logger, rmrService)

  • New Controller method:

    func (rc RequestController) GetNodeb (writer http.ResponseWriter, request *http.Request, params httprouter.Params)

  • GetNb Business Logic
CodeComment
ranName := params.ByName("ranName")
respondingNode, err := GetRnibReader().GetNodeb(ranName)

if err {
      writer.WriteHeader(http.StatusNotFound)
      return

}

OR writer.WriteHeader(http. StatusInternalServerError) , depends whether we haven’t found this key or we’re having issues with DB/Server

m := jsonpb.Marshaler{}
result, err := m.MarshalToString(respondingNode)Convert the unmarshalled proto to JSON. Handle error
w.Header().Set("Content-Type", "application/json")
w.Write(result)

Respond with 200OK and responding node JSON representation.
(Concern: JSON size limitation of Go in case of maximal number of entities).

2. Entities

message RespondingNode{

    ConnectionStatus connectionStatus = 1;

    string ip = 2;

    uint32 port = 3;

    Node.Type nodeType = 4;

    oneof Nodes{

        ENB enb = 5;

        GNB gnb = 6;

    }

}


enum ConnectionStatus{

    UNKNOWN_ConnectionStatus = 0;

    Connected = 1;

    NotConnected =2;

}


message Node{

    enum Type {

        UNKNOWN = 0;

        ENB = 1;

        GNB = 2;

    }

}

3. RnibReader

  • New package: rnibReade

RnibReader interface {

            GetNb(key string) (*RespondingNode, error)

}


// Get may also create an instance
func GetRnibReader() RnibReader {

         return pool.Get().(RnibReader)

  • Init RNIB instances pool (concern: separate the pool from rnibWriter layer)
  • GetNodeb Business Logic
CodeComment

keyToCheck := "RAN:"+ranName


defer pool.Put(rnibInstance)
m, err := rnibInstance.sdl.Get([]string{ keyToCheck })     

USE SDL to fetch data from REDIS. RETURNS: (map[string]interface{}, error)

data, ok := m[keyToCheck]

Get the value of the requested key. This will be a byte array

pb := &RespondingNode{}Create a new pointer to the responding node
proto.Unmarshal(data, pb)Unmarshal parses the protocol buffer representation in buf and places the decoded result in pb
return pb


4. Sequence Diagram






Related content

E2 Manager R3 Interface Design
E2 Manager R3 Interface Design
More like this
Reject Connection Setup Requests Design
Reject Connection Setup Requests Design
More like this
E2 Manager R4 Interface Design
E2 Manager R4 Interface Design
More like this
R2 Recovery Design [Init | LostConnection]
R2 Recovery Design [Init | LostConnection]
More like this
E2 Manager Interface Design - R4 Draft (Not actual)
E2 Manager Interface Design - R4 Draft (Not actual)
More like this
Multiple E2T Instances Design
Multiple E2T Instances Design
More like this