14#include "ns3/application.h"
15#include "ns3/event-id.h"
17#include "ns3/traced-callback.h"
18#include "ns3/address.h"
19#include "ns3/core-module.h"
20#include "ns3/applications-module.h"
21#include "ns3/core-module.h"
24#include "ns3/qkd-encryptor.h"
25#include "ns3/app-key-stream.h"
26#include <unordered_map>
473 void Close(std::string ksid);
575 return std::hash<uint32_t>()(
a.GetIpv4().Get());
603 std::vector<std::string>
ReadUri(std::string s);
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.
Ipv4 addresses are stored in host order in this class.
Smart pointer class similar to boost::intrusive_ptr.
Establish secure communication on application lavel to use the key and test LKSM.
void HandlePeerErrorFromKMS(Ptr< Socket > socket)
Handle a connection error from KMS.
void PushHttpKmsRequest(std::string uri, KeyStreamSession::Type sessionType=KeyStreamSession::ENCRYPTION)
Add HTTP request to queue to map response later.
void HandlePeerCloseFromApp(Ptr< Socket > socket)
Handle a connection close from peer QKD application.
std::multimap< std::string, KeyStreamSession::Type > m_httpRequestsKMS
void HandleReadFromApp(Ptr< Socket > socket)
Handle a packet received by the QKD application from peer QKD application.
State GetState() const
Returns the current state of the application.
TracedCallback< Ptr< Packet >, std::string > m_deauthenticationTrace
trace callback for authentication check
void ConnectionToKMSSucceeded(Ptr< Socket > socket)
Callback function after the connection to the KMS is complete.
std::string GetAppStateString() const
Returns the current state of the application in string format.
Ipv4Address GetIp()
Get application Ipv4 address.
Ptr< Socket > m_dataSocketApp
void SendKsid(std::string ksid, KeyStreamSession::Type sessionType, HTTPMessage::HttpStatus statusCode=HTTPMessage::Ok)
Sends SEND_KSID request(for sender App004) or response(for receiver App004)
void ConnectionToKMSFailed(Ptr< Socket > socket)
Callback function after the connection to the KMS has failed.
void HandleAcceptFromKMS(Ptr< Socket > s, const Address &from)
Handle an incoming connection from KMS.
void OpenConnect(std::string ksid, KeyStreamSession::Type sessionType)
QKDApp reserves an association(Key_stream_ID)
std::vector< std::string > ReadUri(std::string s)
void RegisterAckTime(Time oldRtt, Time newRtt)
Ptr< Socket > m_socketToKMS
bool m_isSignalingConnectedToApp
uint32_t m_keyBufferLengthEncryption
TracedCallback< const std::string &, Ptr< const Packet > > m_rxSigTrace
Traced Callback: received signaling packets.
Ptr< Socket > m_signalingSocketApp
void ProcessSignalingPacketFromApp(HTTPMessage &header, Ptr< Socket > socket)
Process signaling packets from peer QKD application.
void ProcessOpenConnectResponse(HTTPMessage &header)
Process response from KMS on OPEN_CONNECT call.
void ProcessGetKeyResponse(HTTPMessage &header)
Process Get Key response from KMS.
TracedCallback< Ptr< Packet >, std::string > m_authenticationTrace
trace callback for authentication
bool ConnectionRequestedSignalingFromApp(Ptr< Socket > socket, const Address &address)
Callback function after the connection for response from KMS has been received.
uint32_t m_keyBufferLengthAuthentication
TracedCallback< Ptr< Packet > > m_encryptionTrace
trace callback for encryption
ns3::TracedCallback< const std::string &, const std::string & > m_stateTransitionTrace
The StateTransition trace source.
void CreateKeyStreamSessions()
std::unordered_map< Address, Ptr< Packet >, AddressHash > m_buffer_qkdapp
Buffer for received packets(fragmentation)
void Setup(std::string socketType, std::string appId, std::string remoteAppId, const Address &appAddress, const Address &remoteAppAddress, const Address &kmAddress, std::string type)
Ptr< KeyStreamSession > m_authStream
void DataToKMSSend(Ptr< Socket >, uint32_t)
Callback function to notify that data to KMS has been sent.
TracedCallback< const std::string &, Ptr< const Packet > > m_mxTrace
Traced Callback: missed send packet call.
void HandleAcceptSignalingFromApp(Ptr< Socket > s, const Address &from)
Handle a signaling incoming connection from peer QKD application.
bool m_primaryQueueEstablished
void PrepareSocketToKMS()
Prepare send socket to communicate with KMS Application.
void StartApplication() override
void HandleReadSignalingFromApp(Ptr< Socket > socket)
Handle a signaling packet received by the QKD application from peer QKD application.
bool m_isDataConnectedToApp
TracedCallback< const std::string &, Ptr< const Packet > > m_rxTrace
Traced Callback: received data packets.
EventId m_closeSocketEvent
TracedCallback< const std::string &, Ptr< const Packet > > m_rxKmsTrace
Traced Callback: received packets from KMS.
void CheckStreamSessions()
Check if the associations are successfuly established.
void HandleAcceptFromApp(Ptr< Socket > s, const Address &from)
Handle an incoming connection from peer QKD application.
QKDEncryptor::EncryptionType m_encryptionType
uint32_t GetEncryptionKeySize()
Get key size for defined encryption algorithm.
void ConnectionSignalingToAppFailed(Ptr< Socket > socket)
Callback function after the signaling connection to the APP has.
void EstablishQueues()
Sends ESTABLISH_QUEUES request(for sende App004) or response(for receiver App004)
void Close(std::string ksid)
Terminate the association.
void HandlePeerErrorSignalingFromApp(Ptr< Socket > socket)
Handle a signaling connection error from peer QKD application.
Ptr< KeyStreamSession > m_encStream
static TypeId GetTypeId()
Get the type ID.
void ProcessPacketsToKMSFromQueue()
void SetCryptoSettings(uint32_t encryptionType, uint32_t authenticationType, uint32_t authenticationTagLengthInBits)
Set encryption and authentication type.
uint32_t GetAuthenticationKeySize()
Get key size for defined authentication algorithm.
void StopApplication() override
Application specific shutdown code.
bool ConnectionRequestedFromKMS(Ptr< Socket > socket, const Address &address)
Callback function after the connection for response from KMS has been received.
void ProcessCloseResponse(HTTPMessage &header)
Process response from KMS on CLOSE call.
void PacketReceivedFromKMS(const Ptr< Packet > &p, const Address &from, Ptr< Socket > socket)
Check for tcp segmentation of packets received from KMS.
std::string GetPacketContent(uint32_t msgLength=0)
Get the packet payload content.
bool m_replicaQueueEstablished
void ConnectionSignalingToAppSucceeded(Ptr< Socket > socket)
Callback function after the signaling connection to the APP is complete.
void ConnectionToAppSucceeded(Ptr< Socket > socket)
Callback function after the connection to the APP is complete.
bool ConnectionRequestedFromApp(Ptr< Socket > socket, const Address &address)
Callback function after the connection for response from KMS has been received.
void SetState(State state)
Set state.
void SendPacket()
QKDApp encrypts the data with obtained keys and sends this encrypted data to the peer QKDApp.
std::multimap< std::string, std::string > m_transitionMatrix
transition map of protocol states
void SignalingPacketReceivedFromApp(const Ptr< Packet > &p, const Address &from, Ptr< Socket > socket)
Check for tcp segmentation of signaling packets received from APP.
void ProcessDataPacket(QKDAppHeader header, Ptr< Packet > packet, Ptr< Socket > socket)
Process data packets from peer QKD application.
Ipv4Address GetPeerIp()
Get peer application Ipv4 address.
void HandlePeerErrorFromApp(Ptr< Socket > socket)
Handle a connection error from peer QKD application.
QKDEncryptor::AuthenticationType m_authenticationType
Ptr< QKDEncryptor > m_encryptor
void HandlePeerCloseSignalingFromApp(Ptr< Socket > socket)
Handle a signaling connection close from peer QKD application.
std::string GetSessionScope(KeyStreamSession::Type type)
uint32_t m_authenticationTagLengthInBits
length of the authentication tag in bits(32 by default)
void GetKeyFromKMS(std::string ksid)
Obtain the required amount of key material.
State
QKD App states(App) States that refer to QKDApp data transmision!
@ ESTABLISHING_ASSOCIATIONS
@ ASSOCIATIONS_ESTABLISHED
@ ESTABLISHING_KEY_QUEUES
void ProcessResponseFromKMS(HTTPMessage &header, Ptr< Packet > packet, Ptr< Socket > socket)
Process response from KMS application.
void HandlePeerCloseToKMS(Ptr< Socket > socket)
Handle a connection close to KMS.
void CheckQueues()
Application establishing key queues before establishing data traffic.
std::string IpToString(Ipv4Address address)
uint32_t m_authentication
std::string GetId()
Get application identifier.
std::unordered_map< Address, Ptr< Packet >, AddressHash > m_buffer_sig
Buffer for received packets(fragmentation)
void ConnectionToAppFailed(Ptr< Socket > socket)
Callback function after the connection to the APP has failed.
void HandlePeerCloseFromKMS(Ptr< Socket > socket)
Handle a connection close from KMS.
TracedCallback< Ptr< Packet > > m_decryptionTrace
trace callback for decryption
Ipv4Address GetKmsIp()
Get KMS Ipv4 address.
void HandleReadFromKMS(Ptr< Socket > socket)
Handle a packet received by the QKD application from KMS application.
std::string PacketToString(Ptr< Packet > packet)
Convert packet to string.
static uint32_t m_applicationCounts
void AppTransitionTree()
Transition tree of the application.
TracedCallback< const std::string &, Ptr< const Packet > > m_txKmsTrace
Traced Callback: transmitted packets to KMS.
void DataPacketReceived(const Ptr< Packet > &p, const Address &from, Ptr< Socket > socket)
Check for tcp segmentation of signaling packets received from KMS.
std::string GetPeerId()
Get peer application identifier.
std::vector< KMSPacket > m_queue_kms
void HandlePeerErrorToKMS(Ptr< Socket > socket)
Handle a connection error to KMS.
TracedCallback< const std::string &, Ptr< const Packet > > m_txSigTrace
Traced Callback: transmitted signaling packets.
void DoDispose() override
Destructor implementation.
std::unordered_map< Address, Ptr< Packet >, AddressHash > m_buffer_kms
Buffer for received packets(fragmentation)
void PrepareSocketToApp()
Prepare send socket to communicate with QKD Application.
TracedCallback< const std::string &, Ptr< const Packet > > m_txTrace
Traced Callback: transmitted data packets.
KeyStreamSession::Type PopHttpKmsRequest(std::string uri)
Pop HTTP request from the queue(mapping response)
EncryptionType
Encryption type.
AuthenticationType
Authentication type.
Simulation virtual time values and global simulation resolution.
Forward calls to a chain of Callback.
a unique identifier for an interface.
#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.
Hashing for the Address class.
size_t operator()(const Address &x) const
operator()
KeyStreamSession::Type scope
static const uint32_t packetSize
Packet size generated at the AP.