36 class PolicyResolver :
public omnetpp::cDynamicExpression::IResolver {
40 IResolver *dup()
const override {
return new PolicyResolver(module_); }
41 omnetpp::cValue readVariable(omnetpp::cExpression::Context *context,
const char *name)
override;
44 static omnetpp::simsignal_t sentPacketToLowerLayerSignal_;
45 static omnetpp::simsignal_t pdcpSduSentSignal_;
46 static omnetpp::simsignal_t pdcpSduSentNrSignal_;
48 inet::ModuleRefByPar<Binder> binder_;
51 std::vector<CellGroup> legGroups_;
64 CellGroup primaryPath_ = MCG;
65 int64_t splitThreshold_ = SPLIT_THRESHOLD_INFINITY;
70 std::vector<RlcTxEntityBase *> legRlc_;
75 omnetpp::cDynamicExpression *legSelection_ =
nullptr;
78 int currentPacketOrdinal_ = 0;
81 int packetsSteered_ = 0;
83 void initialize(
int stage)
override;
84 int numInitStages()
const override {
return inet::NUM_INIT_STAGES; }
85 void handleMessage(omnetpp::cMessage *msg)
override;
90 virtual int selectLeg(
const FlowControlInfo *lteInfo);
91 virtual bool isLegLive(
int leg,
const FlowControlInfo *lteInfo);
94 virtual int applyLegSelection(
const std::vector<bool>& live);
97 virtual int primaryLeg()
const;
102 virtual void setSplitConfig(CellGroup primaryPath, int64_t ulDataSplitThreshold);
108 virtual void setLegSelection(
const char *spec);
118 virtual void setServingNodeIds(MacNodeId servingNodeId, MacNodeId nrServingNodeId);