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

3 Replies

  • I think the length value there is for the number of packets, not number of bytes (afaik getting, say, 1 byte vs 1 packet doesn't really take any extra resources).
  • Ah this would make more sense. I will see about updating the wiki to document this...

     

     

    Denny
  • unRuleY_95363's avatar
    unRuleY_95363
    Historic F5 Account
    No, the length is in bytes. But, here's the thing - think of it more as a "minimum length" to wait for. So, yes, indicating that you would minimally like 1 byte is sort of like saying you want to wait until the first packet with at least 1 byte. It doesn't mean that you won't get more - in all likelihood you will get more, that is unless you are using telnet in character mode...