C program for calculating IP header checksum
#include<stdio.h> /*program for calculating header checksum*/ int main() { int i=0, binary_index=0, temp, j, b_temp[17], binary[17]; unsigned long int sum=0; printf("\nEnter packet data\n"); for(i=0;i<10;i++) { scanf("%x",&temp); sum=sum+temp; } //finding binary of sum while( sum!=0 ) { int bit; bit=sum%2; binary[binary_index]=bit; binary_index++; printf(" %d ", bit); sum=sum/2; } //reversing for(i=0;i<=binary_index;i++) { b_temp[i]=binary[i]; } j=0; for(i=binary_index;i>=0;i--) { binary[j] = b_temp[i]; j++; } printf("\n\nAns before adding carry bit:\n"); for(i=0;i<=binary_index;i++) { printf(" %d",binary[i]); } printf("\n\nAns after adding carry bit:\n"); if(binary_index>16) { // adding carry bit temp=1; for(i=binary_index;i>1;i--) { if(binary[i]==1 && temp==1) {binary[i]=0;temp=1;} else if(binary[i]==0 && temp==1) {binary[i]=1;temp=0;break;} else if(binary[i]==0 && temp==0) {binary[i]=0;temp=0;break;} else if(binary[i]==1 && temp==0) {binary[i]=1;temp=0;break;} } for(i=2;i<=binary_index;i++) { printf(" %d",binary[i]); } // complementing ans for(i=0;i<=binary_index;i++) { if(binary[i]==0) binary[i]=1; else if(binary[i]==1) binary[i]=0; } printf("\n\nAns after 1's complement:\n"); for(i=2;i<=binary_index;i++) { printf(" %d",binary[i]); } } else { // complementing ans for(i=0;i<=binary_index;i++) { if(binary[i]==0) binary[i]=1; else if(binary[i]==1) binary[i]=0; } printf("\n\nAns after 1's complement:\n"); for(i=2;i<=binary_index;i++) { printf(" %d",binary[i]); } }}
Output of Program :
student@ccf58-OptiPlex-755:~$ gcc ip-header.c
student@ccf58-OptiPlex-755:~$ ./a.out
Enter packet data
1500
0028
1000
2600
C90A
0101
C90A
010F
0000
0000
0 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 1
Ans before adding carry bit:
1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 0
Ans after adding carry bit:
1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1
Ans after 1's complement:
0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0
Comments
Post a Comment