0% found this document useful (0 votes)
34 views14 pages

PART-B MANUALh

Hf

Uploaded by

Ratan Shikhari
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views14 pages

PART-B MANUALh

Hf

Uploaded by

Ratan Shikhari
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 14

PART-B

Q1. A ) Write a C/C++ program to implement the


data link layer framing methods. A) bit stuffing.
SOLUTION: #include<stdio.h>
#include<conio.h>

#include<string.h>

void main()

int a[20],b[30],i,j,k,count,n;

clrscr();

printf("enter frame length:");

scanf("%d",&n);

printf("enter input frame(0's&1's only):");

for(i=0;i<n;i++)

scanf("%d",&a[i]);

i=0;count=1;j=0;

while(i<n)

if(a[i]==1)

b[j]=a[i];

for(k=i+1;a[k]==1&&k<n&&count<5;k++)

{
j++; b[j]=a[k];

count++;

if(count==5)

j++;

b[j]=0;

i=k;

else {

b[j]=a[i];

i++;

j++;

printf("After stuffing the frame is:");

for(i=0;i<j;i++)

printf("%d",b[i]);

getch();

Output:

Enter the number of bits: 10


1

Data after stuffing: 10101111101

Q1.B) Write a C/C++ program to implement the data link


layer framing methods. B) Character stuffing
SOLUTION: //program for character stuffing

#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<process.h>

void main()

int i=0,j=0,n,pos; char a[20],b[50],ch;


clrscr();

printf("enter string:\n");

scanf("%s",&a);

n=strlen(a);

printf("enter position\n");

scanf("%d",&pos);

if(pos>n)

printf("invalid position,Enter again:");

scanf("%d",&pos);

printf("enter the character\n");

ch=getche();

b[0]='d';

b[1]='l';

b[2]='e';

b[3]='s';

b[4]='t';

b[5]='x';

j=6;

while(i<n)

if(i==pos-1)

b[j]='d';

b[j+1]='l';

b[j+2]='e';
b[j+3]=ch;

b[j+4]='d';

b[j+5]='l';

b[j+6]='e';

j=j+7;

if(a[i]=='d'&&a[i+1]=='l'&& a[i+2]=='e')

b[j]='d';

b[j+1]='l';

b[j+2]='e;

j=j+3;

b[j]=a[i];

i++;

j++;

b[j]='d';

b[j+1]='l';

b[j+2]='e';

b[j+3]='e';

b[j+4]='t';

b[j+5]='x';

b[j+6]='\0';

printf("\n frame after stuffing: \n");

printf("%s",b);

getch();
}

OUTPUT : Enter String: haiarchana


Enter position: 4
Enter the Character K
Frame after stuffing:
dlestxhaidlekdlearchanadleetx

Q2: Write a C/C++program to implement Distance


Vector Routing algorithm.
SOLUTION: : #include<stdio.h>
struct node
{
unsigned dist[20];
unsigned from[20];
}rt[10];
int main()
{
int costmat[20][20];
int nodes,i,j,k,count=0;
printf("\nEnter the number of nodes : ");
scanf("%d",&nodes);//Enter the nodes
printf("\nEnter the cost matrix :\n");
for(i=0;i<nodes;i++)
{
for(j=0;j<nodes;j++)
{
scanf("%d",&costmat[i][j]);
costmat[i][i]=0;
rt[i].dist[j]=costmat[i][j];//initialise
the distance equal to cost matrix
rt[i].from[j]=j;
}
}
do
{
count=0;
for(i=0;i<nodes;i++)//We choose arbitary vertex k
and we calculate the direct distance from the node i to k
using the cost matrix
//and add the distance from k to node j
for(j=0;j<nodes;j++)
for(k=0;k<nodes;k++)
if(rt[i].dist[j]>costmat[i][k]+rt[k].dist[j])
{//We calculate the minimum distance
rt[i].dist[j]=rt[i].dist[k]+rt[k].dist[j];
rt[i].from[j]=k;
count++;
}
}while(count!=0);
for(i=0;i<nodes;i++)
{
printf("\n\n For router %d\n",i+1);
for(j=0;j<nodes;j++)
{
printf("\t\nnode %d via %d Distance %d
",j+1,rt[i].from[j]+1,rt[i].dist[j]);
}
}
printf("\n\n");
getch();
}

OUTPUT: Enter the cost matrix :


0 2 7
2 0 1
7 1 0
For router 1
node 1 via 1 Distance 0
node 2 via 2 Distance 2
node 3 via 3 Distance 3
For router 2
node 1 via 1 Distance 2
node 2 via 2 Distance 0
node 3 via 3 Distance 1
For router 3
node 1 via 1 Distance 3
node 2 via 2 Distance 1
node 3 via 3 Distance 0
Q3) Write a C/C++ Program To Implement Stop and
Wait Flow Control Protocol.
SOLUTION :

