Supporting RTSP-UDP
Hi, I'm relatively new to F5 so please bare with me. My company is using F5's BIGIP v12.1.1 My organization is attempting to support RTSP protocol via F5. RTSP works much like FTP where there is a control and data channel - the control channel negotiates the UDP session params (ips, ports, etc.) and data is transferred over UDP. Now I've tried applying the RTSP profile on the relevant VS (the naive solution) which did not work. Then I proceeded to writing an iRule which reads the negotiation information into variables and attempts to open a sub-session using relate_server function - seems to be a problem with relate_server: when SERVER_CONNECTED { log "rtsp: Test_iRule2 connection from [IP::client_addr]:[TCP::client_port]. \ Mapped [serverside {IP::local_addr}]:[serverside {TCP::local_port}] \ -> [IP::server_addr]:[serverside {TCP::remote_port}]" } when RTSP_RESPONSE { set mark "mark1" log local0. "$mark: received RTSP request" if { [RTSP::header value "Transport"] ne "" && [RTSP::header value "Transport"] contains "server_port" } { set transport [string tolower [RTSP::header value "Transport"]] log local0. "$mark: 0.1 $transport" set ::client_addr [IP::client_addr] set ::server_addr [IP::server_addr] set ::snat_addr [IP::local_addr] set ::client_port [findstr $transport "client_port=" 12 ";"] set ::server_port [findstr $transport "server_port=" 12 ";"] set fields [split $::client_port "-"] log local0. "$mark:client_list: $fields" foreach field $fields { log local0. "$mark: client field list returned $field" } set ::client_port1 [lindex $fields 0] set ::client_port2 [lindex $fields 1] log local0. "$mark: client_port1: $::client_port1 client_port2: $::client_port2" set fields [split $::server_port "-"] log local0. "$mark:server_list: $fields" foreach field $fields { log local0. "$mark: server field list returned $field" } set ::server_port1 [lindex $fields 0] set ::server_port2 [lindex $fields 1] log local0. "$mark: server_port1: $::server_port1 server_port2: $::server_port2" log local0. "$mark: $::snat_addr $::server_addr $::client_addr $::client_port $::server_port" log local0. "client_addr $::client_addr client_port1 $::client_port1 server_addr $::server_addr server_port1 $::server_port1 " relate_server { proto 17 clientflow ExternalL310Gb $::server_addr $::server_port1 $::server_addr $::server_port1 serverflow FrontAPI $::snat_addr $::client_port1 $::server_addr $::server_port1 } relate_server { proto 17 clientflow ExternalL310Gb $::server_addr $::server_port2 $::server_addr $::server_port2 serverflow FrontAPI $::snat_addr $::client_port2 $::server_addr $::server_port2 } unset ::client_port1 unset ::client_port2 unset ::server_port1 unset ::server_port2 unset ::client_addr unset ::server_addr unset ::snat_addr unset ::client_port unset ::server_port unset transport unset mark } }276Views0likes1Comment