5G-LENA nr-v4.0
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
nr-asn1-header.h
1// Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
2//
3// SPDX-License-Identifier: GPL-2.0-only
4//
5// Author: Lluis Parcerisa <lparcerisa@cttc.cat>
6
7#ifndef NR_ASN1_HEADER_H
8#define NR_ASN1_HEADER_H
9
10#include "ns3/header.h"
11
12#include <bitset>
13#include <string>
14
15namespace ns3
16{
17
23class NrAsn1Header : public Header
24{
25 public:
27 ~NrAsn1Header() override;
28
33 static TypeId GetTypeId();
34 TypeId GetInstanceTypeId() const override;
35 uint32_t GetSerializedSize() const override;
36 void Serialize(Buffer::Iterator bIterator) const override;
37
38 // Inherited from ns3::Header base class
39 // Pure virtual methods, to be implemented in child classes
40 uint32_t Deserialize(Buffer::Iterator bIterator) override = 0;
41 void Print(std::ostream& os) const override = 0;
42
52 virtual void PreSerialize() const = 0;
53
54 protected:
57 mutable bool m_isDataSerialized;
58 mutable Buffer m_serializationResult;
59
64 void WriteOctet(uint8_t octet) const;
65
66 // Serialization functions
67
72 void SerializeBoolean(bool value) const;
79 void SerializeInteger(int n, int nmin, int nmax) const;
80 // void SerializeOctetstring (std::string s) const;
87 void SerializeSequenceOf(int numElems, int nMax, int nMin) const;
94 void SerializeChoice(int numOptions, int selectedOption, bool isExtensionMarkerPresent) const;
100 void SerializeEnum(int numElems, int selectedElem) const;
104 void SerializeNull() const;
108 void FinalizeSerialization() const;
109
114 template <int N>
115 void SerializeBitset(std::bitset<N> data) const;
116
122 template <int N>
123 void SerializeSequence(std::bitset<N> optionalOrDefaultMask,
124 bool isExtensionMarkerPresent) const;
130 void SerializeSequence(std::bitset<0> optionalOrDefaultMask,
131 bool isExtensionMarkerPresent) const;
137 void SerializeSequence(std::bitset<1> optionalOrDefaultMask,
138 bool isExtensionMarkerPresent) const;
144 void SerializeSequence(std::bitset<2> optionalOrDefaultMask,
145 bool isExtensionMarkerPresent) const;
151 void SerializeSequence(std::bitset<3> optionalOrDefaultMask,
152 bool isExtensionMarkerPresent) const;
158 void SerializeSequence(std::bitset<4> optionalOrDefaultMask,
159 bool isExtensionMarkerPresent) const;
165 void SerializeSequence(std::bitset<5> optionalOrDefaultMask,
166 bool isExtensionMarkerPresent) const;
172 void SerializeSequence(std::bitset<6> optionalOrDefaultMask,
173 bool isExtensionMarkerPresent) const;
179 void SerializeSequence(std::bitset<7> optionalOrDefaultMask,
180 bool isExtensionMarkerPresent) const;
186 void SerializeSequence(std::bitset<9> optionalOrDefaultMask,
187 bool isExtensionMarkerPresent) const;
193 void SerializeSequence(std::bitset<10> optionalOrDefaultMask,
194 bool isExtensionMarkerPresent) const;
200 void SerializeSequence(std::bitset<11> optionalOrDefaultMask,
201 bool isExtensionMarkerPresent) const;
202
207 template <int N>
208 void SerializeBitstring(std::bitset<N> bitstring) const;
213 void SerializeBitstring(std::bitset<1> bitstring) const;
218 void SerializeBitstring(std::bitset<2> bitstring) const;
223 void SerializeBitstring(std::bitset<8> bitstring) const;
228 void SerializeBitstring(std::bitset<10> bitstring) const;
233 void SerializeBitstring(std::bitset<16> bitstring) const;
238 void SerializeBitstring(std::bitset<27> bitstring) const;
243 void SerializeBitstring(std::bitset<28> bitstring) const;
248 void SerializeBitstring(std::bitset<32> bitstring) const;
249
250 // Deserialization functions
251
258 template <int N>
259 Buffer::Iterator DeserializeBitset(std::bitset<N>* data, Buffer::Iterator bIterator);
266 Buffer::Iterator DeserializeBitset(std::bitset<8>* data, Buffer::Iterator bIterator);
267
274 Buffer::Iterator DeserializeBoolean(bool* value, Buffer::Iterator bIterator);
283 Buffer::Iterator DeserializeInteger(int* n, int nmin, int nmax, Buffer::Iterator bIterator);
292 Buffer::Iterator DeserializeChoice(int numOptions,
293 bool isExtensionMarkerPresent,
294 int* selectedOption,
295 Buffer::Iterator bIterator);
303 Buffer::Iterator DeserializeEnum(int numElems, int* selectedElem, Buffer::Iterator bIterator);
304
312 template <int N>
313 Buffer::Iterator DeserializeSequence(std::bitset<N>* optionalOrDefaultMask,
314 bool isExtensionMarkerPresent,
315 Buffer::Iterator bIterator);
323 Buffer::Iterator DeserializeSequence(std::bitset<0>* optionalOrDefaultMask,
324 bool isExtensionMarkerPresent,
325 Buffer::Iterator bIterator);
333 Buffer::Iterator DeserializeSequence(std::bitset<1>* optionalOrDefaultMask,
334 bool isExtensionMarkerPresent,
335 Buffer::Iterator bIterator);
343 Buffer::Iterator DeserializeSequence(std::bitset<2>* optionalOrDefaultMask,
344 bool isExtensionMarkerPresent,
345 Buffer::Iterator bIterator);
353 Buffer::Iterator DeserializeSequence(std::bitset<3>* optionalOrDefaultMask,
354 bool isExtensionMarkerPresent,
355 Buffer::Iterator bIterator);
363 Buffer::Iterator DeserializeSequence(std::bitset<4>* optionalOrDefaultMask,
364 bool isExtensionMarkerPresent,
365 Buffer::Iterator bIterator);
373 Buffer::Iterator DeserializeSequence(std::bitset<5>* optionalOrDefaultMask,
374 bool isExtensionMarkerPresent,
375 Buffer::Iterator bIterator);
383 Buffer::Iterator DeserializeSequence(std::bitset<6>* optionalOrDefaultMask,
384 bool isExtensionMarkerPresent,
385 Buffer::Iterator bIterator);
386
394 Buffer::Iterator DeserializeSequence(std::bitset<7>* optionalOrDefaultMask,
395 bool isExtensionMarkerPresent,
396 Buffer::Iterator bIterator);
404 Buffer::Iterator DeserializeSequence(std::bitset<9>* optionalOrDefaultMask,
405 bool isExtensionMarkerPresent,
406 Buffer::Iterator bIterator);
414 Buffer::Iterator DeserializeSequence(std::bitset<10>* optionalOrDefaultMask,
415 bool isExtensionMarkerPresent,
416 Buffer::Iterator bIterator);
424 Buffer::Iterator DeserializeSequence(std::bitset<11>* optionalOrDefaultMask,
425 bool isExtensionMarkerPresent,
426 Buffer::Iterator bIterator);
427
434 template <int N>
435 Buffer::Iterator DeserializeBitstring(std::bitset<N>* bitstring, Buffer::Iterator bIterator);
442 Buffer::Iterator DeserializeBitstring(std::bitset<1>* bitstring, Buffer::Iterator bIterator);
449 Buffer::Iterator DeserializeBitstring(std::bitset<2>* bitstring, Buffer::Iterator bIterator);
456 Buffer::Iterator DeserializeBitstring(std::bitset<8>* bitstring, Buffer::Iterator bIterator);
463 Buffer::Iterator DeserializeBitstring(std::bitset<10>* bitstring, Buffer::Iterator bIterator);
470 Buffer::Iterator DeserializeBitstring(std::bitset<16>* bitstring, Buffer::Iterator bIterator);
477 Buffer::Iterator DeserializeBitstring(std::bitset<27>* bitstring, Buffer::Iterator bIterator);
484 Buffer::Iterator DeserializeBitstring(std::bitset<28>* bitstring, Buffer::Iterator bIterator);
491 Buffer::Iterator DeserializeBitstring(std::bitset<32>* bitstring, Buffer::Iterator bIterator);
492
498 Buffer::Iterator DeserializeNull(Buffer::Iterator bIterator);
507 Buffer::Iterator DeserializeSequenceOf(int* numElems,
508 int nMax,
509 int nMin,
510 Buffer::Iterator bIterator);
511};
512
513} // namespace ns3
514
515#endif // NR_ASN1_HEADER_H
void WriteOctet(uint8_t octet) const
Buffer::Iterator DeserializeBitset(std::bitset< N > *data, Buffer::Iterator bIterator)
void SerializeSequence(std::bitset< N > optionalOrDefaultMask, bool isExtensionMarkerPresent) const
void SerializeBitstring(std::bitset< N > bitstring) const
Buffer::Iterator DeserializeChoice(int numOptions, bool isExtensionMarkerPresent, int *selectedOption, Buffer::Iterator bIterator)
Buffer::Iterator DeserializeEnum(int numElems, int *selectedElem, Buffer::Iterator bIterator)
uint8_t m_numSerializationPendingBits
number of pending bits
Buffer::Iterator DeserializeBitstring(std::bitset< N > *bitstring, Buffer::Iterator bIterator)
Buffer m_serializationResult
serialization result
void FinalizeSerialization() const
Buffer::Iterator DeserializeSequenceOf(int *numElems, int nMax, int nMin, Buffer::Iterator bIterator)
void SerializeEnum(int numElems, int selectedElem) const
Buffer::Iterator DeserializeSequence(std::bitset< N > *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator)
void SerializeBoolean(bool value) const
Buffer::Iterator DeserializeBoolean(bool *value, Buffer::Iterator bIterator)
void SerializeChoice(int numOptions, int selectedOption, bool isExtensionMarkerPresent) const
void SerializeBitset(std::bitset< N > data) const
static TypeId GetTypeId()
Get the type ID.
void SerializeSequenceOf(int numElems, int nMax, int nMin) const
void SerializeInteger(int n, int nmin, int nmax) const
uint8_t m_serializationPendingBits
pending bits
Buffer::Iterator DeserializeBitset(std::bitset< 8 > *data, Buffer::Iterator bIterator)
bool m_isDataSerialized
true if data is serialized
Buffer::Iterator DeserializeNull(Buffer::Iterator bIterator)
virtual void PreSerialize() const =0
void SerializeNull() const
Buffer::Iterator DeserializeInteger(int *n, int nmin, int nmax, Buffer::Iterator bIterator)