11#ifndef QKD_POSTPROCESSING_APPLICATION_H
12#define QKD_POSTPROCESSING_APPLICATION_H
14#include "ns3/application.h"
15#include "ns3/address.h"
16#include "ns3/event-id.h"
17#include "ns3/nstime.h"
20#include "ns3/data-rate.h"
21#include "ns3/traced-callback.h"
22#include "ns3/event-id.h"
24#include "ns3/ipv4-address.h"
25#include "ns3/random-variable-stream.h"
27#include "ns3/qkd-encryptor.h"
28#include "ns3/socket-factory.h"
29#include "ns3/tcp-socket-factory.h"
30#include "ns3/udp-socket-factory.h"
31#include "ns3/ipv4-l3-protocol.h"
220 return std::hash<uint32_t>()(
a.GetIpv4().Get());
a polymophic address class
The base class for all ns3 applications.
Class for representing data rates.
An identifier for simulation events.
The basic class to represent both HTTP requests and responses.
static bool IsMatchingType(const Address &address)
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address.
Smart pointer class similar to boost::intrusive_ptr.
QKDPostprocessingApplication is a class used to generate QKD key in key establishment process.
Ptr< Socket > m_sinkSocketKMS
Associated socket.
void HandleRead(Ptr< Socket > socket)
Handle a packet received by the application.
std::list< Ptr< Socket > > GetAcceptedSockets() const
void HandleAccept(Ptr< Socket > socket, const Address &from)
Handle an incoming connection.
std::string m_matching_module_id
Unique UUID of matching QKD module.
void HandlePeerCloseQiskit(Ptr< Socket > socket)
Handle an connection close.
std::list< Ptr< Socket > > m_sinkSocketList
the accepted sockets
void StartApplication() override
Called at time specified by Start.
void PrepareOutput(std::string value, std::string action)
Help function to prepare output values.
bool m_connected
Connection Status.
void ConnectionFailedSifting(Ptr< Socket > socket)
void StoreKey(std::string keyId, std::string keyValue)
Store generated key at KMS.
Ptr< Socket > GetSendSocket() const
void SetId(std::string id)
Set QKD module ID.
void HandlePeerCloseKMS(Ptr< Socket > socket)
Handle an connection close.
static TypeId GetTypeId()
Get the type ID.
std::string m_lastUUID
The latest UUID of the key.
TracedCallback< Ptr< const Packet >, const Address & > m_rxTraceKMS
Ptr< Node > GetSrc()
pointer to associated source node
void HandleReadQiskit(Ptr< Socket > socket)
Handle a packet received by the application.
void HandleAcceptKMS(Ptr< Socket > socket, const Address &from)
Handle an incoming connection from KMS.
void SetId(UUID id)
Set QKD module ID.
~QKDPostprocessingApplication() override
Ptr< Socket > GetSinkSocket() const
set the sink socket
Ptr< Node > GetDst()
pointer to associated destination node
void StopApplication() override
Called at time specified by Stop.
QKDPostprocessingApplication()
Ptr< QKDEncryptor > m_encryptor
Address m_peer_sifting
Peer address for sifting.
std::string GenerateRandomString(const int len)
Internal help function.
uint32_t m_maxPackets_sifting
Limitation for the number of sifting packets.
void SetSiftingSocket(std::string type, Ptr< Socket > socket)
uint64_t m_randomSeed
Random seed used when generating key values.
void HandlePeerError(Ptr< Socket > socket)
Handle an connection error KMS.
Ptr< Socket > m_sendSocket_sifting
Sockets used for SIFTING.
uint32_t m_pktSize
Size of packets.
Ptr< Socket > GetListeningSocket() const
DataRate m_dataRate
Rate that data is generatedm_pktSize.
void ConnectionFailed(Ptr< Socket > socket)
Ptr< Socket > m_sinkSocket_sifting
Associated socket for sifting.
void SetSocket(std::string type, Ptr< Socket > socket, bool isMaster)
void DoDispose() override
Destructor implementation.
void HandleReadKMS(Ptr< Socket > socket)
Handle a packet received by the application from KMS.
TracedCallback< Ptr< const Packet > > m_txTrace
std::unordered_map< Address, Ptr< Packet >, AddressHash > m_buffer
Buffer for received packets(TCP segmentation)
std::string m_module_id
Unique UUID of QKD module.
std::string GetStringAddress(Address m_address)
Obtain IPv4 address in string type.
void HandleReadSifting(Ptr< Socket > socket)
Handle a packet received by the application.
void SendSiftingPacket()
Send SIFTING packet to the socket.
void SendData()
Schedule data to be sent.
void HandleAcceptQiskit(Ptr< Socket > socket, const Address &from)
Handle an incoming connection.
void GenerateRandomKeyId()
Generate Random Seed Used to Generate Key Values.
void ProcessQiskitRequest(HTTPMessage headerIn, Ptr< Packet > packet, Ptr< Socket > socket)
void SendPacket(Ptr< Packet > packet)
Send packet to the socket.
Address m_local_sifting
Local address for sifting to bind to.
bool m_master
Alice(1) or Bob(0)
std::string GetPeerId()
Get matching QKD module ID.
void RegisterAckTime(Time oldRtt, Time newRtt)
Callback for ack messages.
void ConnectionSucceededSifting(Ptr< Socket > socket)
std::string GetId()
Get QKD module ID.
Address m_local
Local address to bind to.
void ConnectionSucceededKMS(Ptr< Socket > socket)
void SetPeerId(std::string id)
Set matching QKD module ID.
void DataSend(Ptr< Socket > s, uint32_t)
TracedCallback< Ptr< const Packet >, const Address & > m_rxTrace
Traced Callback: received packets, source address.
EventId m_sendEvent
Event id of pending "send packet" event.
uint32_t m_totalRx
Total bytes received.
void ScheduleNextReset()
Schedule reset of post-processing round.
void HandlePeerErrorQiskit(Ptr< Socket > socket)
Handle an connection error KMS.
uint32_t m_keySize
KeyRate of the QKDlink.
Ptr< UniformRandomVariable > m_random
Ptr< Socket > m_sendSocket
IMITATE post-processing traffic(CASCADE, PRIVACY AMPLIFICATION and etc.
void ConnectionSucceeded(Ptr< Socket > socket)
void ProcessIncomingPacket(Ptr< Packet > packet)
Process data received.
Ptr< Socket > m_sendSocketKMS
Sockets to talk with LKMS.
Ptr< Socket > m_sinkSocket
Associated socket.
uint32_t GetTotalRx() const
void ResetCounter()
After completing post-processing round, reset counters.
void SetPeerId(UUID id)
Set matching QKD module ID.
DataRate m_keyRate
QKD Key rate.
TracedCallback< Ptr< const Packet > > m_txTraceKMS
Ptr< Socket > m_sinkSocketQiskit
Associated socket.
void ConnectionFailedKMS(Ptr< Socket > socket)
void DataSendKMS(Ptr< Socket > s, uint32_t)
void PacketReceived(const Ptr< Packet > &p, const Address &from, Ptr< Socket > socket)
void HandlePeerErrorKMS(Ptr< Socket > socket)
Handle an connection error KMS.
static uint32_t m_applicationCounts
uint32_t m_packetNumber_sifting
How many sifting packets have been sent.
Address m_peer
Peer address.
void HandleAcceptSifting(Ptr< Socket > socket, const Address &from)
Handle an incoming connection.
void HandlePeerClose(Ptr< Socket > socket)
Handle an connection close.
Simulation virtual time values and global simulation resolution.
Forward calls to a chain of Callback.
a unique identifier for an interface.
Universally unique identifier(UUID)
#define NS_ABORT_IF(cond)
Abnormal program termination if a condition is true.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static unsigned int value(char c)
Hashing for the Address class.
size_t operator()(const Address &x) const
operator()