Hi, Guibin, Your example with SO_LINGER is not relevant as this is the SO_LINGER option and not the generic IP_OPTION. Please take a look at the ping implementation: http://www.linux-ipv6.org/gitweb/gitweb.cgi?p=gitroot/iputils.git;a=blob;f=ping.c;h=c0366cdacd626dde1669bf2d97588eb7c6ece3fd;hb=HEAD You have there: if (options & F_TIMESTAMP) { 492 memset(rspace, 0, sizeof(rspace)); 493 rspace[0] = IPOPT_TIMESTAMP; 494 rspace[1] = (ts_type==IPOPT_TS_TSONLY ? 40 : 36); 495 rspace[2] = 5; So for the type, byte 0, you have IPOPT_TIMESTAMP and for the length, you have 40 or 36 (It depends on ts_type) Best Regards, Rami Rosen http://ramirose.wix.com/ramirosen On Sat, Dec 14, 2013 at 3:00 AM, Guibin(Bill) Tian <gbtian@xxxxxxxxx> wrote: > Hi, maybe it's a naive question. But I am confused here. > > For the options field of an IP header, as for the data in this field, > according to document and the code in the method of "ip_options_compile", > the first byte is the options type data and the second byte is the length > of the option. But I traced back the method of "ip_options_get_from_user", > there is no place that assign these two values to the __data field. > > I checked some example of socket API "setsockopt", it also just converts the > target options data pointer into a char * pointer and passes down to > "ip_options_get_from_user", still it doesn't set these two values. > > Can anyone help me on this? Because I am trying to add my own options to IP > header at the IP layer for some experiment purposes. > > > struct linger linger = { 0 }; > linger.l_onoff = 1; > linger.l_linger = 30; > status = setsockopt(serverSocket, > SOL_SOCKET, SO_LINGER, > (const char *) &linger, > sizeof(linger)); > > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies@xxxxxxxxxxxxxxxxx > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies