<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>BIG-IP</title>
        <link>http://devcentral.f5.com/weblogs/jason/category/275.aspx</link>
        <description>BIG-IP</description>
        <language>en-US</language>
        <copyright>Jason Rahm</copyright>
        <generator>Subtext Version 2.1.1.1</generator>
        <item>
            <title>BIG-IP Configuration Object Naming Conventions</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/11/28/big-ip-configuration-object-naming-conventions.aspx</link>
            <description>&lt;p&gt;George posted &lt;a href="http://devcentral.f5.com/weblogs/watkins/archive/2010/07/12/thoughts-on-hostname-nomenclature.aspx" target="_blank"&gt;an excellent blog on hostname nomenclature&lt;/a&gt; a while back, but something we haven’t discussed much in this space is a naming convention for the BIG-IP configuration objects. Last week, &lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/52/aft/2158823/showtab/groupforums/Default.aspx" target="_blank"&gt;DevCentral community user Deon posted a question&lt;/a&gt; on exactly that. Sometimes there are standards just for the sake of having one, but in most cases, and particularly in this case, having standards is a very good thing. Señor Forum, hoolio, and MVP hamish weighed in with some good advice.&lt;/p&gt;  &lt;p&gt;[app name]_[protocol]_[object type]&lt;/p&gt;  &lt;p&gt;Examples:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;www.example.com_http_vs      &lt;br /&gt;www.example.com_http_pool       &lt;br /&gt;www.example.com_http_monitor &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As hoolio pointed out in the forum, each object now has a description field, so the metadata capability is there to establish identifying information (knowledge base IDs, troubleshooting info, application owners), but having an object name that is quickly searchable and identifiable to operational staff is key. Hamish had a slight alternative format for virtuals:&lt;/p&gt;  &lt;p&gt;[fqdn]_[port]&lt;/p&gt;  &lt;p&gt;For network virtuals, I’ve always made the network part of the name, as hamish also recommends in his guidance:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;network VS's tend to be named net-net.num.dot.ed-masklen. e.g. net-0.0.0.0-0 is the default address. Where they conflict (e.g. two defaults depending on src clan, it gets an extra descriptor between net- and the ip address. e.g. net-wireless-0.0.0.0-0 (Default network VS for a wireless VLAN). I don't currently have any network VS's for specific ports. But they'd be something like net-0.0.0.0-0-port &lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;Your Turn&lt;/h2&gt;  &lt;p&gt;What standards do you use? Share in the comments section below, or post to the forum thread.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4b0d3988-d263-4723-b2df-5bff530cae3e" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Standards" rel="tag"&gt;Standards&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Nomenclature" rel="tag"&gt;Nomenclature&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BIG-IP" rel="tag"&gt;BIG-IP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/George+Watkins" rel="tag"&gt;George Watkins&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hoolio" rel="tag"&gt;hoolio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/hamish" rel="tag"&gt;hamish&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1102424.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/11/28/big-ip-configuration-object-naming-conventions.aspx</guid>
            <pubDate>Mon, 28 Nov 2011 23:19:02 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1102424.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/11/28/big-ip-configuration-object-naming-conventions.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1102424.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Stop that F5 Key From Refreshing the Page</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/11/16/stop-that-f5-key-from-refreshing-the-page.aspx</link>
            <description>&lt;p&gt;No, not “us” F5, the F5 key on the keyboard. You know, the one you hit relentlessly to refresh the page (well, the one I hit relentlessly during NFL games to update my fantasy football stats). Anyway, I was perusing the forums today, trying to catch up from a week attending our very excellent annual sales conference, and I noticed a thread that had to be shared.&lt;/p&gt;  &lt;h3&gt;The Question&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Is there a way of preventing users from using the F5 button to refresh a web page? – &lt;a title="" href="http://devcentral.f5.com" rel=""&gt;DevCentral&lt;/a&gt; user &lt;strong&gt;ringoseagull&lt;/strong&gt; (nice handle, btw!)&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;The Solution&lt;/h3&gt;  &lt;p&gt;F5er and very active forum patrolman &lt;strong&gt;nitass &lt;/strong&gt;posted back within 30 minutes with a solution, featuring iRules of course! We’ve seen javascript insert iRules before, but this is a pretty handy use case, so I thought I’d share.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;when HTTP_REQUEST {     &lt;br /&gt;  STREAM::disable      &lt;br /&gt;  if {[HTTP::version] eq "1.1"} {      &lt;br /&gt;    if { [HTTP::header is_keepalive] } {      &lt;br /&gt;      HTTP::header replace "Connection" "Keep-Alive"      &lt;br /&gt;    }      &lt;br /&gt;    HTTP::version 1.0      &lt;br /&gt;  }      &lt;br /&gt;}      &lt;br /&gt;when HTTP_RESPONSE {      &lt;br /&gt;  if {[HTTP::header Content-Type] starts_with "text/"} {      &lt;br /&gt;    STREAM::expression "@&amp;lt;/\[Hh]\[Ee]\[Aa]\[Dd]&amp;gt;@&amp;lt;script language=javascript&amp;gt;function document.onkeydown() { if (event.keyCode==116) { event.keyCode=0; event.cancelBubble=true; return false; } }&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;@"      &lt;br /&gt;    STREAM::enable      &lt;br /&gt;  }      &lt;br /&gt;}      &lt;br /&gt;when STREAM_MATCHED {      &lt;br /&gt;  STREAM::disable      &lt;br /&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This iRule uses the stream profile to find the head tag and insert the javascript necessary to control the F5 keycode behavior. Curl testing shows the javascript successfully delivered:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[root@ve1023:Active] config # curl -i &lt;a href="http://172.28.65.152"&gt;http://172.28.65.152&lt;/a&gt;      &lt;br /&gt;HTTP/1.1 200 OK      &lt;br /&gt;Dat e: Fri, 11 Nov 2011 15:24:33 GMT      &lt;br /&gt;Server: Apache/2.2.3 (CentOS)      &lt;br /&gt;Last-Modified: Fri, 11 Nov 2011 14:48:14 GMT      &lt;br /&gt;ETag: "4183e4-3e-9c564780"      &lt;br /&gt;Accept-Ranges: bytes      &lt;br /&gt;Connection: close      &lt;br /&gt;Content-Type: text/html; charset=UTF-8&lt;/p&gt;    &lt;p&gt;&amp;lt;html&amp;gt;     &lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;script language=javascript&amp;gt;function document.onkeydown() { if (event.keyCode==116) { event.keyCode=0; event.cancelBubble=true; return false; } }&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;      &lt;br /&gt;&amp;lt;body&amp;gt;      &lt;br /&gt;This is 101 host.      &lt;br /&gt;&amp;lt;/body&amp;gt;      &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;    &lt;p&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Nice work, &lt;strong&gt;nitass&lt;/strong&gt;!&lt;/p&gt; &lt;i&gt;Related Articles&lt;/i&gt;   &lt;ul class="ArrowList"&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/iRules.HomePage.ashx"&gt;iRules Wiki Home - DevCentral Wiki&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/iRules.iRulesReference.ashx"&gt;iRules Reference - DevCentral Wiki&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/iRules.STREAM__expression.ashx"&gt;STREAM::expression - DevCentral Wiki&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/50/Default.aspx"&gt;DevCentral Groups - iRules&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/122/iRules-101--01--Introduction-to-iRules.aspx"&gt;iRules 101 - #01 - Introduction to iRules &amp;gt; DevCentral &amp;gt; Tech Tips ...&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0222a55c-caeb-408a-8651-1b5a1a7344de" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1100430.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/11/16/stop-that-f5-key-from-refreshing-the-page.aspx</guid>
            <pubDate>Wed, 16 Nov 2011 22:08:23 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1100430.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/11/16/stop-that-f5-key-from-refreshing-the-page.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1100430.aspx</wfw:commentRss>
        </item>
        <item>
            <title>So Yeah, Regex is Bad</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/06/22/so-yeah-regex-is-bad.aspx</link>
            <description>&lt;p&gt;Don’t get me wrong, regex is awesome, and entirely useful—sometimes it’s the only option, it’s just not the &lt;em&gt;best&lt;/em&gt; tool of choice for wire speed applications.  Often the sys-admin and network type converts to BIG-IP will find the &lt;a href="http://tmml.sourceforge.net/doc/tcl/regexp.html" target="_blank"&gt;regexp&lt;/a&gt; tcl command and go that route because it’s familiar.  If that describes you, please let me introduce you to a couple more appropriate commands:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://tmml.sourceforge.net/doc/tcl/scan.html" target="_blank"&gt;scan&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://tmml.sourceforge.net/doc/tcl/" target="_blank"&gt;string&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These two commands will cover a great percentage of &lt;strong&gt;regexp&lt;/strong&gt;’s use cases, and will save significant resources on the system.  Don’t buy it?  Here’s an example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;% &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; ip &lt;span style="color: #006080"&gt;"10.10.20.200"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;10.10.20.200&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;% time { &lt;span style="color: #0000ff"&gt;scan&lt;/span&gt; $ip {%d.%d.%d.%d} a b c d} 10000&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;2.1713 microseconds per iteration&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;% time {&lt;span style="color: #0000ff"&gt;regexp&lt;/span&gt; {([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})} $ip matched a b c d} 10000&lt;/pre&gt;
&lt;!--CRLF--&gt;

      &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;34.2604 microseconds per iteration&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two approaches, same result.  The time to achieve that result?  The &lt;strong&gt;scan&lt;/strong&gt; command bests &lt;strong&gt;regexp&lt;/strong&gt; by far.  I’ll save you the calculation…that’s a 93.7% reduction in processing time.  &lt;strong&gt;93.7 percent! &lt;/strong&gt;Now, mind you, the difference between 2 and 34 microseconds will be negligible to an individual request’s response time, but in the context of a single system handling hundreds of thousands or even millions of request per second, the difference matters.  A lot.&lt;/p&gt;

&lt;p&gt;Thanks to (who else?) hoolio for the example.  For other optimization considerations, check out the &lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/108/iRules-Optimization-101--01--if-elseif-and-switch.aspx" target="_blank"&gt;iRules Optimization 101 series&lt;/a&gt;.&lt;/p&gt;
&lt;i&gt;Related Articles&lt;/i&gt; 

&lt;ul class="ArrowList"&gt;
  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/339/iRules-101--14--TCL-String-Commands-Part-2.aspx"&gt;iRules 101 - #14 - TCL String Commands Part 2 &amp;gt; DevCentral &amp;gt; F5 ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/338/iRules-101--13--TCL-String-Commands-Part-1.aspx"&gt;iRules 101 - #13 - TCL String Commands Part 1 &amp;gt; DevCentral &amp;gt; F5 ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/2346/iRules-101--16--Parsing-Strings-with-the-TCL-Scan-Command.aspx"&gt;iRules 101 - #16 - Parsing Strings with the TCL Scan Command ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2007/08/01/2901.aspx"&gt;s/regex/English/g&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/197/Scan--Making-string-manipulation-efficient.aspx"&gt;Scan - Making string manipulation efficient &amp;gt; DevCentral &amp;gt; F5 ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aft/1177132/asg/50/Default.aspx"&gt;Regex - DevCentral - F5 DevCentral &amp;gt; Community &amp;gt; Group Details ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/5/aft/1179075/Default.aspx"&gt;REGEX Alternatives - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/5/aft/1179188/afc/1250875/Default.aspx"&gt;Regex in STREAM::expression - DevCentral - F5 DevCentral ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/5/aft/1174534/Default.aspx"&gt;String map and redirect - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/5/aft/1172818/Default.aspx"&gt;string manipulation - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3bdf4fa0-0185-464d-bb00-4b5e3495259d" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/regex" rel="tag"&gt;regex&lt;/a&gt;,&lt;a href="http://technorati.com/tags/regexp" rel="tag"&gt;regexp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/scan" rel="tag"&gt;scan&lt;/a&gt;,&lt;a href="http://technorati.com/tags/string" rel="tag"&gt;string&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tcl" rel="tag"&gt;tcl&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance" rel="tag"&gt;performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1094497.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/06/22/so-yeah-regex-is-bad.aspx</guid>
            <pubDate>Wed, 22 Jun 2011 21:12:00 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1094497.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/06/22/so-yeah-regex-is-bad.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1094497.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Changing the BIG-IP Default Syslog-NG Facilities</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/06/20/changing-the-big-ip-default-syslog-ng-facilities.aspx</link>
            <description>&lt;p&gt;DevCentral community member geffr had a problem. The &lt;a href="http://www.f5.com/products/big-ip/application-security-manager.html"&gt;BIG-IP Application Security Manager&lt;/a&gt; module logs to the local3 facility but he needs to send them to the local7 facility on a remote server. Before giving up entirely, he posted to &lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/44/aft/25821/showtab/groupforums/Default.aspx#1250561"&gt;this thread&lt;/a&gt; in the Monitoring &amp;amp; Management group forum, where user nitass helped him jump through the syslog-ng hoops (&lt;a href="http://www.syslog.org/logged/pot-of-syslog-ng-tricks-version-3/"&gt;click here for tips &amp;amp; tricks on syslog-ng&lt;/a&gt;) to the working solution posted below. It’s pretty straight forward. Define a template, a filter, and a destination, and then put the pieces together in a log statement.&lt;/p&gt;  &lt;p&gt;&lt;i /&gt;&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;blockquote&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;b syslog &lt;span style="color: #0000ff"&gt;include&lt;/span&gt; &lt;span style="color: #006080"&gt;'"&lt;br /&gt;&lt;br /&gt;filter f_local3a {&lt;br /&gt;   facility(local3);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;template t_asm {&lt;br /&gt;   template(\"&amp;lt;190&amp;gt; $MSGHDR$MSG\n\");&lt;br /&gt;   template_escape(no);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;destination d_loghost5a {&lt;br /&gt;udp(\"2.2.2.2\" port (514) template(t_asm));&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;log {&lt;br /&gt;   source(local);&lt;br /&gt;   filter(f_local3a);&lt;br /&gt;   destination(d_loghost5a);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;"'&lt;/span&gt; &lt;/pre&gt;
  &lt;/blockquote&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Note: The b syslog include ‘ “ “ ‘ wrapper around the custom configuration is merely for importing the configuration, it’s note part of the configuration itself.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Related Articles&lt;/i&gt; &lt;/p&gt;

&lt;ul class="ArrowList"&gt;
  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/155/LTM-942-Custom-Syslog-Configuration.aspx"&gt;LTM 9.4.2+: Custom Syslog Configuration &amp;gt; DevCentral &amp;gt; F5 ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/44/aft/1171993/showtab/groupforums/Default.aspx"&gt;setting up syslog? - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/AdvDesignConfig/SyslogNGEmailConfiguration.html"&gt;DevCentral Wiki: Syslog NG Email Configuration&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/201/Configuring-syslog-ng-to-email-messages.aspx"&gt;Configuring syslog-ng to email messages &amp;gt; DevCentral &amp;gt; F5 ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/81/Syslog-Priority-Translation.aspx"&gt;Syslog Priority Translation &amp;gt; DevCentral &amp;gt; F5 DevCentral &amp;gt; Tech Tips&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/deb/Tags/syslog/default.aspx"&gt;Deb Allen - syslog&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/32/aft/1172264/afv/topic/asg/44/Default.aspx"&gt;Customizing syslog-ng f_local0 filter - DevCentral - F5 DevCentral ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/aff/32/aft/790720/afv/topic/Default.aspx"&gt;Syslog locally and remote with specific facility level ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/aff/5/aft/84617/afv/topic/Default.aspx"&gt;Duplicate syslog traffic to multiple destinations - DevCentral ...&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/aff/31/aft/27956/afv/topic/Default.aspx"&gt;Custom syslog-ng facility - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2cd57d08-f1cd-4ad7-ac1a-207b4f0a733c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BIG-IP" rel="tag"&gt;BIG-IP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASM" rel="tag"&gt;ASM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Application+Security+Manager" rel="tag"&gt;Application Security Manager&lt;/a&gt;,&lt;a href="http://technorati.com/tags/syslog" rel="tag"&gt;syslog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/syslog-ng" rel="tag"&gt;syslog-ng&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1094490.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/06/20/changing-the-big-ip-default-syslog-ng-facilities.aspx</guid>
            <pubDate>Mon, 20 Jun 2011 15:44:26 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1094490.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/06/20/changing-the-big-ip-default-syslog-ng-facilities.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1094490.aspx</wfw:commentRss>
        </item>
        <item>
            <title>BIG-IP Configuration Conversion Scripts</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/03/28/big-ip-configuration-conversion-scripts.aspx</link>
            <description>&lt;p&gt;Two of our biggest internal contributors, Kirk Bauer and John Alam, are at it again with a handful of perl scripts aimed at easing your migration from some of the “other guys” to BIG-IP.  While they aren’t going to map every nook and cranny of the configurations to a BIG-IP feature, they will get you well along the way, taking out as much of the human error element as possible.  I built a few pages in the &lt;a href="http://devcentral.f5.com/wiki/Default.aspx/AdvDesignConfig.HomePage"&gt;Advanced Design &amp;amp; Configuration wiki&lt;/a&gt; to host these scripts.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/AdvDesignConfig/Cisco.html"&gt;Migrating from Cisco ACE, CSM, or CSS&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/AdvDesignConfig/CitrixNetscaler.html"&gt;Migrating from Citrix Netscaler&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/AdvDesignConfig/Radware.html"&gt;Migrating from Radware&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Obviously with these being perl scripts you’ll need a &lt;a href="http://www.perl.org/"&gt;copy of perl&lt;/a&gt;, or just load the script on your BIG-IP and do the migration there!&lt;/p&gt; &lt;i&gt;Related Articles&lt;/i&gt;   &lt;ul class="ArrowList"&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/iControl/Perl.html"&gt;DevCentral Wiki: Perl&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/dan/archive/2009/02/20/if-radware-succeeds-in-purchasing-alteon-will-anyone-care.aspx"&gt;If Radware Succeeds in Purchasing Alteon, Will Anyone Care?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/Joe/archive/2005/06/06/553.aspx"&gt;64-bit numbers in perl&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/iControl/PerlLtmConfigToXml.html"&gt;DevCentral Wiki: Perl Ltm Config To Xml&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aft/1174523/asg/51/Default.aspx"&gt;GTM Network Map - Perl - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/AdvDesignConfig/CSSToBIGIPConversionScript.html"&gt;DevCentral Wiki: CSS To BIGIP Conversion Script&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aft/1176825/asg/63/Default.aspx"&gt;Perl script to parse Siebel lbconfig.txt file update for BIG-IP ...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/47/aft/1170644/afv/topic/asg/39/Default.aspx"&gt;Convert Cisco CSS config to Big IP 3600 - DevCentral - F5 ...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/1/aft/1145053/Default.aspx"&gt;Perl script to dump API response-&amp;gt;result - DevCentral - F5 ...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/31/aft/86007/Default.aspx"&gt;Cisco CSS cookie persistency - DevCentral - F5 DevCentral ...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/aff/1/aft/1144711/afv/topic/Default.aspx"&gt;another potential 64 bit conversion issue in perl - DevCentral ...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/wiki/default.aspx/AdvDesignConfig/Radware.html"&gt;DevCentral Wiki: Radware&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/32/aft/57465/Default.aspx"&gt;CSS Config to F5 Config - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f4a5bd9a-0140-4b22-980d-7f1b4157134a" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BIG-IP+LTM" rel="tag"&gt;BIG-IP LTM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Perl" rel="tag"&gt;Perl&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Migration" rel="tag"&gt;Migration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;,&lt;a href="http://technorati.com/tags/John+Alam" rel="tag"&gt;John Alam&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Kirk+Bauer" rel="tag"&gt;Kirk Bauer&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1094303.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/03/28/big-ip-configuration-conversion-scripts.aspx</guid>
            <pubDate>Mon, 28 Mar 2011 16:06:35 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1094303.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/03/28/big-ip-configuration-conversion-scripts.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1094303.aspx</wfw:commentRss>
        </item>
        <item>
            <title>IP::addr and IPv6</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/03/23/ipaddr-and-ipv6.aspx</link>
            <description>&lt;p&gt;Did you know that all address internal to tmm are kept in IPv6 format?  If you’ve written external monitors, I’m guessing you knew this.  In the external monitors, for IPv4 networks the IPv6 “header” is removed with the line:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;font face="Times New Roman"&gt;IP=`echo $1 | sed 's/::ffff://'`&lt;/font&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;IPv4 address are stored in what’s called “IPv4-mapped” format. An IPv4-mapped address has its first 80 bits set to zero and the next 16 set to one, followed by the 32 bits of the IPv4 address.  The prefix looks like this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;0000:0000:0000:0000:0000:ffff: (abbreviated as ::ffff:, which looks strickingly simliar—ok, identical—to the pattern stripped above)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notation of the IPv4 section of the IPv4-formatted address vary in implementations between ::ffff:192.168.1.1 and ::ffff:c0a8:c8c8, but only the latter notation (in hex) is supported.  If you need the decimal version, you can extract it like so:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;% puts $x
    &lt;br /&gt;::ffff:c0a8:c8c8

    &lt;br /&gt;% if { [string range $x 0 6] == "::ffff:" } {

    &lt;br /&gt;scan [string range $x 7 end] "%2x%2x:%2x%2x" ip1 ip2 ip3 ip4

    &lt;br /&gt;set ipv4addr "$ip1.$ip2.$ip3.$ip4"

    &lt;br /&gt;}

    &lt;br /&gt;192.168.200.200&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Address Comparisons&lt;/h3&gt;

&lt;p&gt;The text format is not what controls whether the &lt;a href="http://devcentral.f5.com/wiki/default.aspx/iRules/IP__addr.html"&gt;IP::addr command&lt;/a&gt; (nor the &lt;a href="http://devcentral.f5.com/wiki/default.aspx/iRules/class.html"&gt;class command&lt;/a&gt;) does an IPv4 or IPv6 comparison. Whether or not the IP address is IPv4-mapped is what controls the comparison. The text format merely controls how the text is then translated into the internal IPv6 format (ie: whether it becomes a IPv4-mapped address or not). Normally, this is not an issue, however, if you are trying to compare an IPv6 address against an IPv4 address, then you really need to understand this mapping business.  Also, it is not recommended to use 0.0.0.0/0.0.0.0 for testing whether something is IPv4 versus IPv6 as that is not really valid a IP address—using the 0.0.0.0 mask (technically the same as /0) is a loophole and ultimately, what you are doing is loading the equivalent form of a IPv4-mapped mask. Rather, you should just use the following to test whether it is an IPv4-mapped address: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;if { [IP::addr $IP1 equals ::ffff:0000:0000/96] } {  log local0. “Yep, that’s an IPv4 address” }&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These notes are covered in the &lt;a href="http://devcentral.f5.com/wiki/default.aspx/iRules/IP__addr.html"&gt;IP::addr wiki entry&lt;/a&gt;.  Any updates to the command and/or supporting notes will exist there, so keep the links handy.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;i&gt;Related Articles&lt;/i&gt; 

&lt;ul class="ArrowList"&gt;
  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/02/04/ipv4-ipv6-migration-coexist-gateway.aspx"&gt;F5 Friday: 'IPv4 and IPv6 Can Coexist' or 'How to eat your cake ...&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="https://devcentral.f5.com/weblogs/dctv/archive/2011/02/22/service-provider-series-managing-the-ipv6-migration.aspx"&gt;Service Provider Series: Managing the ipv6 Migration&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/psilva/archive/2009/11/06/ipv6-and-the-end-of-the-world.aspx"&gt;IPv6 and the End of the World&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/2241/aft/1176882/Default.aspx"&gt;No More IPv4. You do have your IPv6 plan running now, right ...&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/2247/aft/1176890/Default.aspx"&gt;Question about IPv6 - BIGIP - DevCentral - F5 DevCentral ...&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aft/1177252/asg/50/Default.aspx"&gt;Insert IPv6 address into header - DevCentral - F5 DevCentral ...&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/24/aft/15344/afv/topic/asg/61/Default.aspx"&gt;Business Case for IPv6 - DevCentral - F5 DevCentral &amp;gt; Community ...&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/27/wersquore-sorry.-the-ipv4-address-you-are-trying-to-reach.aspx"&gt;We're sorry. The IPv4 address you are trying to reach has been ...&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/dmacvittie/Tags/F5%20BIG-IP%20IPv6%20Gateway%20Module/default.aspx"&gt;Don MacVittie - F5 BIG-IP IPv6 Gateway Module&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c9efd512-4315-44be-94ab-336cf8ff2e74" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IPv6" rel="tag"&gt;IPv6&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IP%3a%3aaddr" rel="tag"&gt;IP::addr&lt;/a&gt;,&lt;a href="http://technorati.com/tags/class" rel="tag"&gt;class&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1094291.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/03/23/ipaddr-and-ipv6.aspx</guid>
            <pubDate>Wed, 23 Mar 2011 15:26:50 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1094291.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/03/23/ipaddr-and-ipv6.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1094291.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Microsoft Exchange 2010 iRule Workflow Visualized</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/03/15/microsoft-exchange-2010-irule-workflow-visualized.aspx</link>
            <description>&lt;p&gt;F5’s own John Alam sent over his latest Visio creation to share with the &lt;a title="" href="http://devcentral.f5.com" rel=""&gt;DevCentral&lt;/a&gt; community.  This diagram details the workflow of the comprehensive exchange services iRule described in the &lt;a href="http://www.f5.com/pdf/deployment-guides/f5-exchange-2010-dg.pdf"&gt;Microsoft Exchange 2010 Deployment Guide&lt;/a&gt;. Enjoy.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/jason/Windows-Live-Writer/Exchange-2010-iRule-Workflow-Visualized_971F/Exchange%20single%20url%20irule_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Exchange single url irule" border="0" alt="Exchange single url irule" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/jason/Windows-Live-Writer/Exchange-2010-iRule-Workflow-Visualized_971F/Exchange%20single%20url%20irule_thumb.png" width="1000" height="801" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For visio, pdf, png, &amp;amp; svg versions of this image, &lt;a href="http://devcentral.f5.com/downloads/advdc/exchange_irule_workflows.zip"&gt;click here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Related Articles&lt;/i&gt; &lt;/p&gt;  &lt;ul class="ArrowList"&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/11/10/microsoft-exchange-2010-helo-new-architecture.aspx"&gt;Microsoft Exchange 2010: HELO New Architecture&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/dctv/archive/2011/01/19/webcast-microsoft-exchange-server-availability-and-scalability.aspx"&gt;Webcast - Microsoft Exchange Server Availability And Scalability&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/286/Exchange-Persistence-Duality-and-iRules.aspx"&gt;Exchange Persistence Duality and iRules &amp;gt; DevCentral &amp;gt; F5 ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/aff/2267/afv/topic/aft/1174320/Default.aspx"&gt;How Microsoft deployed Exchange Server 2010 with hardware load ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/6130/aft/1176688/Default.aspx"&gt;Planning an Exchange Migration? - DevCentral - F5 DevCentral ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/rkorock/archive/2010/08/06/1088383.aspx"&gt;Exchange 2010 with F5 BIG-IP and Dell Article Published&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/dctv/archive/2010/11/05/devconnections-2010-attendee-discusses-exchange-and-cloud-computing.aspx"&gt;devconnections 2010: Attendee discusses Exchange and Cloud Computing&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/25/aft/1172976/afv/topic/asg/62/Default.aspx"&gt;F5 with mixed Exchange 2007 and 2010 Client Access Servers ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/25/aft/1172014/afv/topic/asg/62/Default.aspx"&gt;Trying to implement Exchange 2010 - DevCentral - F5 DevCentral ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Forums/tabid/53/afv/topic/aff/25/aft/1177146/Default.aspx"&gt;Exchange 2010 Monitors for LTM - DevCentral - F5 DevCentral ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/25/aft/1176704/afv/topic/asg/62/Default.aspx"&gt;Exchange 2010/LTM10.2 RPC mail delivery delay ? - DevCentral - F5 ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/31/aft/1174067/afv/topic/asg/52/Default.aspx"&gt;Exchange 2010 Global address list issue - DevCentral - F5 ...&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/downloads/Presentations/F5SolutionForMicrosoftExchange2010.pptx"&gt;F5 solution for Microsoft Exchange&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/dcpodcast/Tags/Exchange/default.aspx"&gt;DevCentral Weekly Roundup | Audio Podcast - Exchange&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/aff/25/aft/1172803/afv/topic/asg/62/Default.aspx"&gt;Exchange 2007 - What Type of SSL certificate required (single ...&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6857e80e-a685-4917-a18e-28e056345b54" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visio" rel="tag"&gt;Visio&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Exchange" rel="tag"&gt;Exchange&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Exchange+2010" rel="tag"&gt;Exchange 2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;,&lt;a href="http://technorati.com/tags/John+Alam" rel="tag"&gt;John Alam&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1092458.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/03/15/microsoft-exchange-2010-irule-workflow-visualized.aspx</guid>
            <pubDate>Tue, 15 Mar 2011 16:04:01 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1092458.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/03/15/microsoft-exchange-2010-irule-workflow-visualized.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1092458.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Mitigate Java Vulnerability with iRules</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2011/02/03/mitigate-java-dbl_min-vulnerability-with-irules.aspx</link>
            <description>&lt;p&gt;I got a request yesterday morning to asking if there was a way to drop HTTP requests if a certain number was referenced in the Accept-Language header.  The user referenced &lt;a target="_blank" href="http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/"&gt;this post&lt;/a&gt; on &lt;a target="_blank" href="http://www.exploringbinary.com/"&gt;Exploring Binary&lt;/a&gt;.  The number, 2.2250738585072012e-308, causes the Java runtime and compiler to go into an infinite loop when converting it to &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/jason/Windows-Live-Writer/030549201e89_8754/java_tweets_2.png"&gt;&lt;img width="504" height="285" border="0" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/jason/Windows-Live-Writer/030549201e89_8754/java_tweets_thumb.png" alt="java_tweets" title="java_tweets" style="background-image: none; border: 0px none; margin: 10px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px;" /&gt;&lt;/a&gt;double-precision binary floating-point.  Not good.  Twitter is &lt;a target="_blank" href="http://twitter.com/search?q=2.2250738585072012e-308"&gt;ablaze on the issue&lt;/a&gt;, and there is a &lt;a target="_blank" href="http://news.ycombinator.com/item?id=2164863"&gt;good discussion thread on Hacker News&lt;/a&gt; as well.  So how do you stop it?  At first, this appeared to be a no-brainer, just copy that string and drop if found in that header, right?  Well, there’s a catch.  A few actually.  This number can be represented in many ways:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Decimal point placement =&amp;gt; 0.00022250738585072012e-304 &lt;/li&gt;
    &lt;li&gt;Leading Zeroes =&amp;gt; 00000000002.2250738585072012e-308 &lt;/li&gt;
    &lt;li&gt;Trailing Zeroes =&amp;gt; 2.225073858507201200000e-308 &lt;/li&gt;
    &lt;li&gt;Leading Zeroes in the Exponent =&amp;gt; 2.2250738585072012e-00308 &lt;/li&gt;
    &lt;li&gt;Superfluous Digits past digit 17 =&amp;gt; 2.2250738585072012997800001e-308 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.tcl.tk/man/tcl8.5/TclCmd/string.htm"&gt;String match&lt;/a&gt; seemed the perfect fit for this as I need a few wildcards to sort this out.  I started in the Tcl shell just to make sure all the use cases matched:&lt;/p&gt;
&lt;div class="csharpcode-wrapper" id="codeSnippetWrapper"&gt;
&lt;div class="csharpcode" id="codeSnippet"&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;set&lt;/span&gt; a &lt;span class="str"&gt;"Accept-Language: en-us;q=2.2250738585072012e-308"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;Accept-Language: en-us;q=2.2250738585072012e-308&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;set&lt;/span&gt; b &lt;span class="str"&gt;"Accept-Language: en-us;q=0.00022250738585072012e-304"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;Accept-Language: en-us;q=0.00022250738585072012e-304&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;set&lt;/span&gt; c &lt;span class="str"&gt;"Accept-Language: en-us;q=00000000002.2250738585072012e-308"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;Accept-Language: en-us;q=00000000002.2250738585072012e-308&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;set&lt;/span&gt; d &lt;span class="str"&gt;"Accept-Language: en-us;q=2.225073858507201200000e-308"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; e &lt;span class="str"&gt;"Accept-Language: en-us;q=2.2250738585072012e-00308"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;Accept-Language: en-us;q=2.225073858507201200000e-308&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;% Accept-Language: en-us;q=2.2250738585072012e-00308&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;set&lt;/span&gt; f &lt;span class="str"&gt;"Accept-Language: en-us;q=2.2250738585072012997800001e-308"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;Accept-Language: en-us;q=2.2250738585072012997800001e-308&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; $a  &lt;span class="str"&gt;"="&lt;/span&gt;] 1] &lt;span class="str"&gt;"e"&lt;/span&gt;] 0]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;1&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; $b &lt;span class="str"&gt;"="&lt;/span&gt;] 1] &lt;span class="str"&gt;"e"&lt;/span&gt;] 0]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;1&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; $c &lt;span class="str"&gt;"="&lt;/span&gt;] 1] &lt;span class="str"&gt;"e"&lt;/span&gt;] 0]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;1&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; $d &lt;span class="str"&gt;"="&lt;/span&gt;] 1] &lt;span class="str"&gt;"e"&lt;/span&gt;] 0]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;1&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; $e &lt;span class="str"&gt;"="&lt;/span&gt;] 1] &lt;span class="str"&gt;"e"&lt;/span&gt;] 0]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;1&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;% &lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; [&lt;span class="kwrd"&gt;lindex&lt;/span&gt; [&lt;span class="kwrd"&gt;split&lt;/span&gt; $f &lt;span class="str"&gt;"="&lt;/span&gt;] 1] &lt;span class="str"&gt;"e"&lt;/span&gt;] 0]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;1&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For the first attempt at an iRule, I looked only at the Accept-Language header and replaced the lindex/split mess with getfield:&lt;/p&gt;
&lt;div class="csharpcode-wrapper" id="codeSnippetWrapper"&gt;
&lt;div class="csharpcode" id="codeSnippet"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="preproc"&gt;HTTP_REQUEST&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;  &lt;span class="kwrd"&gt;set&lt;/span&gt; num [&lt;span class="kwrd"&gt;getfield&lt;/span&gt; [&lt;span class="kwrd"&gt;getfield&lt;/span&gt; [&lt;span class="kwrd"&gt;HTTP::header&lt;/span&gt; &lt;span class="str"&gt;"Accept-Language"&lt;/span&gt; &lt;span class="str"&gt;"="&lt;/span&gt; 2] &lt;span class="str"&gt;"e"&lt;/span&gt; 1]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; { [&lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* $num] } {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;drop&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Using the Firefox Modify Headers plugin, I was able to confirm the desired behavior.  However, it was brought to my attention that any header could contain this, so I reworked the iRule to look at all headers:&lt;/p&gt;
&lt;div class="csharpcode-wrapper" id="codeSnippetWrapper"&gt;
&lt;div class="csharpcode" id="codeSnippet"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="preproc"&gt;HTTP_REQUEST&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;  &lt;span class="kwrd"&gt;foreach&lt;/span&gt; header [&lt;span class="kwrd"&gt;HTTP::header&lt;/span&gt; names] {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; { [&lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;HTTP::header&lt;/span&gt; $header]] } {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;      &lt;span class="kwrd"&gt;drop&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt; &lt;/h3&gt;
&lt;h3&gt;The Solution (&lt;font color="#ff0000"&gt;UPDATED!)&lt;/font&gt;&lt;/h3&gt;
&lt;p&gt;And finally, hoolio (of course!) suggested that if I’ve looking at all the headers, why not just use &lt;a target="_blank" href="http://devcentral.f5.com/wiki/default.aspx/iRules/HTTP__request.html"&gt;HTTP::request&lt;/a&gt; and match against that.  Duh.  So that simplifies significantly.  &lt;/p&gt;
&lt;div class="csharpcode-wrapper" id="codeSnippetWrapper"&gt;
&lt;div class="csharpcode" id="codeSnippet"&gt;
&lt;pre class="alt"&gt;&lt;strike&gt;&lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="preproc"&gt;HTTP_REQUEST&lt;/span&gt; {&lt;/strike&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;strike&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; { [&lt;span class="kwrd"&gt;string&lt;/span&gt; match *2*2250738585072012* [&lt;span class="kwrd"&gt;HTTP::request&lt;/span&gt;]] } {&lt;/strike&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;&lt;strike&gt;    &lt;span class="kwrd"&gt;drop&lt;/span&gt;&lt;/strike&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;strike&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt;&lt;/strike&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;&lt;strike&gt;  }&lt;/strike&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;&lt;strike&gt;}&lt;/strike&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;So that worked for all the cases except for the decimal point placement when trending right as Balbus pointed out in the comments below.  An update to the string match recommended by hoolio drives the CPU slightly harder in that it also requires a string map command, but still not so much as the foreach loop.&lt;/p&gt;
&lt;div class="csharpcode-wrapper" id="codeSnippetWrapper"&gt;
&lt;div class="csharpcode" id="codeSnippet"&gt;
&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;when&lt;/span&gt; &lt;span class="preproc"&gt;HTTP_REQUEST&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; { [&lt;span class="kwrd"&gt;string&lt;/span&gt; match &lt;span class="str"&gt;"*2225073858507201*"&lt;/span&gt; [&lt;span class="kwrd"&gt;string&lt;/span&gt; map {. &lt;span class="str"&gt;""&lt;/span&gt;} [&lt;span class="kwrd"&gt;HTTP::request&lt;/span&gt;]]] } {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;drop&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alt"&gt;  }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre class="alteven"&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;From an efficiency standpoint, the final (revised) rule was &lt;strike&gt;3x&lt;/strike&gt; (still) more efficient that the foreach loop on a BIG-IP 3900.  Hopefully this helps more until a patch is available, or at least the vulnerability can be mitigated in the applications.  Consider this a living post as I’m sure there are additional attack vectors I haven’t considered.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0ad2ead0-5eac-4a80-84be-6a1b8634ad04" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/F5+Devcentral"&gt;F5 Devcentral&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/iRules"&gt;iRules&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/string+match"&gt;string match&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Java"&gt;Java&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Java+Vulnerability"&gt;Java Vulnerability&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/DBL_MIN"&gt;DBL_MIN&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/2.2250738585072012e-308"&gt;2.2250738585072012e-308&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Exploring+Binary"&gt;Exploring Binary&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Jason+Rahm"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1092372.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2011/02/03/mitigate-java-dbl_min-vulnerability-with-irules.aspx</guid>
            <pubDate>Thu, 03 Feb 2011 16:28:28 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1092372.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2011/02/03/mitigate-java-dbl_min-vulnerability-with-irules.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1092372.aspx</wfw:commentRss>
        </item>
        <item>
            <title>iRules Community Spotlight: Same Segment Load Balancing</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2010/08/19/irules-community-spotlight-same-segment-load-balancing.aspx</link>
            <description>&lt;p&gt;This has been a perplexing issue for many users.  How do you introduce an intermediary (LTM going forward) between client and server when in the same network segment?  It’s easy when the LTM sits at gateways, but within a segment, it doesn’t work that well without some help.  Why?  Well, with tcp-based connection-oriented protocols, a handshake (consisting of a client syn packet, a server syn-ack packet, and a server ack packet) sets up the connection.  When you introduce the LTM, a problem arises:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Client –&amp;gt; syn –&amp;gt; BIG-IP&lt;/p&gt;    &lt;p&gt;BIG-IP –&amp;gt; syn-ack –&amp;gt; Client&lt;/p&gt;    &lt;p&gt;Client –&amp;gt; ack –&amp;gt; BIG-IP&lt;/p&gt;    &lt;p&gt;BIG-IP –&amp;gt; syn –&amp;gt; Server&lt;/p&gt;    &lt;p&gt;Server –&amp;gt; syn-ack –&amp;gt; Client&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Client –&amp;gt; reset –&amp;gt; Server&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Do you see the problem?  It’s actually in the step prior to the reset.  Because the server and client are on the same segment, the server sees the client’s source IP, and because it is local, sends an arp (if not already cached) and then forwards directly to the client, bypassing the BIG-IP.  The client then resets this connection because it has no established service with the server.  So how do you address this issue?  Enter address translation.  By translating the client’s source address before sending traffic to the server, the BIG-IP ensures that the server relays the responses back through it before forwarding on to the client.  The downside here, however, is that now the server cannot see the client source address, which impacts reporting and potentially some functionality.  With HTTP, this is easily addressed with the X-Forwarded-For header, but it’s problematic for other protocols.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/Community/GroupDetails/tabid/1082223/asg/50/afv/topic/aft/1174033/aff/5/showtab/groupforums/Default.aspx" target="_blank"&gt;Check out this thread&lt;/a&gt;, it’s a great discussion on some of the issues and solutions for same segment load balancing.  BTW, some of the other names for this deployment are VIP Bounceback, BIG-IP on a Stick, and One-Armed Configuration.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0e4c4f2d-45aa-4c01-ab11-d9d582be8a3d" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BIG-IP" rel="tag"&gt;BIG-IP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1090232.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2010/08/19/irules-community-spotlight-same-segment-load-balancing.aspx</guid>
            <pubDate>Thu, 19 Aug 2010 15:57:16 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1090232.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2010/08/19/irules-community-spotlight-same-segment-load-balancing.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1090232.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Benefits of Desktop Virtualization</title>
            <link>http://devcentral.f5.com/weblogs/jason/archive/2010/07/09/benefits-of-desktop-virtualization.aspx</link>
            <description>&lt;p&gt;There is an abundance of mature desktop virtualization solutions that are outright free or at least reasonable.  From VMware’s &lt;a href="http://www.vmware.com/products/workstation/" target="_blank"&gt;Workstation&lt;/a&gt; (at cost after 30-day trial, but entirely worth it) to Oracle’s &lt;a href="http://www.virtualbox.org/" target="_blank"&gt;VirtualBox&lt;/a&gt; and Microsoft’s &lt;a href="https://www.microsoft.com/windows/virtual-pc/default.aspx" target="_blank"&gt;Virtual PC&lt;/a&gt;, you can get started in literally minutes.  Why would you want to?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Trivial backups.  Tired of losing a drive and having to restore first the OS, then the applications, and finally your files?  Once everything is hosted on a virtual disk, keeping that backed up frequently means a physical disk failure costs you only the time to restore the hardware OS and your virtualization.  Major time saver.  For enterprise environments, this also makes hardware changes for employees a cinch.  New desktop?  A single file copy and a short vm configuration, and the IT folks can move on to something more important.&lt;/li&gt;    &lt;li&gt;Snapshots prior to patching, new applications. Ever had an antivirus or OS patch destroy your system?  Snapshot your virtual machine prior to making changes, and if anything goes wonky, simply revert to the last snapshot.&lt;/li&gt;    &lt;li&gt;Minimal, purposeful systems for online banking (or remote vpn access, shopping, etc).  Do you know the malware that threads its tentacles into your system over time from browsing the internet?  Keep one virtual machine that has nothing installed except the browser and plugins necessary to do your banking and investing, and once you’re done, shutting down the virtual machine restores it to original state so any potential malware threats are eliminated.&lt;/li&gt;    &lt;li&gt;For the geeks in the audience (all of you?), quick test setups with teaming (VMware Desktop for sure, check on the others). &lt;a href="http://devcentral.f5.com/Tutorials/TechTips/tabid/63/articleType/ArticleView/articleId/1084344/Configuring-a-multi-server-Testing-Environment-with-VMWare-Teams-and-BIG-IP-LTM-VE.aspx" target="_blank"&gt;Don had a great article&lt;/a&gt; on this relating to a &lt;a href="http://www.f5.com/pdf/products/big-ip-local-traffic-manager-ve-overview.pdf" target="_blank"&gt;BIG-IP LTM VE&lt;/a&gt; test setup.  This is great becuase you mock up complete test environments and spin them together, but only when you need them.  With several linux-based appliances, you can get virtual switches, routers, firewalls, lamp servers, all purpose-built and ready to go for your test environments.&lt;/li&gt;    &lt;li&gt;Run nothing on the host OS except the hypervisor and antivirus.  This ensures a minimal rebuild time should there be a failure.  My exceptions to this rule are audio/video tools like skype, jing, camtasia, and iTunes.  Lest you think I’ll need a file rebuild for iTunes, that library is off box anyway.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are far more benefits, but these are the ones that jump out at me.  Assuming you’re on windows, you can convert your physical disk to virtual with &lt;a href="http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx" target="_blank"&gt;disk2vhd&lt;/a&gt;, another great tool from the &lt;a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx" target="_blank"&gt;Sysinternals&lt;/a&gt; team.  Note that if you plan to use Virtual PC, you’ll need to resize the drive to less than 127G with &lt;a href="http://support.microsoft.com/kb/300415" target="_blank"&gt;diskpart&lt;/a&gt; and then tell the drive it has shrunk as well with a tool like &lt;a href="http://www.windowsreference.com/free-utilities/vhd-resizer-resize-microsofts-vhd-hyper-v-files/" target="_blank"&gt;VHD Resizer&lt;/a&gt;.  If you want to use VMware Workstation, you’ll need an additional step that converts the drive from vhd format to vmdk with a tool like &lt;a href="http://www.winimage.com/" target="_blank"&gt;WinImage&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9f654587-ee53-4b1d-a394-8e739567950a" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5+DevCentral" rel="tag"&gt;F5 DevCentral&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Virtualization" rel="tag"&gt;Virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Desktop+Virtualization" rel="tag"&gt;Desktop Virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VMware+Workstation" rel="tag"&gt;VMware Workstation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Virtualbox" rel="tag"&gt;Virtualbox&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VirtualPC" rel="tag"&gt;VirtualPC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WinImage" rel="tag"&gt;WinImage&lt;/a&gt;,&lt;a href="http://technorati.com/tags/disk2vhd" rel="tag"&gt;disk2vhd&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SysInternals" rel="tag"&gt;SysInternals&lt;/a&gt;,&lt;a href="http://technorati.com/tags/diskpart" rel="tag"&gt;diskpart&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VHD+Resizer" rel="tag"&gt;VHD Resizer&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Don+MacVittie" rel="tag"&gt;Don MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Jason+Rahm" rel="tag"&gt;Jason Rahm&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/jason/aggbug/1090158.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jason Rahm</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/jason/archive/2010/07/09/benefits-of-desktop-virtualization.aspx</guid>
            <pubDate>Fri, 09 Jul 2010 12:56:54 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/jason/comments/1090158.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/jason/archive/2010/07/09/benefits-of-desktop-virtualization.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/jason/comments/commentRss/1090158.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
