#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/netanim-module.h"
#include "ns3/node.h"
#include "ns3/names.h"
#include "ns3/packet.h"
#include "ns3/ipv4-header.h"
#include "_callback.h"
#include "ns3/gnuplot.h"

using namespace ns3;
using namespace std;

extern RTT_t rtt;
extern packetCount_t pc;
extern simulationTime_t st;
extern datasets_t ds;

void n0_tx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{
	if (packet->GetSize()>=100)
	{
		pc.n0++;
		st.n0 = Simulator::Now().GetSeconds();
		rtt.n0 = Simulator::Now().GetSeconds();
	}
}
void n0_rx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{
	if (packet->GetSize() > 100)
	{
		rtt.n0 = (Simulator::Now().GetSeconds() - rtt.n0) * 1000;
		if (pc.n0 > 1)
			ds.n0.Add(st.n0, rtt.n0);	
	}
}
void s_tx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{
	
	if (packet->GetSize()>=100)
	{
		pc.s++;
		st.s = Simulator::Now().GetSeconds();
		rtt.s = Simulator::Now().GetSeconds();
	}
}
void s_rx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{
	
	if (packet->GetSize() > 100)
	{
		rtt.s = (Simulator::Now().GetSeconds() - rtt.s) * 1000;
		if (pc.s > 1)
			ds.s.Add(st.s, rtt.s);	
	}
}
void n2_tx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{

}
void n2_rx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{

}
void n3_tx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{

}
void n3_rx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{

}
void n4_tx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{

}
void n4_rx(string path, Ptr<Packet const> packet, Ptr<Ipv4> ipv4, unsigned int a)
{

}

