All pastes #236184 Raw Edit

Stuff

public text v1 · immutable
·published 2006-11-03 17:49 UTC
rendered paste body
#include"dccp.h"
#include<math.h>

struct ip pkt;
struct sockaddr_in host,src,destn;
int sock,len;

float pktrate=1;

int seqno=5631;
float rtt=0,sample_rtt=0;
float lossrate;

struct timeval t;
struct timezone tz;

void addressbinder()
{
        host.sin_addr.s_addr=inet_addr("127.0.0.3");
        destn.sin_addr.s_addr=inet_addr("127.0.0.6");
        host.sin_family=destn.sin_family=AF_INET;
        len=sizeof(src);
        if(bind(sock,(struct sockaddr*)&host,sizeof(host))<0)
                perror("bind");
}

void conncloser()
{
        pkt.packet.dccphead.type=5;
        pkt.packet.dccphead.seqno=++seqno;

        if(sendto(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&destn,sizeof(destn))<0)
                perror("sendto");

        printf("\n DCCP-Close Req Packet sent with seqno %d\n",seqno);

        if(recvfrom(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&src,&len)<0)
                perror("recvfrom");

        printf("\n DCCP-Close Packet Received \n");

        printf("\n Connection Closed \n");
}


void rttcalculator()
{
        long difference=0;

        difference=(-pkt.packet.dccphead.optn.timestamp.tv_sec+t.tv_sec)*1000000+(-pkt.packet.dccphead.optn.timestamp.tv_usec+t.tv_usec);

        float k=(float)(difference/=1000);

        if(rtt==0)
                rtt=difference;
        else
        {
                rtt=(0.85*rtt)+(0.15*difference);
        }

        printf("\n The sample RTT is \n",difference);
        printf("\n The mean RTT is \n",rtt);

}


void pktratecalculator()
{

        float k=sqrtf(2*pktrate*lossrate);
	float a=rtt*k;
	float l=sqrtf(3*pktrate*lossrate*8);
        float b=3*l*lossrate*(pow(1+(32*lossrate),2));
        float c=sizeof(struct ip)/(a*b);
        pktrate=(int)c;

        printf("\n The pkt rate is %d \n",pktrate);
}


void conn_establish()
{
	pkt.packet.dccphead.type=0;
	pkt.packet.dccphead.seqno=++seqno;
	pkt.packet.dccphead.optn.ccid=3;
	
	if(gettimeofday((&t),&tz)<0)
		perror("gettimeofday");
	
	pkt.packet.dccphead.optn.timestamp=t;

	if(sendto(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&destn,sizeof(destn))<0)
                        perror("sendto");

	printf(" \n DCCP-Request Packet sent to DCCP Server addressed 127.0.0.12 \n");

	printf(" \n Feature Negotiation Started \n");

        printf(" \n The CCID value sent for negotiation with Server is 3 i.e.,TCP Friendly Rate Control Mechanism \n");

	if(recvfrom(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&src,&len)<0)
                        perror("recvfrom");

	if(gettimeofday((&t),&tz)<0)
                perror("gettimeofday");


	printf(" \n DCCP-Response Packet Received \n ");

	printf(" \n Feature Negotiation Over \n");

	printf(" \n The CCID Value of 3 has been accepted by both sides for any further communication \n");


	rttcalculator();
}


void pkt_transmission()
{
	int i;
	char choice;
	while(1)
	{		
		for(i=0;i<pktrate;i++)
		{	
			pkt.packet.dccphead.type=2;
			pkt.packet.dccphead.seqno=++seqno;
			
			if(gettimeofday((&t),&tz)<0)
                		perror("gettimeofday");

			pkt.packet.dccphead.optn.timestamp=t;
		
			

			if(sendto(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&destn,sizeof(destn))<0)
                        	perror("sendto");
			
			printf("\n DCCP-Data Packet sent with seqno %d\n",seqno);

		}

		if(recvfrom(sock,&pkt,sizeof(pkt),0,(struct sockaddr*)&src,&len)<0)
        		perror("recvfrom");
	
        	if(gettimeofday((&t),&tz)<0)
        		perror("gettimeofday");
	
		printf("\n DCCP-Ack Packet Received with seq no %d and ack no %d \n",pkt.packet.dccphead.ackno,seqno);
		lossrate=pkt.packet.dccphead.optn.lossrate;
		rttcalculator();
		pktratecalculator();	

		printf("\n Do u wanna close the connection \n");
		scanf("%c",&choice);
		
		if(choice=='y')
		{
			conncloser();
			break;
		}
	}
}	
		
























	






















	


	
	
int main()
{	
	
        if((sock=socket(AF_INET,SOCK_RAW,100))==-1)
                perror("socket");



        addressbinder();

	conn_establish();

	pkt_transmission();	
	
	close(sock);
	
	return 0;
}