Ok, never mind about the prev. code, I have changed it to this code and is working almost fine, but I'm not getting any Proto Type except IP (0800) or something like 9000 that I have no clue of.
I am wondering why I could not see any ARP packets.
Any advice.
Code:
int print_ether_hdr(const unsigned char *pkt_ptr,unsigned int length)
{
unsigned short DST_MAC[3];
unsigned short SRC_MAC[3];
register unsigned short buffer=0x00;
register unsigned short PKT_TYPE;
register const unsigned short IP=0x800;
register const unsigned short ARP=0x806;
int i;
printf("\n========New Etherenet Packet===========\n");
printf(".........(Ethernet Header)..............\n");
//Extract the Dest. MAC Address
for (i=0;i<3;i++)
{
buffer=*pkt_ptr << 8;
*pkt_ptr++;
buffer |=*pkt_ptr;
*pkt_ptr++;
DST_MAC[i]=buffer;
}
// Print the Dest. MAC
printf("Dest. MAC Addr : %04x%04x%04x\n",DST_MAC[0],DST_MAC[2],DST_MAC[2]);
//Extract the Src. MAC Address
for (i=0;i<3;i++)
{
buffer=*pkt_ptr << 8;
*pkt_ptr++;
buffer |=*pkt_ptr;
*pkt_ptr++;
SRC_MAC[i]=buffer;
}
// Print the Src. MAC
printf("Source MAC Addr: %04x%04x%04x\n",SRC_MAC[0],SRC_MAC[1],SRC_MAC[2]);
//Extract the Ethernet Type
buffer=*pkt_ptr<<8;
*pkt_ptr++;
buffer =buffer | *pkt_ptr;
PKT_TYPE=buffer;
*pkt_ptr++;
// Print Ethernet packet Type.
// if (PKT_TYPE>0x5ee)
printf("Packet Type/Len : %04x\n",PKT_TYPE);
// else
// printf(" Data Packet Lengeth : %04x\n",PKT_TYPE);
printf("----------------------------------------\n");
// Decide if the packet is IP or ARP, then print it.
switch (PKT_TYPE)
case IP: print_ip_pkt(pkt_ptr,length);
case ARP:print_ip_pkt(pkt_ptr,length);
default :printf("Unknown packet type");
return 0;
};