Forum Discussion

Paul_109877's avatar
Paul_109877
Icon for Nimbostratus rankNimbostratus
Nov 20, 2013

RTSP Load balance

Hi I need to write an irule to check the rtsp request, and then load balancing to different pools. I wrote a testing rule, but is not working. I'm using tmos 10.2.x Anyone can help?

 

Thanks!

 

rtsp://VS_IP/abc.sdp --> Pool_abc

 

rtsp://VS_IP/def.sdp --> Pool_def

 

when RTSP_REQUEST {

 

if {([RTSP::uri] ends_with "cam01.sdp")}{

 

pool pool_cam01

 

}

 

elseif {([RTSP::uri] ends_with "cam02.sdp")}{

 

pool pool_cam02

 

} }

 

The problem here is that I'm receiving this messages in LTM log

 

"TCL error: IRULE_LB_RTSP address in use (line 1) invoked from within "pool pool_cam01"

 

and I don't know how to proceed. Any help?

 

3 Replies

  • Richard__Harlan's avatar
    Richard__Harlan
    Historic F5 Account

    My guess is the request you are seeing is from a existing connection that has been LB to a different pool. On the next RTSP request you are trying to change the pool when then flow has been established. Once a flow is setup you will have to run a LB::detach then you will be able to pick the pool.

     

  • Thanks Richard, in deed, it seems to be the behavior, the problems, how can I catch and make a decision using the section "/cam01.sdp" in URL "rtsp://VS_IP/cam01.sdp" before the request is balanced?

     

    I really appreciate your help,

     

  • Richard__Harlan's avatar
    Richard__Harlan
    Historic F5 Account

    First and I am guessing this is what is happening do you have Source persist enabled? This will push the request to the server in the source persist table before you ever see the request.

     

    If you do not I did find this Dev central posting from 2009 that show the same issue

     

    https://devcentral.f5.com/questions/-address-in-use-tcl-error

     

    There they look for the [IP::server_addr] with a catch statement, if the catch statement fires then the request has not been load balanced if it has then you fire off a LB::detach and then use the pool command.