Hello, Thanks for your answer, my question is why when I read from the buffer data is already in host byte order and not in network byte order. Thanks Pietro Paolini. From: Mandeep Sandhu [mailto:mandeepsandhu.chd@xxxxxxxxx] Sent: sabato 13 ottobre 2012 05:30 To: Pietro Paolini Cc: kernelnewbies@xxxxxxxxxxxxxxxxx Subject: Re: Network Byte order not reached reading from a sock RAW On Oct 12, 2012 9:36 PM, "Pietro Paolini" <P.Paolini@xxxxxxxxxxxxxxxxx> wrote: > > Hello, > > I am struggling with the byte order question on a x86_32 arch, I am doing some modifications on a program which actually works fine on a MIPS arch. > > I do a reading from a RAW socket in this way: > > /* Configure socket */ > if ((fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP)) < 0) { > perror("Error on socket creation, exit"); > exit(1); > } > .... > if (setsockopt(fd, IPPROTO_IP, IP_PKTINFO, (void *)&va, sizeof(va))) { > perror("Error on setsockopt, exit"); > exit(1); > } > va = 0; > .... > .... > struct msghdr mhdr; > struct __in_pktinfo *pktinfo = NULL; > ... > ... > nrd = recvmsg(env->mrouter_fd, &mhdr, 0); > ... > ip = (struct iphdr *)iov.iov_base; > > When I print the saddr (or daddr) of the received ip packet it is printed as host byte order instead of what I am expecting, the network byte order. I can just use the htonl() family functions for solve the problem but I would like understand if it is the normal behavior or if there is an issues on my code, or if the device driver of my NIC can influence the question. I think you should use ntoh*() functions when accessing data rx'ed from the n/w. Network byte order is big endian and your host is little endian, so you'll have convert it to the right order before accessing. You should use hton*() functions when tx'ing data. CMIIW. HTH, -mandeep > Many thanks, > Pietro. > > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@xxxxxxxxxxxxxxxxx > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies