Forum Discussion

Joe_Sabek_47241's avatar
Joe_Sabek_47241
Historic F5 Account
Oct 31, 2007

tcp::collect problems

Given this irule:


when CLIENT_ACCEPTED {
    tcp::collect
}
when CLIENT_DATA {
  . ....process tcp payload.....
   tcp::release
   tcp::collect
}
when SERVER_CONNECTED {
   tcp::collect
}
when SERVER_DATA {
     ..........process data...........
     tcp::release
    tcp::connect
}

We are facing a problem where a customer client/server test suite is not able to send data when the iRule is applied, but it can when its not. Yet with another client/server test suite ( one I wrote for testing this iRule) it works without any problem. It also works if you telnet to the port and send data through it.

It seems that when the iRule is applied, the customer suite opens the connection, but never sends any data. Looking at the stats, CLIENT_DATA is never being called and a server connection is not being opened. (All the servers are up) Further looking at dumps show that when the iRule is not applied, if a client connects to the VIP a back end server connection is opened to the server, yet if the iRule is applied no connection is opened.

What could prevent CLIENT_DATA from being called? If both my custom client/server works and telnet works, then what could be different in the other client's socket? Is it possible they are waiting for a connection open/ready to be sent from the server? And if so is there a way to make sure a connection is opened to the server before calling tcp::collect on the client side?

  • Colin_Walker_12's avatar
    Colin_Walker_12
    Historic F5 Account
    If your custom monitor and more importantly telnet are working, this sounds like an issue with the test suite that's failing.

     

     

    As for why this is failing, it could very well be that the particular test suite is waiting for some kind of message once the connection is established that the server is sending but the iRule isn't. I can't be sure, it could be several things.

     

     

    If standard tests via telnet are functioning properly, though, it sounds like some additional requirement of the failing test suite.

     

     

    Colin
  • Patrick_Chang_7's avatar
    Patrick_Chang_7
    Historic F5 Account
    I would try specifying a lengtrh in the TCP::collect statement. BTW, isn't the TCP in TCP::collect case sensitive?