* lte-nr-prereq-v2:
spectrum: Add API to retrieve Values size and a single value at any position
lte: Managing SR at SAP interface level.
lte: Making SimpleUeComponentCarrierManager inheritable
lte: Do not assume that the helper is setting all the vectors
lte: ComponentCarrier subclasses can override Set{Dl,Ul}Bandwidth
lte: ComponentCarrier with cellId is now ComponentCarrierBaseStation
lte: LteMacSap constructors for ReceivePduParameters and TxOpportunityParameters created
lte: (fixed#2893) GetPgw in helpers must be const
lte: EpsBearer support run-time switching between Rel. 11 and Rel. 15
lte: Added EpsBearer new values (updating it to Rel. 15)
lte: EpsBearer uses a lookup table
Values are stored as std::vector of double, but this vector can't be accessed,
even read-only. With this addition, it is possible to know how many elements
are inside the vector, and also to get a const reference to any element.
SR is implemented in the NR module; for the moment, just add the possibility at
the interface level. LTE module will not do anything for the moment, waiting for
a feature addition at a later stage.
In lte-enb-rrc, in a lot of places there is the assumption that
vectors such as m_cphySapProvider, m_cmacSapProvider, m_ffrRrcSapProvider, are
filled by the helper.
That assumption does not hold with external modules: therefore, for a better
coexistence, check the size of these vector before doing any operation.
If there are elements in it, then execute; otherwise, just ignore.
For the NR module we have the necessity of implementing a different type of
ComponentCarrierEnb, which will be ComponentCarrierGnb. But, in some methods of
RRC, it is accepted only a pointer to ComponentCarrierEnb.
To solve this situation, since the only needed method from ComponentCarrierEnb
is GetCellId (), this commit creates a new class (ComponentCarrierBaseStation)
that provides the interface for setting and retrieving the cell id. Then, both
ComponentCarrier{Enb,Gnb} derives from ComponentCarrierBaseStation and everyone
is happy. I had to introduce DynamicCast all over the helper to make everything
working.
Thanks to constructors, it is easier to create these structs. In particular, code like this
MyAwesomeStruct x;
x.value = 10;
x.another = 200;
...
AMethod (x);
can be replaced with
AMethod (MyAwesomeStruct (10, 200));
Reducing the amount of needed lines.
Moving the existing switch/cases statement to a lookup in a lookup-table,
created with an unordered_map at compile time. The default values for the
lookup table are taken from Rel. 11, as they were in previous ns-3 releases.