BIG-IP DNS iRule issue with static variable
I am trying to develop an iRule bypassing DNS processing when a DNS request matching a wide ip comes via a specific listener on our BIG-IP DNS. Code is below:
when RULE_INIT {
set static::ul_ip "10.X.Y.Z"
set static::ul_debug true
}
when DNS_REQUEST priority 100 {
if { [IP::addr [IP::local_addr]/32 equals $static::ul_ip]} {
DNS::disable all
#apparently event disable is no longer accepted?
#event disable
if { [$static::ul_debug]} {
log local0. "DNS Request [DNS::question name] triggered bypass"
}
}
}
This rule is meant to be applied to specific wide ip's (for reasons).
When this rule is applied and tested, I am seeing the message below in /var/log/gtm:
Apr 30 12:06:37 somebigipdns.nope.com err slot1 tmm[18454]: 011a7001:3: TCL error: Rule /Common/ul-bypass-rule <DNS_REQUEST> - can't read "static::ul_ip": no such variable while executing "IP::addr [IP::local_addr]/32 equals $static::ul_ip"
I'm completely unclear on why the TCL error is occurring.
For bonus points, any idea why 'event disable' isn't working in the DNS_REQUEST event? This message shows up in /var/log/ltm unless 'event disable' is commented out:
Apr 30 11:11:27 somebigipdns.nope.com err slot1 mcpd[6981]: 01070151:3: Rule [/Common/ul-bypass-rule] error: /Common/ul-bypass-rule:23: error: [undefined procedure: event][event disable]
Thanks in advance for any assistance provided.
- R
Okay, figured out the issue with the static variable.
If your iRule is a GTM iRule, not an LTM iRule, you need to declare static variables in a fully qualified manner, e.g.
set ::static::some_variable_name
and then call them in a fully qualified manner, .e.g
$::static::some_variable_name
It pays to go back and re-read even the documentation that you think you are familiar with.