Forum Discussion

dennypayne's avatar
dennypayne
Icon for Employee rankEmployee
Jun 22, 2006

TCP::collect question

In the whitepaper regarding Siebel deployments referenced at http://www.f5.com/solutions/deployment/siebel77_bigip9_dg.html there is the following rule:


when CLIENT_ACCEPTED { 
TCP::collect 1 } 
when CLIENT_DATA { 
if { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/sccobjmgr_enu" } { 
 log local0. "Using pool SCCObjMgr_enuConnPool" 
pool SCCObjMgr_enuConnPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/eserviceobjmgr_enu" } { 
 log local0. "Using pool eServiceObjMgr_enuConnPool" 
pool eServiceObjMgr_enuConnPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/sccobjmgr_enu/rr" } { 
 log local0. "Using pool SCCObjMgr_enuRRPool" 
pool SCCObjMgr_enuRRPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] == "/siebel/eserviceobjmgr_enu/rr" } { 
 log local0. "Using pool eServiceObjMgr_enuRRPool" 
pool eServiceObjMgr_enuRRPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] contains "/!3." } { 
 log local0. "Using pool siebelapp2ServerPool" 
pool siebelapp2ServerPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] contains "/!1." } { 
 log local0. "Using pool siebeldbServerPool" 
pool siebeldbServerPool 
} 
elseif { [findstr [TCP::payload] "/siebel" 0 " "] contains "/!2." } { 
 log local0. "Using pool siebelapp1ServerPool" 
pool siebelapp1ServerPool 
} 
else { 
log local0. "Rejected request for [findstr [TCP::payload] "/siebel" 0 " "]" 
discard } 
} ' } 

I'm not sure what the units are for on TCP::collect argument but I would assume it to be bytes. With that assumption, how can this rule work if you only collect 1 byte of data when the strings to be compared further down in the rule are larger than this?

Denny