In: Computer Science
In Java, C, C++ or Python
Develop a simulation program to simulate an 8-port Ethernet switch. The switch initially has no knowledge about the hosts connected to each port. It learns frame addresses and stores-and-forwards the frames. The input text file "in.txt" contains information of the incoming frames, one frame per line. There are 4 pieces of data per line: frame ID, arrival port, frame source address, and frame destination address. The frames arrive at the switch in the order of which they appear in the input file. Destination address "X" indicate a broadcast frame. The output text file "out.txt" has 8 lines. Each line lists all the frames departing from each port, Here is an example:
"in.txt" contains 5 incoming frames:
F1 P2 B--A
F2 P6 D--C
F3 P5 E--B
F4 P7 F--D
F5 P6 D--X
"out.txt" should list the departing frames on each port:
P1: F1 F2 F5
P2: F2 F3 F5
P3: F1 F2 F5
P4: F1 F2 F5
P5: F1 F2 F5
P6: F1 F4
P7: F1 F2 F5
P8: F1 F2 F5
please output out.txt for this input file input.txt
F1 P1 A--G F2 P1 B--H F3 P1 C--I F4 P2 D--E F5 P2 D--F F6 P7 G--A F7 P8 H--B F8 P8 I--C F9 P4 E--D F10 P4 F--D F11 P7 G--X F12 P1 B--G F13 P2 D--G F14 P4 E--G F15 P8 H--G F16 P1 A--D F17 P1 B--E F18 P1 C--F F19 P2 D--H F20 P8 H--I
CONSIDERING THE PARAMETERS FROM QUESTION WE SHOW THE OUTPUT AS:
C program:
#include <stdio.h>
int main(){
/*
* INPUT FILE : in.txt
* OUTPUT FILE : out.txt
*/
char frameID;
char port;
char source;
char destination;
//Mapping of port - source Address
//if portMap[i] contains character 'A' means, port Pi is the
destination of device A
char portMap[8];
//output port - frame number mapping
//out[i][0] --> contains total number of outgoing frames from
port Pi
//followed by ids of outgoing frames.
//if out[i][j] = k means, frame Fk went out of port Pi in sequence
j
char out[8][100];
FILE *ifile, *ofile;
int i, j;
bool success;
//initializing portMap to unknown and out frames
for(i = 0; i < 8; i ++){
portMap[i] = '*';
out[i][0] = '1';
}
//open input file
ifile = fopen("C:\\Users\\Retheesh\\Desktop\\test\\in.txt",
"r");
//iterate throughout the file inputs
//read line by line
while(fscanf(ifile, "F%c P%c %c--%c\n", &frameID, &port,
&source, &destination) != EOF){
//checking the source address and upidating in portMap
if(portMap[port - '1'] == '*')
portMap[port - '1'] = source;
//broadcast frame received. forwarding to all ports
if(destination == 'X'){
for(int i = 0; i < 8; i++){
out[i][out[i][0] - '0'] = frameID;
out[i][0]++;
}
continue;
}
//forwarding input frame from port Pi only to correct destination
port
//if destination port is known
success = false;
for(int i = 0; i < 8; i++){
if(portMap[i] == destination){
out[i][out[i][0] - '0'] = frameID;
out[i][0]++;
success = true;
break;
}
}
//continue to next input
if(success)
continue;
//destination port is unknown.
//forwarding input frame from port Pi to all other ports except
Pi
for(int i = 0; i < 8; i++){
if(portMap[i] != source){
out[i][out[i][0] - '0'] = frameID;
out[i][0]++;
}
}
}
fclose(ifile);
//open output file
ofile = fopen("C:\\Users\\Retheesh\\Desktop\\test\\out.txt",
"w");
//writing output to file
for(i = 0; i < 8; i++){
fprintf(ofile, "P%d: ", i + 1);
printf("P%d: ", i + 1);
for(j = 1; j < out[i][0] - '0'; j++){
printf("F%c ", out[i][j]);
fprintf(ofile, "F%c ", out[i][j]);
}
fprintf(ofile, "\n");
printf("\n");
}
//close output file
fclose(ofile);
return 0;
}
PLEASE UPVOTE ITS VERY NECESSARY FOR ME