CMP Compatibility¶
Summary: This document explains iRules CMP compatibility for the
various LTM versions (a work in progress…)
Description¶
This document explains iRules CMP compatibility for the various LTM
versions and offers guidelines for constructing CMP compatible iRules
and converting existing iRules for CMP compatibility.
Virtual servers using a number of common iRule-accessible features are
not CMP-compatible in some versions:
- Persistence
- Session Table
- Global Variables
- Class / Data Group List References
- Rate Classes
- Statistics Profiles
Note: CMP capability does not exist prior to 9.4
Virtual servers using non-CMP compatible features should be
demoted from CMP processing and all connections for that vs will be
handled by TMM0.
The CMP mode in which the virtual server is running can be shown by
issuing one of the following commands: b virtual show all or b virtual
cmp mode show
The following sections explain further (and hopefully soon will offer
guidelines for constructing CMP compatible iRules, and refer to
examples of converting existing iRules for CMP compatibility).
Persistence¶
up to & including 9.4.2, no persistence methods were compatible with
CMP
as of 9.4.3, cookie & hash persistence were compatible with CMP
as of 9.6.1, all persistence methods are fully compatible with CMP
in some cases the system may not appropriately demote VS w/
incompatible persistence, resulting inconsistent persistence
between cores.
Session Table / session command¶
In v9.4.x, all session commands are incompatible with CMP.
In 9.6.1, the session table and related session commands were
temporarily removed
In 10.0, CMP compatible versions of the session table / session
commands were added back
Global Variables¶
9.4.x global variables not compatible with CMP Note - demoted only if
caught by validator–“global” keyword was not caught by validator (::
reference)
10.0 Global vars not compatible, static:: vars added
for CMP compatible shared static values Global keyword is caught by
validator as of v10, and VS will be demoted
Replacement with a class lookup is one alternative:
CMP compatible (v9.x):¶
set val "[findclass "www_redir" global_vars " "] https://${host}:${port}[HTTP::uri]\r\n[findclass "www_opts" global_vars " "]"
To support this lookup, you will need to add a new class w/ the
appropriate values for each key:
class global_vars { “www_redir xxxxxx” “www_opts xxxxxx” } Note: In
9.4.4 and higher, when referencing the class with the findclass or
matchclass commands you should not use :: or $:: prefix
Class / Data Group List References¶
9.4.0 - 9.4.3, class reference not compatible as of 9.4.4, “::” and
“$::” prefixes are no longer required to reference classes using
findclass or matchclass. Classes are static and are therefore CMP
compatible. There is no need to treat them as global objects.
10.0, matchclass / findclass deprecated in favor of new class command
Rate Classes¶
9.x, rate class are not CMP compatible
(VS may not be demoted if called in an iRule… can anybody confirm?)
10.0, rate classes are CMP compatible. The rate is divided by the
number of TMM instances, and the resulting fraction is enforced
separately in each TMM.
Statistics Profiles¶
9.x, statistics profiles not CMP compatible
VS is not demoted if added to a virtual server.
10.0, statistics profiles are not fully CMP compatible. Each TMM
instance uses a separate instance of the statistic profile. The
cumulative counts are shown in the GUI and when polled via SNMP.
AES::key¶
When used in RULE_INIT, every TMM gets its own key and thus requests
cannot be decrypted successfully across TMM instances.