#include<iostream>

#include <time.h>

#include <cstdlib>
#include<ctime>
#include <unistd.h>
using namespace std;
class timer {
private:
unsigned long begTime;
public:
void start() {
begTime = clock();
}
unsigned long elapsedTime() {
return ((unsigned long) clock() - begTime) / CLOCKS_PER_SEC;
}
bool isTimeout(unsigned long seconds) {
return seconds >= elapsedTime();
}
};
int main()
{
int frames[] = {1,2,3,4,5,6,7,8,9,10};
unsigned long seconds = 5;
srand(time(NULL));
timer t;
cout<<"Sender has to send frames : ";
for(int i=0;i<10;i++)
cout<<frames[i]<<" ";
cout<<endl;
int count = 0;
bool delay = false;
cout<<endl<<"Sender\t\t\t\t\tReceiver"<<endl;
do
{
bool timeout = false;
cout<<"Sending Frame : "<<frames[count];
cout.flush();
cout<<"\t\t";
t.start();
if(rand()%2)
{
int to = 24600 + rand()%(64000 - 24600) + 1;
for(int i=0;i<64000;i++)
for(int j=0;j<to;j++) {}
}
if(t.elapsedTime() <= seconds)
{
cout<<"Received Frame : "<<frames[count]<<" ";
if(delay)
{
cout<<"Duplicate";
delay = false;
}
cout<<endl;
count++;
}
else
{
cout<<"---"<<endl;
cout<<"Timeout"<<endl;
timeout = true;
}
t.start();
if(rand()%2 || !timeout)
{
int to = 24600 + rand()%(64000 - 24600) + 1;
for(int i=0;i<64000;i++)
for(int j=0;j<to;j++) {}
if(t.elapsedTime() > seconds )
{
cout<<"Delayed Ack"<<endl;
count--;
delay = true;
}
else if(!timeout)
cout<<"Acknowledgement : "<<frames[count]-1<<endl;
}
}while(count!=10);
return 0;
}

OUTPUT
Sender has to send frames : 1 2 3 4 5 6 7 8 9 10

Sender Receiver
Sending Frame : 1 Received Frame : 1
Acknowledgement : 1
Sending Frame : 2 ---
Timeout
Sending Frame : 2 Received Frame : 2
Acknowledgement : 2
Sending Frame : 3 Received Frame : 3
Acknowledgement : 3
Sending Frame : 4 Received Frame : 4
Acknowledgement : 4
Sending Frame : 5 Received Frame : 5
Acknowledgement : 5
Sending Frame : 6 Received Frame : 6
Acknowledgement : 6
Sending Frame : 7 Received Frame : 7
Delayed Ack
Sending Frame : 7 Received Frame : 7 Duplicate
Delayed Ack
Sending Frame : 7 ---
Timeout
Sending Frame : 7 Received Frame : 7 Duplicate
Acknowledgement : 7
Sending Frame : 8 ---
Timeout
Delayed Ack
Sending Frame : 7 Received Frame : 7
Acknowledgement : 7
Sending Frame : 8 Received Frame : 8
Acknowledgement : 8
Sending Frame : 9 Received Frame : 9
Delayed Ack
Sending Frame : 9 ---
Timeout
Sending Frame : 9 Received Frame : 9 Duplicate
Delayed Ack
Sending Frame : 9 Received Frame : 9 Duplicate
Acknowledgement : 9
Sending Frame : 10 ---
Timeout
Sending Frame : 10 Received Frame : 10
Acknowledgement : 10

4 Write a C/++ Program for ERROR detecting code using CRC-CCITT (16bit).

SOLUTION: #include<stdio.h>
#include<conio.h>

