if you want to share information among connections, you may consider using "table" command.
The table Command: Basics by spark
https://devcentral.f5.com/articles/v101-the-table-command-the-basics
another tricky way is to use global static variable since each tmm has its own value.
my big-ip has 2 tmm. "bar" is front-end virtual server. "one" and "two" are back-end virtual servers. users always connect to "bar" virtual server.
// config
root@(ve13a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm virtual
ltm virtual bar {
destination 172.28.24.10:80
ip-protocol tcp
mask 255.255.255.255
profiles {
http { }
tcp { }
}
rules {
qux
}
source 0.0.0.0/0
translate-address enabled
translate-port enabled
vs-index 10
}
ltm virtual one {
destination 0.0.0.0:80
ip-protocol tcp
mask any
profiles {
http { }
tcp { }
}
rules {
three
}
source 0.0.0.0/0
translate-address disabled
translate-port disabled
vlans-enabled
vs-index 8
}
ltm virtual two {
destination 0.0.0.0:8080
ip-protocol tcp
mask any
profiles {
http { }
tcp { }
}
rules {
three
}
source 0.0.0.0/0
translate-address disabled
translate-port enabled
vlans-enabled
vs-index 9
}
root@(ve13a)(cfg-sync In Sync)(Active)(/Common)(tmos) list ltm rule qux
ltm rule qux {
when RULE_INIT {
set static::rr 0
}
when HTTP_REQUEST {
if { $static::rr } {
set dest "one"
} else {
set dest "two"
}
log local0. "s[TMM::cmp_group]/tmm[TMM::cmp_unit]\
client=[IP::client_addr]:[TCP::client_port]\
destination=$dest\
rr=$static::rr"
set static::rr [expr {($static::rr + 1) % 2}]
virtual $dest
}
}
// test
ab -n 10 http://172.28.24.10/
// log
[root@ve13a:Active:In Sync] config grep tmm0 /var/log/ltm
Dec 31 11:53:38 ve13a info tmm[17969]: Rule /Common/qux : s0/tmm0 client=172.28.72.16:34772 destination=one rr=1
Dec 31 11:53:38 ve13a info tmm[17969]: Rule /Common/qux : s0/tmm0 client=172.28.72.16:34774 destination=two rr=0
Dec 31 11:53:38 ve13a info tmm[17969]: Rule /Common/qux : s0/tmm0 client=172.28.72.16:34776 destination=one rr=1
Dec 31 11:53:38 ve13a info tmm[17969]: Rule /Common/qux : s0/tmm0 client=172.28.72.16:34778 destination=two rr=0
Dec 31 11:53:38 ve13a info tmm[17969]: Rule /Common/qux : s0/tmm0 client=172.28.72.16:34781 destination=one rr=1
[root@ve13a:Active:In Sync] config grep tmm1 /var/log/ltm
Dec 31 11:53:38 ve13a info tmm1[17969]: Rule /Common/qux : s0/tmm1 client=172.28.72.16:34773 destination=one rr=1
Dec 31 11:53:38 ve13a info tmm1[17969]: Rule /Common/qux : s0/tmm1 client=172.28.72.16:34775 destination=two rr=0
Dec 31 11:53:38 ve13a info tmm1[17969]: Rule /Common/qux : s0/tmm1 client=172.28.72.16:34777 destination=one rr=1
Dec 31 11:53:38 ve13a info tmm1[17969]: Rule /Common/qux : s0/tmm1 client=172.28.72.16:34779 destination=two rr=0
Dec 31 11:53:38 ve13a info tmm1[17969]: Rule /Common/qux : s0/tmm1 client=172.28.72.16:34780 destination=one rr=1