[Planetlab-users] Raw socket's functions stripped?

Michal Szymaniak michal at cs.vu.nl
Tue Jul 19 16:37:23 EDT 2005


>>  Could you also check whether you can see a complete TCP handshake?
>>  I can only see SYN and ACK (but not SYNACK) when opening a TCP connection
>>  to a server running on a planetlab node.
>
> Here's a snippet of a "tethereal -i vnet" run on planetlab-1 while running 
> "curl http://www.yahoo.com/":
>
> [..]

Yeah, I observe similar results when using tpcdump. I actually identified 
the problem: it seems that it somehow matters what sll.sll_protocol value
is used when binding the socket. If that value is htons(ETH_P_IP), as you
recommend, then only outgoing packets are retrieved. However, if I set it
to htons(ETH_P_ALL), then I can read packets transmitted in either
direction. Here is the code:

      if ((sock=socket(PF_PACKET,SOCK_DGRAM,htons(ETH_P_ALL)))==-1) fatal("monitor:socket");
      memset(&sll,0,sizeof(sll));
      sll.sll_family = PF_PACKET;
      sll.sll_protocol = htons(ETH_P_ALL); /* <<< HERE <<< */
      sll.sll_ifindex = ifr.ifr_ifindex;
      if (bind(sock,(struct sockaddr*)&sll,sizeof(struct sockaddr_ll))==-1) fatal("monitor:bind");

It is not entirely clear why it happens, and it can actually qualify as a 
bug. But anyway, it is good to finally have it working properly.

Thanks,
M.



More information about the Users mailing list