[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
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)
      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)
      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("", (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.

Here is the client:
Here is the itp vals for faddr and fport
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.


More information about the tproxy mailing list