Forum Discussion

Robert_47833's avatar
Icon for Altostratus rankAltostratus
Jul 09, 2011

difference between set ::domain "" and $::domain



I am confused by global variable


see below


set :: domain ""


set $::domain ""


set static::domain ""


I am confused by the type of global variable and which can disable CMP in v10



7 Replies

  • Colin_Walker_12's avatar
    Historic F5 Account
    For CMP compliance in v10, you'll want to use :

    set statice::domain ""

  • Any variable set in RULE_INIT will be global in scope. So 'set ::domain ""' and 'set domain ""' if run in RULE_INIT will be equivalent. Both will demote the VS from CMP.



    As Colin suggested, for variables which don't need to be changed over the course of a connection, you can use the static:: namespace. This gives you a variable which is global in scope but preserves CMP compatibility. You can get more info on CMP here:






  • Colin_Walker_12's avatar
    Historic F5 Account
    As the links Aaron shared touch on briefly, it's also possible to use things like the session table or table command to avoid need for global variables entirely, depending on what you're trying to do. This is often a great route as it's high performance and fully CMP compliant.



  • Hi,all


    thanks for all your support


    1: if {[class match $uri starts_with cjj]} {


    pool SRWD29-BROWSE




    2:if {[matchclass [IP::remote_addr] equals $::cjj]} {


    HTTP::redirect ""



    pls see,cjj is a datagroup.


    what is the difference between 1 and 2


    $::cjj WILL disable CMP,can I change it to cjj in 2?
  • If cjj is a datagroup then you'd want to remove the $:: prefix on 9.4.4 or higher to preserve CMP compatibility. If you're on 10.x, you should use the class command instead of matchclass/findclass as it's more efficient and functional.



  • Hi,Aaron


    I am on 10.x,so I need to remove $:: and use class instead of matchclass/findclass,right?