/* * Bridge simulator */ #define NUM_OF_ADDRESSES 1000 #define SEG1_MAX 100 #define SEG2_MAX 200 #include #include void create_traffic (void); /* * * Addresses 1-100 are on segment 1 * Addresses 101-200 are on segment 2 * */ int main(int argc, char **argv) { FILE *SEG1; FILE *SEG2; int i,addr,routed_to_1,routed_to_2; int stayed_on_1,stayed_on_2,invalid_on_1,invalid_on_2; create_traffic(); SEG1 = fopen("segment1.dat","r"); SEG2 = fopen("segment2.dat","r"); routed_to_1 = 0; routed_to_2 = 0; stayed_on_1 = 0; stayed_on_2 = 0; invalid_on_1 = 0; invalid_on_2 = 0; for (i=1;i<=NUM_OF_ADDRESSES;i++) { /* from address in segment 1 */ fscanf(SEG1,"%d",&addr); if (addr > 0 && addr <= SEG1_MAX) { stayed_on_1++; printf("%3d: remains on segment 1\n",addr); } else if (addr > SEG1_MAX && addr <= SEG2_MAX) { routed_to_2++; printf("%3d: routed to segment 2 from segment 1\n",addr); } else { invalid_on_1++; printf("%3d: not a valid address\n",addr); } /* from address in segment 2 */ fscanf(SEG2,"%d",&addr); if (addr > 0 && addr <= SEG1_MAX) { routed_to_1++; printf("%3d: routed to segment 1 from segment 2\n",addr); } else if (addr > SEG1_MAX && addr <= SEG2_MAX) { stayed_on_2++; printf("%3d: remains on segment 2\n",addr); } else { invalid_on_2++; printf("%3d: not a valid address\n",addr); } } fclose(SEG1); fclose(SEG2); printf("\n\n***Stats:***\n"); printf("%d frames read from segment 1\n",NUM_OF_ADDRESSES); printf("Routed to segment 2 from segment 1: %d/%d\n",routed_to_2,NUM_OF_ADDRESSES); printf("Stayed on segment 1: %d/%d\n",stayed_on_1,NUM_OF_ADDRESSES); printf("Invalid from segment 1: %d/%d\n\n",invalid_on_1,NUM_OF_ADDRESSES); printf("%d frames read from segment 2\n",NUM_OF_ADDRESSES); printf("Routed to segment 1 from segment 2: %d/%d\n",routed_to_1,NUM_OF_ADDRESSES); printf("Stayed on segment 2: %d/%d\n",stayed_on_2,NUM_OF_ADDRESSES); printf("Invalid from segment 2: %d/%d\n",invalid_on_2,NUM_OF_ADDRESSES); return 0; } void create_traffic (void) { FILE *SEG1 = fopen("segment1.dat","w"); FILE *SEG2 = fopen("segment2.dat","w"); int i; int randnum; for (i=0;i<=NUM_OF_ADDRESSES;i++) { randnum = rand() % 200; (void) fprintf(SEG1,"%d\n",randnum); fflush(SEG1); randnum = rand() % 200; (void) fprintf(SEG2,"%d\n",randnum); fflush(SEG2); } fclose(SEG1); fclose(SEG2); }