int main(void)
{
int data[50],div[16],rem[16];
int datalen, divlen, i,j,k;
int ch;
clrscr();
printf("Enter the data: ");
i = 0;
while((ch = fgetc(stdin)) != '\n')
{
if(ch == '1')
data[i] = 1;
else
data[i] = 0;
i++;
}
datalen = i;
printf("\nEnter the divisor: ");
i = 0;
while((ch = fgetc(stdin)) != '\n')
{
if(ch == '1')
div[i] = 1;
else
div[i] = 0;
i++;
}
divlen = i;
for(i = datalen ; i < datalen + divlen - 1 ; i++)
data[i] = 0;
datalen = datalen + divlen - 1;
for(i = 0 ; i < divlen ; i++)
rem[i] = data[i]; k = divlen-1;
while(k < datalen)
if(rem[0] == 1)
{
for(i = 0 ; i < divlen ; i++)
rem[i] = rem[i] ^ div[i];
}
Else
{
if(k == datalen-1)
break;
for(i = 0 ; i < divlen-1 ; i++)
{
rem[i] = rem[i+1];
printf("%d",rem[i]);
}
rem[i] = data[++k];
printf("%d\n",rem[i]);
}
j=1;
for(i = datalen - divlen + 1 ; i < datalen ; i++)
{
data[i] = rem[j++];
}
printf("\nThe data to be sent is\n");
for(i = 0 ; i < datalen ; i++)
printf("%d",data[i]);
getch();
return 0;
}
OUTPUT: Enter the data: 10101111
Enter the divisor: 1011
0011
0111
1111
1001
0100
1000
0110
The data to be sent is 10101111110

Q5) Write a C/C++ Program for Congestion control using Leaky Bucket
Algorithm..

SOLUTION : #include<stdio.h>

#include<stdlib.h>
#include<unistd.h>

#define NOF_PACKETS 10

int rand(int a)
{
int rn = (random() % 10) % a;
return rn == 0 ? 1 : rn;
}

int main()
{
int packet_sz[NOF_PACKETS], i, clk, b_size, o_rate, p_sz_rm=0, p_sz,
p_time, op;
for(i = 0; i<NOF_PACKETS; ++i)
packet_sz[i] = rand(6) * 10;
for(i = 0; i<NOF_PACKETS; ++i)
printf("\npacket[%d]:%d bytes\t", i, packet_sz[i]);
printf("\nEnter the Output rate:");
scanf("%d", &o_rate);
printf("Enter the Bucket Size:");
scanf("%d", &b_size);
for(i = 0; i<NOF_PACKETS; ++i)
{
if( (packet_sz[i] + p_sz_rm) > b_size)
if(packet_sz[i] > b_size)/*compare the packet siz with bucket size*/
printf("\n\nIncoming packet size (%dbytes) is Greater than bucket
capacity (%dbytes)-PACKET REJECTED", packet_sz[i], b_size);
else
printf("\n\nBucket capacity exceeded-PACKETS REJECTED!!");
else
{
p_sz_rm += packet_sz[i];
printf("\n\nIncoming Packet size: %d", packet_sz[i]);
printf("\nBytes remaining to Transmit: %d", p_sz_rm);
p_time = rand(4) * 10;
printf("\nTime left for transmission: %d units", p_time);
for(clk = 10; clk <= p_time; clk += 10)
{
sleep(1);
if(p_sz_rm)
{
if(p_sz_rm <= o_rate)/*packet size remaining comparing with output
rate*/
op = p_sz_rm, p_sz_rm = 0;
else
op = o_rate, p_sz_rm -= o_rate;
printf("\nPacket of size %d Transmitted", op);
printf("----Bytes Remaining to Transmit: %d", p_sz_rm);
}
else
{
printf("\nTime left for transmission: %d units", p_time-clk);
printf("\nNo packets to transmit!!");
}
}
}
}
}

OUTPUT: Enter The Bucket Size 5


Enter The Operation Rate 2
Enter The No. Of Seconds You Want To Stimulate 3
Enter The Size Of The Packet Entering At 1 sec 5
Enter The Size Of The Packet Entering At 1 sec 4
Enter The Size Of The Packet Entering At 1 sec 3
Second|Packet Recieved|Packet Sent|Packet Left|Packet Dropped|
----------------------------------------------------
1 5 2 3 0
2 4 2 3 2
3 3 2 3 1
4 0 2 1 0
5 0 1 0 1

You might also like