<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>packetmischief.ca</title>
	
	<link>http://www.packetmischief.ca</link>
	<description>IP Networks. Datacenter. Security. Open Source. My Blog.</description>
	<lastBuildDate>Thu, 03 May 2012 04:04:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/packetmischief" /><feedburner:info uri="packetmischief" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/packetmischief" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fpacketmischief" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>OpenBSD 5.1 SNMP MIBs</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/LBYW67V3r9k/</link>
		<comments>http://www.packetmischief.ca/2012/05/02/openbsd-5-1-snmp-mibs/#comments</comments>
		<pubDate>Thu, 03 May 2012 04:04:18 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[openbsd]]></category>
		<category><![CDATA[openbsd-pf]]></category>
		<category><![CDATA[snmp]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1517</guid>
		<description><![CDATA[It&#8217;s May and that means a new version of OpenBSD is out. My SNMP MIBs have been updated for 5.1 and are available for download [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s May and that means a <a href="http://www.openbsd.org/51.html">new version</a> of OpenBSD is out. My SNMP MIBs have been updated for 5.1 and are available for download on the <a title="OpenBSD SNMP MIBs" href="http://www.packetmischief.ca/openbsd-snmp-mibs/">OpenBSD SNMP MIBs</a> page.</p>
<p><strong>THIS WILL BE ONE OF THE LAST RELEASES OF THE MIBS FOR NET-SNMP</strong></p>
<p>During the OpenBSD 5.1 development cycle, I committed the CARP MIB to the base OpenBSD snmpd. The kernel sensor MIB has been in the base snmpd for a few releases now. That leaves the pf MIB which was committed to 5.1-current some weeks ago and will be present in the 5.2 release.</p>
<p>So, you&#8217;ve got a few options.</p>
<ol>
<li>Want to still run Net-SNMP with the extra MIBS? Go to the <a title="OpenBSD SNMP MIBs" href="http://www.packetmischief.ca/openbsd-snmp-mibs/">SNMP MIBs</a> page and follow the directions. No change from previous versions. However, make plans to migrate away from Net-SNMP for OpenBSD 5.2.</li>
<li>Only use the CARP or kernel sensors MIB? Use the base <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=snmpd">snmpd(8)</a>. There&#8217;s no configuration necessary, just run the daemon. The MIB files are in /usr/share/snmp/mibs/ (The pf MIB file is present there, but the implementation is <em>not</em> part of snmpd(8) in 5.1). You should also read my guide on <a title="Switching from Net-SNMP to snmpd for CARP, PF and Sensor Monitoring" href="http://www.packetmischief.ca/2012/02/23/switching-from-net-snmp-to-snmpd-for-carp-pf-and-sensor-monitoring/">what&#8217;s changed</a> between the Net-SNMP and snmpd(8) implementations of the MIBs.</li>
<li>Want to use the base snmpd(8) but still have a requirement for Net-SNMP? See my blog post on <a title="Net-SNMP and snmpd Coexistence on OpenBSD" href="http://www.packetmischief.ca/2012/02/26/net-snmp-and-snmpd-coexistence-on-openbsd/">using both together</a>.</li>
</ol>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=LBYW67V3r9k:MtbezhhvDZ4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=LBYW67V3r9k:MtbezhhvDZ4:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=LBYW67V3r9k:MtbezhhvDZ4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/LBYW67V3r9k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/05/02/openbsd-5-1-snmp-mibs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/05/02/openbsd-5-1-snmp-mibs/</feedburner:origLink></item>
		<item>
		<title>Who? What? When? Wired? Wireless? With Cisco ISE</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/JulAeXG_r10/</link>
		<comments>http://www.packetmischief.ca/2012/04/30/who-what-when-wired-wireless-with-cisco-ise/#comments</comments>
		<pubDate>Tue, 01 May 2012 04:11:58 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[IT Pro]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[CiscoISE]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1449</guid>
		<description><![CDATA[Cisco&#8217;s Identity Services Engine (ISE) is a powerful rule-based engine for enabling policy-based network access to users and devices. ISE allows policy enforcement around the [...]]]></description>
			<content:encoded><![CDATA[<p>Cisco&#8217;s Identity Services Engine (ISE) is a powerful rule-based engine for enabling policy-based network access to users and devices. ISE allows policy enforcement around the <em>Who?</em>, <em>What?</em>, and <em>When?</em> of network access.</p>
<ul>
<li>Who is this user? A guest? An internal user? A member of the Finance department?</li>
<li>What device is the user bringing onto the network? A corporate PC? A Mac? A mobile device?</li>
<li>When are they connecting? Are they connecting to the secure network during regular business hours or at 02:00 in the morning?</li>
</ul>
<p>These questions can all be answered easily within ISE and are all standard policy conditions that are relatively easy to implement. In the post below I&#8217;m going to focus on the <em>How?</em> &#8212; How is the user or device connecting to the network? Asked another way, the question is <em>Wired?</em> or <em>Wireless?<span id="more-1449"></span></em></p>
<h2>Why Does Wired or Wireless Matter?</h2>
<p>TL;DR answer: Because if you can differentiate between the two types of users, you can apply different policies to each group. (And you almost always want to apply different policies to wired vs wireless users).</p>
<p>Longer answer: The most basic ISE policy would typically assign the user to a specific VLAN. This is really the most fundamental policy action. <em>If corporate user, then put in VLAN X. If guest user, then put in VLAN Y</em>. Policy complexity goes up from there which causes an even greater divergence of wired and wireless policy. Now, if you evaluate your wireless users against that same policy, does VLAN X and Y even exist on the wireless network? Probably not. Your WiFi network is probably either a more enterprise-y deployment with distributed access points (APs) and central controllers that have their own VLANs for bridging user traffic or you&#8217;ve got standalone APs doing the AAA requests themselves in which case they will ignore the VLAN that ISE sends and will dump every user into the same VLAN (which violates policy).</p>
<p>It&#8217;s important to apply unique ISE policies to wired and wireless users because it&#8217;s typical to have different business/security/technical policies for them.</p>
<h2>RADIUS Attributes</h2>
<p>Underneath the covers ISE uses the <a href="http://en.wikipedia.org/wiki/RADIUS">RADIUS</a> protocol to perform authentication, authorization, and accounting (AAA) functions. Between a client (the switch, access point or wireless controller where the user is connected) and the server (ISE) RADIUS passes attribute/value pairs (AVPs). These AVPs allow client and server to pass relevant information back and forth. For instance, the client informs the server of the username, password and MAC address of the end user trying to get onto the network. The server in turn replies with AVPs of its own which can include things like whether to allow or deny the access, the IP address the client should take and how long they&#8217;re allowed to stay on the network.</p>
<p>In addition to the basic AVPs, there&#8217;s a lot of AVPs exchanged that carry metadata about the session. This metadata is what&#8217;s used to answer the <em>Wired?</em> and <em>Wireless?</em> questions.</p>
<h2>Inspecting RADIUS Attributes</h2>
<p>Ok, so the RADIUS AVPs are being exchanged, how do we inspect them? This is the job of a &#8220;condition&#8221; in ISE.</p>
<p>I equate policies in ISE to an if-then-elseif-then ladder. The individual rules in the policy equate to a single &#8220;if&#8221; or &#8220;elseif&#8221; rule. The ISE conditions then are the expressions that are evaluated in the &#8220;if&#8221; or &#8220;elseif&#8221; rule. In fact, the policy editor screen even expresses the rules in an if-then fashion:</p>
<div id="attachment_1475" class="wp-caption aligncenter" style="width: 589px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_authz-if-elseif.png"><img class=" wp-image-1475  " title="Cisco ISE If-Then-ElseIf-Then Ladder" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_authz-if-elseif.png" alt="" width="579" height="112" /></a><p class="wp-caption-text">Cisco ISE If-Then-ElseIf-Then Ladder</p></div>
<p>As you can see in the screenshot, the conditions Cisco-IP-Phone, isFinanceUser, and isCorporateUser are consumed by the policy rules but their actual definition is not visible when looking at the policy. The conditions are defined separately from the policy which allows a condition to be treated as a building block and reused in multiple rules. My example policy below will use this feature when testing if a client has initiated an 802.1X connection.</p>
<div id="attachment_1462" class="wp-caption alignright" style="width: 160px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_conditions_menu.png"><img class="size-thumbnail wp-image-1462" title="Cisco ISE Condition Categories" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_conditions_menu-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Condition Categories</p></div>
<p>Conditions are defined in the Policy, Policy Elements, Conditions menu in ISE. There are six categories of conditions but I&#8217;ll only be looking at the Authorization (authz) conditions. Authz conditions come in two flavors: simple and compound. Simple conditions evaluate exactly (1) expression while compound conditions can evaluate multiple expressions with each either logically ANDed or ORed together.</p>
<h2>Building the Conditions</h2>
<p>ISE does most of the heavy lifting for us in the conditions department. It comes with policies for matching wired and wireless users already. However what I&#8217;ve found useful is to create conditions to match specific wireless networks as identified by their SSID. This allows specific policies on a per SSID basis.</p>
<p>Inside Policy, Policy Elements, Conditions, Authorization, Compound Conditions, add a new policy. Name the policy and give it a description. Then choose to &#8220;Create New Condition&#8221;.</p>
<div id="attachment_1508" class="wp-caption aligncenter" style="width: 506px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_create_new_condition.png"><img class=" wp-image-1508 " title="Cisco ISE Create New Condition" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_create_new_condition.png" alt="" width="496" height="181" /></a><p class="wp-caption-text">Creating a New Condition</p></div>
<p>Select the expression under &#8220;Radius&#8221; called &#8220;Called-Station-ID&#8221;. For a WiFi user, this AVP is sent to ISE as the MAC address of the access point and the SSID concatenated together with a colon (:) between them. Since the MAC address is irrelevant to our policy, we&#8217;ll use a &#8220;Matches&#8221; operator instead of &#8220;Equals&#8221; to just inspect the SSID part. <strong>Do not use &#8220;Equals&#8221; with a value of the SSID. It won&#8217;t work.</strong> &#8220;Match&#8221; conditions take regular expressions as a value. To match the SSID &#8220;Corp&#8221; use:</p>
<p><code>.*:Corp$</code></p>
<p>This says to match any number and type of character (.*), a colon (:), and the word &#8220;Corp&#8221; which must appear at the very end of the AVP value ($ means &#8220;at the end&#8221;).</p>
<div id="attachment_1509" class="wp-caption aligncenter" style="width: 415px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_corpwifi_condition.png"><img class=" wp-image-1509 " title="Cisco ISE CorpWifi SSID Condition" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_corpwifi_condition.png" alt="" width="405" height="193" /></a><p class="wp-caption-text">SSID_Corp Condition</p></div>
<p>That&#8217;s it for conditions. We&#8217;ll pair this with the existing one called &#8220;Wireless_802.1X&#8221;.</p>
<h2>Updating the Policy</h2>
<p>Now that we have the building blocks of our policy rules created we can update the policy. Written in plain language, our mock policy is this:</p>
<ul>
<li>Users in the finance department who connect to a wired port using 802.1X must be put in their own VLAN</li>
<li>All other corporate users connecting on a wired port using 802.1X must be put in the general user VLAN</li>
<li>Any user who connects to the &#8220;Corp&#8221; WiFi network using 802.1X must only connect between the hours of 08:00 and 18:00</li>
<li>Everyone else is denied access</li>
</ul>
<p class="exclaim">Even though I&#8217;m mentioning the policy results (the VLANs and time restrictions) above, I&#8217;m not going to show how to create them.</p>
<p>Translating our plain language policy into ISE means we&#8217;ll have to modify our existing finance and corporate user rules, add a rule for the Corp WiFi network, and modify the default rule from its stock &#8220;allow all&#8221; posture to &#8220;deny all&#8221;.</p>
<p>Whereas the simplest policy rules &#8212; and even the stock rules that come with ISE &#8212; only use a single condition, we&#8217;ll need to use multiple conditions which are logically ANDed together to get our desired results. For example, in our first rule we&#8217;ll need to look for members of the finance department AND users who are connecting on a wired 802.1X port. By adding conditions from the library, this rule can be built up to match our business policy.</p>
<div id="attachment_1467" class="wp-caption aligncenter" style="width: 522px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_add_condition.png"><img class=" wp-image-1467 " title="Cisco ISE Add Condition to Policy Rule" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_add_condition.png" alt="" width="512" height="131" /></a><p class="wp-caption-text">Add Condition to the Rule</p></div>
<p>Notice the choice of ANDing or ORing the conditions together.</p>
<div id="attachment_1468" class="wp-caption aligncenter" style="width: 450px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_condition_and_or.png"><img class=" wp-image-1468 " title="Cisco ISE Condition AND/OR" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_condition_and_or.png" alt="" width="440" height="114" /></a><p class="wp-caption-text">The AND/OR Selector</p></div>
<p>There it is. The first rule is complete. Now update the wired corporate user rule and create the WiFi rule and the policy should look like so:</p>
<div id="attachment_1512" class="wp-caption aligncenter" style="width: 632px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_mock_policy.png"><img class=" wp-image-1512 " title="Cisco ISE Mock Policy" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/ss_ise_mock_policy.png" alt="" width="622" height="136" /></a><p class="wp-caption-text">The Policy</p></div>
<p>By using the built-in conditions to test for wired and wireless connectivity and creating a custom condition to look for a specific SSID, unique policy results can now be applied to users based on answers to the questions <em>Wired?</em> and <em>Wireless?</em></p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=JulAeXG_r10:PXcKiU-50XQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=JulAeXG_r10:PXcKiU-50XQ:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=JulAeXG_r10:PXcKiU-50XQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/JulAeXG_r10" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/04/30/who-what-when-wired-wireless-with-cisco-ise/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/04/30/who-what-when-wired-wireless-with-cisco-ise/</feedburner:origLink></item>
		<item>
		<title>Five Functional Facts about FabricPath</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/bvdGX-zoneo/</link>
		<comments>http://www.packetmischief.ca/2012/04/17/five-functional-facts-about-fabricpath/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 14:30:20 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Datacenter]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[datacenter]]></category>
		<category><![CDATA[fabric]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1233</guid>
		<description><![CDATA[FabricPath is Cisco&#8217;s proprietary, TRILL-based technology for encapsulating Ethernet frames across a routed network. Its goal is to combine the best aspects of a Layer [...]]]></description>
			<content:encoded><![CDATA[<p>FabricPath is Cisco&#8217;s proprietary, <a href="http://en.wikipedia.org/wiki/TRILL_(computing)">TRILL</a>-based technology for encapsulating Ethernet frames across a routed network. Its goal is to combine the best aspects of a Layer 2 network with the best aspects of a Layer 3 network.</p>
<ul>
<li>Layer 2 plug and play characteristics</li>
<li>Layer 2 adjacency between devices</li>
<li>Layer 3 routing and path selection</li>
<li>Layer 3 scalability</li>
<li>Layer 3 fast convergence</li>
<li>Layer 3 Time To Live field to drop looping packets</li>
<li>Layer 3 failure domain isolation</li>
</ul>
<p>An article on FabricPath could go into a lot of detail and be many pages long but I&#8217;m going to concentrate on five facts that I found particularly interesting as I&#8217;ve learned more about FabricPath.</p>
<p><span id="more-1233"></span></p>
<h2>#1 &#8211; FabricPath is not a network topology</h2>
<p>When I first started learning about FabricPath, I believed that it came with a requirement that your network topology conform to certain rules. While I now know that is not true, there is a common topology that is discussed when talking about network fabrics. It&#8217;s called the spine+leaf topology.</p>
<p><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_spine_leaf_topo.png"><img class="aligncenter size-full wp-image-1236" title="Spine + Leaf Topology" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_spine_leaf_topo.png" alt="" width="445" height="231" /></a></p>
<p>This is similar to a traditional collapsed core design with a few differences.</p>
<ul>
<li>When we&#8217;re talking about a fabric, all links in the network are forwarding. So unlike a traditional network that is running Spanning Tree Protocol, each switch has multiple <em>active</em> paths to every other switch.</li>
<li>Because all of the links are forwarding, there are real benefits to scaling the network horizontally. Consider if the example topology above only showed (2) spine switches instead of (3). That would give each leaf switch (2) active paths to reach other parts of the network. By adding a third spine switch, not only is the bandwidth scaled but so is the resiliency of the network. The network can lose any spine switch and only drop 1/3rd of its bandwidth. In a traditional network that runs Spanning Tree Protocol, there is no benefit to scaling horizontally like this because STP will only allow (1) link to be forwarding at a time. The investment in an extra switch, transceivers, cables, etc, is just sitting idle waiting for a failure before it can start forwarding packets.</li>
</ul>
<p>So while the spine+leaf topology is commonly used when discussing FabricPath, it is not a requirement. In fact, even having full-mesh connectivity between spine and leaf nodes as shown in the drawing is not a requirement. You could connect each spine to every other leaf. You could connect spines to other spines or a leaf to a leaf.</p>
<p>According to Cisco, there is a lot of interest from customers about using FabricPath for connecting sites together (ie, as a data center interconnect or for connecting buildings in a campus). An example of that might be a ring topology that connects each of the sites.</p>
<p><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_dwdm_ring.png"><img class="aligncenter size-full wp-image-1237" title="FabricPath Betweem DWDM Sites" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_dwdm_ring.png" alt="" width="456" height="340" /></a></p>
<p>The drawing shows FabricPath being used between the switches that connect to the fiber ring. This is obviously a very different topology than spine+leaf and yet perfectly reasonable as far as FabricPath is concerned.</p>
<p>FabricPath is a method for encapsulating Layer 2 traffic across the network. It does not define or require a specific network topology. The rule of thumb is: if the topology makes sense for regular old IP routing, then it makes sense for FabricPath.</p>
<h2>#2 &#8211; FabricPath introduces its own unique data plane</h2>
<p>In order to achieve the benefits that FabricPath brings over Classical Ethernet, some significant changes needed to be implemented in the data plane of the network. Among these changes include:</p>
<ul>
<li>The introduction of a Time To Live field in the frame header which is decremented at each FabricPath hop</li>
<li>A unique addressing scheme consisting of a 12-bit switch ID which is used to switch frames through the fabric</li>
<li>A Reverse Path Forwarding check is done on each frame as it enters a FabricPath port (another loop prevention mechanism)</li>
<li>A new frame header format with these new fields</li>
</ul>
<p>In order for the hardware platform to switch FabricPath frames without any slowdown, new ASICs are required in the network. On the Nexus 7000, these ASICs are present on the F series I/O modules. It&#8217;s important to understand that not only do the FabricPath core ports need to be on an F series module but so do the Classic Ethernet edge ports which carry traffic belonging to FabricPath VLANs. This last requirement may impact certain existing environments where downstream devices are connected on M1 or M2 I/O modules.</p>
<p>FabricPath is also supported on the Nexus 5500 running NX-OS 5.1(3)N1(1) or higher. Cisco&#8217;s documentation isn&#8217;t exactly clear how FabricPath is implemented on the 5500 series but I&#8217;ve been told 55xx boxes do it in hardware (the original 50xx boxes do not support FabricPath).</p>
<h2>#3 &#8211; FabricPath does not unconditionally learn every MAC in the network</h2>
<p>One of the key issues with scaling modern data centers is that the number of MAC addresses each switch needs to learn is growing all the time. The explosion in growth is due mostly to the increase in virtualization. Consider a top-of-rack, 48-port Classical Ethernet switch that connects to 48 servers. That&#8217;s 48 MAC addresses that this switch and all the other switches in the network need to learn to send frames to those servers. Now consider that those 48 servers are really VMware vSphere hosts and that each host has 20 virtual machines (an average number, probably low for some environments). That&#8217;s 960 MAC addresses. Quite an increase. Now multiply that out by however many additional ToR switches are also servicing vSphere hosts. All of a sudden your switches&#8217; TCAM doesn&#8217;t look so big any more.</p>
<p>Since FabricPath continues the Layer 2 adjacency that Classical Ethernet has, it must also rely on MAC address learning to make forwarding decisions. The difference, however, is that FabricPath does not unconditionally learn the MAC addresses it sees on the wire. Instead it does &#8220;conversational learning&#8221; which means that for MACs that are reachable through the fabric, a FabricPath switch will only learn that MAC if it&#8217;s actively conversing with a MAC that is already present in the MAC forwarding table.</p>
<p><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_small_network.png"><img class="aligncenter size-full wp-image-1238" title="Small FabricPath Network" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_small_network.png" alt="" width="277" height="247" /></a></p>
<p>Consider Switch 2 in this example. Host A is reachable through the fabric while B and C are reachable via Classic Ethernet ports. The MACs of B and C are learned on Switch 2 using Classic Ethernet rules which is to say that they are learned as soon as they each send frames into the network. The MAC for A is only learned at Switch 2 if A is sending a unicast packet to B or C and their MAC is already in Switch 2&#8242;s forwarding table. If A sends a broadcast frame into the network (such as when A is sending an ARP &#8216;who-has&#8217; request looking for B&#8217;s MAC), Switch 2 will not learn A&#8217;s MAC (because the frame from A was not addressed to B, it was a broadcast). Also if A sends a unicast frame for Host D, a host that Switch 2 knows nothing about, Switch 2 will not learn A&#8217;s MAC (destination MAC must be in the forwarding table to learn the source MAC).</p>
<p>The conversational learning mechanism ensures that switches only learn relevant MACs and not every MAC in the entire domain thus easing the pressure on the finite amount of TCAM in the switch</p>
<h2>#4 &#8211; FabricPath ports do not have IP addresses</h2>
<p>One area where FabricPath gets confusing is when it&#8217;s referred to as &#8220;routing MAC addresses&#8221; or &#8220;Layer 2 over Layer 3&#8243;. It&#8217;s easy to hear terms like &#8220;routing&#8221; and &#8220;Layer 3&#8243; and associate that with the most common Layer 3 protocol on the planet &#8212; IP &#8212; and assume that IP must play a role in the FabricPath data plane. However, as outlined in #2 above, FabricPath employs its own unique data plane and has been engineered to take on the best characteristics of Ethernet at Layer 2 and IP at Layer 3 without actually using either of those protocols. Below is a capture of a FabricPath frame showing that neither Ethernet nor IP are in play.</p>
<p style="text-align: center;"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_frame_header.png"><img class="aligncenter  wp-image-1239" title="FabricPath Frame Header Capture" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_frame_header.png" alt="" width="558" height="131" /></a></p>
<p>Instead of using IP addresses, an address &#8212; called the &#8220;switch ID&#8221; &#8212; is automatically assigned to every switch on the fabric. This ID is used as the source and destination address for FabricPath frames destined to and sourced from the switch. Other fields such as the TTL can also be seen in the capture.</p>
<h2>#5 &#8211; FabricPath employs Equal Cost Multipath packet forwarding</h2>
<p>In Classic Ethernet networks that utilize Spanning Tree Protocol, it&#8217;s no secret that the bandwidth that&#8217;s been cabled up in the network is not used efficiently. STP&#8217;s only purpose in life is to make sure that redundant links in the network are not used during steady-state operation. That&#8217;s a poor ROI on the cost to put in those links and from a scaling/capacity perspective, it&#8217;s equally as poor since the network is limited to whatever the capacity is of that one link and cannot employ multiple parallel links. (Ok, you technically can using etherchannel but you understand the point I&#8217;m trying to make)</p>
<p>Since FabricPath doesn&#8217;t use STP in the fabric and because the fabric ports are routed interfaces and therefore have loop prevention mechanisms built-in, all of the fabric interfaces will be in a forwarding state capable of sending and receiving packets. Since all interfaces are forwarding it&#8217;s possible that there are equal cost paths to a particular destination switch ID. FabricPath switches can employ Equal Cost Multipathing (ECMP) to utilize all equal cost paths.</p>
<p><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_ecmp.png"><img class="aligncenter size-full wp-image-1254" title="FabricPath ECMP" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/fabricpath_ecmp.png" alt="" width="450" height="230" /></a></p>
<p>Here S100 has (3) equal cost paths to S300: A path to each of S10, S20, and S30 via the orange links and then from each of those switches to S300 via the purple links.</p>
<p>Much like a regular etherchannel or a CEF multipathing situation, FabricPath ECMP utilizes a hashing algorithm to determine which link a particular traffic flow should be put on. By default the inputs to the hash are:</p>
<ul>
<li>Source and destination Layer 3 address</li>
<li>Source and destination Layer 4 ports (if present)</li>
<li>802.1Q VLAN tag</li>
</ul>
<p>These values are all taken from the original, encapsulated Ethernet frame.</p>
<p>An interesting value-add that FabricPath does is to use the switch&#8217;s own MAC address as a key for shifting the hashed bits. This shifting prevents polarization of the traffic as it passes through the fabric (ie, prevents every switch from choosing &#8220;link #1&#8243; all the way through the network due to their hash outputs all being exactly the same). The benefit of this is only realized if there&#8217;s more than (2) hops between source and destination FabricPath switch.</p>
<p>So there you have it. Are you currently using or planning a FabricPath deployment? Please share your thoughts in the comments below.</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=bvdGX-zoneo:yyKiqe5OFDk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=bvdGX-zoneo:yyKiqe5OFDk:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=bvdGX-zoneo:yyKiqe5OFDk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/bvdGX-zoneo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/04/17/five-functional-facts-about-fabricpath/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/04/17/five-functional-facts-about-fabricpath/</feedburner:origLink></item>
		<item>
		<title>Android vs iOS: Opinions From a Long-Time Android User</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/1g88MCuS5jg/</link>
		<comments>http://www.packetmischief.ca/2012/04/09/android-vs-ios-opinions-from-a-long-time-android-user/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 03:49:11 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[IT Pro]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1415</guid>
		<description><![CDATA[I don&#8217;t really keep up to speed on consumer technology. For me, the enterprise IT space holds more challenge and interest. There is one piece [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t really keep up to speed on consumer technology. For me, the enterprise IT space holds more challenge and interest. There is one piece of consumer tech though that has become fully ingrained in my life: the tablet. For that reason, I&#8217;m going to summarize my experience in using both Android and Apple based tablets.<span id="more-1415"></span></p>
<p>For some background, I&#8217;ve been using the <a href="http://pdadb.net/index.php?m=specs&amp;id=2873&amp;c=rogers_lg_v905_optimus_pad">LG Optimus Pad</a> running Android 3.0 for the last year or so and an <a href="http://pdadb.net/index.php?m=specs&amp;id=2365&amp;c=telstra_htc_desire_a8183_htc_bravo">HTC Desire</a> running Android 2.3 for about two years. Prior to that I had an <a href="http://pdadb.net/index.php?m=specs&amp;id=1908&amp;c=htc_dream_htc_dream_110">HTC Dream</a> running Android 1.5 and then 1.6. I recently started using a <a href="http://pdadb.net/index.php?m=specs&amp;id=3422&amp;c=apple__ipad_3_4g_lte_64gb__new_ipad__ipad_3rd_generation">3rd-gen iPad</a> with WiFi &amp; 4G. My perspective on all this is from a long-time Android user who is stepping into the Apple camp for the first time. I use my tablet for productivity, studying, and some social networking. I&#8217;m not a gamer.</p>
<h3>Apps</h3>
<p>My first impression of the Apple App Store is how polished it appears. Every app has multiple screenshots and very detailed descriptions of what it does and what was changed in the latest version of the app. I&#8217;m not sure if this is a policy or just a convention adopted by app developers, but it works. In the Google Play store (formerly the Android Market) it can be hit and miss as far as what information the developer shares about their apps. I know I&#8217;ve seen lots of comments from users asking the developer to describe what they&#8217;ve changed in their latest version.</p>
<p>Just a gut feel here, but the App Store also doesn&#8217;t seem to have as many &#8220;junk&#8221; apps in it. I suppose this is a direct result of Apple&#8217;s tight control over what gets published in the store. As a result, my impression while browsing through the store was that I didn&#8217;t have to be quite as careful about what I installed given the knowledge that Apple had tested and vetted each app. Of course most people are familiar with the Google Play store and their reputation for allowing most anything into their store. This has both pros and cons but in this case, knowing that a second set of eyes was scrutinizing an app before I installed it made the Apple App Store feel a bit safer.</p>
<p>One thing that really surprised me was how different the same app can be between Android and iOS. <a href="http://www.evernote.com/">Evernote</a> is the best example I have. Not only does the app have a different interface, but it functions differently too. Browsing through notebooks on iOS is easy and intuitive and best of all, editing a note works exactly the way you expect it to. Highlighting text and applying formatting changes works without errors as does creating and modifying bulletted lists. I&#8217;ve had difficulty doing all of these things in the Android app and had to compromise by using much less formatting in my notes than I would&#8217;ve liked.</p>
<table border="0" align="center">
<tbody>
<tr>
<td>
<p><div id="attachment_1428" class="wp-caption aligncenter" style="width: 264px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/evernote_on_android.png"><img class="size-medium wp-image-1428" title="Evernote on Android" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/evernote_on_android-254x300.png" alt="" width="254" height="300" /></a><p class="wp-caption-text">How I had to compose notes on Android</p></div></td>
<td>
<p><div id="attachment_1429" class="wp-caption aligncenter" style="width: 258px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/evernote_on_ios.png"><img class="size-medium wp-image-1429 " title="Evernote on iOS" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/evernote_on_ios-248x300.png" alt="" width="248" height="300" /></a><p class="wp-caption-text">How I&#39;m able to compose notes on iOS</p></div></td>
</tr>
</tbody>
</table>
<p>As a result of the quality of apps like Evernote on iOS, I expect my use of these tools and my resulting productivity to rise appreciably.</p>
<p>My last observation on the apps is how much more I&#8217;m spending in the App Store than in Google Play. Many more apps are available for free in the Play store (eg, <a href="http://www.angrybirds.com/">Angry Birds</a>) and on top of that, the paid apps in the App Store generally seem to cost more than paid apps in the Play store. It&#8217;s not uncommon to see an app in the App Store for $9.99 or more whereas that would be considered an &#8220;expensive&#8221; app in the Play store. That said, taking an average of the 24 most popular paid apps currently listed in each store results in an average cost of $2.69 for the Play store and $2.78 for the App Store. Perhaps my impression is skewed because I&#8217;m purchasing a bunch of iOS apps all at once vs spread over a few months on the Android tablet.</p>
<h3>Hardware &amp; Software</h3>
<p>Ok, the hot-button issue first: software. Android software updates can be very frustrating because of how the ecosystem works. First Google releases a new version into the wild. The hardware manufacturers then have to take it and do their modifications, testing and certification on their various devices. The wireless carriers then get involved (in the case of a mobile phone or a 3G-enabled tablet) and go through their own rounds of testing and certification. Finally after what normally takes many months, it&#8217;s in the hands of the end user. Case in point, Android 4.0 (Ice Cream Sandwich) was released in October of 2011. Now five months on, devices like my LG Optimus Pad or the Samsung Galaxy Tab 10 still don&#8217;t have an official upgrade. By contrast, when a new version of iOS is released it doesn&#8217;t take long at all to get into the hands of the end user. With over-the-air upgrades now possible, the update can be put onto the device from almost anywhere.</p>
<p>On the hardware front, the thing that I noticed most of all with Android devices is the lack of choice when it comes to 3G-enabled tablets. This is partially due to the wireless carriers in my area only carrying a single Android tablet each and partially due to the lack of choice across the market. There are way too few 3G-enabled tablets coming to market in a time when <a href="http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537/ns705/ns827/white_paper_c11-520862.html">mobile data growth and adoption </a>is through the roof. This blows my mind and is my single biggest sticking point on the whole Android ecosystem. Apple, in my opinion, got it right by giving consumers the choice of 3G from the beginning.</p>
<h3>Operation</h3>
<p>One feature I love in Android is how apps can share directly with one another.</p>
<div id="attachment_1432" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/android_share_menu.png"><img class="size-medium wp-image-1432" title="Android &quot;Share&quot; Menu" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/android_share_menu-300x231.png" alt="" width="300" height="231" /></a><p class="wp-caption-text">Sharing a URL on with another app on Android</p></div>
<p>For example, when viewing an article in an RSS reader, the URL can be shared with a second app. This can either cause the app to open so that further work can be done by the user or the app can process the information that has been &#8220;shared&#8221; with it in the background (for example, that&#8217;s how the <a href="http://readitlaterlist.com/">Read It Later</a> app does it when it saves the URL to your reading list without you having to leave the RSS reader). The benefit of this is that once Read It Later is installed and linked with your RIL account, any other app on the device can take advantage of that linkage. Conversely on iOS, the reader itself would need to link with your RIL account. This means that for every app that wants to send something to RIL it has to be configured with your RIL username and password.</p>
<p>One feature I&#8217;m finding I really like in iOS is how backgrounded apps stay exactly where you left them for as long as you choose to leave that backgrounded app running. In Android &#8212; and I notice this most often with web browsers &#8212; the backgrounded app will eventually be terminated. This causes the application state to be lost which means whatever tabs or pages were open are lost. In iOS I can leave that browser open all night and come right back to the exact spot I left it the night before. The list of backgrounded apps on iOS also contains every single app that is running. On Android &#8212; at least with 3.0 and 2.3 &#8212; that list is limited in size and only shows the very most recently used apps.</p>
<h3>Disaster Recovery</h3>
<p>Disaster recovery isn&#8217;t really a term associated with consumer tech, but since I&#8217;ve come to rely so heavily on the tablet and have now loaded it with all kinds of information, it is something I&#8217;ve been thinking about. On my Android devices I was left with two options out of the box. Option #1 was to find an app in the Play store which was capable of backing up my device. <img class="alignright  wp-image-1435" title="What Backups?" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/04/what_backups-269x300.png" alt="" width="161" height="180" />Since I&#8217;m not comfortable storing my backups in the cloud, I want something that would save the backups locally and then allow me to copy them off to my PC. I never actually researched an app that would do this though (which I&#8217;ve always kind of marveled at since as an IT professional I understand the risk of not having those backups). Option #2 was to use the native Android &#8220;backup my device&#8221; feature. Again, I haven&#8217;t used this either since I&#8217;m not willing to store my backups in the cloud but some quick research indicates that this feature isn&#8217;t totally reliable and that not all apps are compatible which really defeats the purpose.</p>
<p>Apple seems to have done a better job in iOS. First there&#8217;s the backup that iTunes grabs every time the iPad is tethered to my PC. Next, to make things even easier, there&#8217;s now WiFi syncing with iTunes which means I don&#8217;t even have to tether to get that backup done. And if that wasn&#8217;t easy enough there&#8217;s also an option to backup to iCloud which means a backup can be taken anywhere as long as there&#8217;s Internet connectivity.</p>
<p>And of course, the flip side to taking a backup is restoration. Again, Apple seems to have gotten this right. The first time the iPad is turned on it asks if this is a new device or if it should attempt to restore a backup from iTunes or iCloud. Apple thought about the restoration right up front. Android? I honestly don&#8217;t know. And that&#8217;s problem enough. I never had confidence in the &#8220;backup my device&#8221; feature because I couldn&#8217;t find any concrete information about how to do a restore.</p>
<h3>My Thoughts So Far</h3>
<p>Walking out of the big box store, iPad in hand, my bank account was over $800 lighter. The iPad, the smart cover, the extra power adapter and the Zagg screen protector all add up. I don&#8217;t spend that kind of money lightly and I wondered as I drove off if this was going to be a costly mistake. Well, about an hour after opening the box, I was hooked. This thing is so easy to use. And it hit me: that&#8217;s exactly what I wanted. I didn&#8217;t want a &#8220;project&#8221; gadget that I would have to hack together and figure out workarounds for. I needed a tool that would keep me productive and that would get out of my way while working on it. The iPad is it.</p>
<p>My Android experience has been long and taken me through multiple devices. The Google Play store has a lot of great apps but I&#8217;ve found that even best of breed ones like Evernote are buggy and not totally polished. This lead to me finding workarounds and making compromises which made the tablet obtrusive when using it. Nowhere was this more apparent than when browsing the web. I have four browsers installed on my Android tablet (stock Browser, Dolphin for Pad V1.0 Beta, Opera Mobile and OverSkreen) and none of them are fully functional. Each of them suffers in at least one of these areas: speed, stability, Flash playback, and interface design. Without a doubt though Android does one thing better than Apple&#8217;s iOS ever will: integrate with Google products. Enter your Google username and password once during device setup and you&#8217;re hooked into your Gmail, contacts, calendar, RSS feeds, Google+ and so on. Being a big user of Google&#8217;s apps, this was a killer feature for me and one that I miss on the iPad.</p>
<h3>Conclusion</h3>
<p>I draw no conclusions here, good, bad or ugly. My intent is not to put one platform ahead of the other, but to give insight into the experience and opinion of a long-time Android user who recently made the plunge into the Apple world. To each their own.</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=1g88MCuS5jg:oqQh_PVCBQI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=1g88MCuS5jg:oqQh_PVCBQI:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=1g88MCuS5jg:oqQh_PVCBQI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/1g88MCuS5jg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/04/09/android-vs-ios-opinions-from-a-long-time-android-user/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/04/09/android-vs-ios-opinions-from-a-long-time-android-user/</feedburner:origLink></item>
		<item>
		<title>Packets of Interest (2012-03-29) – Bonjour</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/LJzhsIyPrlA/</link>
		<comments>http://www.packetmischief.ca/2012/03/29/packets-of-interest-2012-03-29-bonjour/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 04:27:23 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Packets of Interest]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[poi]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1401</guid>
		<description><![CDATA[These are some articles/interviews that I came across this week that got me thinking about Apple&#8217;s Bonjour in enterprise environments. Apple&#8217;s Bonjour protocol has been [...]]]></description>
			<content:encoded><![CDATA[<p>These are some articles/interviews that I came across this week that got me thinking about Apple&#8217;s Bonjour in enterprise environments.<span id="more-1401"></span></p>
<p>Apple&#8217;s <a href="http://en.wikipedia.org/wiki/Apple_Bonjour">Bonjour</a> protocol has been getting some attention lately and not because the new iPad was recently released, but more because of the rate of adoption of iDevices in the corporate world.</p>
<p>Bonjour is Apple&#8217;s implementation of networking &#8220;zeroconf&#8221;: a group of protocols and methods for connecting devices to a network with &#8220;zero configuration&#8221; on the part of the user or the network administrator (Ever seen a 169.254.x.x IP address? That&#8217;s one part of zeroconf). The part of Bonjour that is getting attention is the service discovery (SD) piece which allows a consumer (ie, an iPad) to discover providers (ie, printers, Apple TVs, etc) automatically. SD relies on link-local multicast messages to facilitate the discovery. This works great in a flat, Layer 2-only home network (which is where most iDevices have lived until recently) but breaks down in an enterprise network made up of multiple Layer 2 domains. If the consumer device is not in the same Layer 2 domain as the provider device, it will not be able to discover the provider.</p>
<p>The first article I read this week about Bonjour was from IT World Canada: <a href="http://www.itworldcanada.com/news/apples-bonjour-protocol-tamed-for-enterprise-wi-fi/145132">Apple&#8217;s Bonjour protocol tamed for enterprise Wi-Fi</a>. They go on to talk about Aruba Networks&#8217; recent announcement of support for the Bonjour protocol (specifically mDNS used for SD) in their wireless LAN controller software.</p>
<blockquote><p>[Aruba Networks] announced Thursday an update to its WLAN controller software that lets multicast domain name services, like Apple&#8217;s Bonjour protocol, work simply and securely but without creating a drag on the network. The new feature is called AirGroup, a reference to Apple&#8217;s nomenclature for capabilities like the mobile printing service AirPrint and AirPlay.</p></blockquote>
<p>The article also mentions Aerohive&#8217;s announcement of a controller-less access point that acts as an SD gateway between Layer 2 domains. More information on Aerohive&#8217;s announcement is available in their blog post titled <a href="http://blogs.aerohive.com/blog/the-wi-fi-security-blog/breaking-subnet-boundaries-with-bonjour-simplifying-apple-tv-and-airplay-in-the-enterprise">Breaking Subnet Boundaries with Bonjour: Simplifying Apple TV and AirPlay in the enterprise</a>.</p>
<blockquote><p>In designing this feature, we wanted to preserve the plug-and-play nature of Bonjour. We wanted our customers to be able to flip a switch and see services throughout the network. We specifically did NOT want our customers to have to learn a lot about the Bonjour protocol design, how to route and flood multicast frames, and think carefully about how to replicate multicast traffic between VLANs or smoosh devices together on to one Bonjour super-VLAN.</p></blockquote>
<p>Lastly, the Packet Pushers recently did a podcast with Aerohive where they talk about their upcoming Bonjour gateway product: <a title="Show 94 – Aerohive and Bonjour Gateway – Sponsored" href="http://packetpushers.net/show-94-aerohive-bonjour-gateway/">Show 94 – Aerohive and Bonjour Gateway</a>. It&#8217;s worth a listen.</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=LJzhsIyPrlA:jOgwo2YRSes:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=LJzhsIyPrlA:jOgwo2YRSes:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=LJzhsIyPrlA:jOgwo2YRSes:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/LJzhsIyPrlA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/03/29/packets-of-interest-2012-03-29-bonjour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/03/29/packets-of-interest-2012-03-29-bonjour/</feedburner:origLink></item>
		<item>
		<title>How Unix Made Me a Better Network Engineer</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/Ae7AZU3nSK0/</link>
		<comments>http://www.packetmischief.ca/2012/03/29/how-unix-made-me-a-better-network-engineer/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 03:36:35 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[IT Pro]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[openbsd]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1386</guid>
		<description><![CDATA[I&#8217;ve had two main areas of interest in my IT career. Professionally, I&#8217;ve been a network guy. Designing, building, and supporting IP networks is what [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had two main areas of interest in my IT career. Professionally, I&#8217;ve been a network guy. Designing, building, and supporting IP networks is what pays my bills. On the other side, I&#8217;m a Unix geek. Building, tinkering, and hacking code on Unix systems and related open source software has always been fun and challenging for me. Recently I was reflecting on my career and realized that my Unix and open source experience has played a big role in my career as a network engineer. Here&#8217;s some of the ways I believe network engineers can benefit from Unix experience.<span id="more-1386"></span></p>
<p><strong>Instantly familiar with Unix servers</strong> &#8211; In the larger, more mature environments there&#8217;s typically Unix systems that exist to support network operations. <a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/03/unix-logos.jpg"><img class="alignright  wp-image-1389" style="border: 1px solid black;" title="Unix Logos" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/03/unix-logos.jpg" alt="" width="240" height="180" /></a>From trusted hosts/jump boxes to syslog and RADIUS/TACACS servers, Unix is typically the platform of choice. When coming into an environment like this, where others would face a learning curve in dealing with these systems, network engineers with Unix knowledge are able to start using them right away with little effort. Additionally, being familiar with daemons such as syslogd, tftpd, radiusd, etc, makes it really easy to start using these tools in support of the network. Whereas other network engineers likely stop learning about the Unix systems once they&#8217;ve learned how to login and do essential tasks only, a Unix background allows the engineer to swiftly navigate through the system and leverage the tools and services that are there to do a better job of maintaining the network.</p>
<p><strong>Leg up in understanding Unix-based network operating systems</strong> &#8211; From Arista&#8217;s EOS to Juniper&#8217;s Junos, lots of network operating systems can trace their roots back to open source Unix. Sure they all have their own CLI shell that mostly hides the hard, Unix-y center, but underneath it&#8217;s still there. Being able to understand process management, memory management, file system mount points, heck, even the root user and what it&#8217;s capable of gives a network engineer an immediate advantage on these OSes even though they might not have seen them before.</p>
<p><strong>Scripting and automation</strong> &#8211; Part of Unix culture is being able to create scripts and bits of code to help administer a system or automate a repetitive task. Those ideals are really valuable in the networking world too. Having the ability to create scripts which help manage network devices makes a network engineer more efficient and all but eliminates the likelihood of human error. Knowledge of PERL, shell scripts and even PHP enables the creation of tools for doing bulk config changes, mass backups, and automated reporting. This enables an engineer to concentrate on high-value tasks such as building out the network rather than tedious, low-value (but still important!) tasks.</p>
<p><strong>Hands-on experience with ports, packets, and protocols</strong> &#8211; Considering that Unix is a very network-centric operating system, it&#8217;s very hard to learn Unix and not pick up network knowledge at the same time. Learning what a TCP/UDP port is, understanding how sockets are opened and closed, even something very simple like memorizing the TCP/UDP port number of common services (Pick a random port number and ask a Unix person what it&#8217;s used for. I bet they know the answer) are all byproducts of working on Unix systems.</p>
<p>Most Unix systems have at least one network sniffer installed (tcpdump, Wireshark, etc) which makes them easy to play with and learn about. <a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/03/tcp_stack_y_u_no.jpg"><img class="alignright  wp-image-1392" title="TCP Stack, Y U No See My Acks?" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/03/tcp_stack_y_u_no-300x225.jpg" alt="" width="240" height="180" /></a>They also give you experience troubleshooting bits on the wire and help to visualize how multilayer network models (like the OSI model) work in practice. Sniffer experience also helps drive home the theory of how certain protocols work such as TCP with its 3-way handshake; nothing breeds understanding like seeing it in action, or better yet, troubleshooting it. Having quick access to a sniffer on a Unix system makes it really effortless to pick it up and start using.</p>
<p>Most Unix systems also come with some sort of firewall software. Cutting your teeth on these firewalls can gain you valuable experience and knowledge in understanding traffic flows, writing firewall policies, and further understanding of the TCP 3-way handshake, windowing, and sequence numbers. That knowledge will help you in both managing enterprise firewall systems and talking with security/firewall teams in a language that they understand.</p>
<p>Lastly, since Unix boxes are able to run just about every network service under the sun &#8212; ftp, smtp, dns, dhcp, tftp, www, ntp, snmp, various databases, and so on &#8212; it&#8217;s convenient (and dare I say fun??) to play with these tools and gain experience and knowledge of these services and application layer protocols. This experience is invaluable when it comes to troubleshooting issues in a production environment because you&#8217;re able to understand how the service works right from the lowest network layers all the way up through the stack to the application layer. This understanding combined with firewall experience can be a killer combination when it comes to provisioning and troubleshooting.</p>
<p><strong>Professional advancement</strong> &#8211; So far I&#8217;ve talked only about the technical and knowledge benefits of being a network engineer and Unix geek but there&#8217;s a whole other aspect: career advancement. Unix experience allows you to set yourself apart from others by solving problems they can not, bringing value to your team and department by way of writing scripts and tools, and demonstrating deep understanding of ports, packets, and protocols. By standing out from the crowd you make youself more valuable to your employer which increases your job security and also your chances of promotions, raises, etc. WIN!</p>
<p><strong>Summary</strong> &#8211; Although I didn&#8217;t realize any of these things at the time they were happening, I can see it now looking back. <a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/03/unix-this-is-just-epic.jpg"><img class="alignright  wp-image-1395" title="Unix is Just Epic" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/03/unix-this-is-just-epic-252x300.jpg" alt="" width="151" height="180" /></a>Unix has made me a better network engineer and I believe all network engineers would benefit from a moderate level of Unix experience. These two seemingly unrelated areas of skill and knowledge are actually more related than they first appear and can be mutually beneficial to those that claim both as part of their overall skill set.</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=Ae7AZU3nSK0:vgPs6WRfmIk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=Ae7AZU3nSK0:vgPs6WRfmIk:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=Ae7AZU3nSK0:vgPs6WRfmIk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/Ae7AZU3nSK0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/03/29/how-unix-made-me-a-better-network-engineer/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/03/29/how-unix-made-me-a-better-network-engineer/</feedburner:origLink></item>
		<item>
		<title>Cisco UCS and SR-IOV</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/N8LR3ZUf7xQ/</link>
		<comments>http://www.packetmischief.ca/2012/03/22/cisco-ucs-and-sr-iov/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 15:38:04 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Datacenter]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[CiscoUCS]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1352</guid>
		<description><![CDATA[I read an excellent blog post by Scott Lowe (@scott_lowe) this week on Single Root I/O Virtualization (SR-IOV) titled &#8220;What is SR-IOV?&#8220;. It&#8217;s an older [...]]]></description>
			<content:encoded><![CDATA[<p>I read an excellent blog post by Scott Lowe (<a href="https://twitter.com/#!/ScottLowe">@scott_lowe</a>) this week on Single Root I/O Virtualization (SR-IOV) titled &#8220;<a href="http://blog.scottlowe.org/2009/12/02/what-is-sr-iov/">What is SR-IOV?</a>&#8220;. It&#8217;s an older post but it did a great job of solidifying my understanding and filling in the knowledge gaps. One thing that stuck out was this bit:</p>
<blockquote><p>SR-IOV requires support in the BIOS as well as in the operating system instance or hypervisor that is running on the hardware. Until very recently, I had been under the impression that SR-IOV was handled solely in hardware and did not require any software support; unfortunately, I was mistaken. Software support in the operating system instance or hypervisor is definitely required.</p></blockquote>
<p>Like Scott, I didn&#8217;t realize there was a software dependency. Here&#8217;s the kicker though:</p>
<blockquote><p>I do not have a timeframe for SR-IOV support in VMware vSphere or Microsoft Hyper-V.</p></blockquote>
<p>Ouch. I immediately wondered how the Virtual Interface Cards (VICs) in Cisco UCS were able to successfully present multiple vNICs and vHBAs to the hypervisor. Was Cisco pulling a fast one? Was this only possible if the UCS node was running an OS like Windows or Redhat on bare metal and not when running vSphere or Hyper-V?</p>
<p>To the Google! Actually, first to bradhedlund.com. Brad (<a href="https://twitter.com/#!/bradhedlund">@bradhedlund</a>) is well known in the blogosphere and Twitterverse as a Cisco UCS authority. He plainly points out [<a href="http://bradhedlund.com/2010/12/31/cisco-ucs-criticism-and-fud-answered/">Cisco UCS criticism and FUD: Answered</a>, answer to question #6] that the UCS VIC does not employ SR-IOV but uses alternate, standards-based PCIe methods of presenting virtual hardware to the hypervisor.</p>
<p>To further drive the point home, the datasheet for the first generation &#8220;Palo&#8221; adapter [<a href="http://www.cisco.com/en/US/prod/collateral/ps10265/ps10280/data_sheet_c78-525049_ps10277_Products_Data_Sheet.html">UCS M81KR Virtual Interface Card</a>] and the gen 2 1240/1280 cards [<a href="http://www.cisco.com/en/US/prod/collateral/modules/ps10277/ps12377/data_sheet_c78-699459.html">UCS Virtual Interface Card 1240 Data Sheet</a>] both state that IO virtualization is achieved without the use of SR-IOV.</p>
<p>So there we go. Question asked and answered. I don&#8217;t quite understand what the &#8220;alternate methods&#8221; are, but I know that the VIC adapters will work just fine with vSphere and Hyper-V.</p>
<p>On a side note, the thing that led me down this rabbit hole was Scott&#8217;s recent post on SR-IOV support coming in the next version of Hyper-V [<a title="Permanent link to SR-IOV Support in the Next Version of Hyper-V" href="http://blog.scottlowe.org/2012/03/18/sr-iov-support-in-the-next-version-of-hyper-v/" rel="bookmark">SR-IOV Support in the Next Version of Hyper-V</a>].</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=N8LR3ZUf7xQ:VIe10-hqGnk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=N8LR3ZUf7xQ:VIe10-hqGnk:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=N8LR3ZUf7xQ:VIe10-hqGnk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/N8LR3ZUf7xQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/03/22/cisco-ucs-and-sr-iov/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/03/22/cisco-ucs-and-sr-iov/</feedburner:origLink></item>
		<item>
		<title>RANCID and the Octothorpe</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/lE-dUOnfAP8/</link>
		<comments>http://www.packetmischief.ca/2012/03/20/rancid-and-the-octothorpe/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 03:49:54 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[network-mgmt]]></category>
		<category><![CDATA[patches]]></category>
		<category><![CDATA[rancid]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1362</guid>
		<description><![CDATA[RANCID (Really Awesome New Cisco confIg Differ) is a tool for automating the collection of hardware and configuration data from network devices. I recently upgraded [...]]]></description>
			<content:encoded><![CDATA[<p>RANCID (<a href="http://www.shrubbery.net/rancid/">Really Awesome New Cisco confIg Differ</a>) is a tool for automating the collection of hardware and configuration data from network devices. I recently upgraded an installation from version 2.3.1 to 2.3.8. And naturally, because I didn&#8217;t have a ton of time to devote to this, stuff broke. It stopped pulling data from some switches. Not all switches, mind, that would be too easy to troubleshoot. Only some.</p>
<p><span id="more-1362"></span></p>
<p>So after getting my hands dirty in PERL and TCL/expect, I found that somewhere between v2.3.1 and 2.3.8, the logic that governs the login process to a Cisco device was changed. RANCID tries to determine if at first login, it&#8217;s being dropped into privileged mode or regular exec mode. In v2.3.8 it does this by hunting for two characters in the output coming off the switch during login:</p>
<ul>
<li>The greater-than sign &#8220;&gt;&#8221;, meaning it&#8217;s exec model, and&#8230;</li>
<li>The octothorpe! &#8220;#&#8221;, meaning it&#8217;s privileged mode</li>
</ul>
<p>Well, turns out, on the switches that weren&#8217;t being collected any more we use the octothorpe in the login banner. Things like &#8220;This switch is in cabinet #1234&#8243;. Really innocuous stuff. However, RANCID sees this character and believes it&#8217;s seeing the prompt for privileged mode. As a result, it doesn&#8217;t bother issuing the &#8220;enable&#8221; command. This causes problems later on when it tries to run commands like &#8220;show run&#8221;.</p>
<p>As per the RANCID <a href="http://www.shrubbery.net/rancid/FAQ">FAQ</a>, their take is that you need to avoid using &#8220;&gt;&#8221; and &#8220;#&#8221; in the banners. This is annoying, especially for a character as common as &#8220;#&#8221; and also pretty challenging to drive home in a team of multiple network engineers.</p>
<p>My solution was to amend the regular expression that RANCID uses to find the prompt. It now looks for the &#8220;&gt;&#8221; or &#8220;#&#8221; characters (as well as the string &#8221; (enable)&#8221; in case you&#8217;re on an CatOS box) followed by optional whitespace and then a line return.</p>
<pre class="code">--- bin/clogin.orig     Tue Mar 20 10:00:35 2012
 +++ bin/clogin  Tue Mar 20 10:22:01 2012
 @@ -750,7 +750,11 @@
 }

      # Default prompt.
 -    set prompt "(&gt;|#| \\(enable\\))"
 +    # This has been modified from the stock regexp by adding the "\\s*$". This
 +    # works around our use of the '#' character in the login banner at $WORK.
 +    # Note that this would fail if we had the '#' character at the end of a
 +    # line in the banner, but for now, we don't.   -jknight 2012.03.20
 +    set prompt "(&gt;|#| \\(enable\\))\\s*$"

      # look for noenable option in .cloginrc
      if { [find noenable $router] == "1" } {</pre>
<p>For us, anchoring the regexp to the end of the line worked because we don&#8217;t use the octothorpe at the end of line, just in the middle of sentences and maybe at the beginning of lines. If you have a banner like this:</p>
<blockquote>
<pre>#####################
# THIS IS MY SWITCH #
#####################</pre>
</blockquote>
<p>This won&#8217;t work and you&#8217;ll still have issues.</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=lE-dUOnfAP8:-tPL3TNB__U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=lE-dUOnfAP8:-tPL3TNB__U:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=lE-dUOnfAP8:-tPL3TNB__U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/lE-dUOnfAP8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/03/20/rancid-and-the-octothorpe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/03/20/rancid-and-the-octothorpe/</feedburner:origLink></item>
		<item>
		<title>Net-SNMP and snmpd Coexistence on OpenBSD</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/9snnR1wIQvc/</link>
		<comments>http://www.packetmischief.ca/2012/02/26/net-snmp-and-snmpd-coexistence-on-openbsd/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 21:05:31 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[openbsd]]></category>
		<category><![CDATA[snmp]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1300</guid>
		<description><![CDATA[Although it would be awesome to ditch Net-SNMP altogether now that the base OpenBSD SNMP daemon has support for all of the OpenBSD-related MIBS (CARP, [...]]]></description>
			<content:encoded><![CDATA[<p>Although it would be awesome to ditch Net-SNMP altogether now that the base OpenBSD SNMP daemon has support for all of the OpenBSD-related MIBS (CARP, PF, kernel sensors), reality is that Net-SNMP still offers some features that are needed. OpenBSD doesn&#8217;t have any SNMP tools (snmpwalk, snmpset, etc) so these are still required from Net-SNMP. There&#8217;s also some unique features in the Net-SNMP daemon that are still useful if you want to do things like <a title="Monitoring BIND9" href="http://www.packetmischief.ca/monitoring-bind9/">monitor BIND9</a> or <a title="Monitoring Postfix" href="http://www.packetmischief.ca/monitoring-postfix/">Postfix</a> statistics.</p>
<p>Here&#8217;s how to run both at the same time and leverage snmpd for the OpenBSD-related MIBs and the Net-SNMP daemon for its ability to retrieve data from scripts and extend itself using loadable modules and smux sub-agents.<span id="more-1300"></span></p>
<p>One of the unique features of the Net-SNMP daemon is its ability to proxy SNMP requests and forward them to another agent. By using this feature, queries for OpenBSD-related OIDs can be proxied through to the OpenBSD snmpd and Net-SNMP can handle the rest.</p>
<p><a href="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/net-snmp-proxy-to-snmpd.png"><img class="aligncenter size-full wp-image-1306" title="Net-SNMP Proxy to snmpd" src="http://www.packetmischief.ca/wordpress/wp-content/uploads/2012/02/net-snmp-proxy-to-snmpd.png" alt="" width="451" height="336" /></a></p>
<p>The settings for Net-SNMP are configured in /etc/snmp/snmpd.conf and should look like this:</p>
<p><code>proxy -v2c -c public 127.0.0.1:161 .1.3.6.1.4.1.30155<br />
agentaddress 172.16.0.3:161<br />
</code></p>
<p>The proxy setting takes the same basic arguments as snmpwalk(1), snmpset(1), etc. You should explicitly set the SNMP version and community string as these are <em>not</em> passed through from the original SNMP query. This community string is used when querying the OpenBSD snmpd so make sure it matches with how snmpd has been configured (see below). The IP and port are where the OpenBSD snmpd is listening and the OID string is where all the OpenBSD-related MIBs are rooted at. Net-SNMP will proxy any requests for children of this OID to the OpenBSD snmpd.</p>
<p>The agent must be manually bound to a specific IP (as opposed to the default of &#8220;all IPs on the machine&#8221;) using the agentaddress setting because of the second listener on 127.0.0.1. You can&#8217;t have one listener on a specific IP and the other on &#8220;all IPs&#8221; for the same port.</p>
<p class="exclaim">I know what you&#8217;re thinking: put snmpd on a port other than 161. As of this writing, you cannot configure the listening port in the OpenBSD snmpd, only the listening IP address.</p>
<p>The configuration for OpenBSD&#8217;s snmpd is done in /etc/snmpd.conf and should look like this:</p>
<p><code>listen on 127.0.0.1<br />
read-only community public</code></p>
<p>This is enough to allow Net-SNMP to query snmpd. Other options may be present in your snmpd.conf but these two are the only ones related to the coexistence with Net-SNMP.</p>
<p class="exclaim">Note: If you send traps from the OpenBSD snmpd, you can still set &#8220;listen on&#8221; to 127.0.0.1. Trap PDUs will be sourced from the outgoing interface IP address.</p>
<p>With the settings above, Net-SNMP will still handle queries for standard MIBs such as HOST-RESOURCES-MIB. These too can be proxied through to OpenBSD snmpd by using the OIDs below.</p>
<table border="0" align="center">
<tbody>
<tr>
<td>
<h4>MIB</h4>
</td>
<td>
<h4>Base OID</h4>
</td>
</tr>
<tr>
<td>HOST-RESOURCES-MIB</td>
<td>.1.3.6.1.2.1.25</td>
</tr>
<tr>
<td>IF-MIB</td>
<td>.1.3.6.1.2.1.2</td>
</tr>
<tr>
<td>IP-MIB</td>
<td>.1.3.6.1.2.1.4</td>
</tr>
<tr>
<td>SNMPv2-MIB</td>
<td>.1.3.6.1.2.1.1</td>
</tr>
<tr>
<td>BRIDGE-MIB</td>
<td>.1.3.6.1.2.1.17</td>
</tr>
</tbody>
</table>
<p>Please post a comment if you are one of the people who needs to keep the Net-SNMP daemon around. It&#8217;d be great to build up the features in the OpenBSD snmpd so we can one day eliminate the need for Net-SNMP.</p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=9snnR1wIQvc:pmJl62LsADY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=9snnR1wIQvc:pmJl62LsADY:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=9snnR1wIQvc:pmJl62LsADY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/9snnR1wIQvc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/02/26/net-snmp-and-snmpd-coexistence-on-openbsd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/02/26/net-snmp-and-snmpd-coexistence-on-openbsd/</feedburner:origLink></item>
		<item>
		<title>Switching from Net-SNMP to snmpd for CARP, PF and Sensor Monitoring</title>
		<link>http://feedproxy.google.com/~r/packetmischief/~3/_DTzh2uzPvo/</link>
		<comments>http://www.packetmischief.ca/2012/02/23/switching-from-net-snmp-to-snmpd-for-carp-pf-and-sensor-monitoring/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 05:04:28 +0000</pubDate>
		<dc:creator>Joel Knight</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[openbsd]]></category>
		<category><![CDATA[openbsd-pf]]></category>
		<category><![CDATA[snmp]]></category>

		<guid isPermaLink="false">http://www.packetmischief.ca/?p=1265</guid>
		<description><![CDATA[Update: For help running both snmpds at the same time, see Net-SNMP and snmpd Coexistence on OpenBSD. Now that OPENBSD-CARP-MIB and OPENBSD-PF-MIB have been added to [...]]]></description>
			<content:encoded><![CDATA[<p><span class="update">Update:</span> For help running both snmpds at the same time, see <a title="Net-SNMP and snmpd Coexistence on OpenBSD" href="http://www.packetmischief.ca/2012/02/26/net-snmp-and-snmpd-coexistence-on-openbsd/" rel="bookmark">Net-SNMP and snmpd Coexistence on OpenBSD</a>.</p>
<p>Now that <a href="http://article.gmane.org/gmane.os.openbsd.cvs/110453">OPENBSD-CARP-MIB</a> and <a href="http://article.gmane.org/gmane.os.openbsd.cvs/110691">OPENBSD-PF-MIB</a> have been added to the base snmpd in OpenBSD (CARP-MIB will be in 5.1-release, PF-MIB in 5.2, and the SENSOR MIB has been there since 4.5), I wanted to document the differences between these MIBs and the corresponding <a title="OpenBSD SNMP MIBs" href="http://www.packetmischief.ca/openbsd-snmp-mibs/">implementation</a> of the MIBs that I wrote for Net-SNMP.</p>
<p>Both implementations provide the same set of OIDs and allow the same data to be retrieved. Whatever you were querying via Net-SNMP is available via snmpd.</p>
<p>What has changed is the base OID where the CARP and PF MIBs are rooted at as well as the name of certain OIDs.<span id="more-1265"></span></p>
<h3>Difference #1 &#8211; New base OpenBSD OID</h3>
<p>The Net-SNMP implementation used a private/reserved enterprise OID of 64512 (ie, .1.3.6.1.4.1.64512) as the base OID for all the OPENBSD-* MIBs. In the snmpd implementation, the OpenBSD enterprise number 30155 is used as the root for OPENBSD-* MIBs.</p>
<p class="exclaim">Fix: Change all occurrences of 64512 to 30155 in all query strings</p>
<p>NOTE: All the OIDs after the enterprise OID should remain unchanged. Eg, a query string of .1.3.6.1.4.1.64512.a.b.c.d should be modified to .1.3.6.1.4.1.30155.a.b.c.d with a.b.c.d remaining unchanged.</p>
<h3>Difference #2 &#8211; New CARP OID</h3>
<p>The only exception to the rule that the a.b.c.d in .1.3.6.1.4.1.64512.a.b.c.d should remain unchanged is with the CARP MIB. Due to an overlap in OID assignments, the CARP MIB had its base OID changed from 3 to 6 in the snmpd implementation. When fixing query strings that refer to the CARP MIB, .1.3.6.1.4.1.<strong>64512.3</strong>.b.c.d should be changed to .1.3.6.1.4.1.<strong>30155.6</strong>.b.c.d</p>
<p class="exclaim">Fix: If your query string uses the OID name, no changes are necessary. Just ensure your NMS and SNMP tools are loading the MIB definition (OPENBSD-CARP-MIB.txt) from /usr/share/snmp/mibs/. If your query string uses numeric OIDs, change .1.3.6.1.4.1.<strong>64512.3</strong>.X to .1.3.6.1.4.1.<strong>30155.6</strong>.X</p>
<h3>Difference #3 &#8211; New OID names in PF-MIB</h3>
<p>In order to avoid naming conflicts between OIDs (not just within the OPENBSD-* MIBs, but with 3rd-party MIBs as well) some of the OID names in the PF-MIB were modified in the snmpd implementation to make them more unique and to identify them as belonging to PF-MIB. For example, &#8220;running&#8221; has been renamed to &#8220;pfRunning&#8221;, &#8220;memory&#8221; to &#8220;pfCntMemory&#8221;, and &#8220;tcpFirst&#8221; to &#8220;pfTimeoutTcpFirst&#8221;.</p>
<p class="exclaim">Fix: If you use OID names in your query strings, replace any Net-SNMP names in the table below with the corresponding snmpd name.</p>
<p>This table shows the old Net-SNMP name and the corresponding new snmpd name. Note that some of the old names are duplicates (such as &#8220;fragment&#8221;, &#8220;removal&#8221;, &#8220;count&#8221;, etc) so be careful if you&#8217;re doing a search &amp; replace.</p>
<table style="width: 262px; height: 438px;" border="0" align="center">
<tbody>
<tr>
<td style="text-align: center;">
<h4><strong>Net-SNMP name</strong></h4>
</td>
<td style="text-align: center;">
<h4><strong>snmpd name</strong></h4>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>info</pre>
</td>
<td style="text-align: center;">
<pre>pfInfo</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>running</pre>
</td>
<td style="text-align: center;">
<pre>pfRunning</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>runtime</pre>
</td>
<td style="text-align: center;">
<pre>pfRuntime</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>debug</pre>
</td>
<td style="text-align: center;">
<pre>pfDebug</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>hostid</pre>
</td>
<td style="text-align: center;">
<pre>pfHostid</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>counters</pre>
</td>
<td style="text-align: center;">
<pre>pfCounters</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>match</pre>
</td>
<td style="text-align: center;">
<pre>pfCntMatch</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>badOffset</pre>
</td>
<td style="text-align: center;">
<pre>pfCntBadOffset</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>fragment</pre>
</td>
<td style="text-align: center;">
<pre>pfCntFragment</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>short</pre>
</td>
<td style="text-align: center;">
<pre>pfCntShort</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>normalize</pre>
</td>
<td style="text-align: center;">
<pre>pfCntNormalize</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>memory</pre>
</td>
<td style="text-align: center;">
<pre>pfCntMemory</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>timestamp</pre>
</td>
<td style="text-align: center;">
<pre>pfCntTimestamp</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>congestion</pre>
</td>
<td style="text-align: center;">
<pre>pfCntCongestion</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip-option</pre>
</td>
<td style="text-align: center;">
<pre>pfCntIpOption</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>proto-cksum</pre>
</td>
<td style="text-align: center;">
<pre>pfCntProtoCksum</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>stateTable</pre>
</td>
<td style="text-align: center;">
<pre>pfStateTable</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>state-mismatch</pre>
</td>
<td style="text-align: center;">
<pre>pfCntStateMismatch</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>state-insert</pre>
</td>
<td style="text-align: center;">
<pre>pfCntStateInsert</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>state-limit</pre>
</td>
<td style="text-align: center;">
<pre>pfCntStateLimit</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>src-limit</pre>
</td>
<td style="text-align: center;">
<pre>pfCntSrcLimit</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>synproxy</pre>
</td>
<td style="text-align: center;">
<pre>pfCntSynproxy</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>count</pre>
</td>
<td style="text-align: center;">
<pre>pfStateCount</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>searches</pre>
</td>
<td style="text-align: center;">
<pre>pfStateSearches</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>inserts</pre>
</td>
<td style="text-align: center;">
<pre>pfStateInserts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>removals</pre>
</td>
<td style="text-align: center;">
<pre>pfStateRemovals</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>loginterface</pre>
</td>
<td style="text-align: center;">
<pre>pfLogInterface</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>name</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfName</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ipBytesIn</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIpBytesIn</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ipBytesOut</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIpBytesOut</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ipPktsInPass</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIpPktsInPass</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ipPktsInDrop</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIpPktsInDrop</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ipPktsOutPass</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIpPktsOutPass</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ipPktsOutDrop</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIpPktsOutDrop</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip6BytesIn</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIp6BytesIn</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip6BytesOut</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIp6BytesOut</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip6PktsInPass</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIp6PktsInPass</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip6PktsInDrop</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIp6PktsInDrop</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip6PktsOutPass</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIp6PktsOutPass</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ip6PktsOutDrop</pre>
</td>
<td style="text-align: center;">
<pre>pfLogIfIp6PktsOutDrop</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>sourceTracking</pre>
</td>
<td style="text-align: center;">
<pre>pfSrcTracking</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>count</pre>
</td>
<td style="text-align: center;">
<pre>pfSrcTrackCount</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>searches</pre>
</td>
<td style="text-align: center;">
<pre>pfSrcTrackSearches</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>inserts</pre>
</td>
<td style="text-align: center;">
<pre>pfSrcTrackInserts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>removals</pre>
</td>
<td style="text-align: center;">
<pre>pfSrcTrackRemovals</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>limits</pre>
</td>
<td style="text-align: center;">
<pre>pfLimits</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>states</pre>
</td>
<td style="text-align: center;">
<pre>pfLimitStates</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>sourceNodes</pre>
</td>
<td style="text-align: center;">
<pre>pfLimitSourceNodes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>fragments</pre>
</td>
<td style="text-align: center;">
<pre>pfLimitFragments</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>timeouts</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeouts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tcpFirst</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutTcpFirst</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tcpOpening</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutTcpOpening</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tcpEstablished</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutTcpEstablished</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tcpClosing</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutTcpClosing</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tcpFinWait</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutTcpFinWait</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tcpClosed</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutTcpClosed</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>udpFirst</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutUdpFirst</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>udpSingle</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutUdpSingle</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>udpMultiple</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutUdpMultiple</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>icmpFirst</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutIcmpFirst</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>icmpError</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutIcmpError</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>otherFirst</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutOtherFirst</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>otherSingle</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutOtherSingle</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>otherMultiple</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutOtherMultiple</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>fragment</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutFragment</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>interval</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutInterval</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>adaptiveStart</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutAdaptiveStart</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>adaptiveEnd</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutAdaptiveEnd</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>sourceTrack</pre>
</td>
<td style="text-align: center;">
<pre>pfTimeoutSrcTrack</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>interfaces</pre>
</td>
<td style="text-align: center;">
<pre>pfInterfaces</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifTable</pre>
</td>
<td style="text-align: center;">
<pre>pfIfTable</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifEntry</pre>
</td>
<td style="text-align: center;">
<pre>pfIfEntry</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIndex</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIndex</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifDescr</pre>
</td>
<td style="text-align: center;">
<pre>pfIfDescr</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifType</pre>
</td>
<td style="text-align: center;">
<pre>pfIfType</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifRefs</pre>
</td>
<td style="text-align: center;">
<pre>pfIfRefs</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifRules</pre>
</td>
<td style="text-align: center;">
<pre>pfIfRules</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn4PassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn4PassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn4PassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn4PassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn4BlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn4BlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn4BlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn4BlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut4PassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut4PassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut4PassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut4PassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut4BlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut4BlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut4BlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut4BlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn6PassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn6PassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn6PassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn6PassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn6BlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn6BlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifIn6BlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfIn6BlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut6PassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut6PassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut6PassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut6PassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut6BlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut6BlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>ifOut6BlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfIfOut6BlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tables</pre>
</td>
<td style="text-align: center;">
<pre>pfTables</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblTable</pre>
</td>
<td style="text-align: center;">
<pre>pfTblTable</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblEntry</pre>
</td>
<td style="text-align: center;">
<pre>pfTblEntry</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblIndex</pre>
</td>
<td style="text-align: center;">
<pre>pfTblIndex</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblName</pre>
</td>
<td style="text-align: center;">
<pre>pfTblName</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddresses</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddresses</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAnchorRefs</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAnchorRefs</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblRuleRefs</pre>
</td>
<td style="text-align: center;">
<pre>pfTblRuleRefs</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblEvalsMatch</pre>
</td>
<td style="text-align: center;">
<pre>pfTblEvalsMatch</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblEvalsNoMatch</pre>
</td>
<td style="text-align: center;">
<pre>pfTblEvalsNoMatch</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblInPassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblInPassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblInPassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblInPassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblInBlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblInBlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblInBlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblInBlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblInXPassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblInXPassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblInXPassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblInXPassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblOutPassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblOutPassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblOutPassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblOutPassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblOutBlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblOutBlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblOutBlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblOutBlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblOutXPassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblOutXPassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblOutXPassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblOutXPassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblStatsCleared</pre>
</td>
<td style="text-align: center;">
<pre>pfTblStatsCleared</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrTable</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrTable</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrEntry</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrEntry</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrTblIndex</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrTblIndex</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrNet</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrNet</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrMask</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrMask</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrCleared</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrCleared</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrInBlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrInBlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrInBlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrInBlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrInPassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrInPassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrInPassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrInPassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrOutBlockPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrOutBlockPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrOutBlockBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrOutBlockBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrOutPassPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrOutPassPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>tblAddrOutPassBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfTblAddrOutPassBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>labels</pre>
</td>
<td style="text-align: center;">
<pre>pfLabels</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblTable</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelTable</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblEntry</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelEntry</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblIndex</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelIndex</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblName</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelName</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblEvals</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelEvals</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblInPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelInPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblInBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelInBytes</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblOutPkts</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelOutPkts</pre>
</td>
</tr>
<tr>
<td style="text-align: center;">
<pre>lblOutBytes</pre>
</td>
<td style="text-align: center;">
<pre>pfLabelOutBytes</pre>
</td>
</tr>
</tbody>
</table>
<p></p>
<hr style="border-top:black solid 1px" />Copyright Joel Knight. All Rights Reserved.<br />
 <a href="http://www.packetmischief.ca">www.packetmischief.ca</a>
<br /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/packetmischief?a=_DTzh2uzPvo:67pSQGxd5Qs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=_DTzh2uzPvo:67pSQGxd5Qs:q9ztPQMVUaM"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=q9ztPQMVUaM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/packetmischief?a=_DTzh2uzPvo:67pSQGxd5Qs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/packetmischief?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/packetmischief/~4/_DTzh2uzPvo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.packetmischief.ca/2012/02/23/switching-from-net-snmp-to-snmpd-for-carp-pf-and-sensor-monitoring/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.packetmischief.ca/2012/02/23/switching-from-net-snmp-to-snmpd-for-carp-pf-and-sensor-monitoring/</feedburner:origLink></item>
	</channel>
</rss>

