EpcTools
An event based multi-threaded C++ development framework.
pfcpr15.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2020 Sprint
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 
17 #ifndef __PFCPR15_H
18 #define __PFCPR15_H
19 
20 #include "epfcp.h"
21 #include "eostring.h"
22 #include "ememory.h"
23 
24 #include "pfcp_messages.h"
25 #include "pfcp_messages_encoder.h"
26 #include "pfcp_messages_decoder.h"
27 
28 DECLARE_ERROR(RequestedSizeTooLarge);
29 
30 #define OVERLOADED_NEW_DELETE \
31 public: \
32  static void* operator new(size_t sz) \
33  { \
34  if (sz > pool_->allocSize()) \
35  throw RequestedSizeTooLarge(); \
36  return pool_->allocate(); \
37  } \
38  static void operator delete(void* m) \
39  { \
40  pool_->deallocate(m); \
41  } \
42  static Void setMemoryPool(EMemory::Pool &pool) \
43  { \
44  pool_ = &pool; \
45  } \
46 private: \
47  static EMemory::Pool *pool_;
48 
49 #define CLASS_NAME \
50 public: \
51  EString &className() override \
52  { \
53  static EString cn_ = ::__CLASS_NAME__; \
54  return cn_; \
55  }
56 
59 namespace PFCP_R15
60 {
64 
66 {
67 public:
69  : parent_(parent)
70  {
71  }
72 
73  virtual Void setLength()
74  {
75  if (parent_)
76  parent_->setLength();
77  }
78 
79  virtual uint16_t length() const = 0;
80  virtual uint16_t packedLength() const = 0;
81 
82 protected:
83  virtual uint16_t calculateLength() = 0;
84 
85 private:
86  LengthCalculator *parent_;
87 };
88 
89 class IEHeader : public LengthCalculator
90 {
91 public:
92  uint16_t type() const { return hdr_.type; }
93  IEHeader &type(uint16_t type) { hdr_.type = type; return *this; }
94 
95  uint16_t length() const { return hdr_.len; }
96  uint16_t packedLength() const { return hdr_.len > 0 ? hdr_.len + sizeof(hdr_) : 0; }
98  Bool present() const { return hdr_.len != 0; }
99 
100  pfcp_ie_header_t &header() { return hdr_; }
101 
102 protected:
103  IEHeader(pfcp_ie_header_t &hdr, uint16_t type, LengthCalculator *parent)
104  : LengthCalculator(parent),
105  hdr_(hdr)
106  {
107  IEHeader::type(type);
108  }
109 
110  virtual uint16_t calculateLength() = 0;
111 
112 private:
113  IEHeader();
114  pfcp_ie_header_t &hdr_;
115 };
116 
118 
119 enum class CauseEnum : uint8_t
120 {
121  Reserved = 0,
122  RequestAccepted = 1,
123  RequestRejected = 64,
125  MandatoryIeMissing = 66,
127  InvalidLength = 68,
135  ServiceNotSupported = 76,
136  SystemFailure = 77
137 };
138 
139 struct _CauseIE
140 {
141  pfcp_cause_ie_t &ie_;
142 };
143 
144 class CauseIE : public IEHeader
145 {
146  friend class PfdMgmtRsp;
147  friend class AssnSetupRsp;
148  friend class AssnUpdateRsp;
149  friend class AssnReleaseRsp;
150  friend class NodeReportRsp;
151  friend class SessionSetDeletionRsp;
154  friend class SessionDeletionRsp;
155  friend class SessionReportRsp;
156 public:
157  CauseEnum cause() const;
158  CauseIE &cause(CauseEnum val);
159  pfcp_cause_ie_t &data();
160 
161 protected:
162  CauseIE(pfcp_cause_ie_t &ie, LengthCalculator *parent);
163  uint16_t calculateLength();
164 
165 private:
166  CauseIE();
167  pfcp_cause_ie_t &ie_;
168 };
169 
171 
172 enum class SourceInterfaceEnum : uint8_t
173 {
174  Access = 0,
175  Core = 1,
176  SGILanN6Lan = 2,
177  CPFunction = 3
178 };
179 
181 {
182  friend class PdiIE;
183 public:
184  SourceInterfaceEnum interface_value() const;
185  SourceInterfaceIE &interface_value(SourceInterfaceEnum val);
186  pfcp_src_intfc_ie_t &data();
187 
188 protected:
189  SourceInterfaceIE(pfcp_src_intfc_ie_t &ie, LengthCalculator *parent);
190  uint16_t calculateLength();
191 
192 private:
194  pfcp_src_intfc_ie_t &ie_;
195 };
196 
198 
199 class FTeidIE : public IEHeader
200 {
202  friend class PdiIE;
204  friend class CreatedPdrIE;
207 public:
208  Bool chid() const;
209  Bool ch() const;
210  Bool v6() const;
211  Bool v4() const;
212  uint32_t teid() const;
213  const in_addr &ipv4_address() const;
214  const in6_addr &ipv6_address() const;
215  uint8_t choose_id() const;
216 
217  FTeidIE &teid(uint32_t val);
218  FTeidIE &ip_address(const ESocket::Address &val);
219  FTeidIE &ip_address(const EIpAddress &val);
220  FTeidIE &ip_address(const in_addr &val);
221  FTeidIE &ip_address(const in6_addr &val);
222  FTeidIE &ch(Bool ch);
223  FTeidIE &choose_id(uint8_t val);
224  pfcp_fteid_ie_t &data();
225 
226 protected:
227  FTeidIE(pfcp_fteid_ie_t &ie, LengthCalculator *parent);
228  uint16_t calculateLength();
229 
230 private:
231  FTeidIE();
232  pfcp_fteid_ie_t &ie_;
233 };
234 
236 
238 {
242  friend class PdiIE;
246 public:
247  const uint8_t *ntwk_inst() const;
248  const uint16_t ntwk_inst_len() const;
249 
250  NetworkInstanceIE &ntwk_inst(const EOctetString &val);
251  NetworkInstanceIE &ntwk_inst(const uint8_t *val, uint16_t len);
252  pfcp_ntwk_inst_ie_t &data();
253 
254 protected:
255  NetworkInstanceIE(pfcp_ntwk_inst_ie_t &ie, LengthCalculator *parent);
256  uint16_t calculateLength();
257 
258 private:
260  pfcp_ntwk_inst_ie_t &ie_;
261 };
262 
264 
265 class SdfFilterIE : public IEHeader
266 {
268  friend class PdiIE;
269 public:
270  Bool fd() const;
271  Bool ttc() const;
272  Bool spi() const;
273  Bool fl() const;
274  Bool bid() const;
275 
276  const uint8_t *flow_desc() const;
277  uint16_t len_of_flow_desc() const;
278  const uint8_t *tos_traffic_cls() const;
279  const uint8_t *secur_parm_idx() const;
280  const uint8_t *flow_label() const;
281  uint32_t sdf_filter_id() const;
282 
283  SdfFilterIE &bid(Bool bid);
284  SdfFilterIE &flow_desc(const uint8_t *flowDesc, uint16_t flowDescLen);
285  SdfFilterIE &tos_traffic_cls(const uint8_t *tosTrafficClass);
286  SdfFilterIE &secur_parm_idx(const uint8_t *securityParameterIndex);
287  SdfFilterIE &flow_label(const uint8_t *flowLabel);
288  SdfFilterIE &sdf_filter_id(const uint32_t sdfFilterId);
289  pfcp_sdf_filter_ie_t &data();
290 
291 protected:
292  SdfFilterIE(pfcp_sdf_filter_ie_t &ie, LengthCalculator *parent);
293  uint16_t calculateLength();
294 
295 private:
296  SdfFilterIE();
297  pfcp_sdf_filter_ie_t &ie_;
298 };
299 
301 
302 class ApplicationIdIE : public IEHeader
303 {
304  friend class ApplicationIdsPfdsIE;
305  friend class PdiIE;
307 public:
308  uint16_t app_ident_len() const;
309  const uint8_t *app_ident() const;
310  ApplicationIdIE &app_ident(const uint8_t *app_id, uint16_t len);
311  pfcp_application_id_ie_t &data();
312 
313 protected:
314  ApplicationIdIE(pfcp_application_id_ie_t &ie, LengthCalculator *parent);
315  uint16_t calculateLength();
316 
317 private:
318  ApplicationIdIE();
319  pfcp_application_id_ie_t &ie_;
320 };
321 
323 
324 enum class DownlinkGateEnum : uint8_t
325 {
326  Open = 0,
327  Closed = 1,
328  Future1 = 2,
329  Future2 = 3
330 };
331 
332 enum class UplinkGateEnum : uint8_t
333 {
334  Open = 0,
335  Closed = 1,
336  Future1 = 2,
337  Future2 = 3
338 };
339 
340 class GateStatusIE : public IEHeader
341 {
342  friend class CreateQerIE;
343  friend class UpdateQerIE;
344 public:
345  DownlinkGateEnum dl_gate() const;
346  UplinkGateEnum ul_gate() const;
347  GateStatusIE &dl_gate(DownlinkGateEnum dl);
348  GateStatusIE &ul_gate(UplinkGateEnum ul);
349  pfcp_gate_status_ie_t &data();
350 
351 protected:
352  GateStatusIE(pfcp_gate_status_ie_t &ie, LengthCalculator *parent);
353  uint16_t calculateLength();
354 
355 private:
356  GateStatusIE();
357  pfcp_gate_status_ie_t &ie_;
358 };
359 
361 
362 class MbrIE : public IEHeader
363 {
364  friend class CreateQerIE;
365  friend class UpdateQerIE;
366 public:
367  uint64_t ul_mbr() const;
368  uint64_t dl_mbr() const;
369  MbrIE &ul_mbr(uint64_t mbr);
370  MbrIE &dl_mbr(uint64_t mbr);
371  pfcp_mbr_ie_t &data();
372 
373 protected:
374  MbrIE(pfcp_mbr_ie_t &ie, LengthCalculator *parent);
375  uint16_t calculateLength();
376 
377 private:
378  MbrIE();
379  pfcp_mbr_ie_t &ie_;
380 };
381 
383 
384 class GbrIE : public IEHeader
385 {
386  friend class CreateQerIE;
387  friend class UpdateQerIE;
388 public:
389  uint64_t ul_gbr() const;
390  uint64_t dl_gbr() const;
391  GbrIE &ul_gbr(uint64_t mbr);
392  GbrIE &dl_gbr(uint64_t mbr);
393  pfcp_gbr_ie_t &data();
394 
395 protected:
396  GbrIE(pfcp_gbr_ie_t &ie, LengthCalculator *parent);
397  uint16_t calculateLength();
398 
399 private:
400  GbrIE();
401  pfcp_gbr_ie_t &ie_;
402 };
403 
405 
407 {
408  friend class CreateQerIE;
409  friend class UpdateQerIE;
410 public:
411  uint32_t qer_corr_id_val() const;
412  QerCorrelationIdIE &qer_corr_id_val(uint32_t id);
413  pfcp_qer_corr_id_ie_t &data();
414 
415 protected:
416  QerCorrelationIdIE(pfcp_qer_corr_id_ie_t &ie, LengthCalculator *parent);
417  uint16_t calculateLength();
418 
419 private:
421  pfcp_qer_corr_id_ie_t &ie_;
422 };
423 
425 
426 class PrecedenceIE : public IEHeader
427 {
428  friend class CreatePdrIE;
429  friend class UpdatePdrIE;
430 public:
431  uint32_t prcdnc_val() const;
432  PrecedenceIE &prcdnc_val(uint32_t val);
433  pfcp_precedence_ie_t &data();
434 
435 protected:
436  PrecedenceIE(pfcp_precedence_ie_t &ie, LengthCalculator *parent);
437  uint16_t calculateLength();
438 
439 private:
440  PrecedenceIE();
441  pfcp_precedence_ie_t &ie_;
442 };
443 
445 
447 {
452 public:
453  const uint8_t *tostraffic_cls() const;
454  TransportLevelMarkingIE &tostraffic_cls(const uint8_t *val);
455  pfcp_trnspt_lvl_marking_ie_t &data();
456 
457 protected:
458  TransportLevelMarkingIE(pfcp_trnspt_lvl_marking_ie_t &ie, LengthCalculator *parent);
459  uint16_t calculateLength();
460 
461 private:
463  pfcp_trnspt_lvl_marking_ie_t &ie_;
464 };
465 
467 
469 {
470  friend class CreateUrrIE;
471  friend class UpdateUrrIE;
472 public:
473  Bool tovol() const;
474  Bool ulvol() const;
475  Bool dlvol() const;
476  uint64_t total_volume() const;
477  uint64_t uplink_volume() const;
478  uint64_t downlink_volume() const;
479  VolumeThresholdIE &total_volume(uint64_t val);
480  VolumeThresholdIE &uplink_volume(uint64_t val);
481  VolumeThresholdIE &downlink_volume(uint64_t val);
482  pfcp_vol_thresh_ie_t &data();
483 
484 protected:
485  VolumeThresholdIE(pfcp_vol_thresh_ie_t &ie, LengthCalculator *parent);
486  uint16_t calculateLength();
487 
488 private:
490  pfcp_vol_thresh_ie_t &ie_;
491 };
492 
494 
495 class TimeThresholdIE : public IEHeader
496 {
497  friend class CreateUrrIE;
498  friend class UpdateUrrIE;
499 public:
500  uint32_t time_threshold() const;
501  TimeThresholdIE &time_threshold(uint32_t val);
502  pfcp_time_threshold_ie_t &data();
503 
504 protected:
505  TimeThresholdIE(pfcp_time_threshold_ie_t &ie, LengthCalculator *parent);
506  uint16_t calculateLength();
507 
508 private:
509  TimeThresholdIE();
510  pfcp_time_threshold_ie_t &ie_;
511 };
512 
514 
516 {
518  friend class CreateUrrIE;
519  friend class UpdateUrrIE;
520 public:
521  const ETime monitoring_time() const;
522  MonitoringTimeIE &monitoring_time(uint32_t val);
523  MonitoringTimeIE &monitoring_time(const ETime &val);
524  pfcp_monitoring_time_ie_t &data();
525 
526 protected:
527  MonitoringTimeIE(pfcp_monitoring_time_ie_t &ie, LengthCalculator *parent);
528  uint16_t calculateLength();
529 
530 private:
532  pfcp_monitoring_time_ie_t &ie_;
533 };
534 
536 
538 {
540  friend class CreateUrrIE;
541  friend class UpdateUrrIE;
542 public:
543  Bool tovol() const;
544  Bool ulvol() const;
545  Bool dlvol() const;
546  uint64_t total_volume() const;
547  uint64_t uplink_volume() const;
548  uint64_t downlink_volume() const;
549  SubsequentVolumeThresholdIE &total_volume(uint64_t val);
550  SubsequentVolumeThresholdIE &uplink_volume(uint64_t val);
551  SubsequentVolumeThresholdIE &downlink_volume(uint64_t val);
552  pfcp_sbsqnt_vol_thresh_ie_t &data();
553 
554 protected:
555  SubsequentVolumeThresholdIE(pfcp_sbsqnt_vol_thresh_ie_t &ie, LengthCalculator *parent);
556  uint16_t calculateLength();
557 
558 private:
560  pfcp_sbsqnt_vol_thresh_ie_t &ie_;
561 };
562 
564 
566 {
568  friend class CreateUrrIE;
569  friend class UpdateUrrIE;
570 public:
571  uint32_t sbsqnt_time_thresh() const;
572  SubsequentTimeThresholdIE &sbsqnt_time_thresh(uint32_t val);
573  pfcp_sbsqnt_time_thresh_ie_t &data();
574 
575 protected:
576  SubsequentTimeThresholdIE(pfcp_sbsqnt_time_thresh_ie_t &ie, LengthCalculator *parent);
577  uint16_t calculateLength();
578 
579 private:
581  pfcp_sbsqnt_time_thresh_ie_t &ie_;
582 };
583 
585 
587 {
588  friend class CreateUrrIE;
589  friend class UpdateUrrIE;
590 public:
591  uint32_t inact_det_time() const;
592  InactivityDetectionTimeIE &inact_det_time(uint32_t val);
593  pfcp_inact_det_time_ie_t &data();
594 
595 protected:
596  InactivityDetectionTimeIE(pfcp_inact_det_time_ie_t &ie, LengthCalculator *parent);
597  uint16_t calculateLength();
598 
599 private:
601  pfcp_inact_det_time_ie_t &ie_;
602 };
603 
605 
607 {
608  friend class CreateUrrIE;
609  friend class UpdateUrrIE;
610 public:
611  Bool perio() const;
612  Bool volth() const;
613  Bool timth() const;
614  Bool quhti() const;
615  Bool start() const;
616  Bool stopt() const;
617  Bool droth() const;
618  Bool liusa() const;
619  Bool volqu() const;
620  Bool timqu() const;
621  Bool envcl() const;
622  Bool macar() const;
623  Bool eveth() const;
624  Bool evequ() const;
625 
626  ReportingTriggersIE &setPerio(Bool val);
627  ReportingTriggersIE &setVolth(Bool val);
628  ReportingTriggersIE &setTimth(Bool val);
629  ReportingTriggersIE &setQuhti(Bool val);
630  ReportingTriggersIE &setStart(Bool val);
631  ReportingTriggersIE &setStopt(Bool val);
632  ReportingTriggersIE &setDroth(Bool val);
633  ReportingTriggersIE &setLiusa(Bool val);
634  ReportingTriggersIE &setVolqu(Bool val);
635  ReportingTriggersIE &setTimqu(Bool val);
636  ReportingTriggersIE &setEnvcl(Bool val);
637  ReportingTriggersIE &setMacar(Bool val);
638  ReportingTriggersIE &setEveth(Bool val);
639  ReportingTriggersIE &setEvequ(Bool val);
640 
641  pfcp_rptng_triggers_ie_t &data();
642 
643 protected:
644  ReportingTriggersIE(pfcp_rptng_triggers_ie_t &ie, LengthCalculator *parent);
645  uint16_t calculateLength();
646 
647 private:
649  pfcp_rptng_triggers_ie_t &ie_;
650 };
651 
653 
654 enum class RedirectAddressTypeEnum : uint8_t
655 {
656  ipv4_address = 0,
657  ipv6_address = 1,
658  url = 2,
659  sip_uri = 3,
661 };
662 
664 {
667 public:
668  RedirectAddressTypeEnum redir_addr_type() const;
669  uint16_t redir_svr_addr_len() const;
670  const uint8_t *redir_svr_addr() const;
671  uint16_t other_redir_svr_addr_len() const;
672  const uint8_t *other_redir_svr_addr() const;
673  RedirectInformationIE &redir_addr_type(RedirectAddressTypeEnum val);
674  RedirectInformationIE &redir_svr_addr(const uint8_t *val, uint16_t len);
675  RedirectInformationIE &other_redir_svr_addr(const uint8_t *val, uint16_t len);
676  pfcp_redir_info_ie_t &data();
677 
678 protected:
679  RedirectInformationIE(pfcp_redir_info_ie_t &ie, LengthCalculator *parent);
680  uint16_t calculateLength();
681 
682 private:
684  pfcp_redir_info_ie_t &ie_;
685 };
686 
688 
689 class ReportTypeIE : public IEHeader
690 {
691  friend class SessionReportReq;
692 public:
693  Bool dldr() const;
694  Bool usar() const;
695  Bool erir() const;
696  Bool upir() const;
697  ReportTypeIE &dldr(Bool val);
698  ReportTypeIE &usar(Bool val);
699  ReportTypeIE &erir(Bool val);
700  ReportTypeIE &upir(Bool val);
701  pfcp_report_type_ie_t &data();
702 
703 protected:
704  ReportTypeIE(pfcp_report_type_ie_t &ie, LengthCalculator *parent);
705  uint16_t calculateLength();
706 
707 private:
708  ReportTypeIE();
709  pfcp_report_type_ie_t &ie_;
710 };
711 
713 
714 class OffendingIeIE : public IEHeader
715 {
716  friend class PfdMgmtRsp;
717  friend class NodeReportRsp;
718  friend class SessionSetDeletionRsp;
721  friend class SessionDeletionRsp;
722  friend class SessionReportRsp;
723 public:
724  uint16_t type_of_the_offending_ie() const;
725  OffendingIeIE &type_of_the_offending_ie(uint16_t val);
726  pfcp_offending_ie_ie_t &data();
727 
728 protected:
729  OffendingIeIE(pfcp_offending_ie_ie_t &ie, LengthCalculator *parent);
730  uint16_t calculateLength();
731 
732 private:
733  OffendingIeIE();
734  pfcp_offending_ie_ie_t &ie_;
735 };
736 
738 
740 {
745 public:
746  uint8_t frwdng_plcy_ident_len() const;
747  const uint8_t *frwdng_plcy_ident() const;
748  ForwardingPolicyIE &frwdng_plcy_ident(const uint8_t *val, uint8_t len);
749  pfcp_frwdng_plcy_ie_t &data();
750 
751 protected:
752  ForwardingPolicyIE(pfcp_frwdng_plcy_ie_t &ie, LengthCalculator *parent);
753  uint16_t calculateLength();
754 
755 private:
757  pfcp_frwdng_plcy_ie_t &ie_;
758 };
759 
761 
762 enum class DestinationInterfaceEnum : uint8_t
763 {
764  access = 0,
765  core = 1,
766  sgi_lan_n6_lan = 2,
767  cp_function = 3,
768  li_function = 4
769 };
770 
772 {
777 public:
778  DestinationInterfaceEnum interface_value() const;
779  DestinationInterfaceIE &interface_value(DestinationInterfaceEnum val);
780  pfcp_dst_intfc_ie_t &data();
781 
782 protected:
783  DestinationInterfaceIE(pfcp_dst_intfc_ie_t &ie, LengthCalculator *parent);
784  uint16_t calculateLength();
785 
786 private:
788  pfcp_dst_intfc_ie_t &ie_;
789 };
790 
792 
794 {
795  friend class AssnSetupReq;
796  friend class AssnSetupRsp;
797  friend class AssnUpdateReq;
798  friend class AssnUpdateRsp;
799 public:
800  Bool bucp() const;
801  Bool ddnd() const;
802  Bool dlbd() const;
803  Bool trst() const;
804  Bool ftup() const;
805  Bool pfdm() const;
806  Bool heeu() const;
807  Bool treu() const;
808  Bool empu() const;
809  Bool pdiu() const;
810  Bool udbc() const;
811  Bool quoac() const;
812  Bool trace() const;
813  Bool frrt() const;
814  Bool pfde() const;
815  UpFunctionFeaturesIE &bucp(Bool val);
816  UpFunctionFeaturesIE &ddnd(Bool val);
817  UpFunctionFeaturesIE &dlbd(Bool val);
818  UpFunctionFeaturesIE &trst(Bool val);
819  UpFunctionFeaturesIE &ftup(Bool val);
820  UpFunctionFeaturesIE &pfdm(Bool val);
821  UpFunctionFeaturesIE &heeu(Bool val);
822  UpFunctionFeaturesIE &treu(Bool val);
823  UpFunctionFeaturesIE &empu(Bool val);
824  UpFunctionFeaturesIE &pdiu(Bool val);
825  UpFunctionFeaturesIE &udbc(Bool val);
826  UpFunctionFeaturesIE &quoac(Bool val);
827  UpFunctionFeaturesIE &trace(Bool val);
828  UpFunctionFeaturesIE &frrt(Bool val);
829  UpFunctionFeaturesIE &pfde(Bool val);
830 
831  pfcp_up_func_feat_ie_t &data();
832 
833 protected:
834  UpFunctionFeaturesIE(pfcp_up_func_feat_ie_t &ie, LengthCalculator *parent);
835  uint16_t calculateLength();
836 
837 private:
839  pfcp_up_func_feat_ie_t &ie_;
840 };
841 
843 
844 class ApplyActionIE : public IEHeader
845 {
846  friend class CreateFarIE;
847  friend class UpdateFarIE;
848 public:
849  Bool drop() const;
850  Bool forw() const;
851  Bool buff() const;
852  Bool nocp() const;
853  Bool dupl() const;
854 
855  ApplyActionIE &drop(Bool val);
856  ApplyActionIE &forw(Bool val);
857  ApplyActionIE &buff(Bool val);
858  ApplyActionIE &nocp(Bool val);
859  ApplyActionIE &dupl(Bool val);
860 
861  pfcp_apply_action_ie_t &data();
862 
863 protected:
864  ApplyActionIE(pfcp_apply_action_ie_t &ie, LengthCalculator *parent);
865  uint16_t calculateLength();
866 
867 private:
868  ApplyActionIE();
869  pfcp_apply_action_ie_t &ie_;
870 };
871 
873 
875 {
876  friend class DownlinkDataReportIE;
877 public:
878  Bool ppi() const;
879  Bool qfii() const;
880  uint8_t paging_plcy_indctn_val() const;
881  uint8_t qfi() const;
882  DownlinkDataServiceInformationIE &paging_plcy_indctn_val(Bool val);
883  DownlinkDataServiceInformationIE &qfi(Bool val);
884 
885  pfcp_dnlnk_data_svc_info_ie_t &data();
886 
887 protected:
888  DownlinkDataServiceInformationIE(pfcp_dnlnk_data_svc_info_ie_t &ie, LengthCalculator *parent);
889  uint16_t calculateLength();
890 
891 private:
893  pfcp_dnlnk_data_svc_info_ie_t &ie_;
894 };
895 
897 
899 {
900  friend class CreateBarIE;
904 public:
905  uint8_t delay_value() const;
906  DownlinkDataNotificationDelayIE &delay_value(uint8_t val);
907  pfcp_dnlnk_data_notif_delay_ie_t &data();
908 
909 protected:
910  DownlinkDataNotificationDelayIE(pfcp_dnlnk_data_notif_delay_ie_t &ie, LengthCalculator *parent);
911  uint16_t calculateLength();
912 
913 private:
915  pfcp_dnlnk_data_notif_delay_ie_t &ie_;
916 };
917 
919 
921 {
922  two_seconds = 0,
923  one_minute = 1,
924  ten_minutes = 2,
925  one_hour = 3,
926  ten_hours = 4,
927  infinite = 7
928 };
929 
931 {
933 public:
934  DlBufferingDurationTimerUnitEnum timer_unit() const;
935  uint8_t timer_value() const;
937  DlBufferingDurationIE &timer_unit(uint8_t val);
938  pfcp_dl_buf_dur_ie_t &data();
939 
940 protected:
941  DlBufferingDurationIE(pfcp_dl_buf_dur_ie_t &ie, LengthCalculator *parent);
942  uint16_t calculateLength();
943 
944 private:
946  pfcp_dl_buf_dur_ie_t &ie_;
947 };
948 
950 
952 {
954 public:
955  uint64_t pckt_cnt_val() const;
956  DlBufferingSuggestedPacketCountIE &pckt_cnt_val(uint16_t val);
957  pfcp_dl_buf_suggstd_pckt_cnt_ie_t &data();
958 
959 protected:
960  DlBufferingSuggestedPacketCountIE(pfcp_dl_buf_suggstd_pckt_cnt_ie_t &ie, LengthCalculator *parent);
961  uint16_t calculateLength();
962 
963 private:
965  pfcp_dl_buf_suggstd_pckt_cnt_ie_t &ie_;
966 };
967 
969 
971 {
974 public:
975  Bool drobu() const;
976  Bool sndem() const;
977  Bool qaurr() const;
978  PfcpSmReqFlagsIE &drobu(Bool val);
979  PfcpSmReqFlagsIE &sndem(Bool val);
980  PfcpSmReqFlagsIE &qaurr(Bool val);
981  pfcp_pfcpsmreq_flags_ie_t &data();
982 
983 protected:
984  PfcpSmReqFlagsIE(pfcp_pfcpsmreq_flags_ie_t &ie, LengthCalculator *parent);
985  uint16_t calculateLength();
986 
987 private:
989  pfcp_pfcpsmreq_flags_ie_t &ie_;
990 };
991 
993 
995 {
996  friend class SessionReportRsp;
997 public:
998  Bool drobu() const;
999  PfcpSrRspFlagsIE &drobu(Bool val);
1000  pfcp_pfcpsrrsp_flags_ie_t &data();
1001 
1002 protected:
1003  PfcpSrRspFlagsIE(pfcp_pfcpsrrsp_flags_ie_t &ie, LengthCalculator *parent);
1004  uint16_t calculateLength();
1005 
1006 private:
1007  PfcpSrRspFlagsIE();
1008  pfcp_pfcpsrrsp_flags_ie_t &ie_;
1009 };
1010 
1012 
1014 {
1017 public:
1018  uint32_t sequence_number() const;
1019  SequenceNumberIE &sequence_number(uint32_t val);
1020  pfcp_sequence_number_ie_t &data();
1021 
1022 protected:
1023  SequenceNumberIE(pfcp_sequence_number_ie_t &ie, LengthCalculator *parent);
1024  uint16_t calculateLength();
1025 
1026 private:
1027  SequenceNumberIE();
1028  pfcp_sequence_number_ie_t &ie_;
1029 };
1030 
1032 
1033 class MetricIE : public IEHeader
1034 {
1037 public:
1038  uint8_t metric() const;
1039  MetricIE &metric(uint8_t val);
1040  pfcp_metric_ie_t &data();
1041 
1042 protected:
1043  MetricIE(pfcp_metric_ie_t &ie, LengthCalculator *parent);
1044  uint16_t calculateLength();
1045 private:
1046  MetricIE();
1047  pfcp_metric_ie_t &ie_;
1048 };
1049 
1051 
1052 enum class TimerTimerUnitEnum : uint8_t
1053 {
1054  two_seconds = 0,
1055  one_minute = 1,
1056  ten_minutes = 2,
1057  one_hour = 3,
1058  ten_hours = 4,
1059  infinite = 7
1060 };
1061 
1062 class TimerIE : public IEHeader
1063 {
1065 public:
1066  TimerTimerUnitEnum timer_unit() const;
1067  uint8_t timer_value() const;
1068  TimerIE &timer_unit(TimerTimerUnitEnum val);
1069  TimerIE &timer_unit(uint8_t val);
1070  pfcp_timer_ie_t &data();
1071 
1072 protected:
1073  TimerIE(pfcp_timer_ie_t &ie, LengthCalculator *parent);
1074  uint16_t calculateLength();
1075 
1076 private:
1077  TimerIE();
1078  pfcp_timer_ie_t &ie_;
1079 };
1080 
1082 
1083 class PdrIdIE : public IEHeader
1084 {
1085  friend class CreatePdrIE;
1086  friend class CreatedPdrIE;
1087  friend class RemovePdrIE;
1088  friend class UpdatePdrIE;
1089  friend class DownlinkDataReportIE;
1090 public:
1091  uint16_t rule_id() const;
1092  PdrIdIE &rule_id(uint16_t val);
1093  pfcp_pdr_id_ie_t &data();
1094 
1095 protected:
1096  PdrIdIE(pfcp_pdr_id_ie_t &ie, LengthCalculator *parent);
1097  uint16_t calculateLength();
1098 
1099 private:
1100  PdrIdIE();
1101  pfcp_pdr_id_ie_t &ie_;
1102 };
1103 
1105 
1106 class FSeidIE : public IEHeader
1107 {
1111 public:
1112  Bool v4() const;
1113  Bool v6() const;
1114  uint64_t seid() const;
1115  const in_addr &ipv4_address() const;
1116  const in6_addr &ipv6_address() const;
1117  FSeidIE &seid(uint64_t val);
1118  FSeidIE &ip_address(const ESocket::Address &val);
1119  FSeidIE &ip_address(const EIpAddress &val);
1120  FSeidIE &ip_address(const in_addr &val);
1121  FSeidIE &ip_address(const in6_addr &val);
1122  pfcp_fseid_ie_t &data();
1123 
1124 protected:
1125  FSeidIE(pfcp_fseid_ie_t &ie, LengthCalculator *parent);
1126  uint16_t calculateLength();
1127 
1128 private:
1129  FSeidIE();
1130  pfcp_fseid_ie_t &ie_;
1131 };
1132 
1134 
1135 DECLARE_ERROR_ADVANCED2(NodeIdException_UnrecognizedNodeIdType);
1136 inline NodeIdException_UnrecognizedNodeIdType::NodeIdException_UnrecognizedNodeIdType(Int err)
1137 {
1138  setTextf("Unrecognized NodeIdType (%d)", err);
1139 }
1140 
1141 DECLARE_ERROR(NodeIdException_NodeIdTypeLengthMismatch);
1142 
1143 enum class NodeIdTypeEnum : uint8_t
1144 {
1145  ipv4_address = 0,
1146  ipv6_address = 1,
1147  FQDN = 2
1148 };
1149 
1150 class NodeIdIE : public IEHeader
1151 {
1154  friend class AssnSetupReq;
1155  friend class AssnSetupRsp;
1156  friend class AssnUpdateReq;
1157  friend class AssnUpdateRsp;
1158  friend class AssnReleaseReq;
1159  friend class AssnReleaseRsp;
1160  friend class NodeReportReq;
1161  friend class NodeReportRsp;
1164 public:
1165  NodeIdTypeEnum node_id_type() const;
1166  const in_addr &node_id_value_ipv4_address() const;
1167  const in6_addr &node_id_value_ipv6_address() const;
1168  const uint8_t *node_id_value_fqdn() const;
1169  uint16_t node_id_valud_fqdn_len() const;
1170  NodeIdIE &node_id_value(const ESocket::Address &val);
1171  NodeIdIE &node_id_value(const EIpAddress &val);
1172  NodeIdIE &node_id_value(const in_addr &val);
1173  NodeIdIE &node_id_value(const in6_addr &val);
1174  NodeIdIE &node_id_value(const uint8_t *val, uint8_t len, NodeIdTypeEnum type=NodeIdTypeEnum::FQDN);
1175  pfcp_node_id_ie_t &data();
1176 
1177 protected:
1178  NodeIdIE(pfcp_node_id_ie_t &ie, LengthCalculator *parent);
1179  uint16_t calculateLength();
1180 
1181 private:
1182  NodeIdIE();
1183  pfcp_node_id_ie_t &ie_;
1184 };
1185 
1187 
1188 class PfdContentsIE : public IEHeader
1189 {
1190  friend class PfdContextIE;
1191 public:
1192  Bool adnp() const;
1193  Bool aurl() const;
1194  Bool afd() const;
1195  Bool dnp() const;
1196  Bool cp() const;
1197  Bool dn() const;
1198  Bool url() const;
1199  Bool fd() const;
1200 
1201  uint16_t len_of_flow_desc() const;
1202  const uint8_t *flow_desc() const;
1203  uint16_t length_of_url() const;
1204  const uint8_t *url2() const;
1205  uint16_t len_of_domain_nm() const;
1206  const uint8_t *domain_name() const;
1207  uint16_t len_of_cstm_pfd_cntnt() const;
1208  const uint8_t *cstm_pfd_cntnt() const;
1209  uint16_t len_of_domain_nm_prot() const;
1210  const uint8_t *domain_name_prot() const;
1211  uint16_t len_of_add_flow_desc() const;
1212  const uint8_t *add_flow_desc() const;
1213  uint16_t len_of_add_url() const;
1214  const uint8_t *add_url() const;
1215  uint16_t len_of_add_domain_nm_prot() const;
1216  const uint8_t *add_domain_nm_prot() const;
1217 
1218  PfdContentsIE &flow_desc(const uint8_t *val, uint16_t len);
1219  PfdContentsIE &url2(const uint8_t *val, uint16_t len);
1220  PfdContentsIE &domain_name(const uint8_t *val, uint16_t len);
1221  PfdContentsIE &cstm_pfd_cntnt(const uint8_t *val, uint16_t len);
1222  PfdContentsIE &domain_name_prot(const uint8_t *val, uint16_t len);
1223  PfdContentsIE &add_flow_desc(const uint8_t *val, uint16_t len);
1224  PfdContentsIE &add_url(const uint8_t *val, uint16_t len);
1225  PfdContentsIE &add_domain_nm_prot(const uint8_t *val, uint16_t len);
1226  pfcp_pfd_contents_ie_t &data();
1227 
1228 protected:
1229  PfdContentsIE(pfcp_pfd_contents_ie_t &ie, LengthCalculator *parent);
1230  uint16_t calculateLength();
1231 
1232 private:
1233  PfdContentsIE();
1234  pfcp_pfd_contents_ie_t &ie_;
1235 
1236  Bool move(Bool flag, uint8_t *dest, uint16_t &destofs, uint8_t *src, uint16_t &srcofs, uint16_t len, uint16_t maxlen);
1237  Void updatePointer(Bool flag, uint8_t* &ptr, uint8_t *data, uint16_t &ofs, uint16_t len);
1238  Void updatePointers();
1239 };
1240 
1242 
1244 {
1245  friend class CreateUrrIE;
1246  friend class UpdateUrrIE;
1247 public:
1248  Bool durat() const;
1249  Bool volum() const;
1250  Bool event() const;
1251 
1252  MeasurementMethodIE &durat(Bool val);
1253  MeasurementMethodIE &volum(Bool val);
1254  MeasurementMethodIE &event(Bool val);
1255 
1256  pfcp_meas_mthd_ie_t &data();
1257 
1258 protected:
1259  MeasurementMethodIE(pfcp_meas_mthd_ie_t &ie, LengthCalculator *parent);
1260  uint16_t calculateLength();
1261 
1262 private:
1264  pfcp_meas_mthd_ie_t &ie_;
1265 };
1266 
1268 
1270 {
1274 public:
1275  Bool immer() const;
1276  Bool droth() const;
1277  Bool stopt() const;
1278  Bool start() const;
1279  Bool quhti() const;
1280  Bool timth() const;
1281  Bool volth() const;
1282  Bool perio() const;
1283  Bool eveth() const;
1284  Bool macar() const;
1285  Bool envcl() const;
1286  Bool monit() const;
1287  Bool termr() const;
1288  Bool liusa() const;
1289  Bool timqu() const;
1290  Bool volqu() const;
1291  Bool evequ() const;
1292 
1293  UsageReportTriggerIE &immer(Bool val);
1294  UsageReportTriggerIE &droth(Bool val);
1295  UsageReportTriggerIE &stopt(Bool val);
1296  UsageReportTriggerIE &start(Bool val);
1297  UsageReportTriggerIE &quhti(Bool val);
1298  UsageReportTriggerIE &timth(Bool val);
1299  UsageReportTriggerIE &volth(Bool val);
1300  UsageReportTriggerIE &perio(Bool val);
1301  UsageReportTriggerIE &eveth(Bool val);
1302  UsageReportTriggerIE &macar(Bool val);
1303  UsageReportTriggerIE &envcl(Bool val);
1304  UsageReportTriggerIE &monit(Bool val);
1305  UsageReportTriggerIE &termr(Bool val);
1306  UsageReportTriggerIE &liusa(Bool val);
1307  UsageReportTriggerIE &timqu(Bool val);
1308  UsageReportTriggerIE &volqu(Bool val);
1309  UsageReportTriggerIE &evequ(Bool val);
1310 
1311  pfcp_usage_rpt_trig_ie_t &data();
1312 
1313 protected:
1314  UsageReportTriggerIE(pfcp_usage_rpt_trig_ie_t &ie, LengthCalculator *parent);
1315  uint16_t calculateLength();
1316 
1317 private:
1319  pfcp_usage_rpt_trig_ie_t &ie_;
1320 };
1321 
1323 
1325 {
1326  friend class CreateUrrIE;
1327  friend class UpdateUrrIE;
1328 public:
1329  uint32_t meas_period() const;
1330  MeasurementPeriodIE &meas_period(uint32_t val);
1331  pfcp_meas_period_ie_t &data();
1332 
1333 protected:
1334  MeasurementPeriodIE(pfcp_meas_period_ie_t &ie, LengthCalculator *parent);
1335  uint16_t calculateLength();
1336 
1337 private:
1339  pfcp_meas_period_ie_t &ie_;
1340 };
1341 
1343 
1344 enum class FqCsidNodeIdTypeEnum : uint8_t
1345 {
1346  ipv4 = 0,
1347  ipv6 = 1,
1348  mcc_mnc_id = 2
1349 };
1350 
1351 class FqCsidIE : public IEHeader
1352 {
1357 public:
1358  FqCsidNodeIdTypeEnum fqcsid_node_id_type() const;
1359  uint8_t number_of_csids() const;
1360  const in_addr &ipv4_node_address() const;
1361  const in6_addr &ipv6_node_address() const;
1362  uint32_t mcc_mnc_id_node_address() const;
1363  uint16_t pdn_conn_set_ident(uint8_t idx) const;
1364 
1365  FqCsidIE &node_address(const ESocket::Address &val);
1366  FqCsidIE &node_address(const EIpAddress &val);
1367  FqCsidIE &node_address(const in_addr &val);
1368  FqCsidIE &node_address(const in6_addr &val);
1369  FqCsidIE &node_address(uint32_t val);
1370  uint16_t &pdn_conn_set_ident(uint8_t idx);
1371  int next_pdn_conn_set_ident();
1372  pfcp_fqcsid_ie_t &data();
1373 
1374 protected:
1375  FqCsidIE(pfcp_fqcsid_ie_t &ie, LengthCalculator *parent);
1376  uint16_t calculateLength();
1377 
1378 private:
1379  FqCsidIE();
1380  pfcp_fqcsid_ie_t &ie_;
1381 };
1382 
1384 
1386 {
1390 public:
1391  Bool tovol() const;
1392  Bool ulvol() const;
1393  Bool dlvol() const;
1394 
1395  uint64_t total_volume() const;
1396  uint64_t uplink_volume() const;
1397  uint64_t downlink_volume() const;
1398  VolumeMeasurementIE &total_volume(uint64_t val);
1399  VolumeMeasurementIE &uplink_volume(uint64_t val);
1400  VolumeMeasurementIE &downlink_volume(uint64_t val);
1401  pfcp_vol_meas_ie_t &data();
1402 
1403 protected:
1404  VolumeMeasurementIE(pfcp_vol_meas_ie_t &ie, LengthCalculator *parent);
1405  uint16_t calculateLength();
1406 
1407 private:
1409  pfcp_vol_meas_ie_t &ie_;
1410 };
1411 
1413 
1415 {
1419 public:
1420  uint32_t duration_value() const;
1421  DurationMeasurementIE &duration_value(uint32_t val);
1422  pfcp_dur_meas_ie_t &data();
1423 
1424 protected:
1425  DurationMeasurementIE(pfcp_dur_meas_ie_t &ie, LengthCalculator *parent);
1426  uint16_t calculateLength();
1427 
1428 private:
1430  pfcp_dur_meas_ie_t &ie_;
1431 };
1432 
1434 
1436 {
1440 public:
1441  ETime time_of_frst_pckt() const;
1442  TimeOfFirstPacketIE &time_of_frst_pckt(ETime &val);
1443  TimeOfFirstPacketIE &time_of_frst_pckt(uint32_t val);
1444  pfcp_time_of_frst_pckt_ie_t &data();
1445 
1446 protected:
1447  TimeOfFirstPacketIE(pfcp_time_of_frst_pckt_ie_t &ie, LengthCalculator *parent);
1448  uint16_t calculateLength();
1449 
1450 private:
1452  pfcp_time_of_frst_pckt_ie_t &ie_;
1453 };
1454 
1456 
1458 {
1462 public:
1463  ETime time_of_lst_pckt() const;
1464  TimeOfLastPacketIE &time_of_frst_pckt(ETime &val);
1465  TimeOfLastPacketIE &time_of_frst_pckt(uint32_t val);
1466  pfcp_time_of_lst_pckt_ie_t &data();
1467 
1468 protected:
1469  TimeOfLastPacketIE(pfcp_time_of_lst_pckt_ie_t &ie, LengthCalculator *parent);
1470  uint16_t calculateLength();
1471 
1472 private:
1474  pfcp_time_of_lst_pckt_ie_t &ie_;
1475 };
1476 
1478 
1480 {
1481  friend class CreateUrrIE;
1482  friend class UpdateUrrIE;
1483 public:
1484  uint32_t quota_hldng_time_val() const;
1485  QuotaHoldingTimeIE &quota_hldng_time_val(uint32_t val);
1486  pfcp_quota_hldng_time_ie_t &data();
1487 
1488 protected:
1489  QuotaHoldingTimeIE(pfcp_quota_hldng_time_ie_t &ie, LengthCalculator *parent);
1490  uint16_t calculateLength();
1491 
1492 private:
1494  pfcp_quota_hldng_time_ie_t &ie_;
1495 };
1496 
1498 
1500 {
1501  friend class CreateUrrIE;
1502  friend class UpdateUrrIE;
1503 public:
1504  Bool dlpa() const;
1505  Bool dlby() const;
1506  DroppedDlTrafficThresholdIE &dnlnk_pckts(uint64_t val);
1507  DroppedDlTrafficThresholdIE &nbr_of_bytes_of_dnlnk_data(uint64_t val);
1508  pfcp_drpd_dl_traffic_thresh_ie_t &data();
1509 
1510 protected:
1511  DroppedDlTrafficThresholdIE(pfcp_drpd_dl_traffic_thresh_ie_t &ie, LengthCalculator *parent);
1512  uint16_t calculateLength();
1513 
1514 private:
1516  pfcp_drpd_dl_traffic_thresh_ie_t &ie_;
1517 };
1518 
1520 
1521 class VolumeQuotaIE : public IEHeader
1522 {
1523  friend class CreateUrrIE;
1524  friend class UpdateUrrIE;
1525 public:
1526  Bool tovol() const;
1527  Bool ulvol() const;
1528  Bool dlvol() const;
1529  VolumeQuotaIE &total_volume(uint64_t val);
1530  VolumeQuotaIE &uplink_volume(uint64_t val);
1531  VolumeQuotaIE &downlink_volume(uint64_t val);
1532  pfcp_volume_quota_ie_t &data();
1533 
1534 protected:
1535  VolumeQuotaIE(pfcp_volume_quota_ie_t &ie, LengthCalculator *parent);
1536  uint16_t calculateLength();
1537 
1538 private:
1539  VolumeQuotaIE();
1540  pfcp_volume_quota_ie_t &ie_;
1541 };
1542 
1544 
1545 class TimeQuotaIE : public IEHeader
1546 {
1547  friend class CreateUrrIE;
1548  friend class UpdateUrrIE;
1549 public:
1550  uint32_t time_quota_val() const;
1551  TimeQuotaIE &time_quota_val(uint32_t val);
1552  pfcp_time_quota_ie_t &data();
1553 
1554 protected:
1555  TimeQuotaIE(pfcp_time_quota_ie_t &ie, LengthCalculator *parent);
1556  uint16_t calculateLength();
1557 
1558 private:
1559  TimeQuotaIE();
1560  pfcp_time_quota_ie_t &ie_;
1561 };
1562 
1564 
1565 class StartTimeIE : public IEHeader
1566 {
1570 public:
1571  ETime start_time() const;
1572  StartTimeIE &start_time(const ETime &val);
1573  StartTimeIE &start_time(uint32_t val);
1574  pfcp_start_time_ie_t &data();
1575 
1576 protected:
1577  StartTimeIE(pfcp_start_time_ie_t &ie, LengthCalculator *parent);
1578  uint16_t calculateLength();
1579 
1580 private:
1581  StartTimeIE();
1582  pfcp_start_time_ie_t &ie_;
1583 };
1584 
1586 
1587 class EndTimeIE : public IEHeader
1588 {
1592 public:
1593  ETime end_time() const;
1594  EndTimeIE &end_time(const ETime &val);
1595  EndTimeIE &end_time(uint32_t val);
1596  pfcp_end_time_ie_t &data();
1597 
1598 protected:
1599  EndTimeIE(pfcp_end_time_ie_t &ie, LengthCalculator *parent);
1600  uint16_t calculateLength();
1601 
1602 private:
1603  EndTimeIE();
1604  pfcp_end_time_ie_t &ie_;
1605 };
1606 
1608 
1609 class UrrIdIE : public IEHeader
1610 {
1611  friend class CreateUrrIE;
1612  friend class CreatePdrIE;
1613  friend class QueryUrrIE;
1614  friend class RemoveUrrIE;
1615  friend class UpdateUrrIE;
1616  friend class UpdatePdrIE;
1620 public:
1621  uint32_t urr_id_value() const;
1622  UrrIdIE &urr_id_value(uint32_t val);
1623  pfcp_urr_id_ie_t &data();
1624 
1625 protected:
1626  UrrIdIE(pfcp_urr_id_ie_t &ie, LengthCalculator *parent);
1627  uint16_t calculateLength();
1628 
1629 private:
1630  UrrIdIE();
1631  pfcp_urr_id_ie_t &ie_;
1632 };
1633 
1635 
1636 class LinkedUrrIdIE : public IEHeader
1637 {
1638  friend class CreateUrrIE;
1639  friend class UpdateUrrIE;
1640 public:
1641  uint32_t lnkd_urr_id_val() const;
1642  LinkedUrrIdIE &lnkd_urr_id_val(uint32_t val);
1643  pfcp_linked_urr_id_ie_t &data();
1644 
1645 protected:
1646  LinkedUrrIdIE(pfcp_linked_urr_id_ie_t &ie, LengthCalculator *parent);
1647  uint16_t calculateLength();
1648 
1649 private:
1650  LinkedUrrIdIE();
1651  pfcp_linked_urr_id_ie_t &ie_;
1652 };
1653 
1655 
1657 {
1658  TCP = 6,
1659  UDP = 17
1660 };
1661 
1663 {
1668 public:
1669  Bool gtpu_udp_ipv4() const;
1670  Bool gtpu_udp_ipv6() const;
1671  Bool udp_ipv4() const;
1672  Bool udp_ipv6() const;
1673  Bool ipv4() const;
1674  Bool ipv6() const;
1675  Bool ctag() const;
1676  Bool stag() const;
1677  uint32_t teid() const;
1678  const in_addr &ipv4_address() const;
1679  const in6_addr &ipv6_address() const;
1680  uint32_t port_number() const;
1681  const uint8_t *ctag_value() const;
1682  const uint8_t *stag_value() const;
1683  OuterHeaderCreationIE &ip_address_teid(const ESocket::Address &addr, uint32_t teid);
1684  OuterHeaderCreationIE &ip_address_teid(const EIpAddress &addr, uint32_t teid);
1685  OuterHeaderCreationIE &ip_address_teid(const in_addr &addr, uint32_t teid);
1686  OuterHeaderCreationIE &ip_address_teid(const in6_addr &addr, uint32_t teid);
1687  OuterHeaderCreationIE &ip_address_port(const ESocket::Address &addr, uint16_t port, InternetProtocolEnum protocol);
1688  OuterHeaderCreationIE &ip_address_port(const EIpAddress &addr, uint16_t port, InternetProtocolEnum protocol);
1689  OuterHeaderCreationIE &ip_address_port(const in_addr &addr, uint16_t port, InternetProtocolEnum protocol);
1690  OuterHeaderCreationIE &ip_address_port(const in6_addr &addr, uint16_t port, InternetProtocolEnum protocol);
1691  OuterHeaderCreationIE &ctag(const uint8_t *val);
1692  OuterHeaderCreationIE &stag(const uint8_t *val);
1693  pfcp_outer_hdr_creation_ie_t &data();
1694 
1695 protected:
1696  OuterHeaderCreationIE(pfcp_outer_hdr_creation_ie_t &ie, LengthCalculator *parent);
1697  uint16_t calculateLength();
1698 
1699 private:
1701  pfcp_outer_hdr_creation_ie_t &ie_;
1702 };
1703 
1705 
1706 class BarIdIE : public IEHeader
1707 {
1708  friend class CreateBarIE;
1709  friend class CreateFarIE;
1710  friend class RemoveBarIE;
1712  friend class UpdateFarIE;
1714 public:
1715  uint8_t bar_id_value() const;
1716  BarIdIE &bar_id_value(uint8_t val);
1717  pfcp_bar_id_ie_t &data();
1718 
1719 protected:
1720  BarIdIE(pfcp_bar_id_ie_t &ie, LengthCalculator *parent);
1721  uint16_t calculateLength();
1722 
1723 private:
1724  BarIdIE();
1725  pfcp_bar_id_ie_t &ie_;
1726 };
1727 
1729 
1731 {
1732  friend class AssnSetupReq;
1733  friend class AssnSetupRsp;
1734  friend class AssnUpdateReq;
1735  friend class AssnUpdateRsp;
1736 public:
1737  Bool load() const;
1738  Bool ovrl() const;
1739  CpFunctionFeaturesIE &load(Bool val);
1740  CpFunctionFeaturesIE &ovrl(Bool val);
1741  pfcp_cp_func_feat_ie_t &data();
1742 
1743 protected:
1744  CpFunctionFeaturesIE(pfcp_cp_func_feat_ie_t &ie, LengthCalculator *parent);
1745  uint16_t calculateLength();
1746 
1747 private:
1749  pfcp_cp_func_feat_ie_t &ie_;
1750 };
1751 
1753 
1755 {
1759 public:
1760  Bool bef() const;
1761  Bool aft() const;
1762  Bool uae() const;
1763  Bool ube() const;
1764  UsageInformationIE &bef(Bool val);
1765  UsageInformationIE &aft(Bool val);
1766  UsageInformationIE &uae(Bool val);
1767  UsageInformationIE &ube(Bool val);
1768  pfcp_usage_info_ie_t &data();
1769 
1770 protected:
1771  UsageInformationIE(pfcp_usage_info_ie_t &ie, LengthCalculator *parent);
1772  uint16_t calculateLength();
1773 
1774 private:
1776  pfcp_usage_info_ie_t &ie_;
1777 };
1778 
1780 
1782 {
1784 public:
1785 
1786  const uint8_t *app_inst_ident() const;
1787  ApplicationInstanceIdIE &app_inst_ident(const uint8_t *val, uint16_t len);
1788  pfcp_app_inst_id_ie_t &data();
1789 
1790 protected:
1791  ApplicationInstanceIdIE(pfcp_app_inst_id_ie_t &ie, LengthCalculator *parent);
1792  uint16_t calculateLength();
1793 
1794 private:
1796  pfcp_app_inst_id_ie_t &ie_;
1797 };
1798 
1800 
1801 enum class FlowDirectionEnum : uint8_t
1802 {
1803  unspecified = 0,
1804  downlink = 1,
1805  uplink = 2,
1806  bidirectional = 3
1807 };
1808 
1810 {
1812 public:
1813  FlowDirectionEnum flow_direction() const;
1814  FlowInformationIE &flow_direction(FlowDirectionEnum val);
1815  FlowInformationIE &flow_desc(const uint8_t *val, uint16_t len);
1816  pfcp_flow_info_ie_t &data();
1817 
1818 protected:
1819  FlowInformationIE(pfcp_flow_info_ie_t &ie, LengthCalculator *parent);
1820  uint16_t calculateLength();
1821 
1822 private:
1824  pfcp_flow_info_ie_t &ie_;
1825 };
1826 
1828 
1829 class UeIpAddressIE : public IEHeader
1830 {
1832  friend class PdiIE;
1835 public:
1836  Bool v6() const;
1837  Bool v4() const;
1838  Bool sd() const;
1839  Bool ipv6d() const;
1840  const in_addr &ipv4_address() const;
1841  const in6_addr &ipv6_address() const;
1842  const uint8_t ipv6_pfx_dlgtn_bits() const;
1843  UeIpAddressIE &sd(Bool val);
1844  UeIpAddressIE &ip_address(const ESocket::Address &val);
1845  UeIpAddressIE &ip_address(const EIpAddress &val);
1846  UeIpAddressIE &ip_address(const in_addr &val);
1847  UeIpAddressIE &ip_address(const in6_addr &val);
1848  UeIpAddressIE &ipv6_pfx_dlgtn_bits(uint8_t val);
1849  pfcp_ue_ip_address_ie_t &data();
1850 
1851 protected:
1852  UeIpAddressIE(pfcp_ue_ip_address_ie_t &ie, LengthCalculator *parent);
1853  uint16_t calculateLength();
1854 
1855 private:
1856  UeIpAddressIE();
1857  pfcp_ue_ip_address_ie_t &ie_;
1858 };
1859 
1861 
1862 enum class UplinkDownlinkTimeUnitEnum : uint8_t
1863 {
1864  minute = 0,
1865  six_minutes = 1,
1866  hour = 2,
1867  day = 3,
1868  week = 4
1869 };
1870 
1871 class PacketRateIE : public IEHeader
1872 {
1873  friend class CreateQerIE;
1874  friend class UpdateQerIE;
1875 public:
1876  Bool ulpr() const;
1877  Bool dlpr() const;
1878  UplinkDownlinkTimeUnitEnum uplnk_time_unit() const;
1879  uint16_t max_uplnk_pckt_rate() const;
1880  UplinkDownlinkTimeUnitEnum dnlnk_time_unit() const;
1881  uint16_t max_dnlnk_pckt_rate() const;
1882  PacketRateIE &max_uplnk_pckt_rate(uint16_t val, UplinkDownlinkTimeUnitEnum tu);
1883  PacketRateIE &max_dnlnk_pckt_rate(uint16_t val, UplinkDownlinkTimeUnitEnum tu);
1884  pfcp_packet_rate_ie_t &data();
1885 
1886 protected:
1887  PacketRateIE(pfcp_packet_rate_ie_t &ie, LengthCalculator *parent);
1888  uint16_t calculateLength();
1889 
1890 private:
1891  PacketRateIE();
1892  pfcp_packet_rate_ie_t &ie_;
1893 };
1894 
1896 
1897 enum class OuterHeaderRemovalEnum : uint8_t
1898 {
1899  gtpu_udp_ipv4 = 0,
1900  gtpu_udp_ipv6 = 1,
1901  udp_ipv4 = 2,
1902  udp_ipv6 = 3,
1903  ipv4 = 4,
1904  ipv6 = 5,
1905  gtpu_udp_ip = 6,
1906  stag = 7,
1907  stag_ctag = 8
1908 };
1909 
1911 {
1912  friend class CreatePdrIE;
1913  friend class UpdatePdrIE;
1914 public:
1915  OuterHeaderRemovalEnum outer_hdr_removal_desc() const;
1916  Bool pdu_session_container() const;
1917  OuterHeaderRemovalIE &pdu_session_container(Bool val);
1918  pfcp_outer_hdr_removal_ie_t &data();
1919 
1920 protected:
1921  OuterHeaderRemovalIE(pfcp_outer_hdr_removal_ie_t &ie, LengthCalculator *parent);
1922  uint16_t calculateLength();
1923 
1924 private:
1926  pfcp_outer_hdr_removal_ie_t &ie_;
1927 };
1928 
1930 
1932 {
1933  friend class HeartbeatReq;
1934  friend class HeartbeatRsp;
1935  friend class AssnSetupReq;
1936  friend class AssnSetupRsp;
1937 public:
1938  ETime rcvry_time_stmp_val() const;
1939  RecoveryTimeStampIE &rcvry_time_stmp_val(const ETime &val);
1940  pfcp_rcvry_time_stmp_ie_t &data();
1941 
1942 protected:
1943  RecoveryTimeStampIE(pfcp_rcvry_time_stmp_ie_t &ie, LengthCalculator *parent);
1944  uint16_t calculateLength();
1945 
1946 private:
1948  pfcp_rcvry_time_stmp_ie_t &ie_;
1949 };
1950 
1952 
1954 {
1955  friend class CreateQerIE;
1956  friend class UpdateQerIE;
1957 public:
1958  Bool ttc() const;
1959  Bool sci() const;
1960  const uint8_t *tostraffic_cls() const;
1961  const uint8_t *svc_cls_indctr() const;
1962  DlFlowLevelMarkingIE &tostraffic_cls(const uint8_t *val);
1963  DlFlowLevelMarkingIE &svc_cls_indctr(const uint8_t *val);
1964  pfcp_dl_flow_lvl_marking_ie_t &data();
1965 
1966 protected:
1967  DlFlowLevelMarkingIE(pfcp_dl_flow_lvl_marking_ie_t &ie, LengthCalculator *parent);
1968  uint16_t calculateLength();
1969 
1970 private:
1972  pfcp_dl_flow_lvl_marking_ie_t &ie_;
1973 };
1974 
1976 
1977 enum class HeaderTypeEnum : uint8_t
1978 {
1979  http = 0
1980 };
1981 
1983 {
1986 public:
1987  HeaderTypeEnum header_type() const;
1988  uint8_t len_of_hdr_fld_nm() const;
1989  const uint8_t *hdr_fld_nm() const;
1990  uint8_t len_of_hdr_fld_val() const;
1991  const uint8_t *hdr_fld_val() const;
1992  HeaderEnrichmentIE &header_type(HeaderTypeEnum val);
1993  HeaderEnrichmentIE &header_fld_nm(const uint8_t *val, uint8_t len);
1994  HeaderEnrichmentIE &header_fld_val(const uint8_t *val, uint8_t len);
1995  pfcp_hdr_enrchmt_ie_t &data();
1996 
1997 protected:
1998  HeaderEnrichmentIE(pfcp_hdr_enrchmt_ie_t &ie, LengthCalculator *parent);
1999  uint16_t calculateLength();
2000 
2001 private:
2003  pfcp_hdr_enrchmt_ie_t &ie_;
2004 };
2005 
2007 
2009 {
2010  friend class CreateUrrIE;
2011  friend class UpdateUrrIE;
2012 public:
2013  Bool mbqe() const;
2014  Bool inam() const;
2015  Bool radi() const;
2016  Bool istm() const;
2017  MeasurementInformationIE &mbqe(Bool val);
2018  MeasurementInformationIE &inam(Bool val);
2019  MeasurementInformationIE &radi(Bool val);
2020  MeasurementInformationIE &istm(Bool val);
2021  pfcp_meas_info_ie_t &data();
2022 
2023 protected:
2024  MeasurementInformationIE(pfcp_meas_info_ie_t &ie, LengthCalculator *parent);
2025  uint16_t calculateLength();
2026 
2027 private:
2029  pfcp_meas_info_ie_t &ie_;
2030 };
2031 
2033 
2035 {
2036  friend class NodeReportReq;
2037 public:
2038  Bool upfr() const;
2039  NodeReportTypeIE &upfr(Bool val);
2040  pfcp_node_rpt_type_ie_t &data();
2041 
2042 protected:
2043  NodeReportTypeIE(pfcp_node_rpt_type_ie_t &ie, LengthCalculator *parent);
2044  uint16_t calculateLength();
2045 
2046 private:
2047  NodeReportTypeIE();
2048  pfcp_node_rpt_type_ie_t &ie_;
2049 };
2050 
2052 
2054 {
2056 public:
2057  Bool v6() const;
2058  Bool v4() const;
2059  Bool di() const;
2060  Bool ni() const;
2061  const in_addr &ipv4_address() const;
2062  const in6_addr &ipv6_address() const;
2063  uint16_t len_of_dst_intfc_fld() const;
2064  DestinationInterfaceEnum dst_intfc_value() const;
2065  uint16_t len_of_ntwk_intfc_fld() const;
2066  const uint8_t *ntwk_instc() const;
2067  RemoteGTPUPeerIE &ip_address(const ESocket::Address &val);
2068  RemoteGTPUPeerIE &ip_address(const EIpAddress &val);
2069  RemoteGTPUPeerIE &ip_address(const in_addr &val);
2070  RemoteGTPUPeerIE &ip_address(const in6_addr &val);
2071  RemoteGTPUPeerIE &dst_intfc_fld(DestinationInterfaceEnum val);
2072  RemoteGTPUPeerIE &ntwk_instc(const uint8_t *val, uint16_t len);
2073  pfcp_rmt_gtpu_peer_ie_t &data();
2074 
2075 protected:
2076  RemoteGTPUPeerIE(pfcp_rmt_gtpu_peer_ie_t &ie, LengthCalculator *parent);
2077  uint16_t calculateLength();
2078 
2079 private:
2080  RemoteGTPUPeerIE();
2081  pfcp_rmt_gtpu_peer_ie_t &ie_;
2082 };
2083 
2085 
2086 class UrSeqnIE : public IEHeader
2087 {
2091 public:
2092  uint32_t urseqn() const;
2093  UrSeqnIE &urseqn(uint32_t val);
2094  pfcp_urseqn_ie_t &data();
2095 
2096 protected:
2097  UrSeqnIE(pfcp_urseqn_ie_t &ie, LengthCalculator *parent);
2098  uint16_t calculateLength();
2099 
2100 private:
2101  UrSeqnIE();
2102  pfcp_urseqn_ie_t &ie_;
2103 };
2104 
2106 
2108 {
2109  friend class CreatePdrIE;
2110  friend class UpdatePdrIE;
2111 public:
2112  uint16_t predef_rules_nm_len() const;
2113  const uint8_t *predef_rules_nm() const;
2114  ActivatePredefinedRulesIE &predef_rules_nm(const uint8_t *val, uint16_t len);
2115  pfcp_actvt_predef_rules_ie_t &data();
2116 
2117 protected:
2118  ActivatePredefinedRulesIE(pfcp_actvt_predef_rules_ie_t &ie, LengthCalculator *parent);
2119  uint16_t calculateLength();
2120 
2121 private:
2123  pfcp_actvt_predef_rules_ie_t &ie_;
2124 };
2125 
2127 
2129 {
2130  friend class UpdatePdrIE;
2131 public:
2132  uint16_t predef_rules_nm_len() const;
2133  const uint8_t *predef_rules_nm() const;
2134  DeactivatePredefinedRulesIE &predef_rules_nm(const uint8_t *val, uint16_t len);
2135  pfcp_deact_predef_rules_ie_t &data();
2136 
2137 protected:
2138  DeactivatePredefinedRulesIE(pfcp_deact_predef_rules_ie_t &ie, LengthCalculator *parent);
2139  uint16_t calculateLength();
2140 
2141 private:
2143  pfcp_deact_predef_rules_ie_t &ie_;
2144 };
2145 
2147 
2148 class FarIdIE : public IEHeader
2149 {
2150  friend class CreateUrrIE;
2151  friend class CreateFarIE;
2152  friend class CreatePdrIE;
2153  friend class RemoveFarIE;
2154  friend class UpdateUrrIE;
2155  friend class UpdateFarIE;
2156  friend class UpdatePdrIE;
2157 public:
2158  uint32_t far_id_value() const;
2159  FarIdIE &far_id_value(uint32_t val);
2160  pfcp_far_id_ie_t &data();
2161 
2162 protected:
2163  FarIdIE(pfcp_far_id_ie_t &ie, LengthCalculator *parent);
2164  uint16_t calculateLength();
2165 
2166 private:
2167  FarIdIE();
2168  pfcp_far_id_ie_t &ie_;
2169 };
2170 
2172 
2173 class QerIdIE : public IEHeader
2174 {
2175  friend class CreateQerIE;
2176  friend class CreatePdrIE;
2177  friend class RemoveQerIE;
2178  friend class UpdateQerIE;
2179  friend class UpdatePdrIE;
2180 public:
2181  uint32_t qer_id_value() const;
2182  QerIdIE &qer_id_value(uint32_t val);
2183  pfcp_qer_id_ie_t &data();
2184 
2185 protected:
2186  QerIdIE(pfcp_qer_id_ie_t &ie, LengthCalculator *parent);
2187  uint16_t calculateLength();
2188 
2189 private:
2190  QerIdIE();
2191  pfcp_qer_id_ie_t &ie_;
2192 };
2193 
2195 
2196 class OciFlagsIE : public IEHeader
2197 {
2199 public:
2200  Bool aoci() const;
2201  OciFlagsIE &aoci(Bool val);
2202  pfcp_oci_flags_ie_t &data();
2203 
2204 protected:
2205  OciFlagsIE(pfcp_oci_flags_ie_t &ie, LengthCalculator *parent);
2206  uint16_t calculateLength();
2207 
2208 private:
2209  OciFlagsIE();
2210  pfcp_oci_flags_ie_t &ie_;
2211 };
2212 
2214 
2216 {
2217  friend class AssnUpdateReq;
2218 public:
2219  Bool sarr() const;
2220  AssociationReleaseRequestIE &sarr(Bool val);
2221  pfcp_up_assn_rel_req_ie_t &data();
2222 
2223 protected:
2224  AssociationReleaseRequestIE(pfcp_up_assn_rel_req_ie_t &ie, LengthCalculator *parent);
2225  uint16_t calculateLength();
2226 
2227 private:
2229  pfcp_up_assn_rel_req_ie_t &ie_;
2230 };
2231 
2233 
2235 {
2236  two_seconds = 0,
2237  one_minute = 1,
2238  ten_minutes = 2,
2239  one_hour = 3,
2240  ten_hours = 4,
2241  infinite = 7
2242 };
2243 
2245 {
2246  friend class AssnUpdateReq;
2247 public:
2248  GracefulReleasePeriodTimerUnitEnum timer_unit() const;
2249  uint8_t timer_value() const;
2250  GracefulReleasePeriodIE &timer_value(uint8_t val, GracefulReleasePeriodTimerUnitEnum tu);
2251  pfcp_graceful_rel_period_ie_t &data();
2252 
2253 protected:
2254  GracefulReleasePeriodIE(pfcp_graceful_rel_period_ie_t &ie, LengthCalculator *parent);
2255  uint16_t calculateLength();
2256 
2257 private:
2259  pfcp_graceful_rel_period_ie_t &ie_;
2260 };
2261 
2263 
2264 enum class PdnTypeEnum : uint8_t
2265 {
2266  ipv4 = 1,
2267  ipv6 = 2,
2268  ipv4v6 = 3,
2269  nonip = 4,
2270  ethernet = 5
2271 };
2272 
2273 class PdnTypeIE : public IEHeader
2274 {
2276 public:
2277  PdnTypeEnum pdn_type() const;
2278  PdnTypeIE &pdn_type(PdnTypeEnum val);
2279  pfcp_pdn_type_ie_t &data();
2280 
2281 protected:
2282  PdnTypeIE(pfcp_pdn_type_ie_t &ie, LengthCalculator *parent);
2283  uint16_t calculateLength();
2284 
2285 private:
2286  PdnTypeIE();
2287  pfcp_pdn_type_ie_t &ie_;
2288 };
2289 
2291 
2292 enum class RuleIdTypeEnum : uint8_t
2293 {
2294  pdr = 0,
2295  far = 1,
2296  qer = 2,
2297  urr = 3,
2298  bar = 4
2299 };
2300 
2301 class FailedRuleIdIE : public IEHeader
2302 {
2305 public:
2306  RuleIdTypeEnum rule_id_type() const;
2307  uint32_t rule_id_value() const;
2308  FailedRuleIdIE &rule_id_value(uint32_t val, RuleIdTypeEnum rt);
2309  pfcp_failed_rule_id_ie_t &data();
2310 
2311 protected:
2312  FailedRuleIdIE(pfcp_failed_rule_id_ie_t &ie, LengthCalculator *parent);
2313  uint16_t calculateLength();
2314 
2315 private:
2316  FailedRuleIdIE();
2317  pfcp_failed_rule_id_ie_t &ie_;
2318 };
2319 
2321 
2322 enum class BaseTimeIntervalTypeEnum : uint8_t
2323 {
2324  ctp = 0,
2325  dtp = 1
2326 };
2327 
2329 {
2330  friend class CreateUrrIE;
2331  friend class UpdateUrrIE;
2332 public:
2333  BaseTimeIntervalTypeEnum btit() const;
2334  uint32_t base_time_int() const;
2335  TimeQuotaMechanismIE &base_time_int(uint32_t val, BaseTimeIntervalTypeEnum btit);
2336  pfcp_time_quota_mech_ie_t &data();
2337 
2338 protected:
2339  TimeQuotaMechanismIE(pfcp_time_quota_mech_ie_t &ie, LengthCalculator *parent);
2340  uint16_t calculateLength();
2341 
2342 private:
2344  pfcp_time_quota_mech_ie_t &ie_;
2345 };
2346 
2348 
2350 {
2351  friend class AssnSetupReq;
2352  friend class AssnSetupRsp;
2353  friend class AssnUpdateReq;
2354 public:
2355  Bool v4() const;
2356  Bool v6() const;
2357  uint8_t teidri() const;
2358  Bool assoni() const;
2359  Bool assosi() const;
2360  uint8_t teid_range() const;
2361  UserPlaneIpResourceInformationIE &teid_range(uint8_t bits, uint8_t val);
2362  const in_addr &ipv4_address() const;
2363  const in6_addr &ipv6_address() const;
2364  uint8_t ntwk_inst_len() const;
2365  const uint8_t *ntwk_inst() const;
2366  SourceInterfaceEnum src_intfc() const;
2367  UserPlaneIpResourceInformationIE &ip_address(const ESocket::Address &val);
2368  UserPlaneIpResourceInformationIE &ip_address(const EIpAddress &val);
2369  UserPlaneIpResourceInformationIE &ip_address(const in_addr &val);
2370  UserPlaneIpResourceInformationIE &ip_address(const in6_addr &val);
2371  UserPlaneIpResourceInformationIE &ntwk_inst(const uint8_t *val, uint8_t len);
2373  pfcp_user_plane_ip_rsrc_info_ie_t &data();
2374 
2375 protected:
2376  UserPlaneIpResourceInformationIE(pfcp_user_plane_ip_rsrc_info_ie_t &ie, LengthCalculator *parent);
2377  uint16_t calculateLength();
2378 
2379 private:
2381  pfcp_user_plane_ip_rsrc_info_ie_t &ie_;
2382 };
2383 
2385 
2387 {
2390 public:
2391  uint32_t user_plane_inact_timer() const;
2392  UserPlaneInactivityTimerIE &user_plane_inact_timer(uint32_t val);
2393  pfcp_user_plane_inact_timer_ie_t &data();
2394 
2395 protected:
2396  UserPlaneInactivityTimerIE(pfcp_user_plane_inact_timer_ie_t &ie, LengthCalculator *parent);
2397  uint16_t calculateLength();
2398 
2399 private:
2401  pfcp_user_plane_inact_timer_ie_t &ie_;
2402 };
2403 
2405 
2406 class MultiplierIE : public IEHeader
2407 {
2408  friend class AggregatedUrrsIE;
2409 public:
2410  int64_t value_digits() const;
2411  int32_t exponent() const;
2412  MultiplierIE &value_digits(int64_t val);
2413  MultiplierIE &exponent(int32_t val);
2414  pfcp_multiplier_ie_t &data();
2415 
2416 protected:
2417  MultiplierIE(pfcp_multiplier_ie_t &ie, LengthCalculator *parent);
2418  uint16_t calculateLength();
2419 
2420 private:
2421  MultiplierIE();
2422  pfcp_multiplier_ie_t &ie_;
2423 };
2424 
2426 
2428 {
2429  friend class AggregatedUrrsIE;
2430 public:
2431  uint32_t urr_id_value() const;
2432  AggregatedUrrIdIE &urr_id_value(uint32_t val);
2433  pfcp_agg_urr_id_ie_t &data();
2434 
2435 protected:
2436  AggregatedUrrIdIE(pfcp_agg_urr_id_ie_t &ie, LengthCalculator *parent);
2437  uint16_t calculateLength();
2438 
2439 private:
2441  pfcp_agg_urr_id_ie_t &ie_;
2442 };
2443 
2445 
2447 {
2449  friend class CreateUrrIE;
2450  friend class UpdateUrrIE;
2451 public:
2452  Bool tovol() const;
2453  Bool ulvol() const;
2454  Bool dlvol() const;
2455  SubsequentVolumeQuotaIE &total_volume(uint64_t val);
2456  SubsequentVolumeQuotaIE &uplink_volume(uint64_t val);
2457  SubsequentVolumeQuotaIE &downlink_volume(uint64_t val);
2458  pfcp_sbsqnt_vol_quota_ie_t &data();
2459 
2460 protected:
2461  SubsequentVolumeQuotaIE(pfcp_sbsqnt_vol_quota_ie_t &ie, LengthCalculator *parent);
2462  uint16_t calculateLength();
2463 
2464 private:
2466  pfcp_sbsqnt_vol_quota_ie_t &ie_;
2467 };
2468 
2470 
2472 {
2474  friend class CreateUrrIE;
2475  friend class UpdateUrrIE;
2476 public:
2477  uint32_t time_quota_val() const;
2478  SubsequentTimeQuotaIE &time_quota_val(uint32_t val);
2479  pfcp_sbsqnt_time_quota_ie_t &data();
2480 
2481 protected:
2482  SubsequentTimeQuotaIE(pfcp_sbsqnt_time_quota_ie_t &ie, LengthCalculator *parent);
2483  uint16_t calculateLength();
2484 
2485 private:
2487  pfcp_sbsqnt_time_quota_ie_t &ie_;
2488 };
2489 
2491 
2492 class RqiIE : public IEHeader
2493 {
2494  friend class CreateQerIE;
2495  friend class UpdateQerIE;
2496 public:
2497  Bool rqi() const;
2498  RqiIE &rqi(Bool val);
2499  pfcp_rqi_ie_t &data();
2500 
2501 protected:
2502  RqiIE(pfcp_rqi_ie_t &ie, LengthCalculator *parent);
2503  uint16_t calculateLength();
2504 
2505 private:
2506  RqiIE();
2507  pfcp_rqi_ie_t &ie_;
2508 };
2509 
2511 
2512 class QfiIE : public IEHeader
2513 {
2514  friend class CreateQerIE;
2515  friend class PdiIE;
2516  friend class UpdateQerIE;
2517 public:
2518  uint8_t qfi_value() const;
2519  QfiIE &qfi_value(uint8_t val);
2520  pfcp_qfi_ie_t &data();
2521 
2522 protected:
2523  QfiIE(pfcp_qfi_ie_t &ie, LengthCalculator *parent);
2524  uint16_t calculateLength();
2525 
2526 private:
2527  QfiIE();
2528  pfcp_qfi_ie_t &ie_;
2529 };
2530 
2532 
2534 {
2538 public:
2539  uint32_t query_urr_ref_val() const;
2540  QueryUrrReferenceIE &query_urr_ref_val(uint32_t val);
2541  pfcp_query_urr_ref_ie_t &data();
2542 
2543 protected:
2544  QueryUrrReferenceIE(pfcp_query_urr_ref_ie_t &ie, LengthCalculator *parent);
2545  uint16_t calculateLength();
2546 
2547 private:
2549  pfcp_query_urr_ref_ie_t &ie_;
2550 };
2551 
2553 
2555 {
2557  friend class SessionReportReq;
2558 public:
2559  Bool auri() const;
2560  uint16_t nbr_of_add_usage_rpts_val() const;
2561  AdditionalUsageReportsInformationIE &auri(Bool val);
2562  AdditionalUsageReportsInformationIE &nbr_of_add_usage_rpts_val(uint16_t val);
2563  pfcp_add_usage_rpts_info_ie_t &data();
2564 
2565 protected:
2566  AdditionalUsageReportsInformationIE(pfcp_add_usage_rpts_info_ie_t &ie, LengthCalculator *parent);
2567  uint16_t calculateLength();
2568 
2569 private:
2571  pfcp_add_usage_rpts_info_ie_t &ie_;
2572 };
2573 
2575 
2577 {
2580  friend class PdiIE;
2585 public:
2586  uint8_t traffic_endpt_id_val() const;
2587  TrafficEndpointIdIE &traffic_endpt_id_val(uint8_t val);
2588  pfcp_traffic_endpt_id_ie_t &data();
2589 
2590 protected:
2591  TrafficEndpointIdIE(pfcp_traffic_endpt_id_ie_t &ie, LengthCalculator *parent);
2592  uint16_t calculateLength();
2593 
2594 private:
2596  pfcp_traffic_endpt_id_ie_t &ie_;
2597 };
2598 
2600 
2601 class MacAddressIE : public IEHeader
2602 {
2604 public:
2605  Bool sour() const;
2606  Bool dest() const;
2607  Bool usou() const;
2608  Bool udes() const;
2609  const uint8_t *src_mac_addr_val() const;
2610  const uint8_t *dst_mac_addr_val() const;
2611  const uint8_t *upr_src_mac_addr_val() const;
2612  const uint8_t *upr_dst_mac_addr_val() const;
2613  MacAddressIE &src_mac_addr_val(const uint8_t *val);
2614  MacAddressIE &dst_mac_addr_val(const uint8_t *val);
2615  MacAddressIE &upr_dst_mac_addr_val(const uint8_t *val);
2616  MacAddressIE &upr_src_mac_addr_val(const uint8_t *val);
2617  pfcp_mac_address_ie_t &data();
2618 
2619 protected:
2620  MacAddressIE(pfcp_mac_address_ie_t &ie, LengthCalculator *parent);
2621  uint16_t calculateLength();
2622 
2623 private:
2624  MacAddressIE();
2625  pfcp_mac_address_ie_t &ie_;
2626 };
2627 
2629 
2630 class CTagIE : public IEHeader
2631 {
2633 public:
2634  Bool pcp() const;
2635  Bool dei() const;
2636  Bool vid() const;
2637  uint8_t pcp_value() const;
2638  Bool dei_flag() const;
2639  uint8_t cvid_value() const;
2640  uint8_t cvid_value2() const;
2641  CTagIE &pcp(Bool val);
2642  CTagIE &dei(Bool val);
2643  CTagIE &vid(Bool val);
2644  CTagIE &pcp_value(uint8_t val);
2645  CTagIE &dei_flag(Bool val);
2646  CTagIE &cvid_value(uint8_t val);
2647  CTagIE &cvid_value2(uint8_t val);
2648  pfcp_ctag_ie_t &data();
2649 
2650 protected:
2651  CTagIE(pfcp_ctag_ie_t &ie, LengthCalculator *parent);
2652  uint16_t calculateLength();
2653 
2654 private:
2655  CTagIE();
2656  pfcp_ctag_ie_t &ie_;
2657 };
2658 
2660 
2661 class STagIE : public IEHeader
2662 {
2664 public:
2665  Bool pcp() const;
2666  Bool dei() const;
2667  Bool vid() const;
2668  uint8_t pcp_value() const;
2669  Bool dei_flag() const;
2670  uint8_t svid_value() const;
2671  uint8_t svid_value2() const;
2672  STagIE &pcp(Bool val);
2673  STagIE &dei(Bool val);
2674  STagIE &vid(Bool val);
2675  STagIE &pcp_value(uint8_t val);
2676  STagIE &dei_flag(Bool val);
2677  STagIE &svid_value(uint8_t val);
2678  STagIE &svid_value2(uint8_t val);
2679  pfcp_stag_ie_t &data();
2680 
2681 protected:
2682  STagIE(pfcp_stag_ie_t &ie, LengthCalculator *parent);
2683  uint16_t calculateLength();
2684 
2685 private:
2686  STagIE();
2687  pfcp_stag_ie_t &ie_;
2688 };
2689 
2691 
2692 class EthertypeIE : public IEHeader
2693 {
2695 public:
2696  uint16_t ethertype() const;
2697  EthertypeIE &ethertype(uint16_t val);
2698  pfcp_ethertype_ie_t &data();
2699 
2700 protected:
2701  EthertypeIE(pfcp_ethertype_ie_t &ie, LengthCalculator *parent);
2702  uint16_t calculateLength();
2703 
2704 private:
2705  EthertypeIE();
2706  pfcp_ethertype_ie_t &ie_;
2707 };
2708 
2710 
2711 class ProxyingIE : public IEHeader
2712 {
2714 public:
2715  Bool arp() const;
2716  Bool ins() const;
2717  ProxyingIE &arp(Bool val);
2718  ProxyingIE &ins(Bool val);
2719  pfcp_proxying_ie_t &data();
2720 
2721 protected:
2722  ProxyingIE(pfcp_proxying_ie_t &ie, LengthCalculator *parent);
2723  uint16_t calculateLength();
2724 
2725 private:
2726  ProxyingIE();
2727  pfcp_proxying_ie_t &ie_;
2728 };
2729 
2731 
2733 {
2735 public:
2736  uint32_t eth_fltr_id_val() const;
2737  EthernetFilterIdIE &eth_fltr_id_val(uint32_t val);
2738  pfcp_eth_fltr_id_ie_t &data();
2739 
2740 protected:
2741  EthernetFilterIdIE(pfcp_eth_fltr_id_ie_t &ie, LengthCalculator *parent);
2742  uint16_t calculateLength();
2743 
2744 private:
2746  pfcp_eth_fltr_id_ie_t &ie_;
2747 };
2748 
2750 
2752 {
2754 public:
2755  Bool bide() const;
2756  EthernetFilterPropertiesIE &bide(Bool val);
2757  pfcp_eth_fltr_props_ie_t &data();
2758 
2759 protected:
2760  EthernetFilterPropertiesIE(pfcp_eth_fltr_props_ie_t &ie, LengthCalculator *parent);
2761  uint16_t calculateLength();
2762 
2763 private:
2765  pfcp_eth_fltr_props_ie_t &ie_;
2766 };
2767 
2769 
2771 {
2772  friend class CreateBarIE;
2775 public:
2776  uint8_t pckt_cnt_val() const;
2777  SuggestedBufferingPacketsCountIE &pckt_cnt_val(uint8_t val);
2778  pfcp_suggstd_buf_pckts_cnt_ie_t &data();
2779 
2780 protected:
2781  SuggestedBufferingPacketsCountIE(pfcp_suggstd_buf_pckts_cnt_ie_t &ie, LengthCalculator *parent);
2782  uint16_t calculateLength();
2783 
2784 private:
2786  pfcp_suggstd_buf_pckts_cnt_ie_t &ie_;
2787 };
2788 
2790 
2791 class UserIdIE : public IEHeader
2792 {
2794 public:
2795  Bool imsif() const;
2796  Bool imeif() const;
2797  Bool msisdnf() const;
2798  Bool naif() const;
2799  uint8_t length_of_imsi() const;
2800  uint8_t length_of_imei() const;
2801  uint8_t len_of_msisdn() const;
2802  uint8_t length_of_nai() const;
2803  const uint8_t *imsi() const;
2804  const uint8_t *imei() const;
2805  const uint8_t *msisdn() const;
2806  const uint8_t *nai() const;
2807  UserIdIE &imsi(const uint8_t *val, uint8_t len);
2808  UserIdIE &imei(const uint8_t *val, uint8_t len);
2809  UserIdIE &msisdn(const uint8_t *val, uint8_t len);
2810  UserIdIE &nai(const uint8_t *val, uint8_t len);
2811  pfcp_user_id_ie_t &data();
2812 
2813 protected:
2814  UserIdIE(pfcp_user_id_ie_t &ie, LengthCalculator *parent);
2815  uint16_t calculateLength();
2816 
2817 private:
2818  UserIdIE();
2819  pfcp_user_id_ie_t &ie_;
2820 };
2821 
2823 
2825 {
2827  friend class PdiIE;
2828 public:
2829  Bool ethi() const;
2830  EthernetPduSessionInformationIE &ethi(Bool val);
2831  pfcp_eth_pdu_sess_info_ie_t &data();
2832 
2833 protected:
2834  EthernetPduSessionInformationIE(pfcp_eth_pdu_sess_info_ie_t &ie, LengthCalculator *parent);
2835  uint16_t calculateLength();
2836 
2837 private:
2839  pfcp_eth_pdu_sess_info_ie_t &ie_;
2840 };
2841 
2843 
2845 {
2847 public:
2848  uint8_t nbr_of_mac_addrs() const;
2849  const uint8_t *mac_addr_val(uint8_t idx);
2850  MacAddressesDetectedIE &mac_addr_val(const uint8_t *val);
2851  pfcp_mac_addrs_detctd_ie_t &data();
2852 
2853 protected:
2854  MacAddressesDetectedIE(pfcp_mac_addrs_detctd_ie_t &ie, LengthCalculator *parent);
2855  uint16_t calculateLength();
2856 
2857 private:
2859  pfcp_mac_addrs_detctd_ie_t &ie_;
2860 };
2861 
2863 
2865 {
2867 public:
2868  uint8_t nbr_of_mac_addrs() const;
2869  const uint8_t *mac_addr_val(uint8_t idx);
2870  MacAddressesRemovedIE &mac_addr_val(const uint8_t *val);
2871  pfcp_mac_addrs_rmvd_ie_t &data();
2872 
2873 protected:
2874  MacAddressesRemovedIE(pfcp_mac_addrs_rmvd_ie_t &ie, LengthCalculator *parent);
2875  uint16_t calculateLength();
2876 
2877 private:
2879  pfcp_mac_addrs_rmvd_ie_t &ie_;
2880 };
2881 
2883 
2885 {
2886  friend class CreateUrrIE;
2887  friend class UpdateUrrIE;
2888 public:
2889  uint32_t eth_inact_timer() const;
2890  EthernetInactivityTimerIE &eth_inact_timer(uint32_t val);
2891  pfcp_eth_inact_timer_ie_t &data();
2892 
2893 protected:
2894  EthernetInactivityTimerIE(pfcp_eth_inact_timer_ie_t &ie, LengthCalculator *parent);
2895  uint16_t calculateLength();
2896 
2897 private:
2899  pfcp_eth_inact_timer_ie_t &ie_;
2900 };
2901 
2903 
2905 {
2907  friend class CreateUrrIE;
2908  friend class UpdateUrrIE;
2909 public:
2910  uint32_t sbsqnt_evnt_quota() const;
2911  SubsequentEventQuotaIE &sbsqnt_evnt_quota(uint32_t val);
2912  pfcp_sbsqnt_evnt_quota_ie_t &data();
2913 
2914 protected:
2915  SubsequentEventQuotaIE(pfcp_sbsqnt_evnt_quota_ie_t &ie, LengthCalculator *parent);
2916  uint16_t calculateLength();
2917 
2918 private:
2920  pfcp_sbsqnt_evnt_quota_ie_t &ie_;
2921 };
2922 
2924 
2926 {
2928  friend class CreateUrrIE;
2929  friend class UpdateUrrIE;
2930 public:
2931  uint32_t sbsqnt_evnt_thresh() const;
2932  SubsequentEventThresholdIE &sbsqnt_evnt_thresh(uint32_t val);
2933  pfcp_sbsqnt_evnt_thresh_ie_t &data();
2934 
2935 protected:
2936  SubsequentEventThresholdIE(pfcp_sbsqnt_evnt_thresh_ie_t &ie, LengthCalculator *parent);
2937  uint16_t calculateLength();
2938 
2939 private:
2941  pfcp_sbsqnt_evnt_thresh_ie_t &ie_;
2942 };
2943 
2945 
2947 {
2950 public:
2951  uint8_t mcc_digit_1() const;
2952  uint8_t mcc_digit_2() const;
2953  uint8_t mcc_digit_3() const;
2954  uint8_t mnc_digit_1() const;
2955  uint8_t mnc_digit_2() const;
2956  uint8_t mnc_digit_3() const;
2957  uint32_t trace_id() const;
2958  uint8_t len_of_trigrng_evnts() const;
2959  const uint8_t *trigrng_evnts() const;
2960  uint16_t sess_trc_depth() const;
2961  uint32_t len_of_list_of_intfcs() const;
2962  const uint8_t *list_of_intfcs() const;
2963  uint16_t len_of_ip_addr_of_trc_coll_ent() const;
2964  in_addr &ipv4_addr_of_trc_coll_ent() const;
2965  in6_addr &ipv6_addr_of_trc_coll_ent() const;
2966  TraceInformationIE &mcc(const char *val, uint8_t len);
2967  TraceInformationIE &mnc(const char *val, uint8_t len);
2968  TraceInformationIE &plmnid(const uint8_t *val);
2969  TraceInformationIE &trace_id(uint32_t val);
2970  TraceInformationIE &trigrng_evnts(const uint8_t *val);
2971  TraceInformationIE &list_of_intfcs(const uint8_t *val);
2972  TraceInformationIE &ip_addr_of_trc_coll_ent(const ESocket::Address &val);
2973  TraceInformationIE &ip_addr_of_trc_coll_ent(const EIpAddress &val);
2974  TraceInformationIE &ip_addr_of_trc_coll_ent(const in_addr &val);
2975  TraceInformationIE &ip_addr_of_trc_coll_ent(const in6_addr &val);
2976  pfcp_trc_info_ie_t &data();
2977 
2978 protected:
2979  TraceInformationIE(pfcp_trc_info_ie_t &ie, LengthCalculator *parent);
2980  uint16_t calculateLength();
2981 
2982 private:
2984  pfcp_trc_info_ie_t &ie_;
2985 };
2986 
2988 
2989 class FramedRouteIE : public IEHeader
2990 {
2992  friend class PdiIE;
2994 public:
2995  uint16_t framed_route_len() const;
2996  const uint8_t *framed_route() const;
2997  FramedRouteIE &framed_route(const uint8_t *val, uint16_t len);
2998  pfcp_framed_route_ie_t &data();
2999 
3000 protected:
3001  FramedRouteIE(pfcp_framed_route_ie_t &ie, LengthCalculator *parent);
3002  uint16_t calculateLength();
3003 
3004 private:
3005  FramedRouteIE();
3006  pfcp_framed_route_ie_t &ie_;
3007 };
3008 
3010 
3011 enum class FramedRoutingEnum : uint32_t
3012 {
3013  none = 0,
3016  send_and_listen = 3
3017 };
3018 
3020 {
3022  friend class PdiIE;
3024 public:
3025  FramedRoutingEnum framed_routing() const;
3026  FramedRoutingIE &framed_routing(FramedRoutingEnum val);
3027  pfcp_framed_routing_ie_t &data();
3028 
3029 protected:
3030  FramedRoutingIE(pfcp_framed_routing_ie_t &ie, LengthCalculator *parent);
3031  uint16_t calculateLength();
3032 
3033 private:
3034  FramedRoutingIE();
3035  pfcp_framed_routing_ie_t &ie_;
3036 };
3037 
3039 
3041 {
3043  friend class PdiIE;
3045 public:
3046  uint16_t frmd_ipv6_rte_len() const;
3047  const uint8_t *frmd_ipv6_rte() const;
3048  FramedIpv6RouteIE &frmd_ipv6_rte(const uint8_t *val, uint16_t len);
3049  pfcp_frmd_ipv6_rte_ie_t &data();
3050 
3051 protected:
3052  FramedIpv6RouteIE(pfcp_frmd_ipv6_rte_ie_t &ie, LengthCalculator *parent);
3053  uint16_t calculateLength();
3054 
3055 private:
3057  pfcp_frmd_ipv6_rte_ie_t &ie_;
3058 };
3059 
3061 
3062 class EventQuotaIE : public IEHeader
3063 {
3064  friend class CreateUrrIE;
3065  friend class UpdateUrrIE;
3066 public:
3067  uint32_t sbsqnt_evnt_quota() const ;
3068  EventQuotaIE &sbsqnt_evnt_quota(uint32_t val);
3069  pfcp_event_quota_ie_t &data();
3070 
3071 protected:
3072  EventQuotaIE(pfcp_event_quota_ie_t &ie, LengthCalculator *parent);
3073  uint16_t calculateLength();
3074 
3075 private:
3076  EventQuotaIE();
3077  pfcp_event_quota_ie_t &ie_;
3078 };
3079 
3081 
3083 {
3084  friend class CreateUrrIE;
3085  friend class UpdateUrrIE;
3086 public:
3087  uint32_t event_threshold() const;
3088  EventThresholdIE &event_threshold(uint32_t val);
3089  pfcp_event_threshold_ie_t &data();
3090 
3091 protected:
3092  EventThresholdIE(pfcp_event_threshold_ie_t &ie, LengthCalculator *parent);
3093  uint16_t calculateLength();
3094 
3095 private:
3096  EventThresholdIE();
3097  pfcp_event_threshold_ie_t &ie_;
3098 };
3099 
3101 
3103 {
3105 public:
3106  ETime evnt_time_stmp() const;
3107  EventTimeStampIE &evnt_time_stmp(const ETime &val);
3108  pfcp_evnt_time_stmp_ie_t &data();
3109 
3110 protected:
3111  EventTimeStampIE(pfcp_evnt_time_stmp_ie_t &ie, LengthCalculator *parent);
3112  uint16_t calculateLength();
3113 
3114 private:
3115  EventTimeStampIE();
3116  pfcp_evnt_time_stmp_ie_t &ie_;
3117 };
3118 
3120 
3122 {
3123  friend class CreateQerIE;
3124  friend class UpdateQerIE;
3125 public:
3126  uint32_t avgng_wnd() const;
3127  AveragingWindowIE &avgng_wnd(uint32_t val);
3128  pfcp_avgng_wnd_ie_t &data();
3129 
3130 protected:
3131  AveragingWindowIE(pfcp_avgng_wnd_ie_t &ie, LengthCalculator *parent);
3132  uint16_t calculateLength();
3133 
3134 private:
3136  pfcp_avgng_wnd_ie_t &ie_;
3137 };
3138 
3140 
3142 {
3143  friend class CreateQerIE;
3144  friend class UpdateQerIE;
3145 public:
3146  uint8_t ppi_value() const;
3147  PagingPolicyIndicatorIE &ppi_value(uint8_t val);
3148  pfcp_paging_plcy_indctr_ie_t &data();
3149 
3150 protected:
3151  PagingPolicyIndicatorIE(pfcp_paging_plcy_indctr_ie_t &ie, LengthCalculator *parent);
3152  uint16_t calculateLength();
3153 
3154 private:
3156  pfcp_paging_plcy_indctr_ie_t &ie_;
3157 };
3158 
3160 
3161 class ApnDnnIE : public IEHeader
3162 {
3164 public:
3165  uint16_t apn_dnn_len() const;
3166  const uint8_t *apn_dnn() const;
3167  ApnDnnIE &apn_dnn(const uint8_t *val, uint16_t len);
3168  pfcp_apn_dnn_ie_t &data();
3169 
3170 protected:
3171  ApnDnnIE(pfcp_apn_dnn_ie_t &ie, LengthCalculator *parent);
3172  uint16_t calculateLength();
3173 
3174 private:
3175  ApnDnnIE();
3176  pfcp_apn_dnn_ie_t &ie_;
3177 };
3178 
3180 
3181 enum class TgppInterfaceTypeEnum : uint8_t
3182 {
3183  S1U = 0,
3184  S5S8U = 1,
3185  S4u = 2,
3186  S11U = 3,
3187  S12U = 4,
3188  GnGpU = 5,
3189  S2aU = 6,
3190  S2bU = 7,
3194  N3_3GPP_Access = 11,
3198  N9 = 15
3199 };
3200 
3202 {
3204  friend class PdiIE;
3206 public:
3207  TgppInterfaceTypeEnum interface_type_value() const;
3208  TgppInterfaceTypeIE &interface_type_value(TgppInterfaceTypeEnum val);
3209  pfcp_3gpp_intfc_type_ie_t &data();
3210 
3211 protected:
3212  TgppInterfaceTypeIE(pfcp_3gpp_intfc_type_ie_t &ie, LengthCalculator *parent);
3213  uint16_t calculateLength();
3214 
3215 private:
3217  pfcp_3gpp_intfc_type_ie_t &ie_;
3218 };
3219 
3221 
3222 /*
3223 class IE : public IEHeader
3224 {
3225 public:
3226 
3227  __datatype__ &data() { return ie_; }
3228 
3229 protected:
3230  IE(__datatype__ &ie)
3231  : IEHeader(ie.header, ),
3232  ie_(ie)
3233  {
3234  }
3235  uint16_t calculateLength()
3236  {
3237  return sizeof(__datatype__) - sizeof(pfcp_ie_header_t);
3238  }
3239 
3240 private:
3241  IE();
3242  __datatype__ &ie_;
3243 };
3244 */
3245 
3249 
3250 class PfdContextIE : public IEHeader
3251 {
3252  friend class ApplicationIdsPfdsIE;
3253 public:
3254  PfdContentsIE &pfdContents(uint8_t idx);
3255  pfcp_pfd_context_ie_t &data();
3256 
3257 protected:
3258  PfdContextIE(pfcp_pfd_context_ie_t &ie, LengthCalculator *parent);
3259  uint16_t calculateLength();
3260 
3261 private:
3262  PfdContextIE();
3263  pfcp_pfd_context_ie_t &ie_;
3264  vector<PfdContentsIE> pfdcnts_;
3265 };
3266 
3268 
3270 {
3271  friend class PfdMgmtReq;
3272 public:
3273  ApplicationIdIE &applicationId();
3274  PfdContextIE &pfdContext(uint8_t idx);
3275  int nextPfdContext();
3276  pfcp_app_ids_pfds_ie_t &data();
3277 
3278 protected:
3279  ApplicationIdsPfdsIE(pfcp_app_ids_pfds_ie_t &ie, LengthCalculator *parent);
3280  uint16_t calculateLength();
3281 
3282 private:
3284  pfcp_app_ids_pfds_ie_t &ie_;
3285  ApplicationIdIE appid_;
3286  std::vector<PfdContextIE> pfdctxts_;
3287 };
3288 
3290 
3292 {
3295 public:
3296  TrafficEndpointIdIE &traffic_endpt_id();
3297  FTeidIE &local_fteid();
3298  NetworkInstanceIE &ntwk_inst();
3299  UeIpAddressIE &ue_ip_address();
3300  EthernetPduSessionInformationIE &eth_pdu_sess_info();
3301  FramedRouteIE &framed_route(uint8_t idx);
3302  FramedRoutingIE &framed_routing();
3303  FramedIpv6RouteIE &frmd_ipv6_rte(uint8_t idx);
3304  int next_framed_route();
3305  int next_frmd_ipv6_rte();
3306  pfcp_create_traffic_endpt_ie_t &data();
3307 
3308 protected:
3309  CreateTrafficEndpointIE(pfcp_create_traffic_endpt_ie_t &ie, LengthCalculator *parent);
3310  uint16_t calculateLength();
3311 
3312 private:
3314  pfcp_create_traffic_endpt_ie_t &ie_;
3315  TrafficEndpointIdIE teid_;
3316  FTeidIE lfteid_;
3317  NetworkInstanceIE ni_;
3318  UeIpAddressIE ueip_;
3320  std::vector<FramedRouteIE> fr_;
3321  FramedRoutingIE fring_;
3322  std::vector<FramedIpv6RouteIE> fr6_;
3323 };
3324 
3326 
3327 class CreateBarIE : public IEHeader
3328 {
3331 public:
3332  BarIdIE &bar_id();
3333  DownlinkDataNotificationDelayIE &dnlnk_data_notif_delay();
3334  SuggestedBufferingPacketsCountIE &suggstd_buf_pckts_cnt();
3335  pfcp_create_bar_ie_t &data();
3336 
3337 protected:
3338  CreateBarIE(pfcp_create_bar_ie_t &ie, LengthCalculator *parent);
3339  uint16_t calculateLength();
3340 
3341 private:
3342  CreateBarIE();
3343  pfcp_create_bar_ie_t &ie_;
3344  BarIdIE barid_;
3347 };
3348 
3350 
3351 class CreateQerIE : public IEHeader
3352 {
3355 public:
3356  QerIdIE &qer_id();
3357  QerCorrelationIdIE &qer_corr_id();
3358  GateStatusIE &gate_status();
3359  MbrIE &maximum_bitrate();
3360  GbrIE &guaranteed_bitrate();
3361  PacketRateIE &packet_rate();
3362  DlFlowLevelMarkingIE &dl_flow_lvl_marking();
3363  QfiIE &qos_flow_ident();
3364  RqiIE &reflective_qos();
3365  PagingPolicyIndicatorIE &paging_plcy_indctr();
3366  AveragingWindowIE &avgng_wnd();
3367  pfcp_create_qer_ie_t &data();
3368 
3369 protected:
3370  CreateQerIE(pfcp_create_qer_ie_t &ie, LengthCalculator *parent);
3371  uint16_t calculateLength();
3372 
3373 private:
3374  CreateQerIE();
3375  pfcp_create_qer_ie_t &ie_;
3376  QerIdIE qerid_;
3377  QerCorrelationIdIE qci_;
3378  GateStatusIE gs_;
3379  MbrIE mbr_;
3380  GbrIE gbr_;
3381  PacketRateIE pr_;
3382  DlFlowLevelMarkingIE dfm_;
3383  QfiIE qfi_;
3384  RqiIE rqi_;
3386  AveragingWindowIE aw_;
3387 };
3388 
3390 
3392 {
3393  friend class CreateUrrIE;
3394  friend class UpdateUrrIE;
3395 public:
3396  MonitoringTimeIE &monitoring_time();
3397  SubsequentVolumeThresholdIE &sbsqnt_vol_thresh();
3398  SubsequentTimeThresholdIE &sbsqnt_time_thresh();
3399  SubsequentVolumeQuotaIE &sbsqnt_vol_quota();
3400  SubsequentTimeQuotaIE &sbsqnt_time_quota();
3401  SubsequentEventThresholdIE &sbsqnt_evnt_thresh();
3402  SubsequentEventQuotaIE &sbsqnt_evnt_quota();
3403  pfcp_add_mntrng_time_ie_t &data();
3404 
3405 protected:
3406  AdditionalMonitoringTimeIE(pfcp_add_mntrng_time_ie_t &ie, LengthCalculator *parent);
3407  uint16_t calculateLength();
3408 
3409 private:
3411  pfcp_add_mntrng_time_ie_t &ie_;
3412  MonitoringTimeIE mt_;
3416  SubsequentTimeQuotaIE stq_;
3419 };
3420 
3422 
3424 {
3425  friend class CreateUrrIE;
3426  friend class UpdateUrrIE;
3427 public:
3428  AggregatedUrrIdIE &agg_urr_id();
3429  MultiplierIE &multiplier();
3430  pfcp_aggregated_urrs_ie_t &data();
3431 
3432 protected:
3433  AggregatedUrrsIE(pfcp_aggregated_urrs_ie_t &ie, LengthCalculator *parent);
3434  uint16_t calculateLength();
3435 
3436 private:
3437  AggregatedUrrsIE();
3438  pfcp_aggregated_urrs_ie_t &ie_;
3439  AggregatedUrrIdIE aui_;
3440  MultiplierIE m_;
3441 };
3442 
3444 
3445 class CreateUrrIE : public IEHeader
3446 {
3449 public:
3450  UrrIdIE &urr_id();
3451  MeasurementMethodIE &meas_mthd();
3452  ReportingTriggersIE &rptng_triggers();
3453  MeasurementPeriodIE &meas_period();
3454  VolumeThresholdIE &vol_thresh();
3455  VolumeQuotaIE &volume_quota();
3456  EventThresholdIE &event_threshold();
3457  EventQuotaIE &event_quota();
3458  TimeThresholdIE &time_threshold();
3459  TimeQuotaIE &time_quota();
3460  QuotaHoldingTimeIE &quota_hldng_time();
3461  DroppedDlTrafficThresholdIE &drpd_dl_traffic_thresh();
3462  MonitoringTimeIE &monitoring_time();
3463  SubsequentVolumeThresholdIE &sbsqnt_vol_thresh();
3464  SubsequentTimeThresholdIE &sbsqnt_time_thresh();
3465  SubsequentVolumeQuotaIE &sbsqnt_vol_quota();
3466  SubsequentTimeQuotaIE &sbsqnt_time_quota();
3467  SubsequentEventThresholdIE &sbsqnt_evnt_thresh();
3468  SubsequentEventQuotaIE &sbsqnt_evnt_quota();
3469  InactivityDetectionTimeIE &inact_det_time();
3470  LinkedUrrIdIE &linked_urr_id(uint8_t idx);
3471  MeasurementInformationIE &meas_info();
3472  TimeQuotaMechanismIE &time_quota_mech();
3473  AggregatedUrrsIE &aggregated_urrs(uint8_t idx);
3474  FarIdIE &far_id_for_quota_act();
3475  EthernetInactivityTimerIE &eth_inact_timer();
3476  AdditionalMonitoringTimeIE &add_mntrng_time(uint8_t idx);
3477  int next_linked_urr_id();
3478  int next_aggregated_urrs();
3479  int next_add_mntrng_time();
3480  pfcp_create_urr_ie_t &data();
3481 
3482 protected:
3483  CreateUrrIE(pfcp_create_urr_ie_t &ie, LengthCalculator *parent);
3484  uint16_t calculateLength();
3485 
3486 private:
3487  CreateUrrIE();
3488  pfcp_create_urr_ie_t &ie_;
3489  UrrIdIE ui_;
3490  MeasurementMethodIE mm_;
3491  ReportingTriggersIE rt_;
3492  MeasurementPeriodIE mp_;
3493  VolumeThresholdIE vt_;
3494  VolumeQuotaIE vq_;
3495  EventThresholdIE et_;
3496  EventQuotaIE eq_;
3497  TimeThresholdIE tt_;
3498  TimeQuotaIE tq_;
3499  QuotaHoldingTimeIE qht_;
3501  MonitoringTimeIE mt_;
3505  SubsequentTimeQuotaIE stq_;
3509  std::vector<LinkedUrrIdIE> lui_;
3511  TimeQuotaMechanismIE tqm_;
3512  std::vector<AggregatedUrrsIE> aus_;
3513  FarIdIE fiqa_;
3515  std::vector<AdditionalMonitoringTimeIE> amt_;
3516 };
3517 
3519 
3521 {
3522  friend class CreateFarIE;
3523 public:
3524  DestinationInterfaceIE &dst_intfc();
3525  OuterHeaderCreationIE &outer_hdr_creation();
3526  TransportLevelMarkingIE &trnspt_lvl_marking();
3527  ForwardingPolicyIE &frwdng_plcy();
3528  pfcp_dupng_parms_ie_t &data();
3529 
3530 protected:
3531  DuplicatingParametersIE(pfcp_dupng_parms_ie_t &ie, LengthCalculator *parent);
3532  uint16_t calculateLength();
3533 
3534 private:
3536  pfcp_dupng_parms_ie_t &ie_;
3538  OuterHeaderCreationIE ohc_;
3540  ForwardingPolicyIE fp_;
3541 };
3542 
3544 
3546 {
3547  friend class CreateFarIE;
3548 public:
3549  DestinationInterfaceIE &dst_intfc();
3550  NetworkInstanceIE &ntwk_inst();
3551  RedirectInformationIE &redir_info();
3552  OuterHeaderCreationIE &outer_hdr_creation();
3553  TransportLevelMarkingIE &trnspt_lvl_marking();
3554  ForwardingPolicyIE &frwdng_plcy();
3555  HeaderEnrichmentIE &hdr_enrchmt();
3556  TrafficEndpointIdIE &lnkd_traffic_endpt_id();
3557  ProxyingIE &proxying();
3558  TgppInterfaceTypeIE &dst_intfc_type();
3559  pfcp_frwdng_parms_ie_t &data();
3560 
3561 protected:
3562  ForwardingParametersIE(pfcp_frwdng_parms_ie_t &ie, LengthCalculator *parent);
3563  uint16_t calculateLength();
3564 
3565 private:
3567  pfcp_frwdng_parms_ie_t &ie_;
3569  NetworkInstanceIE ni_;
3571  OuterHeaderCreationIE ohc_;
3573  ForwardingPolicyIE fp_;
3574  HeaderEnrichmentIE he_;
3575  TrafficEndpointIdIE ltei_;
3576  ProxyingIE p_;
3577  TgppInterfaceTypeIE dit_;
3578 };
3579 
3581 
3582 class CreateFarIE : public IEHeader
3583 {
3586 public:
3587  FarIdIE &far_id();
3588  ApplyActionIE &apply_action();
3589  ForwardingParametersIE &frwdng_parms();
3590  DuplicatingParametersIE &dupng_parms(uint8_t idx);
3591  BarIdIE &bar_id();
3592  int next_dupng_parms();
3593  pfcp_create_far_ie_t &data();
3594 
3595 protected:
3596  CreateFarIE(pfcp_create_far_ie_t &ie, LengthCalculator *parent);
3597  uint16_t calculateLength();
3598 
3599 private:
3600  CreateFarIE();
3601  pfcp_create_far_ie_t &ie_;
3602  FarIdIE fi_;
3603  ApplyActionIE aa_;
3605  std::vector<DuplicatingParametersIE> dp_;
3606  BarIdIE bi_;
3607 };
3608 
3610 
3612 {
3613  friend class PdiIE;
3614 public:
3615  EthernetFilterIdIE &eth_fltr_id();
3616  EthernetFilterPropertiesIE &eth_fltr_props();
3617  MacAddressIE &mac_address();
3618  EthertypeIE &ethertype();
3619  CTagIE &ctag();
3620  STagIE &stag();
3621  SdfFilterIE &sdf_filter(uint8_t idx);
3622  int next_sdf_filter();
3623  pfcp_eth_pckt_fltr_ie_t &data();
3624 
3625 protected:
3626  EthernetPacketFilterIE(pfcp_eth_pckt_fltr_ie_t &ie, LengthCalculator *parent);
3627  uint16_t calculateLength();
3628 
3629 private:
3631  pfcp_eth_pckt_fltr_ie_t &ie_;
3632  EthernetFilterIdIE efi_;
3634  MacAddressIE ma_;
3635  EthertypeIE e_;
3636  CTagIE ctag_;
3637  STagIE stag_;
3638  std::vector<SdfFilterIE> sf_;
3639 };
3640 
3642 
3643 class PdiIE : public IEHeader
3644 {
3645  friend class CreatePdrIE;
3646  friend class UpdatePdrIE;
3647 public:
3648  SourceInterfaceIE &src_intfc();
3649  FTeidIE &local_fteid();
3650  NetworkInstanceIE &ntwk_inst();
3651  UeIpAddressIE &ue_ip_address();
3652  TrafficEndpointIdIE &traffic_endpt_id();
3653  ApplicationIdIE &application_id();
3654  EthernetPduSessionInformationIE &eth_pdu_sess_info();
3655  FramedRoutingIE &framed_routing();
3656  TgppInterfaceTypeIE &src_intrc_type();
3657  SdfFilterIE &sdf_filter(uint8_t idx);
3658  EthernetPacketFilterIE &eth_pckt_fltr(uint8_t idx);
3659  QfiIE &qfi(uint8_t idx);
3660  FramedRouteIE &framed_route(uint8_t idx);
3661  FramedIpv6RouteIE &frmd_ipv6_rte(uint8_t idx);
3662  int next_sdf_filter();
3663  int next_eth_pckt_fltr();
3664  int next_qfi();
3665  int next_framed_route();
3666  int next_frmd_ipv6_rte();
3667  pfcp_pdi_ie_t &data();
3668 
3669 protected:
3670  PdiIE(pfcp_pdi_ie_t &ie, LengthCalculator *parent);
3671  uint16_t calculateLength();
3672 
3673 private:
3674  PdiIE();
3675  pfcp_pdi_ie_t &ie_;
3676  SourceInterfaceIE si_;
3677  FTeidIE lft_;
3678  NetworkInstanceIE ni_;
3679  UeIpAddressIE uia_;
3680  TrafficEndpointIdIE tei_;
3681  std::vector<SdfFilterIE> sf_;
3682  ApplicationIdIE ai_;
3684  std::vector<EthernetPacketFilterIE> epf_;
3685  std::vector<QfiIE> qfi_;
3686  std::vector<FramedRouteIE> fr_;
3687  FramedRoutingIE fring_;
3688  std::vector<FramedIpv6RouteIE> fr6_;
3689  TgppInterfaceTypeIE sit_;
3690 };
3691 
3693 class CreatePdrIE : public IEHeader
3694 {
3697 public:
3698  PdrIdIE &pdr_id();
3699  PrecedenceIE &precedence();
3700  PdiIE &pdi();
3701  OuterHeaderRemovalIE &outer_hdr_removal();
3702  FarIdIE &far_id();
3703  UrrIdIE &urr_id(uint8_t idx);
3704  QerIdIE &qer_id(uint8_t idx);
3705  ActivatePredefinedRulesIE &actvt_predef_rules(uint8_t idx);
3706  int next_urr_id();
3707  int next_qer_id();
3708  int next_actvt_predef_rules();
3709  pfcp_create_pdr_ie_t &data();
3710 
3711 protected:
3712  CreatePdrIE(pfcp_create_pdr_ie_t &ie, LengthCalculator *parent);
3713  uint16_t calculateLength();
3714 
3715 private:
3716  CreatePdrIE();
3717  pfcp_create_pdr_ie_t &ie_;
3718  PdrIdIE pi_;
3719  PrecedenceIE p_;
3720  PdiIE pdi_;
3721  OuterHeaderRemovalIE ohr_;
3722  FarIdIE fi_;
3723  std::vector<UrrIdIE> ui_;
3724  std::vector<QerIdIE> qi_;
3725  std::vector<ActivatePredefinedRulesIE> apr_;
3726 };
3727 
3729 
3731 {
3735 public:
3736  TrafficEndpointIdIE &traffic_endpt_id();
3737  FTeidIE &local_fteid();
3738  pfcp_created_traffic_endpt_ie_t &data();
3739 
3740 protected:
3741  CreatedTrafficEndpointIE(pfcp_created_traffic_endpt_ie_t &ie, LengthCalculator *parent);
3742  uint16_t calculateLength();
3743 
3744 private:
3746  pfcp_created_traffic_endpt_ie_t &ie_;
3747  TrafficEndpointIdIE tei_;
3748  FTeidIE lft_;
3749 };
3750 
3752 
3754 {
3757  friend class SessionDeletionRsp;
3758  friend class SessionReportReq;
3759 public:
3760  SequenceNumberIE &ovrld_ctl_seqn_nbr();
3761  MetricIE &ovrld_reduction_metric();
3762  TimerIE &period_of_validity();
3763  OciFlagsIE &ovrld_ctl_info_flgs();
3764  pfcp_ovrld_ctl_info_ie_t &data();
3765 
3766 protected:
3767  OverloadControlInformationIE(pfcp_ovrld_ctl_info_ie_t &ie, LengthCalculator *parent);
3768  uint16_t calculateLength();
3769 
3770 private:
3772  pfcp_ovrld_ctl_info_ie_t &ie_;
3773  SequenceNumberIE ocsn_;
3774  MetricIE orm_;
3775  TimerIE pov_;
3776  OciFlagsIE ocif_;
3777 };
3778 
3780 
3782 {
3785  friend class SessionDeletionRsp;
3786  friend class SessionReportReq;
3787 public:
3788  SequenceNumberIE &load_ctl_seqn_nbr();
3789  MetricIE &load_metric();
3790  pfcp_load_ctl_info_ie_t &data();
3791 
3792 protected:
3793  LoadControlInformationIE(pfcp_load_ctl_info_ie_t &ie, LengthCalculator *parent);
3794  uint16_t calculateLength();
3795 
3796 private:
3798  pfcp_load_ctl_info_ie_t &ie_;
3799  SequenceNumberIE lcsn_;
3800  MetricIE lm_;
3801 };
3802 
3804 
3805 class CreatedPdrIE : public IEHeader
3806 {
3809 public:
3810  PdrIdIE &pdr_id();
3811  FTeidIE &local_fteid();
3812  pfcp_created_pdr_ie_t &data();
3813 
3814 protected:
3815  CreatedPdrIE(pfcp_created_pdr_ie_t &ie, LengthCalculator *parent);
3816  uint16_t calculateLength();
3817 
3818 private:
3819  CreatedPdrIE();
3820  pfcp_created_pdr_ie_t &ie_;
3821  PdrIdIE pi_;
3822  FTeidIE lft_;
3823 };
3824 
3826 
3828 {
3829  friend class NodeReportReq;
3830 public:
3831  RemoteGTPUPeerIE &rmt_gtpu_peer(uint8_t idx);
3832  int next_rmt_gtpu_peer();
3833  pfcp_user_plane_path_fail_rpt_ie_t &data();
3834 
3835 protected:
3836  UserPlanePathFailureReportIE(pfcp_user_plane_path_fail_rpt_ie_t &ie, LengthCalculator *parent);
3837  uint16_t calculateLength();
3838 
3839 private:
3841  pfcp_user_plane_path_fail_rpt_ie_t &ie_;
3842  std::vector<RemoteGTPUPeerIE> rgp_;
3843 };
3844 
3846 
3848 {
3850 public:
3851  TrafficEndpointIdIE &traffic_endpt_id();
3852  pfcp_rmv_traffic_endpt_ie_t &data();
3853 
3854 protected:
3855  RemoveTrafficEndpointIE(pfcp_rmv_traffic_endpt_ie_t &ie, LengthCalculator *parent);
3856  uint16_t calculateLength();
3857 
3858 private:
3860  pfcp_rmv_traffic_endpt_ie_t &ie_;
3861  TrafficEndpointIdIE tei_;
3862 };
3863 
3865 
3867 {
3869 public:
3870  TrafficEndpointIdIE &traffic_endpt_id();
3871  FTeidIE &local_fteid();
3872  NetworkInstanceIE &ntwk_inst();
3873  UeIpAddressIE &ue_ip_address();
3874  FramedRoutingIE &framed_routing();
3875  FramedRouteIE &framed_route(uint8_t idx);
3876  FramedIpv6RouteIE &frmd_ipv6_rte(uint8_t idx);
3877  int next_framed_route();
3878  int next_frmd_ipv6_rte();
3879  pfcp_upd_traffic_endpt_ie_t &data();
3880 
3881 protected:
3882  UpdateTrafficEndpointIE(pfcp_upd_traffic_endpt_ie_t &ie, LengthCalculator *parent);
3883  uint16_t calculateLength();
3884 
3885 private:
3887  pfcp_upd_traffic_endpt_ie_t &ie_;
3888  TrafficEndpointIdIE tei_;
3889  FTeidIE lft_;
3890  NetworkInstanceIE ni_;
3891  UeIpAddressIE uia_;
3892  std::vector<FramedRouteIE> fr_;
3893  FramedRoutingIE fring_;
3894  std::vector<FramedIpv6RouteIE> fr6_;
3895 };
3896 
3898 
3899 class RemoveBarIE : public IEHeader
3900 {
3902 public:
3903  BarIdIE &bar_id();
3904  pfcp_remove_bar_ie_t &data();
3905 
3906 protected:
3907  RemoveBarIE(pfcp_remove_bar_ie_t &ie, LengthCalculator *parent);
3908  uint16_t calculateLength();
3909 
3910 private:
3911  RemoveBarIE();
3912  pfcp_remove_bar_ie_t &ie_;
3913  BarIdIE bi_;
3914 };
3915 
3917 
3919 {
3921 public:
3922  BarIdIE &bar_id();
3923  DownlinkDataNotificationDelayIE &dnlnk_data_notif_delay();
3924  SuggestedBufferingPacketsCountIE &suggstd_buf_pckts_cnt();
3925  pfcp_upd_bar_sess_mod_req_ie_t &data();
3926 
3927 protected:
3928  UpdateBarSessionModificationReqIE(pfcp_upd_bar_sess_mod_req_ie_t &ie, LengthCalculator *parent);
3929  uint16_t calculateLength();
3930 
3931 private:
3933  pfcp_upd_bar_sess_mod_req_ie_t &ie_;
3934  BarIdIE bi_;
3937 };
3938 
3940 
3941 class QueryUrrIE : public IEHeader
3942 {
3944 public:
3945  UrrIdIE &urr_id();
3946  pfcp_query_urr_ie_t &data();
3947 
3948 protected:
3949  QueryUrrIE(pfcp_query_urr_ie_t &ie, LengthCalculator *parent);
3950  uint16_t calculateLength();
3951 
3952 private:
3953  QueryUrrIE();
3954  pfcp_query_urr_ie_t &ie_;
3955  UrrIdIE ui_;
3956 };
3957 
3959 
3960 class RemoveQerIE : public IEHeader
3961 {
3963 public:
3964  QerIdIE qer_id();
3965  pfcp_remove_qer_ie_t &data();
3966 
3967 protected:
3968  RemoveQerIE(pfcp_remove_qer_ie_t &ie, LengthCalculator *parent);
3969  uint16_t calculateLength();
3970 
3971 private:
3972  RemoveQerIE();
3973  pfcp_remove_qer_ie_t &ie_;
3974  QerIdIE qi_;
3975 };
3976 
3978 
3979 class RemoveUrrIE : public IEHeader
3980 {
3982 public:
3983  UrrIdIE &urr_id();
3984  pfcp_remove_urr_ie_t &data();
3985 
3986 protected:
3987  RemoveUrrIE(pfcp_remove_urr_ie_t &ie, LengthCalculator *parent);
3988  uint16_t calculateLength();
3989 
3990 private:
3991  RemoveUrrIE();
3992  pfcp_remove_urr_ie_t &ie_;
3993  UrrIdIE ui_;
3994 };
3995 
3997 
3998 class RemoveFarIE : public IEHeader
3999 {
4001 public:
4002  FarIdIE &far_id();
4003  pfcp_remove_far_ie_t &data();
4004 
4005 protected:
4006  RemoveFarIE(pfcp_remove_far_ie_t &ie, LengthCalculator *parent);
4007  uint16_t calculateLength();
4008 
4009 private:
4010  RemoveFarIE();
4011  pfcp_remove_far_ie_t &ie_;
4012  FarIdIE fi_;
4013 };
4014 
4016 
4017 class RemovePdrIE : public IEHeader
4018 {
4020 public:
4021  PdrIdIE &pdr_id();
4022  pfcp_remove_pdr_ie_t &data();
4023 
4024 protected:
4025  RemovePdrIE(pfcp_remove_pdr_ie_t &ie, LengthCalculator *parent);
4026  uint16_t calculateLength();
4027 
4028 private:
4029  RemovePdrIE();
4030  pfcp_remove_pdr_ie_t &ie_;
4031  PdrIdIE pi_;
4032 };
4033 
4035 
4036 class UpdateQerIE : public IEHeader
4037 {
4039 public:
4040  QerIdIE &qer_id();
4041  QerCorrelationIdIE &qer_corr_id();
4042  GateStatusIE &gate_status();
4043  MbrIE &maximum_bitrate();
4044  GbrIE &guaranteed_bitrate();
4045  PacketRateIE &packet_rate();
4046  DlFlowLevelMarkingIE &dl_flow_lvl_marking();
4047  QfiIE &qos_flow_ident();
4048  RqiIE &reflective_qos();
4049  PagingPolicyIndicatorIE &paging_plcy_indctr();
4050  AveragingWindowIE &avgng_wnd();
4051  pfcp_update_qer_ie_t &data();
4052 
4053 protected:
4054  UpdateQerIE(pfcp_update_qer_ie_t &ie, LengthCalculator *parent);
4055  uint16_t calculateLength();
4056 
4057 private:
4058  UpdateQerIE();
4059  pfcp_update_qer_ie_t &ie_;
4060  QerIdIE qi_;
4061  QerCorrelationIdIE qci_;
4062  GateStatusIE gs_;
4063  MbrIE mb_;
4064  GbrIE gb_;
4065  PacketRateIE pr;
4066  DlFlowLevelMarkingIE dflm_;
4067  QfiIE qfi_;
4068  RqiIE rqi_;
4070  AveragingWindowIE aw_;
4071 };
4072 
4074 
4075 class UpdateUrrIE : public IEHeader
4076 {
4078 public:
4079  UrrIdIE &urr_id();
4080  MeasurementMethodIE &meas_mthd();
4081  ReportingTriggersIE &rptng_triggers();
4082  MeasurementPeriodIE &meas_period();
4083  VolumeThresholdIE &vol_thresh();
4084  VolumeQuotaIE &volume_quota();
4085  TimeThresholdIE &time_threshold();
4086  TimeQuotaIE &time_quota();
4087  EventThresholdIE &event_threshold();
4088  EventQuotaIE &event_quota();
4089  QuotaHoldingTimeIE &quota_hldng_time();
4090  DroppedDlTrafficThresholdIE &drpd_dl_traffic_thresh();
4091  MonitoringTimeIE &monitoring_time();
4092  SubsequentVolumeThresholdIE &sbsqnt_vol_thresh();
4093  SubsequentTimeThresholdIE &sbsqnt_time_thresh();
4094  SubsequentVolumeQuotaIE &sbsqnt_vol_quota();
4095  SubsequentTimeQuotaIE &sbsqnt_time_quota();
4096  SubsequentEventThresholdIE &sbsqnt_evnt_thresh();
4097  SubsequentEventQuotaIE &sbsqnt_evnt_quota();
4098  InactivityDetectionTimeIE &inact_det_time();
4099  MeasurementInformationIE &meas_info();
4100  TimeQuotaMechanismIE &time_quota_mech();
4101  FarIdIE &far_id_for_quota_act();
4102  EthernetInactivityTimerIE &eth_inact_timer();
4103  AdditionalMonitoringTimeIE &add_mntrng_time();
4104  LinkedUrrIdIE &linked_urr_id(uint8_t idx);
4105  AggregatedUrrsIE &aggregated_urrs(uint8_t idx);
4106  int next_linked_urr_id();
4107  int next_aggregated_urrs();
4108  pfcp_update_urr_ie_t &data();
4109 
4110 protected:
4111  UpdateUrrIE(pfcp_update_urr_ie_t &ie, LengthCalculator *parent);
4112  uint16_t calculateLength();
4113 
4114 private:
4115  UpdateUrrIE();
4116  pfcp_update_urr_ie_t &ie_;
4117  UrrIdIE ui_;
4118  MeasurementMethodIE mm_;
4119  ReportingTriggersIE rt_;
4120  MeasurementPeriodIE mp_;
4121  VolumeThresholdIE vt_;
4122  VolumeQuotaIE vq_;
4123  TimeThresholdIE tt_;
4124  TimeQuotaIE tq_;
4125  EventThresholdIE et_;
4126  EventQuotaIE eq_;
4127  QuotaHoldingTimeIE qht_;
4129  MonitoringTimeIE mt_;
4133  SubsequentTimeQuotaIE stq_;
4137  std::vector<LinkedUrrIdIE> lui_;
4139  TimeQuotaMechanismIE tqm_;
4140  std::vector<AggregatedUrrsIE> au_;
4141  FarIdIE fifqa_;
4144 };
4145 
4147 
4149 {
4150  friend class UpdateFarIE;
4151 public:
4152  DestinationInterfaceIE &dst_intfc();
4153  OuterHeaderCreationIE &outer_hdr_creation();
4154  TransportLevelMarkingIE &trnspt_lvl_marking();
4155  ForwardingPolicyIE &frwdng_plcy();
4156  pfcp_upd_dupng_parms_ie_t &data();
4157 
4158 protected:
4159  UpdateDuplicatingParametersIE(pfcp_upd_dupng_parms_ie_t &ie, LengthCalculator *parent);
4160  uint16_t calculateLength();
4161 
4162 private:
4164  pfcp_upd_dupng_parms_ie_t &ie_;
4166  OuterHeaderCreationIE ohc_;
4168  ForwardingPolicyIE fp_;
4169 };
4170 
4172 
4174 {
4175  friend class UpdateFarIE;
4176 public:
4177  DestinationInterfaceIE &dst_intfc();
4178  NetworkInstanceIE &ntwk_inst();
4179  RedirectInformationIE &redir_info();
4180  OuterHeaderCreationIE &outer_hdr_creation();
4181  TransportLevelMarkingIE &trnspt_lvl_marking();
4182  ForwardingPolicyIE &frwdng_plcy();
4183  HeaderEnrichmentIE &hdr_enrchmt();
4184  PfcpSmReqFlagsIE &pfcpsmreq_flags();
4185  TrafficEndpointIdIE &lnkd_traffic_endpt_id();
4186  TgppInterfaceTypeIE &dst_intfc_type();
4187  pfcp_upd_frwdng_parms_ie_t &data();
4188 
4189 protected:
4190  UpdateForwardingParametersIE(pfcp_upd_frwdng_parms_ie_t &ie, LengthCalculator *parent);
4191  uint16_t calculateLength();
4192 
4193 private:
4195  pfcp_upd_frwdng_parms_ie_t &ie_;
4197  NetworkInstanceIE ni_;
4199  OuterHeaderCreationIE ohc_;
4201  ForwardingPolicyIE fp_;
4202  HeaderEnrichmentIE he_;
4203  PfcpSmReqFlagsIE f_;
4204  TrafficEndpointIdIE ltei_;
4205  TgppInterfaceTypeIE dit_;
4206 };
4207 
4209 
4210 class UpdateFarIE : public IEHeader
4211 {
4213 public:
4214  FarIdIE &far_id();
4215  ApplyActionIE &apply_action();
4216  UpdateForwardingParametersIE &upd_frwdng_parms();
4217  BarIdIE &bar_id();
4218  UpdateDuplicatingParametersIE &upd_dupng_parms(uint8_t idx);
4219  int next_upd_dupng_parms();
4220  pfcp_update_far_ie_t &data();
4221 
4222 protected:
4223  UpdateFarIE(pfcp_update_far_ie_t &ie, LengthCalculator *parent);
4224  uint16_t calculateLength();
4225 
4226 private:
4227  UpdateFarIE();
4228  pfcp_update_far_ie_t &ie_;
4229  FarIdIE fi_;
4230  ApplyActionIE aa_;
4232  std::vector<UpdateDuplicatingParametersIE> udp_;
4233  BarIdIE bi_;
4234 };
4235 
4237 
4238 class UpdatePdrIE : public IEHeader
4239 {
4241 public:
4242  PdrIdIE &pdr_id();
4243  OuterHeaderRemovalIE &outer_hdr_removal();
4244  PrecedenceIE &precedence();
4245  PdiIE &pdi();
4246  FarIdIE &far_id();
4247  UrrIdIE &urr_id();
4248  QerIdIE &qer_id();
4249  ActivatePredefinedRulesIE &actvt_predef_rules(uint8_t idx);
4250  DeactivatePredefinedRulesIE &deact_predef_rules(uint8_t idx);
4251  int next_actvt_predef_rules();
4252  int next_deact_predef_rules();
4253  pfcp_update_pdr_ie_t &data();
4254 
4255 protected:
4256  UpdatePdrIE(pfcp_update_pdr_ie_t &ie, LengthCalculator *parent);
4257  uint16_t calculateLength();
4258 
4259 private:
4260  UpdatePdrIE();
4261  pfcp_update_pdr_ie_t &ie_;
4262  PdrIdIE pi_;
4263  OuterHeaderRemovalIE ohr_;
4264  PrecedenceIE p_;
4265  PdiIE pdi_;
4266  FarIdIE fi_;
4267  UrrIdIE ui_;
4268  QerIdIE qi_;
4269  std::vector<ActivatePredefinedRulesIE> apr_;
4270  std::vector<DeactivatePredefinedRulesIE> dpr_;
4271 };
4272 
4274 
4276 {
4280 public:
4281  MacAddressesDetectedIE &mac_addrs_detctd();
4282  MacAddressesRemovedIE &mac_addrs_rmvd();
4283  pfcp_eth_traffic_info_ie_t &data();
4284 
4285 protected:
4286  EthernetTrafficInformationIE(pfcp_eth_traffic_info_ie_t &ie, LengthCalculator *parent);
4287  uint16_t calculateLength();
4288 
4289 private:
4291  pfcp_eth_traffic_info_ie_t &ie_;
4293  MacAddressesRemovedIE mar_;
4294 };
4295 
4297 
4299 {
4301 public:
4302  UrrIdIE &urr_id();
4303  UrSeqnIE &urseqn();
4304  UsageReportTriggerIE &usage_rpt_trig();
4305  StartTimeIE &start_time();
4306  EndTimeIE &end_time();
4307  VolumeMeasurementIE &vol_meas();
4308  DurationMeasurementIE &dur_meas();
4309  TimeOfFirstPacketIE &time_of_frst_pckt();
4310  TimeOfLastPacketIE &time_of_lst_pckt();
4311  UsageInformationIE &usage_info();
4312  QueryUrrReferenceIE &query_urr_ref();
4313  EthernetTrafficInformationIE &eth_traffic_info();
4314  pfcp_usage_rpt_sess_mod_rsp_ie_t &data();
4315 
4316 protected:
4317  UsageReportSessionModificationRspIE(pfcp_usage_rpt_sess_mod_rsp_ie_t &ie, LengthCalculator *parent);
4318  uint16_t calculateLength();
4319 
4320 private:
4322  pfcp_usage_rpt_sess_mod_rsp_ie_t &ie_;
4323  UrrIdIE ui_;
4324  UrSeqnIE us_;
4325  UsageReportTriggerIE urt_;
4326  StartTimeIE st_;
4327  EndTimeIE et_;
4328  VolumeMeasurementIE vm_;
4330  TimeOfFirstPacketIE tofp_;
4331  TimeOfLastPacketIE tolp_;
4332  UsageInformationIE uinfo_;
4333  QueryUrrReferenceIE qur_;
4335 };
4336 
4338 
4340 {
4341  friend class SessionDeletionRsp;
4342 public:
4343  UrrIdIE &urr_id();
4344  UrSeqnIE &urseqn();
4345  UsageReportTriggerIE &usage_rpt_trig();
4346  StartTimeIE &start_time();
4347  EndTimeIE &end_time();
4348  VolumeMeasurementIE &vol_meas();
4349  DurationMeasurementIE &dur_meas();
4350  TimeOfFirstPacketIE &time_of_frst_pckt();
4351  TimeOfLastPacketIE &time_of_lst_pckt();
4352  UsageInformationIE &usage_info();
4353  EthernetTrafficInformationIE &eth_traffic_info();
4354  pfcp_usage_rpt_sess_del_rsp_ie_t &data();
4355 
4356 protected:
4357  UsageReportSessionDeletionRspIE(pfcp_usage_rpt_sess_del_rsp_ie_t &ie, LengthCalculator *parent);
4358  uint16_t calculateLength();
4359 
4360 private:
4362  pfcp_usage_rpt_sess_del_rsp_ie_t &ie_;
4363  UrrIdIE ui_;
4364  UrSeqnIE us_;
4365  UsageReportTriggerIE urt_;
4366  StartTimeIE st_;
4367  EndTimeIE et_;
4368  VolumeMeasurementIE vm_;
4370  TimeOfFirstPacketIE tofp_;
4371  TimeOfLastPacketIE tolp_;
4372  UsageInformationIE uinfo_;
4374 };
4375 
4377 
4379 {
4380  friend class SessionReportReq;
4381 public:
4382  FTeidIE &remote_fteid(uint8_t idx);
4383  int next_remote_fteid();
4384  pfcp_err_indctn_rpt_ie_t &data();
4385 
4386 protected:
4387  ErrorIndicationReportIE(pfcp_err_indctn_rpt_ie_t &ie, LengthCalculator *parent);
4388  uint16_t calculateLength();
4389 
4390 private:
4392  pfcp_err_indctn_rpt_ie_t &ie_;
4393  std::vector<FTeidIE> rft_;
4394 };
4395 
4397 
4399 {
4401 public:
4402  ApplicationIdIE &application_id();
4403  ApplicationInstanceIdIE &app_inst_id();
4404  FlowInformationIE &flow_info();
4405  pfcp_app_det_info_ie_t &data();
4406 
4407 protected:
4408  ApplicationDetectionInformationIE(pfcp_app_det_info_ie_t &ie, LengthCalculator *parent);
4409  uint16_t calculateLength();
4410 
4411 private:
4413  pfcp_app_det_info_ie_t &ie_;
4414  ApplicationIdIE ai_;
4416  FlowInformationIE fi_;
4417 };
4418 
4420 
4422 {
4423  friend class SessionReportReq;
4424 public:
4425  UrrIdIE &urr_id();
4426  UrSeqnIE &urseqn();
4427  UsageReportTriggerIE &usage_rpt_trig();
4428  StartTimeIE &start_time();
4429  EndTimeIE &end_time();
4430  VolumeMeasurementIE &vol_meas();
4431  DurationMeasurementIE &dur_meas();
4432  ApplicationDetectionInformationIE &app_det_info();
4433  UeIpAddressIE &ue_ip_address();
4434  NetworkInstanceIE &ntwk_inst();
4435  TimeOfFirstPacketIE &time_of_frst_pckt();
4436  TimeOfLastPacketIE &time_of_lst_pckt();
4437  UsageInformationIE &usage_info();
4438  QueryUrrReferenceIE &query_urr_ref();
4439  EthernetTrafficInformationIE &eth_traffic_info();
4440  EventTimeStampIE &evnt_time_stmp(uint8_t idx);
4441  int next_evnt_time_stmp();
4442  pfcp_usage_rpt_sess_rpt_req_ie_t &data();
4443 
4444 protected:
4445  UsageReportSessionReportReqIE(pfcp_usage_rpt_sess_rpt_req_ie_t &ie, LengthCalculator *parent);
4446  uint16_t calculateLength();
4447 
4448 private:
4450  pfcp_usage_rpt_sess_rpt_req_ie_t &ie_;
4451  UrrIdIE ui_;
4452  UrSeqnIE us_;
4453  UsageReportTriggerIE urt_;
4454  StartTimeIE st_;
4455  EndTimeIE et_;
4456  VolumeMeasurementIE vm_;
4459  UeIpAddressIE uia_;
4460  NetworkInstanceIE ni_;
4461  TimeOfFirstPacketIE tofp_;
4462  TimeOfLastPacketIE tolp_;
4463  UsageInformationIE uinfo_;
4464  QueryUrrReferenceIE qur_;
4465  std::vector<EventTimeStampIE> ets_;
4467 };
4468 
4470 
4472 {
4473  friend class SessionReportReq;
4474 public:
4475  PdrIdIE &pdr_id(uint8_t idx);
4476  DownlinkDataServiceInformationIE &dnlnk_data_svc_info(uint8_t idx);
4477  int next_pdr_id();
4478  int next_dnlnk_data_svc_info();
4479  pfcp_dnlnk_data_rpt_ie_t &data();
4480 
4481 protected:
4482  DownlinkDataReportIE(pfcp_dnlnk_data_rpt_ie_t &ie, LengthCalculator *parent);
4483  uint16_t calculateLength();
4484 
4485 private:
4487  pfcp_dnlnk_data_rpt_ie_t &ie_;
4488  std::vector<PdrIdIE> pi_;
4489  std::vector<DownlinkDataServiceInformationIE> ddsi_;
4490 };
4491 
4493 
4495 {
4496  friend class SessionReportRsp;
4497 public:
4498  BarIdIE &bar_id();
4499  DownlinkDataNotificationDelayIE &dnlnk_data_notif_delay();
4500  DlBufferingDurationIE &dl_buf_dur();
4501  DlBufferingSuggestedPacketCountIE &dl_buf_suggstd_pckt_cnt();
4502  SuggestedBufferingPacketsCountIE &suggstd_buf_pckts_cnt();
4503  pfcp_upd_bar_sess_rpt_rsp_ie_t &data();
4504 
4505 protected:
4506  UpdateBarSessionReportRspIE(pfcp_upd_bar_sess_rpt_rsp_ie_t &ie, LengthCalculator *parent);
4507  uint16_t calculateLength();
4508 
4509 private:
4511  pfcp_upd_bar_sess_rpt_rsp_ie_t &ie_;
4512  BarIdIE bi_;
4514  DlBufferingDurationIE dbd_;
4517 };
4518 
4520 
4521 /*
4522 class GroupedIE : public IEHeader
4523 {
4524 public:
4525 
4526  int next_()
4527  {
4528  return (ie_._count < MAX_LIST_SIZE) ?
4529  ie_._count++ : -1;
4530  }
4531 
4532  __datatype__ &data() { return ie_; }
4533 
4534 protected:
4535  GroupedIE(__datatype__ &ie, LengthCalculator *parent)
4536  : IEHeader(ie.header, , parent),
4537  ie_(ie),
4538  {
4539  }
4540  uint16_t calculateLength()
4541  {
4542  return
4543  }
4544 
4545 private:
4546  GroupedIE();
4547  __datatype__ &ie_;
4548 };
4549 */
4550 
4554 
4555 // class IE : public IEHeader
4556 // {
4557 // public:
4558 
4559 // __datatype__ &data() { return ie_; }
4560 
4561 // protected:
4562 // IE(__datatype__ &ie)
4563 // : IEHeader(ie.header, ),
4564 // ie_(ie)
4565 // {
4566 // }
4567 // uint16_t calculateLength()
4568 // {
4569 // return sizeof(__datatype__) - sizeof(pfcp_ie_header_t);
4570 // }
4571 
4572 // private:
4573 // IE();
4574 // __datatype__ &ie_;
4575 // };
4576 
4578 
4579 struct __attribute((__may_alias__)) _HeartbeatReq
4580 {
4581  RecoveryTimeStampIE rts_;
4582 };
4583 
4585 {
4586 public:
4587  HeartbeatReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4588  uint16_t length() const;
4589  RecoveryTimeStampIE &rcvry_time_stmp(Bool forceInit = False);
4590  HeartbeatReq &encode(uint8_t *dest);
4591  pfcp_hrtbeat_req_t &data();
4592  CLASS_NAME
4594 protected:
4595  Void postDecode();
4596 private:
4597  pfcp_hrtbeat_req_t data_;
4598  Char iebuffer_[sizeof(_HeartbeatReq)];
4599 };
4600 
4602 
4603 struct __attribute((__may_alias__)) _HeartbeatRsp
4604 {
4605  RecoveryTimeStampIE rts_;
4606 };
4607 
4609 {
4610 public:
4611  HeartbeatRsp();
4612  uint16_t length() const;
4613  RecoveryTimeStampIE &rcvry_time_stmp(Bool forceInit = False);
4614  HeartbeatRsp &encode(uint8_t *dest);
4615  pfcp_hrtbeat_rsp_t &data();
4616  CLASS_NAME
4618 protected:
4619  Void postDecode();
4620 private:
4621  pfcp_hrtbeat_rsp_t data_;
4622  UChar iebuffer_[sizeof(_HeartbeatRsp)];
4623 };
4624 
4626 
4628 {
4629 public:
4630  PfdMgmtReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4631  uint16_t length() const;
4632  ApplicationIdsPfdsIE &app_ids_pfds(uint8_t idx);
4633  int next_app_ids_pfds();
4634  PfdMgmtReq &encode(uint8_t *dest);
4635  pfcp_pfd_mgmt_req_t &data();
4636  CLASS_NAME
4638 protected:
4639  Void postDecode();
4640 private:
4641  pfcp_pfd_mgmt_req_t data_;
4642  std::vector<ApplicationIdsPfdsIE> appids_;
4643 };
4644 
4646 
4647 struct __attribute((__may_alias__)) _PfdMgmtRsp
4648 {
4649  CauseIE c_;
4650  OffendingIeIE oi_;
4651 };
4652 
4654 {
4655 public:
4656  PfdMgmtRsp();
4657  uint16_t length() const;
4658  CauseIE &cause(Bool forceInit = False);
4659  OffendingIeIE &offending_ie(Bool forceInit = False);
4660  PfdMgmtRsp &encode(uint8_t *dest);
4661  pfcp_pfd_mgmt_rsp_t &data();
4662  CLASS_NAME
4664 protected:
4665  Void postDecode();
4666 private:
4667  pfcp_pfd_mgmt_rsp_t data_;
4668  UChar iebuffer_[sizeof(_PfdMgmtRsp)];
4669 };
4670 
4672 
4673 struct __attribute((__may_alias__)) _AssnSetupReq
4674 {
4675  NodeIdIE ni_;
4676  RecoveryTimeStampIE rts_;
4677  UpFunctionFeaturesIE uff_;
4678  CpFunctionFeaturesIE cff_;
4679 };
4680 
4682 {
4683 public:
4684  AssnSetupReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4685  uint16_t length() const;
4686  NodeIdIE &node_id(Bool forceInit = False);
4687  RecoveryTimeStampIE &rcvry_time_stmp(Bool forceInit = False);
4688  UpFunctionFeaturesIE &up_func_feat(Bool forceInit = False);
4689  CpFunctionFeaturesIE &cp_func_feat(Bool forceInit = False);
4690  UserPlaneIpResourceInformationIE &user_plane_ip_rsrc_info(uint8_t idx);
4691  int next_user_plane_ip_rsrc_info();
4692  AssnSetupReq &encode(uint8_t *dest);
4693  pfcp_assn_setup_req_t &data();
4694  CLASS_NAME
4696 protected:
4697  Void postDecode();
4698 private:
4699  pfcp_assn_setup_req_t data_;
4700  UChar iebuffer_[sizeof(_AssnSetupReq)];
4701  std::vector<UserPlaneIpResourceInformationIE> upiri_;
4702 };
4703 
4705 
4706 struct __attribute((__may_alias__)) _AssnSetupRsp
4707 {
4708  NodeIdIE ni_;
4709  CauseIE c_;
4710  RecoveryTimeStampIE rts_;
4711  UpFunctionFeaturesIE uff_;
4712  CpFunctionFeaturesIE cff_;
4713 };
4714 
4716 {
4717 public:
4718  AssnSetupRsp();
4719  uint16_t length() const;
4720  NodeIdIE &node_id(Bool forceInit = False);
4721  CauseIE &cause(Bool forceInit = False);
4722  RecoveryTimeStampIE &rcvry_time_stmp(Bool forceInit = False);
4723  UpFunctionFeaturesIE &up_func_feat(Bool forceInit = False);
4724  CpFunctionFeaturesIE &cp_func_feat(Bool forceInit = False);
4725  UserPlaneIpResourceInformationIE &user_plane_ip_rsrc_info(uint8_t idx);
4726  int next_user_plane_ip_rsrc_info();
4727  AssnSetupRsp &encode(uint8_t *dest);
4728  pfcp_assn_setup_rsp_t &data();
4729  CLASS_NAME
4731 protected:
4732  Void postDecode();
4733 private:
4734  pfcp_assn_setup_rsp_t data_;
4735  UChar iebuffer_[sizeof(_AssnSetupRsp)];
4736  std::vector<UserPlaneIpResourceInformationIE> upiri_;
4737 };
4738 
4740 
4741 struct __attribute((__may_alias__)) _AssnUpdateReq
4742 {
4743  NodeIdIE ni_;
4744  UpFunctionFeaturesIE uff_;
4745  CpFunctionFeaturesIE cff_;
4748 };
4749 
4751 {
4752 public:
4753  AssnUpdateReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4754  uint16_t length() const;
4755  NodeIdIE &node_id(Bool forceInit = False);
4756  UpFunctionFeaturesIE &up_func_feat(Bool forceInit = False);
4757  CpFunctionFeaturesIE &cp_func_feat(Bool forceInit = False);
4758  AssociationReleaseRequestIE &up_assn_rel_req(Bool forceInit = False);
4759  GracefulReleasePeriodIE &graceful_rel_period(Bool forceInit = False);
4760  UserPlaneIpResourceInformationIE &user_plane_ip_rsrc_info(uint8_t idx);
4761  int next_user_plane_ip_rsrc_info();
4762  AssnUpdateReq &encode(uint8_t *dest);
4763  pfcp_assn_upd_req_t &data();
4764  CLASS_NAME
4766 protected:
4767  Void postDecode();
4768 private:
4769  pfcp_assn_upd_req_t data_;
4770  UChar iebuffer_[sizeof(_AssnUpdateReq)];
4771  std::vector<UserPlaneIpResourceInformationIE> upiri_;
4772 };
4773 
4775 
4776 struct __attribute((__may_alias__)) _AssnUpdateRsp
4777 {
4778  NodeIdIE ni_;
4779  CauseIE c_;
4780  UpFunctionFeaturesIE uff_;
4781  CpFunctionFeaturesIE cff_;
4782 };
4783 
4785 {
4786 public:
4787  AssnUpdateRsp();
4788  uint16_t length() const;
4789  NodeIdIE &node_id(Bool forceInit = False);
4790  CauseIE &cause(Bool forceInit = False);
4791  UpFunctionFeaturesIE &up_func_feat(Bool forceInit = False);
4792  CpFunctionFeaturesIE &cp_func_feat(Bool forceInit = False);
4793  AssnUpdateRsp &encode(uint8_t *dest);
4794  pfcp_assn_upd_rsp_t &data();
4795  CLASS_NAME
4797 protected:
4798  Void postDecode();
4799 private:
4800  pfcp_assn_upd_rsp_t data_;
4801  UChar iebuffer_[sizeof(_AssnUpdateRsp)];
4802 };
4803 
4805 
4806 struct __attribute((__may_alias__)) _AssnReleaseReq
4807 {
4808  NodeIdIE ni_;
4809 };
4810 
4812 {
4813 public:
4814  AssnReleaseReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4815  uint16_t length() const;
4816  NodeIdIE &node_id(Bool forceInit = False);
4817  AssnReleaseReq &encode(uint8_t *dest);
4818  pfcp_assn_rel_req_t &data();
4819  CLASS_NAME
4821 protected:
4822  Void postDecode();
4823 private:
4824  pfcp_assn_rel_req_t data_;
4825  UChar iebuffer_[sizeof(_AssnReleaseReq)];
4826 };
4827 
4829 
4830 struct __attribute((__may_alias__)) _AssnReleaseRsp
4831 {
4832  NodeIdIE ni_;
4833  CauseIE c_;
4834 };
4835 
4837 {
4838 public:
4839  AssnReleaseRsp();
4840  uint16_t length() const;
4841  NodeIdIE &node_id(Bool forceInit = False);
4842  CauseIE &cause(Bool forceInit = False);
4843  AssnReleaseRsp &encode(uint8_t *dest);
4844  pfcp_assn_rel_rsp_t &data();
4845  CLASS_NAME
4847 protected:
4848  Void postDecode();
4849 private:
4850  pfcp_assn_rel_rsp_t data_;
4851  UChar iebuffer_[sizeof(_AssnReleaseRsp)];
4852 };
4853 
4855 
4856 #define PFCP_VERSION_NOT_SUPPORTED (11)
4858 {
4859 public:
4861  uint16_t length() const;
4862  VersionNotSupportedRsp &encode(uint8_t *dest);
4863  pfcp_header_t &data();
4864  CLASS_NAME
4866 private:
4867  pfcp_header_t data_;
4868 };
4869 
4871 
4872 struct __attribute((__may_alias__)) _NodeReportReq
4873 {
4874  NodeIdIE ni_;
4875  NodeReportTypeIE nrt_;
4877 };
4878 
4880 {
4881 public:
4882  NodeReportReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4883  uint16_t length() const;
4884  NodeIdIE &node_id(Bool forceInit = False);
4885  NodeReportTypeIE &node_rpt_type(Bool forceInit = False);
4886  UserPlanePathFailureReportIE &user_plane_path_fail_rpt(Bool forceInit = False);
4887  NodeReportReq &encode(uint8_t *dest);
4888  pfcp_node_rpt_req_t &data();
4889  CLASS_NAME
4891 protected:
4892  Void postDecode();
4893 private:
4894  pfcp_node_rpt_req_t data_;
4895  UChar iebuffer_[sizeof(_NodeReportReq)];
4896 };
4897 
4899 
4900 struct __attribute((__may_alias__)) _NodeReportRsp
4901 {
4902  NodeIdIE ni_;
4903  CauseIE c_;
4904  OffendingIeIE oi_;
4905 };
4906 
4908 {
4909 public:
4910  NodeReportRsp();
4911  uint16_t length() const;
4912  NodeIdIE &node_id(Bool forceInit = False);
4913  CauseIE &cause(Bool forceInit = False);
4914  OffendingIeIE &offending_ie(Bool forceInit = False);
4915  NodeReportRsp &encode(uint8_t *dest);
4916  pfcp_node_rpt_rsp_t &data();
4917  CLASS_NAME
4919 protected:
4920  Void postDecode();
4921 private:
4922  pfcp_node_rpt_rsp_t data_;
4923  UChar iebuffer_[sizeof(_NodeReportRsp)];
4924 };
4925 
4927 
4928 struct __attribute((__may_alias__)) _SessionSetDeletionReq
4929 {
4930  NodeIdIE ni_;
4931  FqCsidIE sc_;
4932  FqCsidIE pc_;
4933  FqCsidIE u_;
4934  FqCsidIE t_;
4935  FqCsidIE e_;
4936  FqCsidIE m_;
4937 };
4938 
4940 {
4941 public:
4942  SessionSetDeletionReq(PFCP::LocalNodeSPtr &ln, PFCP::RemoteNodeSPtr &rn, Bool allocSeqNbr = True);
4943  uint16_t length() const;
4944  SessionSetDeletionReq &seid(uint64_t val);
4945  NodeIdIE &node_id(Bool forceInit = False);
4946  FqCsidIE &sgw_c_fqcsid(Bool forceInit = False);
4947  FqCsidIE &pgw_c_fqcsid(Bool forceInit = False);
4948  FqCsidIE &up_fqcsid(Bool forceInit = False);
4949  FqCsidIE &twan_fqcsid(Bool forceInit = False);
4950  FqCsidIE &epdg_fqcsid(Bool forceInit = False);
4951  FqCsidIE &mme_fqcsid(Bool forceInit = False);
4952  SessionSetDeletionReq &encode(uint8_t *dest);
4953  pfcp_sess_set_del_req_t &data();
4954  CLASS_NAME
4956 protected:
4957  Void postDecode();
4958 private:
4959  pfcp_sess_set_del_req_t data_;
4960  UChar iebuffer_[sizeof(_SessionSetDeletionReq)];
4961 };
4962 
4964 
4965 struct __attribute((__may_alias__)) _SessionSetDeletionRsp
4966 {
4967  NodeIdIE ni_;
4968  CauseIE c_;
4969  OffendingIeIE oi_;
4970 };
4971 
4973 {
4974 public:
4976  uint16_t length() const;
4977  SessionSetDeletionRsp &seid(uint64_t val);
4978  NodeIdIE &node_id(Bool forceInit = False);
4979  CauseIE &cause(Bool forceInit = False);
4980  OffendingIeIE &offending_ie(Bool forceInit = False);
4981  SessionSetDeletionRsp &encode(uint8_t *dest);
4982  pfcp_sess_set_del_rsp_t &data();
4983  CLASS_NAME
4985 protected:
4986  Void postDecode();
4987 private:
4988  pfcp_sess_set_del_rsp_t data_;
4989  UChar iebuffer_[sizeof(_SessionSetDeletionRsp)];
4990 };
4991 
4993 
4994 struct __attribute((__may_alias__)) _SessionEstablishmentReq
4995 {
4996  NodeIdIE ni_;
4997  FSeidIE cpf_;
4998  CreateBarIE cb_;
4999  PdnTypeIE pt_;
5000  FqCsidIE sfc_;
5001  FqCsidIE mfc_;
5002  FqCsidIE pfc_;
5003  FqCsidIE efc_;
5004  FqCsidIE tfc_;
5006  UserIdIE ui_;
5007  TraceInformationIE ti_;
5008  ApnDnnIE ad_;
5009 };
5010 
5012 {
5013 public:
5014  SessionEstablishmentReq(PFCP::SessionBaseSPtr &ses, Bool allocSeqNbr = True);
5015  uint16_t length() const;
5016  NodeIdIE &node_id(Bool forceInit = False);
5017  FSeidIE &cp_fseid(Bool forceInit = False);
5018  CreateBarIE &create_bar(Bool forceInit = False);
5019  PdnTypeIE &pdn_type(Bool forceInit = False);
5020  FqCsidIE &sgw_c_fqcsid(Bool forceInit = False);
5021  FqCsidIE &mme_fqcsid(Bool forceInit = False);
5022  FqCsidIE &pgw_c_fqcsid(Bool forceInit = False);
5023  FqCsidIE &epdg_fqcsid(Bool forceInit = False);
5024  FqCsidIE &twan_fqcsid(Bool forceInit = False);
5025  UserPlaneInactivityTimerIE &user_plane_inact_timer(Bool forceInit = False);
5026  UserIdIE &user_id(Bool forceInit = False);
5027  TraceInformationIE &trc_info(Bool forceInit = False);
5028  ApnDnnIE &apn_dnn(Bool forceInit = False);
5029  CreatePdrIE &create_pdr(uint8_t idx);
5030  CreateFarIE &create_far(uint8_t idx);
5031  CreateUrrIE &create_urr(uint8_t idx);
5032  CreateQerIE &create_qer(uint8_t idx);
5033  CreateTrafficEndpointIE &create_traffic_endpt(uint8_t idx);
5034  int next_create_pdr();
5035  int next_create_far();
5036  int next_create_urr();
5037  int next_create_qer();
5038  int next_create_traffic_endpt();
5039  SessionEstablishmentReq &encode(uint8_t *dest);
5040  pfcp_sess_estab_req_t &data();
5041  CLASS_NAME
5043 protected:
5044  Void postDecode();
5045 private:
5046  pfcp_sess_estab_req_t data_;
5047  UChar iebuffer_[sizeof(_SessionEstablishmentReq)];
5048  std::vector<CreatePdrIE> cp_;
5049  std::vector<CreateFarIE> cf_;
5050  std::vector<CreateUrrIE> cu_;
5051  std::vector<CreateQerIE> cq_;
5052  std::vector<CreateTrafficEndpointIE> cte_;
5053 };
5054 
5056 
5057 struct __attribute((__may_alias__)) _SessionEstablishmentRsp
5058 {
5059  NodeIdIE ni_;
5060  CauseIE c_;
5061  OffendingIeIE oi_;
5062  FSeidIE ufs_;
5065  FqCsidIE ufc_;
5066  FailedRuleIdIE fri_;
5067 };
5068 
5070 {
5071 public:
5073  uint16_t length() const;
5074  NodeIdIE &node_id(Bool forceInit = False);
5075  CauseIE &cause(Bool forceInit = False);
5076  OffendingIeIE &offending_ie(Bool forceInit = False);
5077  FSeidIE &up_fseid(Bool forceInit = False);
5078  LoadControlInformationIE &load_ctl_info(Bool forceInit = False);
5079  OverloadControlInformationIE &ovrld_ctl_info(Bool forceInit = False);
5080  FqCsidIE &up_fqcsid(Bool forceInit = False);
5081  FailedRuleIdIE &failed_rule_id(Bool forceInit = False);
5082  CreatedPdrIE &created_pdr(uint8_t idx);
5083  CreatedTrafficEndpointIE &created_traffic_endpt(uint8_t idx);
5084  int next_created_pdr();
5085  int next_created_traffic_endpt();
5086  SessionEstablishmentRsp &encode(uint8_t *dest);
5087  pfcp_sess_estab_rsp_t &data();
5088  CLASS_NAME
5090 protected:
5091  Void postDecode();
5092 private:
5093  pfcp_sess_estab_rsp_t data_;
5094  UChar iebuffer_[sizeof(_SessionEstablishmentRsp)];
5095  std::vector<CreatedPdrIE> cp_;
5096  std::vector<CreatedTrafficEndpointIE> cte_;
5097 };
5098 
5100 
5101 struct __attribute((__may_alias__)) _SessionModificationReq
5102 {
5103  FSeidIE cfs_;
5104  RemoveBarIE rb_;
5106  CreateBarIE cb_;
5110  PfcpSmReqFlagsIE f_;
5111  FqCsidIE pcfc_;
5112  FqCsidIE scfc_;
5113  FqCsidIE mfc_;
5114  FqCsidIE efc_;
5115  FqCsidIE tfc_;
5117  QueryUrrReferenceIE qur_;
5118  TraceInformationIE ti_;
5119 };
5120 
5122 {
5123 public:
5124  SessionModificationReq(PFCP::SessionBaseSPtr &ses, Bool allocSeqNbr = True);
5125  uint16_t length() const;
5126  FSeidIE &cp_fseid(Bool forceInit = False);
5127  RemoveBarIE &remove_bar(Bool forceInit = False);
5128  RemoveTrafficEndpointIE &rmv_traffic_endpt(Bool forceInit = False);
5129  CreateBarIE &create_bar(Bool forceInit = False);
5130  CreateTrafficEndpointIE &create_traffic_endpt(Bool forceInit = False);
5131  UpdateBarSessionModificationReqIE &update_bar(Bool forceInit = False);
5132  UpdateTrafficEndpointIE &upd_traffic_endpt(Bool forceInit = False);
5133  PfcpSmReqFlagsIE &pfcpsmreq_flags(Bool forceInit = False);
5134  FqCsidIE &pgw_c_fqcsid(Bool forceInit = False);
5135  FqCsidIE &sgw_c_fqcsid(Bool forceInit = False);
5136  FqCsidIE &mme_fqcsid(Bool forceInit = False);
5137  FqCsidIE &epdg_fqcsid(Bool forceInit = False);
5138  FqCsidIE &twan_fqcsid(Bool forceInit = False);
5139  UserPlaneInactivityTimerIE &user_plane_inact_timer(Bool forceInit = False);
5140  QueryUrrReferenceIE &query_urr_ref(Bool forceInit = False);
5141  TraceInformationIE &trc_info(Bool forceInit = False);
5142  RemovePdrIE &remove_pdr(uint8_t idx);
5143  RemoveFarIE &remove_far(uint8_t idx);
5144  RemoveUrrIE &remove_urr(uint8_t idx);
5145  RemoveQerIE &remove_qer(uint8_t idx);
5146  CreatePdrIE &create_pdr(uint8_t idx);
5147  CreateFarIE &create_far(uint8_t idx);
5148  CreateUrrIE &create_urr(uint8_t idx);
5149  CreateQerIE &create_qer(uint8_t idx);
5150  UpdatePdrIE &update_pdr(uint8_t idx);
5151  UpdateFarIE &update_far(uint8_t idx);
5152  UpdateUrrIE &update_urr(uint8_t idx);
5153  UpdateQerIE &update_qer(uint8_t idx);
5154  QueryUrrIE &query_urr(uint8_t idx);
5155  int next_remove_pdr();
5156  int next_remove_far();
5157  int next_remove_urr();
5158  int next_remove_qer();
5159  int next_create_pdr();
5160  int next_create_far();
5161  int next_create_urr();
5162  int next_create_qer();
5163  int next_update_pdr();
5164  int next_update_far();
5165  int next_update_urr();
5166  int next_update_qer();
5167  int next_query_urr();
5168  SessionModificationReq &encode(uint8_t *dest);
5169  pfcp_sess_mod_req_t &data();
5170  CLASS_NAME
5172 protected:
5173  Void postDecode();
5174 private:
5175  pfcp_sess_mod_req_t data_;
5176  UChar iebuffer_[sizeof(_SessionModificationReq)];
5177  std::vector<RemovePdrIE> rp_;
5178  std::vector<RemoveFarIE> rf_;
5179  std::vector<RemoveUrrIE> ru_;
5180  std::vector<RemoveQerIE> rq_;
5181  std::vector<CreatePdrIE> cp_;
5182  std::vector<CreateFarIE> cf_;
5183  std::vector<CreateUrrIE> cu_;
5184  std::vector<CreateQerIE> cq_;
5185  std::vector<UpdatePdrIE> up_;
5186  std::vector<UpdateFarIE> uf_;
5187  std::vector<UpdateUrrIE> uu_;
5188  std::vector<UpdateQerIE> uq_;
5189  std::vector<QueryUrrIE> qu_;
5190 };
5191 
5193 
5194 struct __attribute((__may_alias__)) _SessionModificationRsp
5195 {
5196  CauseIE c_;
5197  OffendingIeIE oi_;
5198  CreatedPdrIE cp_;
5201  FailedRuleIdIE fri_;
5204 };
5205 
5207 {
5208 public:
5210  uint16_t length() const;
5211  CauseIE &cause(Bool forceInit = False);
5212  OffendingIeIE &offending_ie(Bool forceInit = False);
5213  CreatedPdrIE &created_pdr(Bool forceInit = False);
5214  LoadControlInformationIE &load_ctl_info(Bool forceInit = False);
5215  OverloadControlInformationIE &ovrld_ctl_info(Bool forceInit = False);
5216  FailedRuleIdIE &failed_rule_id(Bool forceInit = False);
5217  AdditionalUsageReportsInformationIE &add_usage_rpts_info(Bool forceInit = False);
5218  CreatedTrafficEndpointIE &createdupdated_traffic_endpt(Bool forceInit = False);
5219  UsageReportSessionModificationRspIE &usage_report(uint8_t idx);
5220  int next_usage_report();
5221  SessionModificationRsp &encode(uint8_t *dest);
5222  pfcp_sess_mod_rsp_t &data();
5223  CLASS_NAME
5225 protected:
5226  Void postDecode();
5227 private:
5228  pfcp_sess_mod_rsp_t data_;
5229  UChar iebuffer_[sizeof(_SessionModificationRsp)];
5230  std::vector<UsageReportSessionModificationRspIE> ur_;
5231 };
5232 
5234 
5236 {
5237 public:
5238  SessionDeletionReq(PFCP::SessionBaseSPtr &ses, Bool allocSeqNbr = True);
5239  uint16_t length() const;
5240  SessionDeletionReq &encode(uint8_t *dest);
5241  pfcp_sess_del_req_t &data();
5242  CLASS_NAME
5244 private:
5245  pfcp_sess_del_req_t data_;
5246 };
5247 
5249 
5250 struct __attribute((__may_alias__)) _SessionDeletionRsp
5251 {
5252  CauseIE c_;
5253  OffendingIeIE oi_;
5256 };
5257 
5259 {
5260 public:
5262  uint16_t length() const;
5263  CauseIE &cause(Bool forceInit = False);
5264  OffendingIeIE &offending_ie(Bool forceInit = False);
5265  LoadControlInformationIE &load_ctl_info(Bool forceInit = False);
5266  OverloadControlInformationIE &ovrld_ctl_info(Bool forceInit = False);
5267  UsageReportSessionDeletionRspIE &usage_report(uint8_t idx);
5268  int next_usage_report();
5269  SessionDeletionRsp &encode(uint8_t *dest);
5270  pfcp_sess_del_rsp_t &data();
5271  CLASS_NAME
5273 protected:
5274  Void postDecode();
5275 private:
5276  pfcp_sess_del_rsp_t data_;
5277  UChar iebuffer_[sizeof(_SessionDeletionRsp)];
5278  std::vector<UsageReportSessionDeletionRspIE> ur_;
5279 };
5280 
5282 
5283 struct __attribute((__may_alias__)) _SessionReportReq
5284 {
5285  ReportTypeIE rt_;
5286  DownlinkDataReportIE ddr_;
5291 };
5292 
5294 {
5295 public:
5296  SessionReportReq(PFCP::SessionBaseSPtr &ses, Bool allocSeqNbr = True);
5297  uint16_t length() const;
5298  ReportTypeIE &report_type(Bool forceInit = False);
5299  DownlinkDataReportIE &dnlnk_data_rpt(Bool forceInit = False);
5300  ErrorIndicationReportIE &err_indctn_rpt(Bool forceInit = False);
5301  LoadControlInformationIE &load_ctl_info(Bool forceInit = False);
5302  OverloadControlInformationIE &ovrld_ctl_info(Bool forceInit = False);
5303  AdditionalUsageReportsInformationIE &add_usage_rpts_info(Bool forceInit = False);
5304  UsageReportSessionReportReqIE &usage_report(uint8_t idx);
5305  int next_usage_report();
5306  SessionReportReq &encode(uint8_t *dest);
5307  pfcp_sess_rpt_req_t &data();
5308  CLASS_NAME
5310 protected:
5311  Void postDecode();
5312 private:
5313  pfcp_sess_rpt_req_t data_;
5314  UChar iebuffer_[sizeof(_SessionReportReq)];
5315  std::vector<UsageReportSessionReportReqIE> ur_;
5316 };
5317 
5319 
5320 struct __attribute((__may_alias__)) _SessionReportRsp
5321 {
5322  CauseIE c_;
5323  OffendingIeIE oi_;
5325  PfcpSrRspFlagsIE flags_;
5326 };
5327 
5329 {
5330 public:
5331  SessionReportRsp();
5332  uint16_t length() const;
5333  CauseIE &cause(Bool forceInit = False);
5334  OffendingIeIE &offending_ie(Bool forceInit = False);
5335  UpdateBarSessionReportRspIE &update_bar(Bool forceInit = False);
5336  PfcpSrRspFlagsIE &sxsrrsp_flags(Bool forceInit = False);
5337  SessionReportRsp &encode(uint8_t *dest);
5338  pfcp_sess_rpt_rsp_t &data();
5339  CLASS_NAME
5341 protected:
5342  Void postDecode();
5343 private:
5344  pfcp_sess_rpt_rsp_t data_;
5345  UChar iebuffer_[sizeof(_SessionReportRsp)];
5346 };
5347 
5350 
5352 {
5353 public:
5354  Translator();
5355  ~Translator();
5356 
5357  PFCP::ReqOutPtr encodeHeartbeatReq(PFCP::SndHeartbeatReqData &hb);
5358  PFCP::RspOutPtr encodeHeartbeatRsp(PFCP::SndHeartbeatRspData &hb);
5359  PFCP::RspOutPtr encodeVersionNotSupportedRsp(PFCP::ReqInPtr msg);
5360 
5361  PFCP::ReqOutPtr encodeReq(PFCP::AppMsgReqPtr msg);
5362  PFCP::RspOutPtr encodeRsp(PFCP::AppMsgRspPtr msg);
5363  PFCP::AppMsgReqPtr decodeReq(PFCP::ReqInPtr msg);
5364  PFCP::AppMsgRspPtr decodeRsp(PFCP::RspInPtr msg);
5365  PFCP::RcvdHeartbeatReqDataPtr decodeHeartbeatReq(PFCP::ReqInPtr msg);
5366  PFCP::RcvdHeartbeatRspDataPtr decodeHeartbeatRsp(PFCP::RspInPtr msg);
5367 
5368  Void getMsgInfo(PFCP::TranslatorMsgInfo &info, cpUChar msg, Int len);
5369  Bool isVersionSupported(UChar ver);
5370  PFCP::MsgClass messageClass(PFCP::MsgType mt);
5371 
5372  PFCP::MsgType pfcpHeartbeatReq();
5373  PFCP::MsgType pfcpHeartbeatRsp();
5374  PFCP::MsgType pfcpSessionEstablishmentReq();
5375  PFCP::MsgType pfcpSessionEstablishmentRsp();
5376  PFCP::MsgType pfcpAssociationSetupReq();
5377  PFCP::MsgType pfcpAssociationSetupRsp();
5378 private:
5379  EMemory::Pool *mp_[10];
5380 };
5381 
5382 }
5383 
5384 #endif
Definition: pfcpr15.h:689
Definition: pfcpr15.h:2904
Definition: pfcpr15.h:1457
Definition: pfcpr15.h:3040
Definition: pfcpr15.h:1013
Definition: pfcpr15.h:4494
Definition: pfcpr15.h:180
Definition: pfcpr15.h:3847
Definition: pfcpr15.h:446
NodeIdTypeEnum
Definition: pfcpr15.h:1143
#define True
True.
Definition: ebase.h:25
LengthCalculator(LengthCalculator *parent)
Definition: pfcpr15.h:68
SourceInterfaceEnum
Definition: pfcpr15.h:172
Definition: pfcpr15.h:1385
FramedRoutingEnum
Definition: pfcpr15.h:3011
DownlinkGateEnum
Definition: pfcpr15.h:324
Definition: pfcpr15.h:1809
Definition: pfcpr15.h:2512
Definition: pfcpr15.h:4421
Definition: pfcpr15.h:2844
Definition: pfcpr15.h:2925
Definition: pfcpr15.h:3545
Definition: pfcpr15.h:2386
Definition: pfcpr15.h:1499
InternetProtocolEnum
Definition: pfcpr15.h:1656
Definition: pfcpr15.h:2492
Represents an OctetString as defined in RFC 6733.
Definition: eostring.h:33
Definition: pfcpr15.h:4653
Definition: pfcpr15.h:1324
The PFCP Translator is used to encode and decode PFCP messages. This is a pure virtual base class tha...
Definition: epfcp.h:1800
Definition: pfcpr15.h:2601
Definition: pfcpr15.h:384
Definition: pfcpr15.h:5258
Definition: pfcpr15.h:1269
HeaderTypeEnum
Definition: pfcpr15.h:1977
Definition: pfcpr15.h:4715
Definition: pfcpr15.h:2196
IEHeader & type(uint16_t type)
Definition: pfcpr15.h:93
Definition: pfcpr15.h:1243
Definition: pfcpr15.h:4627
virtual uint16_t length() const =0
Definition: pfcpr15.h:3082
struct __attribute((__may_alias__)) _HeartbeatReq
Definition: pfcpr15.h:4579
Definition: pfcpr15.h:1150
Definition: pfcpr15.h:3960
Definition: pfcpr15.h:3693
DECLARE_ERROR(RequestedSizeTooLarge)
Definition: pfcpr15.h:3827
Definition: pfcpr15.h:5293
virtual uint16_t calculateLength()=0
Definition: pfcpr15.h:3250
Definition: pfcpr15.h:4836
Definition: pfcpr15.h:2989
Definition: pfcpr15.h:4238
Definition: pfcpr15.h:3423
Definition: pfcpr15.h:5235
Definition: pfcpr15.h:2173
Definition: pfcpr15.h:3998
Definition: pfcpr15.h:2946
Definition: pfcpr15.h:1188
Definition: pfcpr15.h:4939
Definition: pfcpr15.h:1545
Definition: pfcpr15.h:4857
Definition: pfcpr15.h:1587
Definition: pfcpr15.h:5328
Definition: pfcpr15.h:3582
virtual Void setLength()
Definition: pfcpr15.h:73
Definition: pfcpr15.h:199
Definition: pfcpr15.h:4075
#define CLASS_NAME
Definition: pfcpr15.h:49
Definition: pfcpr15.h:4584
Definition: pfcpr15.h:537
uint16_t packedLength() const
Definition: pfcpr15.h:96
Definition: pfcpr15.h:2692
Definition: pfcpr15.h:714
Definition: pfcpr15.h:3643
Definition: pfcpr15.h:1083
Definition: pfcpr15.h:2630
Definition: pfcpr15.h:1062
Contains the class definitions for the PFCP release 15 messages and information elements.
Definition: pfcpr15.h:59
Definition: pfcpr15.h:237
Definition: pfcpr15.h:3805
Definition: pfcpr15.h:5011
Definition: pfcpr15.h:3102
Definition: pfcpr15.h:4879
Definition: pfcpr15.h:1754
Definition: pfcpr15.h:1435
Definition: pfcpr15.h:2791
Definition: pfcpr15.h:1871
Definition: pfcpr15.h:4972
Definition: pfcpr15.h:606
Represents a request application message.
Definition: epfcp.h:954
Definition: pfcpr15.h:2034
Definition: pfcpr15.h:4378
Represents a response application message.
Definition: epfcp.h:1154
Definition: pfcpr15.h:362
#define False
False.
Definition: ebase.h:27
Definition: pfcpr15.h:468
Definition: pfcpr15.h:5121
FlowDirectionEnum
Definition: pfcpr15.h:1801
Definition: pfcpr15.h:2215
Definition: pfcpr15.h:1414
Class for manipulating date and time of day values.
Definition: etime.h:199
Definition: pfcpr15.h:2406
Definition: pfcpr15.h:302
Definition: pfcpr15.h:4275
Definition: pfcpr15.h:2864
Definition: pfcpr15.h:144
Definition: pfcpr15.h:1982
Definition: pfcpr15.h:1910
Definition: pfcpr15.h:1033
Definition: pfcpr15.h:2533
Definition: pfcpr15.h:3291
Definition: pfcpr15.h:1479
Definition: pfcpr15.h:426
BaseTimeIntervalTypeEnum
Definition: pfcpr15.h:2322
FqCsidNodeIdTypeEnum
Definition: pfcpr15.h:1344
Definition: pfcpr15.h:930
Definition: pfcpr15.h:2053
uint16_t length() const
Definition: pfcpr15.h:95
Definition: pfcpr15.h:406
Definition: pfcpr15.h:1609
Definition: pfcpr15.h:586
Definition: pfcpr15.h:1953
std::shared_ptr< SessionBase > SessionBaseSPtr
Definition: epfcp.h:401
Definition: pfcpr15.h:2471
Definition: pfcpr15.h:3269
RuleIdTypeEnum
Definition: pfcpr15.h:2292
Definition: pfcpr15.h:970
Definition: pfcpr15.h:265
#define OVERLOADED_NEW_DELETE
Definition: pfcpr15.h:30
Definition: pfcpr15.h:65
Definition: pfcpr15.h:139
Definition: pfcpr15.h:515
Definition: ememory.h:92
Represents an IP address with mask.
Definition: eip.h:40
Definition: pfcpr15.h:4784
Definition: pfcpr15.h:3611
Defines the EOctetString and ETbcdString classes.
Definition: pfcpr15.h:5069
Represents a response application message.
Definition: epfcp.h:1115
Definition: pfcpr15.h:2008
Definition: pfcpr15.h:2148
Definition: pfcpr15.h:2446
Definition: pfcpr15.h:3899
pfcp_ie_header_t & header()
Definition: pfcpr15.h:100
uint16_t type() const
Definition: pfcpr15.h:92
Definition: pfcpr15.h:2086
Definition: pfcpr15.h:565
DestinationInterfaceEnum
Definition: pfcpr15.h:762
Definition: pfcpr15.h:1662
Definition: pfcpr15.h:3327
Definition: pfcpr15.h:1730
UplinkGateEnum
Definition: pfcpr15.h:332
Definition: pfcpr15.h:1636
Definition: pfcpr15.h:2244
Definition: pfcpr15.h:663
Definition: pfcpr15.h:2884
Definition: pfcpr15.h:4907
Definition: pfcpr15.h:2661
Definition: pfcpr15.h:3062
CauseEnum
Definition: pfcpr15.h:119
Definition: pfcpr15.h:4017
Definition: pfcpr15.h:4681
Definition: pfcpr15.h:4036
Definition: pfcpr15.h:3161
Definition: pfcpr15.h:3445
Definition: pfcpr15.h:1781
Represents a request application node message (not associated with a session).
Definition: epfcp.h:998
Definition: pfcpr15.h:1521
TimerTimerUnitEnum
Definition: pfcpr15.h:1052
Definition: pfcpr15.h:4148
Definition: pfcpr15.h:1931
Definition: pfcpr15.h:771
Definition: pfcpr15.h:1106
Definition: pfcpr15.h:1565
Definition: pfcpr15.h:1706
Definition: pfcpr15.h:3730
Definition: pfcpr15.h:2107
DECLARE_ERROR(NodeIdException_NodeIdTypeLengthMismatch)
Definition: pfcpr15.h:994
Definition: pfcpr15.h:4210
Bool present() const
Definition: pfcpr15.h:98
Definition: pfcpr15.h:739
Definition: pfcpr15.h:1829
pfcp_cause_ie_t & ie_
Definition: pfcpr15.h:141
Definition: pfcpr15.h:3391
Definition: pfcpr15.h:3753
Definition: pfcpr15.h:4471
Definition: pfcpr15.h:2576
Definition: pfcpr15.h:3866
Definition: pfcpr15.h:844
Definition: pfcpr15.h:3019
TgppInterfaceTypeEnum
Definition: pfcpr15.h:3181
Definition: pfcpr15.h:3201
Definition: pfcpr15.h:340
Definition: pfcpr15.h:1351
Contains the class definitions to support the PFCP protocol stack.
Definition: pfcpr15.h:4173
Contains the class definitions to support the pool based memory allocation.
Void setLength()
Definition: pfcpr15.h:97
Definition: pfcpr15.h:3979
virtual uint16_t packedLength() const =0
Definition: pfcpr15.h:2328
Definition: pfcpr15.h:3520
IEHeader(pfcp_ie_header_t &hdr, uint16_t type, LengthCalculator *parent)
Definition: pfcpr15.h:103
OuterHeaderRemovalEnum
Definition: pfcpr15.h:1897
Definition: pfcpr15.h:2273
Definition: pfcpr15.h:2751
Definition: pfcpr15.h:495
PdnTypeEnum
Definition: pfcpr15.h:2264
RedirectAddressTypeEnum
Definition: pfcpr15.h:654
UplinkDownlinkTimeUnitEnum
Definition: pfcpr15.h:1862
GracefulReleasePeriodTimerUnitEnum
Definition: pfcpr15.h:2234
Definition: pfcpr15.h:2301
Definition: pfcpr15.h:3121
Encapsulates a sockaddr_storage structure that represents a socket address.
Definition: esocket.h:148
Definition: pfcpr15.h:5206
Definition: pfcpr15.h:2128
Definition: pfcpr15.h:2711
Definition: pfcpr15.h:3781
Definition: pfcpr15.h:4811
Definition: pfcpr15.h:793
Definition: pfcpr15.h:4608
Definition: pfcpr15.h:5351
Represents a response application message.
Definition: epfcp.h:1062
Definition: pfcpr15.h:4750
Definition: pfcpr15.h:2732
Definition: pfcpr15.h:3941
Represents a request application session message.
Definition: epfcp.h:1026
Definition: pfcpr15.h:3141
DlBufferingDurationTimerUnitEnum
Definition: pfcpr15.h:920
Definition: pfcpr15.h:89
Definition: pfcpr15.h:3351
DECLARE_ERROR_ADVANCED2(NodeIdException_UnrecognizedNodeIdType)
Definition: pfcpr15.h:2427