[tproxy] Invalid Arguement for setsockopt

Sai Bathina sai.bathina at gmail.com
Tue Dec 20 00:08:46 CET 2005


I am trying to use the tproxy w/ 2.6.14 kernel w the 2.0.3 patch version.
I am running one of the examples(foreign-tcp-connect.c) provided with
patch and test the tproxy.
I am seeing that I am getting an Invalid Arguement for setsockopt for
TPROXY_ASSIGN.
I have tried this compiling tproxy into the kernel as well as loading
them as modules.


This is the code snippet:

  sock = socket(AF_INET, SOCK_STREAM, 0);
  if (sock == -1)
    {
      perror("socket");
      return -1;
    }

  /* check tproxy version*/
  itp.op = TPROXY_VERSION;
  itp.v.version = 0x02000000;
  if (setsockopt(sock, SOL_IP, IP_TPROXY, &itp, sizeof(itp)) == -1)
    {
      perror("setsockopt(SOL_IP, IP_TPROXY, TPROXY_VERSION)");
      return -1;
    }

  /* bind to local address */
  sin.sin_family = AF_INET;
  sin.sin_addr.s_addr = INADDR_ANY;
  //inet_aton(argv[1], &sin.sin_addr);
  sin.sin_port = htons(9999);

  if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) == -1)
    {
      perror("bind");
      return -1;
    }

  listen(sock, 5);
  clilen = sizeof(cli_addr);
  newsockfd = accept(sock,(struct sockaddr *) &cli_addr,&clilen);
  if (newsockfd < 0)
    error("ERROR on accept");

  printf("Here is the client:
%s:%i\n",inet_ntoa(cli_addr.sin_addr.s_addr), ntohs(cli_addr.sin_port)
);



  /* assign foreign address */
  itp.op = TPROXY_ASSIGN;

  memcpy( &itp.v.addr.faddr, &cli_addr.sin_addr, sizeof( struct in_addr ) );


  /*
   Tried with hardcoding foreign ip, did not work
   inet_aton("172.16.66.127", (struct in_addr *) &itp.v.addr.faddr);
  */

  /*itp.v.addr.fport = htons(2000);*/
  itp.v.addr.fport = cli_addr.sin_port;

  printf("Here is the itp vals for faddr and fport
%s:%i\n",inet_ntoa(itp.v.addr.faddr), ntohs(itp.v.addr.fport) );

  if (setsockopt(sock, SOL_IP, IP_TPROXY, &itp, sizeof(itp)) == -1)
    {
      perror("setsockopt(SOL_IP, IP_TPROXY, TPROXY_ASSIGN)");
      return -1;
    }


When I run the server with the above code in full and try to connect
with a client it gives me the following output.


./fserver
Here is the client: 172.16.66.127:41458
Here is the itp vals for faddr and fport 172.16.66.127:41458
setsockopt(SOL_IP, IP_TPROXY, TPROXY_ASSIGN): Invalid argument

I am not able to figure out what the issue is here. Any help in this
regards will be greatly appreciated.


Thanks


More information about the tproxy mailing list