CMP v10.0 compatible counters using the session table
Problem this snippet solves:
This simple iRule shows how you can create a CMP-compatible counter. The first portion of the iRule demonstrates creating and incrementing a global counter which is accessible across all virtual servers and all TCP connections. The second portion of the iRule shows a method for creating a VIP-specific global counter. There is no enforcement of access to the VIP-specific global counter but it should prevent accidental trampling of session table entry names. For details on CMP compatibility you can check these resources: https://devcentral.f5.com/wiki/iRules.CMPCompatibility.ashx https://support.f5.com/kb/en-us/solutions/public/7000/700/sol7751.htmlCode :
when CLIENT_ACCEPTED { set log_prefix "[virtual name] [IP::client_addr]:[TCP::client_port]" } when HTTP_REQUEST { ####################################################################### # # Global (accessible across all VIPs) counter variable example # using the session table # # Look up the counter value. Will return a null string if it doesn't exist set value [session lookup uie "my_counter"] log local0. "$log_prefix: Global lookup value: $value" # Check if the value is null if {$value eq ""}{ # Add a new session table entry with a value of 0 session add uie "my_counter" 0 } else { # Increment the current value by 1 session add uie "my_counter" [expr {$value + 1}] } # Log the updated value log local0. "$log_prefix: Global lookup value: [session lookup uie "my_counter"]" ####################################################################### # # Local (accessible to only this VIP) counter variable example # using the session table # # Save the virtual server name to use as a session table entry prefix # This keeps the variables specific to the virtual server. set vip [virtual name] # Look up the counter value. Will return a null string if it doesn't exist set value [session lookup uie "${vip}_my_counter"] log local0. "$log_prefix: Per-vip lookup value: $value" # Check if the value is null if {$value eq ""}{ # Add a new session table entry with a value of 0 session add uie "${vip}_my_counter" 0 } else { # Increment the current value by 1 session add uie "${vip}_my_counter" [expr {$value + 1}] } # Log the updated value log local0. "$log_prefix: Per-vip lookup value: [session lookup uie "${vip}_my_counter"]" }
Tested this on version:
10.0Published Jan 30, 2015
Version 1.0hooleylist
Cirrostratus
Joined September 08, 2005
hooleylist
Cirrostratus
Joined September 08, 2005
- JRahmAdmincontributed by hoolio