<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Chainring Circus</title>
	<atom:link href="http://www.chainringcircus.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chainringcircus.org</link>
	<description>My thoughts on Linux, Routing and Cycling.</description>
	<lastBuildDate>Thu, 10 May 2012 15:38:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Hacking the 7926G MIDlet Development</title>
		<link>http://www.chainringcircus.org/hacking-the-7926g-midlet-development/</link>
		<comments>http://www.chainringcircus.org/hacking-the-7926g-midlet-development/#comments</comments>
		<pubDate>Sun, 06 May 2012 20:10:11 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CUCM]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2739</guid>
		<description><![CDATA[Requirements The hospital is forming our plan to handle closed loop medication administration. What that means to a patient is that their armband will scanned to verify who they are, then the medications will be scanned to verify what they are, then the medications will be administered. We are debating what hardware to purchase and [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Requirements</strong><br />
The hospital is forming our plan to handle closed loop medication administration.  What that means to a patient is that their armband will scanned to verify who they are, then the medications will be scanned to verify what they are, then the medications will be administered.  We are debating what hardware to purchase and how many items.  This fall and winter we are due to upgrade our nurse call phones and the 7926G has become the front runner.  The nurses carry it with them every where they go, and they are well cared for devices.</p>
<p>My boss came up with the idea of how to use the phones with our current crop of tablets.  There will be a barcode on every computer with its&#8217; name.  The nurse will scan the barcode of their computer to associate their phone to the computer, then any scanned data will be sent to that associated computer.  My boss wrote the listener for the Windows tablets and I wrote the code for the 7926G.</p>
<p>Below is an approximation of what I drew out on a sticky note.  The goal was for the PC team to be able to trouble shoot the phone scanning program quickly and easily without intervention from third level help desk.<br />
<img src="../images/7926G/7926G-Requirements.png" alt="7926G Requirements" /></p>
<p><strong>Test Server</strong><br />
In order to test I built this simple server to communicate with the phone while my boss worked on the Windows receiver.</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cat SimpleServer<span style="color: #339933;">.</span>pl <br />
<span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span><br />
<br />
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span><br />
<br />
<a href="http://perldoc.perl.org/functions/package.html"><span style="color: #000066;">package</span></a> SimpleServer<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">use</span> base <a href="http://perldoc.perl.org/functions/qw.html"><span style="color: #000066;">qw</span></a><span style="color: #009900;">&#40;</span>Net<span style="color: #339933;">::</span><span style="color: #006600;">Server</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">sub</span> process_request<br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#print qq(OK\n);</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009966; font-style: italic;">s/\r?\n$//</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/print.html"><span style="color: #000066;">print</span></a> <span style="color: #000000; font-weight: bold;">STDERR</span> <span style="color: #ff0000;">&quot;Received [$_]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/print.html"><span style="color: #000066;">print</span></a> <a href="http://perldoc.perl.org/functions/qq.html"><span style="color: #000066;">qq</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>OK<span style="color: #009900;">&#93;</span><span style="color: #0000ff;">\n</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">last</span> <span style="color: #b1b100;">if</span> <span style="color: #009966; font-style: italic;">/quit/i</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
SimpleServer<span style="color: #339933;">-&gt;</span><span style="color: #006600;">run</span><span style="color: #009900;">&#40;</span>port <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p><strong>Scanner MIDlet</strong><br />
You can download my source code <a href="../../files/Scanner.tar" title="Scanner Source Code">here</a>.  </p>
<p>Creating a MIDlet project in NetBeans is left as an exercise for the reader, however, in order to be able to test the scanner on the emulator you need to add the shim to the project resources.</p>
<p><img src="../images/7926G/7926G-Resources.png" alt="NetBeans Project Resources" /></p>
<p>In order to deploy the MIDlet, do not include the libraries for the scanner shim.</p>
<p><img src="../images/7926G/7926G-Properties-Libraries.png" alt="NetBeans Project Properties" /></p>
<p>Below are screen shots from the Scanner MIDlet.</p>
<p>The opening screen, a nurse scans the computer that they want to send data.<br />
<img src="../images/7926G/7926G-Initial-Screenshot.png" alt="Initial Screen" /></p>
<p>The result of a scanned barcoded IP address.<br />
<img src="../images/7926G/7926G-Scan-Result.png" alt="Barcode Scanned" /></p>
<p>The Help screen.<br />
<img src="../images/7926G/7926G-Help-Screen.png" alt="Help Screen" /></p>
<p>For trouble shooting purposes I added a form for manual entry of the traget PC IP adress or hostname.<br />
<img src="../images/7926G/7926G-Manual-Entry.png" alt="IP Address Manual Entry" /></p>
<p>Also for trouble shooting purposes here is an alert with the phones&#8217; IP address.<br />
<img src="../images/7926G/7926G-Phone-IP-Address.png" alt="Phone IP Address Alert" /></p>
<p>More trouble shooting, this time the target PC IP address.<br />
<img src="../images/7926G/7926G-PC-IP-Address.png" alt="Target PC IP Address Alert" /></p>
<p>Finally, there is checking to make sure that the target PC is actually listening.  I catch the error and display this message for the end user.<br />
<img src="../images/7926G/7926G-PC-Error.png" alt="PC is not listening error." /></p>
<p>This was a fun project, so much so that I spent more than a couple weekends working on it.  I would like to thank a number of people from Cisco and our partner.  Thanks to David Staudt, Riley MArsh, Louis Bell, Tony Godwin, Jim Stewart, Mike Hamblett, Jim Hooker and Conrad Price.  They worked as a team to make sure I was able to develop this application quickly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/hacking-the-7926g-midlet-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking the 7926G MIDlet Deployment</title>
		<link>http://www.chainringcircus.org/hacking-the-7926g-midlet-deployment/</link>
		<comments>http://www.chainringcircus.org/hacking-the-7926g-midlet-deployment/#comments</comments>
		<pubDate>Sun, 06 May 2012 18:20:13 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CUCM]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2736</guid>
		<description><![CDATA[I really struggled with the deployment of MIDlets to the phone. What should have been simple, became convoluted because I did not change a mime type on the web server. As a result I emailed back and forth with my Cisco team to finally get it all worked out. At first I developed my MIDlet [...]]]></description>
			<content:encoded><![CDATA[<p>I really struggled with the deployment of MIDlets to the phone.  What should have been simple, became convoluted because I did not change a mime type on the web server.  As a result I emailed back and forth with my Cisco team to finally get it all worked out. </p>
<p>At first I developed my MIDlet on the emulator and tried to deploy it.  When I ran into problems I was not sure if the errors were from the MIDlet or the environment, so I stepped back and tried to deploy a Cisco sample MIDlet.  As a result I am going to walk through deploying the Cisco supplied DeviceSpecifics MIDlet.  This is because you know it will work correctly on a 7926G so any errors or problems are of your own creation.  </p>
<p><strong>Phone Trace Settings</strong><br />
First you have to enable access to the phone from it&#8217;s web server.  IN CUCM select the phone from the phone list and under &#8220;Product Specific Configuration Layout&#8221; set &#8220;Web Access&#8221; to &#8220;Full&#8221; and &#8220;Phone Book Web Access&#8221; to &#8220;Allow Admin.&#8221;  You login will be username admin and password Cisco.</p>
<p><img src="../images/7926G/7926G-Product-Specific-Configuration-Layout.png" alt="Product Specific COnfiguration Layout" /></p>
<p>Next let&#8217;s set up the phone to log to your favorite logging server.  Bring up your phone in a browser and choose Trace Settings.  I set the &#8220;Java Module Trace Level&#8221; to &#8220;Debug&#8221; and checked the box to &#8220;Enable Remote Syslog.&#8221;</p>
<p><img src="../images/7926G/7926G-Remote-Logging.png" alt="7926G Remote Logging Configuration" /></p>
<p><strong>Web Server Setttings</strong><br />
Page 37 of the Developers Guide explains how to set up different web servers.  I am using Apache on RHEL 5.6, so I made change to /etc/mime.types.  When I first added the stanza to the file I did not notice that there was a second definition for &#8220;jar&#8221; and it wreaked havoc on my trouble shooting for days.</p>
<p>Add the following and be sure to comment out or removed the second definition.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">text/vnd.sun.j2me.app-descriptor jad<br />
application/java-archive jar<br />
#application/x-java-archive &nbsp; &nbsp; jar</div></div>
<p>If you do not remove that definition you will get an error similar to the one below in the logs from the phone if you set the logging up right.  I did not have the logging set to a high enough setting to catch these errors.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: *********************Installer - xmlVendor = Cisco Systems, Inc.<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: Installer - info.suiteVendor = Cisco Systems, Inc.<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: 1. Vendor Name are equal<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: Installer - info.suiteVersion = 0.0.1<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: TEST - Installer - checkPreviousVersion - there is no previous version - RETURN<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: Installer step:2<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: Installer step:3<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: Installer step:4<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: Installer step:5<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: microedition.profiles is Native System Property<br />
May &nbsp;2 12:39:12 172.22.16.10 &nbsp;SEP-java: microedition.configuration is Native System Property<br />
May &nbsp;2 12:39:13 172.22.16.10 &nbsp;SEP-java: MIDletProxyList:setForegroundMIDlet()<br />
May &nbsp;2 12:39:13 172.22.16.10 &nbsp;SEP-java: MIDletProxyList:setForegroundMIDlet()<br />
May &nbsp;2 12:39:13 172.22.16.10 &nbsp;SEP-java: MIDletProxyList:setForegroundMIDlet()<br />
May &nbsp;2 12:39:13 172.22.16.10 &nbsp;SEP-java: REPORT: &lt;level:3&gt; &lt;channel:1000&gt; ** Error installing suite (38): JAR did not have the correct media type, it had application/x-java-archive</div></div>
<p>And even though it does not like the JAR file it goes ahead and adds it to the MIDlet list, as seen from below.  That is the reason I thought it was being installed, because you see it in the list on the phone, and see it access the .jar on the web server.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: Provisioning=0<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[0]:Missed Calls<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[1]:Voicemail<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[2]:Received Calls<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[3]:Placed Calls<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[4]:Personal Directory<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[5]:Corporate Directory<br />
May &nbsp;2 12:39:21 172.22.16.10 &nbsp;SEP-java: dump_svc_cfg: name[6]:DeviceSpecifics</div></div>
<p>And from the web server.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">172.22.16.10 - - [02/May/2012:12:43:14 -0500] &quot;GET /7926G/DeviceSpecifics/DeviceSpecifics.jad HTTP/1.1&quot; 200 279 &quot;-&quot; &quot;Profile/MIDP-2.0 Configuration/CLDC-1.1&quot;<br />
172.22.16.10 - - [02/May/2012:12:43:16 -0500] &quot;GET /7926G/DeviceSpecifics/DeviceSpecifics.jar HTTP/1.1&quot; 200 6326 &quot;-&quot; &quot;Profile/MIDP-2.0 Configuration/CLDC-1.1&quot;</div></div>
<p><strong>.JAD File</strong><br />
Page 32 of the Developer&#8217;s Guide walks you through setting up a .jad for distribution.  It will be located in the &#8220;dist&#8221; directory of the DeviceSpecifics NetBeans project.  According to the Cisco documentation this is how the .jad file matches up to the IP Phone Service Coniguration found under<br />
Device<br />
&#8211;> Device Settings<br />
&#8212;&#8211;>  Phone Services</p>
<p>Service Name and MIDlet-Name must match exactly, including case and white space.</p>
<p>Service Version must match MIDlet-Version, or it can be left blank.  If left empty the phone will attempt to download the JAD file every time it registers with CUCM as well as every time the MIDlet launches.  If there is a version number, it will only download if the version number changes.</p>
<p>Service Type is set to Standard IP Phone Service.</p>
<p>Service Category is set to Java MIDlet.</p>
<p>Service URL is the URL where the .jad file is hosted.</p>
<p>ASCII Service Name and Service Description do not impact whether a MIDlet will run on a phone.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># cat DeviceSpecifics.jad<br />
MIDlet-1: DeviceSpecifics,,com.cisco.sdk.specifics.PlatformMIDlet<br />
MIDlet-Jar-Size: 6326<br />
MIDlet-Jar-URL: DeviceSpecifics.jar<br />
MIDlet-Name: DeviceSpecifics<br />
MIDlet-Vendor: Cisco Systems, Inc.<br />
MIDlet-Version: 0.0.1 <br />
MicroEdition-Configuration: CLDC-1.1<br />
MicroEdition-Profile: MIDP-2.0</div></div>
<p><img src="../images/7926G/7926G-Service-Configuration.png" alt="7926G Service Configuration on CUCM" /></p>
<p><strong>Install MIDlet</strong><br />
Finally we tell the phone to download the MIDlet.  From the upper right of the Phone Configuration page, choose:<br />
Related Links<br />
&#8211;> Subscribe Unsubscribe Services<br />
&#8212;&#8211;> Go</p>
<p><img src="../images/7926G/7926G-Subscribed-IP-Phone.png" alt="7926G Sbuscribed to Service in CUCM" /></p>
<p>You should now have the DeviceSpecifics MIDlet installed on your 7925 or 7926 IP phone.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/hacking-the-7926g-midlet-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking the 7926G Getting Started</title>
		<link>http://www.chainringcircus.org/hacking-the-7926g-getting-started/</link>
		<comments>http://www.chainringcircus.org/hacking-the-7926g-getting-started/#comments</comments>
		<pubDate>Sat, 05 May 2012 22:08:02 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CUCM]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2731</guid>
		<description><![CDATA[The past month I have been writing midlets for the 7926G Cisco IP phone. The interesting aspect of this phone for the hospital is that it has a barcode scanner built into the end of the phone. All of our nurses carry IP phones with them today and we are planning to replace all of [...]]]></description>
			<content:encoded><![CDATA[<p>The past month I have been writing midlets for the <a href="http://www.cisco.com/en/US/products/ps11266/index.html">7926G</a> Cisco IP phone.  The interesting aspect of this phone for the hospital is that it has a barcode scanner built into the end of the phone.  All of our nurses carry IP phones with them today and we are planning to replace all of them in the next six months, so a phone that doubles as a barcode scanner eliminates carrying an extra device.  The whole process of getting a phone and a test CUCM took three weeks, but our Cisco account team came through whenever we needed.  </p>
<p>In this post I would like to walk you through the set up of my development environment.  First a list of links that will help get you started.  Some will be referenced through out this post, others are just for education.</p>
<p><a href="http://developer.cisco.com/web/jmapi/start">7926 Development Getting Started site</a></p>
<p><a href="http://developer.cisco.com/c/document_library/get_file?uuid=b0545ac4-17e1-4bd3-bfb6-cf5266f0d2df&#038;groupId=2371349">7926 Emulator Installation Guide</a></p>
<p><a href="http://developer.cisco.com/web/jmapi/docs">7926 Development Firmware Downloads</a></p>
<p><a href="http://developer.cisco.com/documents/2371349/2371765/MIDlet+SDK.zip?redirect=http%3a%2f%2fdeveloper.cisco.com%2fweb%2fjmapi%2fdocs%3fp_p_id%3ddoc_library_summary_portlet_WAR_doclibrarysummaryportlet_INSTANCE_bQh4%26p_p_lifecycle%3d0%26p_p_state%3dnormal%26p_p_mode%3dview%26p_p_col_id%3dcolumn-1%26p_p_col_pos%3d2%26p_p_col_count%3d4">7926 SDK Download</a></p>
<p><a href="http://developer.cisco.com/c/document_library/get_file?groupId=2371349&#038;folderId=2378769&#038;name=97114"> Java MIDlet Developers Guide for Cisco Unified IP Phones</a></p>
<p><a href="http://netbeans.org/downloads/index.html">NetBeans IDE</a></p>
<p>If you are using Mac OSX then the installation guide above is not correct for the current NetBeans download.  This is the appropriate directory.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">superfly:Java_ME_platform_SDK_3.0 jud$ pwd<br />
/Applications/NetBeans/NetBeans 7.1.1.app/Contents/Resources/NetBeans/mobility/Java_ME_platform_SDK_3.0</div></div>
<p>Below you can see that I put the Cisco 7926 skin right in that directory and unzipped.  Everything will be put in the correct place if you do it from there.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">superfly:Java_ME_platform_SDK_3.0 jud$ ls -1<br />
Cisco7926Skin.zip<br />
CiscoWirelessPhone.jar<br />
DeviceSpecifics<br />
ImageDemo<br />
KeyCodeAPI<br />
MockScannerAPI<br />
ScannerSample<br />
Updater.app<br />
apps<br />
bin<br />
device-manager.app<br />
docs<br />
legal<br />
lib<br />
on-device<br />
runtimes<br />
toolkit-lib</div></div>
<p>Below I am testing the skin installation, notice how everything falls into place nicely.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">superfly:Java_ME_platform_SDK_3.0 jud$ unzip -t Cisco7926Skin.zip <br />
Archive: &nbsp;Cisco7926Skin.zip<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/ &nbsp; &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/ &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/ &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/Cisco7926.properties &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/device.properties &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/modules &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/networkIndicatorOn.png &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/skin-7926-highlighted.png &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/skin-7926-normal.png &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/conf/skin-7926-pressed.png &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/default-state.xml &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/NetworkIndicator.bean &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/Screen.bean &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/devices/Cisco7926/ScreenGraphics.bean &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/ &nbsp; &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/ &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/conf/ &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/conf/Cisco7926.properties &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/device-adapter/ &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/device-adapter/Cisco7926.bean &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/device-adapter/Cisco7926.deviceProperties.bean &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/device-adapter/Cisco7926/ &nbsp; OK<br />
&nbsp; &nbsp; testing: toolkit-lib/process/device-manager/device-adapter/Cisco7926/1.bean &nbsp; OK<br />
No errors detected in compressed data of Cisco7926Skin.zip.</div></div>
<p>When you get everything installed correctly the option for a Cisco7926 is in the configuration menu.</p>
<p><img src="../images/7926G/7926G-Configuration-Menu.png" alt="7926G in NetBeans Properties Window" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/hacking-the-7926g-getting-started/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtual Switching System (VSS)</title>
		<link>http://www.chainringcircus.org/virtual-switching-system-vss/</link>
		<comments>http://www.chainringcircus.org/virtual-switching-system-vss/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 22:08:28 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2387</guid>
		<description><![CDATA[This post was tedious in the formatting and was one of the reasons I put off posting it. The notes were taken months ago put I was weary of posting it because of the time involved in formatting it. As a result this post could have been better, I just dreaded working on it. Either [...]]]></description>
			<content:encoded><![CDATA[<p>This post was tedious in the formatting and was one of the reasons I put off posting it.  The notes were taken months ago put I was weary of posting it because of the time involved in formatting it.  As a result this post could have been better, I just dreaded working on it.  Either I have to find a new editor or this will be the last post of this variety with unordered lists and line items to make bulleted points.</p>
<p>A few months ago we replaced our cores with a pair of 6509Es.  The night of go live we had trouble because of some decisions we made at the last minute, and these notes saved us.  I hope you find them as useful as we did.  These are my notes from the design guide.</p>
<p>Because this post turned out so long, I put what most people will want to see at the top, the configuration.  My notes from the configuration guide follow.</p>
<p><strong>Configuration</strong></p>
<p>1.  Define the domain ID.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS(config)# switch virtual domain 100</div></div>
<p>2. Set the switch number:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS(config-vs-domain)# switch 1</div></div>
<p>2a. Have the switches use virtual MAC addresses:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS(config-vs-domain)# mac-address use-virtual</div></div>
<p>2b. Check to make sure OOB is active and set to 480 seconds.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS# sh mac-address-table synchonize statistics !sh stats for OOB</div></div>
<p>3.  Configure VSL port-channel</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS (config-vs-domain)# exit</div></div>
<p>3a.<br />
Standalone SW1:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">no hw-module 1 oversubscription<br />
no hw-module 2 oversubscription<br />
int po1<br />
&nbsp;switch virtual link 1<br />
int rnage t1/1, t2/1<br />
&nbsp;channel-gr 1 mode on</div></div>
<p>Standalone SW2:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">no hw-module 1 oversubscription<br />
no hw-module 2 oversubscription<br />
int po2<br />
&nbsp;switch virtual link 2<br />
int rnage t1/1, t2/1<br />
&nbsp;channel-gr 2 mode on</div></div>
<p>4.  Convert to VSS mode:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS# switch convert mode virtual<br />
(Switch will ask to reload)<br />
(Reload)</div></div>
<p>5.  Only the first time conversion is this needed, this merges only VSL-related configurations, they say you MUST execute this command:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS# switch accept mode virtual</div></div>
<p>6.  Configure fast-hello for dual-active detection. (p.4-29)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">! Enable fast-hello under VSS global config.<br />
VSS(config)# switch virtual domain 100<br />
VSS(config-vs-domain)# dual-active detection fast-hello<br />
<br />
!Enable fast-hello at the interface level<br />
VSS(config)# int gi1/5/3<br />
VSS(config-if)# dual-active fast-hello<br />
<br />
VSS(config)# int gi2/5/3<br />
VSS(config-if)# dual-active fast-hello<br />
<br />
! Confirm fast-hello<br />
VSS# sh switch virtual dual-active fast-hello<br />
VSS# remote command standby-rp show switch virtual dual-active fast-hello</div></div>
<p><strong>Commands</strong><br />
These are some commands that I kept for handy reference.</p>
<p>sh vslp lmp neighbor</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh vsl lmp nei<br />
<br />
Instance #2:<br />
<br />
<br />
&nbsp; LMP neighbors<br />
<br />
&nbsp; &nbsp; Peer Group info: &nbsp; &nbsp; &nbsp; &nbsp;# Groups: 1 &nbsp; &nbsp; &nbsp; &nbsp; (* =&gt; Preferred PG)<br />
<br />
PG # &nbsp; &nbsp;MAC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Switch &nbsp;Ctrl Interface &nbsp;Interfaces<br />
---------------------------------------------------------------<br />
*1 &nbsp; &nbsp; &nbsp;9999.aaaa.0000 &nbsp;1 &nbsp; &nbsp; &nbsp; Te2/5/4 &nbsp; &nbsp; &nbsp; &nbsp; Te2/5/4, Te2/5/5</div></div>
<p>sh switch virtual role</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh switch virtual role<br />
<br />
Switch &nbsp;Switch Status &nbsp;Priority &nbsp; &nbsp; Role &nbsp; &nbsp;Session &nbsp; ID<br />
&nbsp; &nbsp; &nbsp; &nbsp; Number &nbsp; &nbsp; &nbsp; &nbsp; Oper(Conf) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Local &nbsp; &nbsp;Remote<br />
------------------------------------------------------------------<br />
LOCAL &nbsp; &nbsp;2 &nbsp; &nbsp; UP &nbsp; &nbsp; &nbsp; 100(100) &nbsp; &nbsp;ACTIVE &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; <br />
REMOTE &nbsp; 1 &nbsp; &nbsp; UP &nbsp; &nbsp; &nbsp; 100(100) &nbsp; &nbsp;STANDBY &nbsp;9111 &nbsp; &nbsp; 9273</div></div>
<p>sh int vsl</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh int vsl<br />
<br />
VSL Port-channel: Po1 &nbsp;<br />
&nbsp;Port: Te1/5/4<br />
&nbsp;Port: Te1/5/5<br />
<br />
VSL Port-channel: Po2 &nbsp;<br />
&nbsp;Port: Te2/5/4<br />
&nbsp;Port: Te2/5/5</div></div>
<p>sh switch virtual</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh switch virtual &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
Switch mode &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: Virtual Switch<br />
Virtual switch domain number : 100<br />
Local switch number &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 2<br />
Local switch operational role: Virtual Switch Active<br />
Peer switch number &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1<br />
Peer switch operational role : Virtual Switch Standby<br />
<br />
sh switch virtual redundancy<br />
VSS#sh switch virtual redundancy <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; My Switch Id = 2<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Peer Switch Id = 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; Last switchover reason = none<br />
&nbsp; &nbsp; Configured Redundancy Mode = sso<br />
&nbsp; &nbsp; &nbsp;Operating Redundancy Mode = sso<br />
<br />
Switch 2 Slot 5 Processor Information :<br />
-----------------------------------------------<br />
&nbsp; &nbsp; &nbsp; &nbsp; Current Software state = ACTIVE<br />
&nbsp; &nbsp; &nbsp; &nbsp;Uptime in current state = 14 weeks, 4 days, 14 hours, 34 minutes<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Image Version = Cisco IOS Software, s72033_rp Software (s72033_rp-IPSERVICESK9_WAN-M), Version 12.2(33)SXJ1, RELEASE SOFTWARE (fc2)<br />
Technical Support: http://www.cisco.com/techsupport<br />
Copyright (c) 1986-2011 by Cisco Systems, Inc.<br />
Compiled Wed 22-Jun-11 18:03 by prod_rel_team<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BOOT = sup-bootdisk:s72033-ipservicesk9_wan-mz.122-33.SXJ1.bin,12;<br />
&nbsp; &nbsp; &nbsp; &nbsp; Configuration register = 0x2102<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fabric State = ACTIVE<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Control Plane State = ACTIVE<br />
<br />
Switch 1 Slot 5 Processor Information :<br />
-----------------------------------------------<br />
&nbsp; &nbsp; &nbsp; &nbsp; Current Software state = STANDBY HOT (switchover target)<br />
&nbsp; &nbsp; &nbsp; &nbsp;Uptime in current state = 14 weeks, 4 days, 14 hours, 31 minutes<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Image Version = Cisco IOS Software, s72033_rp Software (s72033_rp-IPSERVICESK9_WAN-M), Version 12.2(33)SXJ1, RELEASE SOFTWARE (fc2)<br />
Technical Support: http://www.cisco.com/techsupport<br />
Copyright (c) 1986-2011 by Cisco Systems, Inc.<br />
Compiled Wed 22-Jun-11 18:03 by prod_rel_team<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BOOT = sup-bootdisk:s72033-ipservicesk9_wan-mz.122-33.SXJ1.bin,12;<br />
&nbsp; &nbsp; &nbsp; &nbsp; Configuration register = 0x2102<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fabric State = ACTIVE<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Control Plane State = STANDBY</div></div>
<p>sh vsl rrp summ</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh vsl rrp summ<br />
&nbsp;RRP Summary:<br />
------------------------------------------------------------------------<br />
RRP information for Instance 2<br />
<br />
--------------------------------------------------------------------<br />
Valid &nbsp;Flags &nbsp; Peer &nbsp; &nbsp; &nbsp;Preferred &nbsp;Reserved<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Count &nbsp; &nbsp; Peer &nbsp; &nbsp; &nbsp; Peer<br />
<br />
--------------------------------------------------------------------<br />
TRUE &nbsp; &nbsp;V &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; Peer &nbsp;Valid &nbsp;Switch Status &nbsp;Priority &nbsp; Role &nbsp; &nbsp;Local &nbsp; Remote<br />
Switch &nbsp;Group &nbsp; &nbsp; &nbsp; &nbsp;Number &nbsp; &nbsp; &nbsp; &nbsp; Oper(Conf) &nbsp; &nbsp; &nbsp; &nbsp; SID &nbsp; &nbsp; SID<br />
---------------------------------------------------------------------<br />
Local &nbsp; &nbsp;0 &nbsp; &nbsp; TRUE &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp;UP &nbsp; &nbsp; 100(100) &nbsp;ACTIVE &nbsp; 0 &nbsp; &nbsp; &nbsp; 0 &nbsp; <br />
Remote &nbsp; 1 &nbsp; &nbsp; TRUE &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp;UP &nbsp; &nbsp; 100(100) &nbsp;STANDBY &nbsp;9111 &nbsp; &nbsp;9273<br />
<br />
Peer 0 represents the local switch<br />
<br />
Flags : V - Valid</div></div>
<p>sh mls cef</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sh mls cef<br />
Codes: decap - Decapsulation, + - Push Label<br />
Index &nbsp;Prefix &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Adjacency &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
64 &nbsp; &nbsp; 0.0.0.0/32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;receive<br />
! Removed for brevity</div></div>
<p>sh mac-address-table synchronize statistics</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh mac-address-table synchronize statistics <br />
<br />
MAC Entry Out-of-band Synchronization Feature Statistics:<br />
---------------------------------------------------------<br />
<br />
&nbsp; &nbsp; Switch [1] Module [1]<br />
&nbsp; &nbsp; -----------------------<br />
<br />
&nbsp; &nbsp; Module Status:<br />
Statistics collected from Switch/Module &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &nbsp;1/1<br />
Number of L2 asics in this module &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &nbsp;1<br />
<br />
! Removed for brevity.</div></div>
<p>sh switch virtual redundancy mismatch</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS#sh switch virtual redundancy mismatch <br />
<br />
No Config Mismatch between Active and Standby switches</div></div>
<p>redundancy reload peer</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">! Reload a switch from RPR mode to hot-standby<br />
VSS#redundancy reload peer<br />
! Did not get output.</div></div>
<p><strong>Configuration Guide Notes Below</strong></p>
<p><strong>Virtual Switch Member Boot-up Behavior</strong></p>
<ul>
<li>Diagnostics</li>
<li>VSL Link Initialization</li>
<li>LMP Establishment</li>
<li>Role negotiation through RRP</li>
</ul>
<p><strong>Link Management Protocol (LMP) </strong></p>
<ul>
<li>Establishes and verifies bidirectional communication during startup and normal operation</li>
<li>Exchange switch ID</li>
<li>Sends hello packets to monitor health of VSL and peer</li>
</ul>
<p><strong>Role Resolution Protocol (RRP)</strong></p>
<ul>
<li>Determines the operational status of each switch member.</li>
</ul>
<p><strong>Virtual Switch Link (VSL)</strong><br />
Each member link must be configured configured in unconditional EtherChannel mode:<br />
channel-group 12 mode on</p>
<p><strong>Stateful Switch Over (SSO)</strong></p>
<ul>
<li>Enables supervisor redundnacy in a standalone 6000, keeping the backup<br />
	supervisor up to date.</li>
<li>State 13-Active  If in active state the supervisor is responsible for forwarding<br />
	and managing the control plane.  Manage control plane functions,<br />
	synchornizes the configuration and the protocols.</li>
<li>State 8-Standby  Supervisor is synchronized with with the active.  This is the<br />
	final state hot-standby supervisor.</li>
<li>SSO is the core of VSS, however VSS is a dual forwarding solution while the<br />
	control plane is managed by one supervisor.</li>
</ul>
<p><strong>Virtual Switch Prioroity</strong></p>
<ul>
<li>The first to boot will become active.</li>
<li>If simultaneous boot, lowest switch ID becomes active.</li>
<li>Highest priority wins, except highest priority switch will not become active unless preemption is enabled.</li>
<li>Default priority is 100.</li>
<li>Switch preemption should not be taken lightly.
<ul>
<li>It forces multiple reboots of the VSS member.</li>
<li>Cisco recommends _not_ configuring preemption.</li>
</ul>
</li>
</ul>
<p><strong>Multi-chassis Etherchannel (MEC)</strong></p>
<ul>
<li>Preferred connectivity method using VSS.</li>
<li>Extends etherchannel to from multiple ports on one switch to multiple ports on two chassis. </li>
<li>Access-layer switches are configured with traditional etherchannel.</li>
<li>VSS with MEC is loop-free.</li>
</ul>
<p><strong>MEC Configuration</strong></p>
<ul>
<li>Do not explicitly create layer-2 MEC from the CLI, allow IOS to generate the interface.</li>
<li>Create a layer-3 MEC explicitly and associate the port-channel group under each member interface.</li>
<li>This syslog configuration command is recommended in VSS with MEC interfaces.</li>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; int po20<br />
&nbsp; &nbsp; &nbsp;logging event link-status<br />
&nbsp; &nbsp; &nbsp;logging event spanning-tree status</div></div>
<li>These hidden commands are now available in 12.2(33)SXH1</li>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; remote command switch test EtherChannel load-balance interface po 1 ip 1.1.1.1 2.2.2.2<br />
&nbsp; &nbsp; show EtherChannel load-balance hash-result interface port-channel 2 205 ip 10.120.7.65 vlan 5 10.121.100.49</div></div>
</ul>
<p><strong>MAC Addresses</strong></p>
<ul>
<li>MAC address allocation is derived from the back plane EEPROM on each chassis, therefore a VSS instance has two pools.  The VSS MAC address pool is determined by RRP.  MAC address allocation does not change during a switch over event, however, MAC addresses will change in the event both switches reboot without the mac-address use-virtaul command.  This avoids gratuitous ARPs.</li>
<li>When upgrading the change of MAC address for the default gateway can cause problems for hosts not capable of updating the default gateway ARP entry.  It is typically cached for four hours.</li>
<li>MAC Out-of-Band Sync (OOB)</li>
<li>MAC addresses normally age out age out in a single chassis environment.</li>
<li>Depending upon the etherchannel hash MAC addresses have the chance to age out because they are not updated.</li>
<li>MAC OOB is designed to synchronize MAC addresses in all line cards of the VSS over the VSL.</li>
<li>In VSS trunk mode of a port-channel interfaces being desirable or undesirable does not act the same as in standalone mode.  When a link member is brought on line it is not a separate negotiation, it is an addition to MEC. p.3-25</li>
</ul>
<p><strong>PAgP</strong></p>
<ul>
<li>The active switch is responsible for origination and termination of PAgP control plane traffic.</li>
<li>The same device ID is sent by both VSS switches so the end device assumes a single logical device.</li>
<li>Cisco recommends PAgP neighbors to be in desirable-desirable mode with the silent sub option.</li>
</ul>
<p><strong>LACP p. 2-37</strong></p>
<ul>
<li>In VSS it works for both layer-2 and layer-3 interfaces.</li>
<li>The recommended mode for LACP neighbors is Active-Active</li>
<li>During the EtherChannel bundling process LACP performs a configuration consistency check on each link trying to become a port-channel member.</li>
<li>	If a port does not pass it is placed in a &#8220;lettered&#8221; system bundle.</li>
<li>The first etherchannel bundle contains the ports that passed the configuration check.</li>
<li>The second &#8220;lettered&#8221; bundle includes the ports that did not pass the configuration check.</li>
<li>Avoid using the min-links LACP command </li>
<li>Avoid LACP fast-hello in VSS</li>
<ul>
<li>During failover and recovery the VSS might not be able to recover before the remote end declares VSS down.  False positive.</li>
<li>Fast-hello as sent per link which can overrun a switch CPU in large deployments.</li>
</ul>
</ul>
<p></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">6500-VSS# show etherchannel 20 summary | inc Gi<br />
Po20(SU)&nbsp; &nbsp; LACP&nbsp; &nbsp; Gi2/1(P)<br />
Po20B(SU) &nbsp; LACP&nbsp; &nbsp; Gi2/2(P) ! Bundled in separate system-generated <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;! port-channel interface</div></div>
<p><strong>Implementation Notes</strong></p>
<p>Recommended to have one port from the supervisor and one from a line card, however, the have different queue structures and the etherchannel bundle would fail.  To fix this turn on:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">no mls channel-consistency</div></div>
<p>The Sup720-10G uplink port can be configured in one of two modes:</p>
<ul>
<li>Default, Non-10g-only mode:</li>
<ul>
<li>All supervisor ports have the same CoS queuing mode if any 10G port is used for VSL.  VSL only allows CoS-based queuing.</li>
</ul>
<li>Non-blocking, 10g-only mode:</li>
<ul>
<li>All 1G ports are disabled, the entire module operates in non-blocking mode. 12.2(33)SXI allows non-VSL 10G ports to be DSCP based.</li>
</ul>
</ul>
<p><strong>Resilient VSL Design Options (p2-18 thru 2-20)</strong></p>
<ul>
<li>Use the two 10G ports on the Sup720-10G supervisor. </li>
<ul>
<li>Most common, does not provide optimal hardware diversity.</li>
</ul>
<li>Use on 10G port on the Sup720-10G and another from a VSL capable line card.</li>
<ul>
<li>Best for balancing cost and redundancy.</li>
</ul>
<li>Use 10G ports on two separate VSL capable line cards.</li>
<ul>
<li>Best option for flexibility but not as cost effective.</li>
</ul>
</ul>
<p><strong>EtherChannel</strong><br />
Etherchannel is the fundamental building block of VSS.  Traditionally load<br />
sharing and failure are governed by STP, FHRP and topology (looped and<br />
non-looped).  In VSS Etherchannel replaces all three.</p>
<ul>
<li>The etherchannel hash algorithm becomes more important to get right in VSS.</li>
<li>Layer-4 hashing is more random than layer-3 hashing.</li>
<li> Layer-2 hashing is not as efficient when all hosts are sending to a default<br />
	gateway.</li>
</ul>
<p>There are a variety of etherchannel options in VSS.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS(config-if)# port-channel port hash-distribution X</div></div>
<p>
By default the load-sharing hash method on all non-VSL etherchannel is fixed.</p>
<p><strong>VLAN ID</strong></p>
<p>Traffic optimized when:</p>
<ul>
<li>With VSS it is possible to have more VLANs per closet.</li>
<li>Traffic might not be fairly hashed due to similarities such as default gateway or multicast traffic.</li>
</ul>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS# sh platform hardware pfc mode<br />
VSS# sh etherchannel load-balance</div></div>
<ul>
<li>Layer 3 and 4 Hash Tuning</li>
<ul>
<li>dst-mixed-ip-port</li>
<li>src-dst-mixed-ip-port</li>
<li>rc-mixed-ip-port</li>
</ul>
<li>For lower end switches:</li>
<ul>
<li>Cisco Catalyst 4500</li>
<ul>
<li>src-dst-ip</li>
</ul>
<li>Cisco Catalyst 36xx, 37xx Stack, 29xx</li>
<ul>
<li>src-dst-ip</li>
</ul>
</ul>
</ul>
<p><strong>Failures</strong></p>
<p>Convergence</p>
<li>FHRP recovery default is 10 seconds, with tuning 900msec.</li>
<li>VSS 200msec convergence.</li>
<p>VSS Member Failures</p>
<li>Recovery is based on etherchannel, it detects the failure then rehashes the flow.</li>
<p>Core to VSS Failure</p>
<li>If all links fail from one VSS member to the core traffic will traverse the VSL.</li>
<p>Access Layer to VSS Failure</p>
<li>Traffic will flow over the VSL.</li>
<p>STP Loops and VSS</p>
<ul>
<li>These issues can introduce a loop that STP might not block</li>
<ul>
<li>Faulty hardware causes a missed BPDU</li>
<li>Faulty software cause high CPU load, preventing BPDU processing.</li>
<li>Configuration mistake</li>
<li>Non-standard switch implementation</li>
</ul>
<li>VSS over comes these issues</li>
<ul>
<li>Creates a loop free topology using MEC.</li>
<li>No FHRP needed, replaced by one logical node.</li>
</ul>
</ul>
<p>Unidirection Link Detection (UDLD)</p>
<ul>
<li>Aggressive UDLD should _not_ be used as link-integrity check.  VSS is by definition a loop-free topology.</li>
<li>STP protocols (RPVST+ and MST) converge faster than UDLD detects.</li>
</ul>
<p>Spanning Tree Configuration with VSS</p>
<ul>
<li>The root of the STP should always be VSS.</li>
<li>Loop guard is not needed.</li>
<li>The active switch is responsible for generating the BPDU.</li>
<ul>
<p>Routing with VSS<br />
Layer-3 MEC is the recommended design rather than ECMP.</p>
<p>Routing Protocols, Topology and Interaction</p>
<ul>
<li>Two ways to connect VSS to the core:</li>
<ul>
<li>Equal Cost Multipath (ECMP)</li>
<li>Layer-3 MEC</li>
</ul>
</ul>
<p>Link Failure Convergence</p>
<ul>
<li>The higher the number of routes the longer ECMP takes to recover.</li>
<li>Because MEC failer detection is hardware based, it does not matter<br />
	the number of routes, the hardware will detect failure and adjust<br />
	traffic to the healthy link.</li>
<li>Advantage MEC.</li>
</ul>
<p>Path availability during link failure</p>
<li>A single link failure in ECMP will result in path reprogramming.</li>
<p>Routing Protocol Interaction During Active Failure</p>
<ul>
<li>When the active supervisore fails, the standby supervisor must reinitialize the routing protocol.</li>
<li>This can be mitigated with Non-Stop Forwarding (NSF) and the neighboring router must be NSF aware.</li>
<li>NSF must be enable on both the VSS and adjacent nodes.</li>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; VSS(config)# router ospf 100<br />
&nbsp; &nbsp; VSS(config-router)# nsf cisco<br />
&nbsp; &nbsp; VSS# sh ip osfp nsf</div></div>
<li>NSF configuration <a href="http://www.cisco.com/en/US/docs/ios/ha/configuration/guide/ha-nonstp_fwdg.html#wp1056927">http://www.cisco.com/en/US/docs/ios/ha/configuration/guide/ha-nonstp_fwdg.html#wp1056927</a>
</ul>
<p><strong>Dual Active Detection (p. 4-29)</strong></p>
<ul>
<li>PAgP</li>
<li>Fast-Hello</li>
<li>BFD</li>
</ul>
<p>Fast-Hello</p>
<ul>
<li>Requires a dedicated physical port between the VSS nodes.</li>
<li>The dedicated link is not capable of carrying control-plan or user-data traffic.</li>
<li>During dual-active the that is configured to carry fast-hello is operational and continues<br />
	to exchange hellos.  If the old-active continues to see hellos during<br />
	what it believes to be a failover state, then it knows dual-active has occurred.</li>
<li>The Sup720-10G 1Gb uplink ports can be used if the supervisor is not<br />
	configured in 10Gb on mode.</li>
</ul>
<p>Configure fast-hello for dual-active detection. (p.4-29)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">! Enable fast-hello under VSS global config.<br />
VSS(config)# switch virtual domain 100<br />
VSS(config-vs-domain)# dual-active detection fast-hello<br />
<br />
!Enable fast-hello at the interface level<br />
VSS(config)# int gi1/5/1<br />
VSS(config-if)# no shut<br />
VSS(config-if)# dual-active fast-hello<br />
<br />
VSS(config)# int gi2/5/1<br />
VSS(config-if)# no shut<br />
VSS(config-if)# dual-active fast-hello<br />
<br />
! Confirm fast-hello<br />
VSS# sh switch virtual dual-active fast-hello<br />
VSS# remote command standby-rp show switch virtual dual-active fast-hello</div></div>
<p>Using Bidirectional Forwarding Detection</p>
<ul>
<li>BFD session establishment is the indication of dual-active condition.</li>
<li>Normally VSS would not be able to establish BFD with itself because it is one logical node.</li>
<li>BFD takes 20-25 seconds for detection.</li>
<ul>
<li>Requires IP connectivity.</li>
<li>Needs IP processes and static route.</li>
</ul>
</ul>
<p>Configure BFD for dual-active Detection</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS(config)# switch virtual domain 10<br />
VSS(config)# dual-active pair interface gi1/5/1 int gi2/5/1 bfd<br />
!<br />
! Enable unique IP subnet and BFD interval on interfaces.<br />
VSS(config)# int gi1/5/1<br />
VSS(config-if)# ip add 192.168.1.1 255.255.255.0<br />
VSS(config-if)# bfd interval 50 min_rx 50 multiplier 3<br />
!<br />
VSS(config)# int gi2/5/1<br />
VSS(config-if)# ip add 192.168.2.1 255.255.255.0<br />
VSS(config-if)# bfd interval 50 min_rx 50 multiplier 3<br />
!<br />
! The static route is automatically added.<br />
! Confirm and monitor BFD.<br />
VSS# sh switch virtual dual-active bfd<br />
VSS# sh switch virtual dual-active summary</div></div>
<p>Dual-Active Recovery</p>
<ul>
<li>Once the VSL connectivity is established RRP handles the negotiation.</ul>
</li>
<p>OSPF Tuning</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VSS(config)# router ospf 100<br />
VSS(config-router)# nsf<br />
VSS(config-router)# auto-cost reference bandwidth 20000<br />
! Confirm OSPF<br />
VSS# sh ip ospf neighbor detail<br />
VSS# sh ip protocol</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/virtual-switching-system-vss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Long Time No Post</title>
		<link>http://www.chainringcircus.org/long-time-no-post/</link>
		<comments>http://www.chainringcircus.org/long-time-no-post/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 00:15:41 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[Musings]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2689</guid>
		<description><![CDATA[I have been putting off this post because I didn&#8217;t really know what to say. So much has changed in the last six months I didn&#8217;t know how best to communicate what was going on in my life. Please understand that I am leaving out quite a bit of this story but I believe it [...]]]></description>
			<content:encoded><![CDATA[<p>I have been putting off this post because I didn&#8217;t really know what to say.  So much has changed in the last six months I didn&#8217;t know how best to communicate what was going on in my life.  Please understand that I am leaving out quite a bit of this story but I believe it needs to be told so that others will understand when they stumble across my blog.</p>
<p>Let&#8217;s start with some background.  I have been working for the same employer for the last 8 years.  It is a regional medical center and a great place to work.  Before Fortune magazine stopped allowing non-profits to be on the &#8220;100 Best Places to Work&#8221; my employer made the list twice.  </p>
<p>I started working at the hospital as a Programmer Analyst in early 2003 writing code that allowed hospital systems to communicate and was also the UNIX/Linux administrator.  During this time I managed DNS/DHCP, most of the printing and portions of our email infrastructure on *NIX while also writing mostly TCL and Perl code.</p>
<p>When a Senior Network Engineer slot opened I applied and was promoted in early 2006.  I earned my CCNA and began to learn quite a bit about networking.  Shortly thereafter I decided I was ready to leave the hospital in order to learn more, but my wife loves working here, knows and trusts many of the doctors and made me promise that we would have our children at this hospital.  </p>
<p>As a result of that promise to my wife I decided to work on my CCNP and started this blog, figuring both would help me get my next job.  During that time I was selected for &#8220;50 for the Future&#8221; a two year management training program at the hospital and I finished my CCNP. I also became dedicated to my craft.  As I learned more and more about networking, I began to understand how much I did not know and it became a joy to learn something new everyday.  Not all of the lessons were fun at the time but I was learning so much I loved coming to work.  </p>
<p>The next logical step was starting on my CCIE.  It sounded like a great challenge and with a family now depending upon me, it was the next logical step for job security.  It surely would allow me to get my next job and my promise to my wife was still not fulfilled.  We had suffered through two miscarriages to get our first child, and our second child was born in April 2011.  </p>
<p>With the birth of our second child my promise to my wife had been fulfilled and I was ready to leave.  Literally the day after my second child was born I started applying for jobs.  I was offered an interesting position in South Carolina working with a team that fit my goals.  Some had their CCIEs and others were working toward their digits.  I would fit right in and I knew it was the place for me, so I turned in my resignation.  The wrinkle being that the hospital requests a 30 day notice for professional employees.</p>
<p>I had already spoken with my Director about leaving and he was gracious.  I had spent $5,000 on my CCIE lab and the hospital had spent another $5,000, but my boss gave me the whole rack.  Everything.  I cannot describe how much that meant to me, I am truly grateful.</p>
<p>That day my Vice President asked me what it would take for me to stay and I told him I was chasing a dream.  While I appreciated the offer and I knew the hospital was a great place to work, it was a goal I had set for myself and I felt I should leave in order to get the experience I needed.</p>
<p>Two weeks later I had both my AVP and VP stop by my desk within ten minutes of each other.  My last day was drawing near and they wanted to discuss what it would take for me to stay.  I declined a second time.  I had made the decision to try to earn my CCIE and I did not want to let my family down.  I believed that South Carolina offered me the best chance to achieve my goal. </p>
<p>My last day at the hospital came and went, but it was a tumultuous day.  My AVP literally gave me a hug as I walked out the door for the last time and I cried in her arms.  </p>
<p>I had a week off between jobs and I had lunch with friends to say goodbye, finished setting up the lab at home and packed.  I made arrangements for long term housing in South Carolina and prepared to leave my family while we tried to sell our home.</p>
<p>Thursday evening of my week off I got a call on my cell phone.  It was my VP and AVP calling to chat.  The first question they asked was whether I was still in town or had I already left for South Carolina.  Then they asked me to stay one last time.  They had met with our CEO and Executive Vice President and wanted me to stay.  I was floored.  I had worked for nearly three years getting ready to leave.  I had started down a road and I didn&#8217;t want to change direction.</p>
<p>But I did.  My wife told me that I will never again be offered the chance to work at a company which knows neither what my job title will be nor what I will be doing, just that they want me to work for them.  She was probably right.</p>
<p>I was offered the chance to make a difference working for a company that has been good to me and my family.  It is a different challenge than what I had been working toward but an interesting one all the same.  I am slowly settling into my new job as Technical Services Manager.  Some of the changes I have made are for the better, some of the changes have not lasted and others have yet to be implemented, but I am still learning every day.</p>
<p>And so my goals are slowly evolving.  It is hard to give up a goal that I have sacrificed so much to earn, without completing it.  In the short term I will begin working toward my CCIP in the new year.  Currently I do not have the time to complete the CCIE but I believe working toward my CCIP will keep my mind in networking and it will cover topics that I believe are needed if I decide to again try for my CCIE.</p>
<p>Thank you for reading.  I plan to post more regularly in the coming year.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/long-time-no-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TestLab Script in AppleScript</title>
		<link>http://www.chainringcircus.org/testlab-script-in-applescript/</link>
		<comments>http://www.chainringcircus.org/testlab-script-in-applescript/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 18:26:34 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[CCIE Labs]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2498</guid>
		<description><![CDATA[I got a new Mac Pro workstation at work and re-wrote some scripts to work on it. This morning I couldn&#8217;t find the script under the new file lay out, it was in /Applications so I decided I had better document the script so I don&#8217;t have to rewrite it if I can&#8217;t find it. [...]]]></description>
			<content:encoded><![CDATA[<p>I got a new Mac Pro workstation at work and re-wrote some scripts to work on it.  This morning I couldn&#8217;t find the script under the new file lay out, it was in /Applications so I decided I had better document the script so I don&#8217;t have to rewrite it if I can&#8217;t find it.</p>
<p>It uses the same script, tle, that I wrote a while ago, it just fires up iTerm instead of Gnome Terminal.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-- 2011-03-24 <br />
-- Jud Bishop <br />
<br />
<br />
tell application &quot;iTerm&quot;<br />
&nbsp; &nbsp; activate<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; -- If you don't have this you end up with two terminals<br />
&nbsp; &nbsp; terminate the first session of the first terminal<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; set iterm to (make new terminal)<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; repeat with X from 1 to 6<br />
&nbsp; &nbsp; &nbsp; &nbsp; set Y to &quot;R&quot; &amp; X as string<br />
&nbsp; &nbsp; &nbsp; &nbsp; tell iterm<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; make new session at the end of sessions<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tell the last session<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exec command &quot;/usr/local/bin/tle &quot; &amp; Y &amp; &quot; testlab.chainringcircus.org&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set name to Y<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end tell<br />
&nbsp; &nbsp; &nbsp; &nbsp; end tell<br />
&nbsp; &nbsp; end repeat<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; repeat with X from 1 to 4<br />
&nbsp; &nbsp; &nbsp; &nbsp; set Y to &quot;SW&quot; &amp; X as string<br />
&nbsp; &nbsp; &nbsp; &nbsp; tell iterm<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; make new session at the end of sessions<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tell the last session<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exec command &quot;/usr/local/bin/tle &quot; &amp; Y &amp; &quot; testlab.chainringcircus.org&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set name to Y<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end tell<br />
&nbsp; &nbsp; &nbsp; &nbsp; end tell<br />
&nbsp; &nbsp; end repeat<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; repeat with X from 1 to 3<br />
&nbsp; &nbsp; &nbsp; &nbsp; set Y to &quot;BB&quot; &amp; X as string<br />
&nbsp; &nbsp; &nbsp; &nbsp; tell iterm<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; make new session at the end of sessions<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tell the last session<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exec command &quot;/usr/local/bin/tle &quot; &amp; Y &amp; &quot; testlab.chainringcircus.org&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set name to Y<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end tell<br />
&nbsp; &nbsp; &nbsp; &nbsp; end tell<br />
&nbsp; &nbsp; end repeat<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; set the bounds of the first window to {0, 0, 1200, 900}<br />
&nbsp; &nbsp; <br />
end tell</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/testlab-script-in-applescript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does Google Hurt Efficiency?</title>
		<link>http://www.chainringcircus.org/does-google-hurt-efficiency/</link>
		<comments>http://www.chainringcircus.org/does-google-hurt-efficiency/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 23:38:06 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2055</guid>
		<description><![CDATA[The other night we were doing a hardware upgrade on a cluster and testing. We were working with the command clusvcadm to relocate a service from one host in the cluster to another but the originating server kept getting power fenced. We assumed it was the command switches we were running so I went straight [...]]]></description>
			<content:encoded><![CDATA[<p>The other night we were doing a hardware upgrade on a cluster and testing.  We were working with the command clusvcadm to relocate a service from one host in the cluster to another but the originating server kept getting power fenced.  We assumed it was the command switches we were running so I went straight to the man page, my coworker went straight to google.  Just for reference there is a 10 year difference in our ages, I grew up with man pages and it is a pet peeve of mine when either no man page exists or it is a terrible placeholder.  I digress, through his search he came upon a webified man page while I was reading the man page.  When I needled him about it his answer was, &#8220;But mine is nicely formatted and I can search the web page.&#8221;  I was surprised, I can search the man page too, right in the pager and can even change man page viewers by changing the PAGER variable.</p>
<p>Three weeks ago I needed to bring up an https server on Ubuntu and spent 45 minutes googling around reading old, outdated or completely wrong howtos before finally going to <a href="https://help.ubuntu.com">help.ubuntu.com</a> and 20 minutes later it was done.</p>
<p>The same thing happened over the past couple of weeks working with Xen and VirtualBox.  I&#8217;ve toiled away looking at poorly written documentation and even mentioned it in my last Red Hat class.  The instructor worked for Red Hat and took umbrage with my statement.  He was amazed that I did not think Red Hat had great documentation, I was even more shocked that he considered their documentation more than rudimentary.  Have a look for your self at the <a href="http://www.redhat.com/docs/manuals/enterprise/">Red Hat documentation</a>.</p>
<p>Just this week I was helping a friend who is the server and network administrator for a small school system configure the proper etherchannel load balancing for a server and he was frustrated at the Cisco documentation.  I was astonished.  It seemed that he was overwhelmed.  He was stuck googling around trying find the &#8220;right&#8221; documentation rather than learning the layout of the Cisco documentation website.</p>
<p>The point of this post is that lately it seems I waste more time trying to find good information through searching on the web than trying to find the best source of information.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/does-google-hurt-efficiency/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Service Provider Labs</title>
		<link>http://www.chainringcircus.org/service-provider-labs/</link>
		<comments>http://www.chainringcircus.org/service-provider-labs/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 21:08:07 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[CCIE Labs]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2609</guid>
		<description><![CDATA[Running across the Hacking Cisco blog made me remember a similar site, CCIE18473.net. I actually spent about 30 minutes looking for that site and it was Tyson Scott from IPE that me helped find it. I have added this site to my blogroll even though it is not a blog.]]></description>
			<content:encoded><![CDATA[<p>Running across the Hacking Cisco blog made me remember a similar site, <a href="http://www.ccie18473.net/">CCIE18473.net</a>.  I actually spent about 30 minutes looking for that site and it was Tyson Scott from IPE that me helped find it.</p>
<p>I have added this site to my blogroll even though it is not a blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/service-provider-labs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Routing Mnemonics</title>
		<link>http://www.chainringcircus.org/routing-mnemonics/</link>
		<comments>http://www.chainringcircus.org/routing-mnemonics/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 13:28:50 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2161</guid>
		<description><![CDATA[I&#8217;ve been keeping track of some the mnemonics that I have come across or have figured out for myself. For instance in general, in layer 2 elections the lower priority usually wins, however, in layer 3 elections the higher priority usually wins. Layer 2 LACP System Priority 2-bytes priority values followed by a 6-byte MAC [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been keeping track of some the mnemonics that I have come across or have figured out for myself.  For instance in general, in layer 2 elections the lower priority usually wins, however, in layer 3 elections the higher priority usually wins.  </p>
<p><strong>Layer 2</strong></p>
<p><strong>LACP System Priority</strong><br />
2-bytes priority values followed by a 6-byte MAC address.  Lowest system priority makes decisions about the etherchannel setup.</p>
<p><strong>LACP Port Priority</strong><br />
LACP port priority is a 2-byte priority followed by a 2-byte port number.  Lowest port priority is used to decide which ports are put in standby mode when not all ports can be put in etherchannel.</p>
<p><strong>STP</strong><br />
Root bridge election, lowest bridge ID wins.  Bridge ID consists of:<br />
&#8211;2-byte bridge priority from 0-65,535 with a default of 32,768.<br />
&#8211;6-byte MAC address<br />
If the bridge priorities are equal, lowest MAC wins. </p>
<p>Root port, lowest root path cost.</p>
<p>Designated port &#8212; lowest root path cost or if equal use tie breakers:<br />
1.  Lowest root bridge ID<br />
2.  Lowest root path cost to root bridge<br />
3.  Lowest sender bridge ID<br />
4.  Lowest sender port ID</p>
<p><strong>Frame Relay</strong><br />
DCE requires the clock rate, D<strong>C</strong>E, D<strong>T</strong>E, <strong>c</strong>lock rate starts with a <strong>c</strong> and D<strong>C</strong>E is the one with a <strong>c</strong> in it.</p>
<p><strong>Layer 3</strong></p>
<p><strong>HSRP</strong><br />
Active router election is based upon priority, highest priority wins.  Default priority of 100 and a range of 0-255.  Highest IP address on HSRP interface breaks ties.<br />
Standby router is the second highest priority.</p>
<p><strong>VRRP</strong><br />
Election of master is the router with the gateway IP address or if not a &#8220;real&#8221; IP address, the router with the highest priority.  Priority ranges from 1 to 254 with 254 being highest, 100 is the default.</p>
<p><strong>GLBP</strong><br />
Active virtual gateway (AVG) is elected by the highest priority value, tie breaker is the highest IP address in the group.  Router priority is 1-255 with 255 being highest, 100 is the default.</p>
<p><strong>OSPF DR/BDR Election</strong><br />
1.  Highest priority wins.<br />
2.  Highest router ID breaks ties.<br />
Priority range is 0-255 with 255 being highest, 1 is the default and 0 means the router will not participate in the election.</p>
<p><strong>OSPF RID</strong><br />
1.  router-id command wins.<br />
2.  If no router-id is set, the highest loopback address wins, even if it is not advertised and it is not advertised by default.<br />
3.  Highest physical address wins.</p>
<p><strong>OSPF summary-address command or the range command.</strong><br />
The summary-address command is used on an ASBR and has an &#8220;S&#8221; in it, whereas the area range command is used on an ABR and does not have an &#8220;S&#8221; in it.  Both commands are used to summarize routes.</p>
<p><strong>OSPF ExStart</strong><br />
During ExStart of the OSPF packet exchange the neighbor with the highest RID will become the master and sets the DD sequence number. </p>
<p><strong>DVMRP</strong><br />
An exception to the rule of Layer 2 lower takes priority and Layer 3 higher takes the priority.  If two routers are the same distance from the source, the router with the numerically lower IP address becomes the designated forwarder for the network.</p>
<p><strong>BGP best path mnemonic</strong><br />
We love oranges as oranges mean pure refreshment.</p>
<p>We &#8212; Weight (highest)<br />
Love &#8212; LOCAL_PREF (highest)<br />
Oranges &#8212; Originate (local)<br />
AS &#8212; AS_PATH (shortest)<br />
Oranges &#8212; Origin Code (IGP > EGP > Incomplete)<br />
Mean &#8212; Med (lowest)<br />
Pure &#8212; Paths (External > Internal)<br />
Refreshment &#8212; RID (lowest)</p>
<p><strong>Redistribution</strong><br />
RIP and any other protocol that has the letters R-I-P in it requires a seed metric, RIP, IGRP, EIGRP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/routing-mnemonics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EIGRP MPLS VPN PE-CE SOO</title>
		<link>http://www.chainringcircus.org/eigrp-mpls-vpn-pe-ce-soo/</link>
		<comments>http://www.chainringcircus.org/eigrp-mpls-vpn-pe-ce-soo/#comments</comments>
		<pubDate>Tue, 31 May 2011 23:47:05 +0000</pubDate>
		<dc:creator>jud</dc:creator>
				<category><![CDATA[CCIE]]></category>
		<category><![CDATA[CCIE Labs]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://www.chainringcircus.org/?p=2639</guid>
		<description><![CDATA[I couldn&#8217;t resist using all of those acronyms. EIGRP &#8211; Enhanced Interior Gateway Routing Protocol MPLS &#8211; Multiprotocol Label Switching VPN &#8211; Virtual Private Networking PE-CE &#8211; Provider Equipment &#8211; Customer Equipment SOO &#8211; Site Of Origin MPLS SOO MPLS Fundamentals pp. 220-226 BGP->EIGRP and EIGRP->BGP Advertisement of the SOO BGP extended community attribute is [...]]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t resist using all of those acronyms.<br />
EIGRP &#8211; Enhanced Interior Gateway Routing Protocol<br />
MPLS &#8211; Multiprotocol Label Switching<br />
VPN &#8211; Virtual Private Networking<br />
PE-CE &#8211; Provider Equipment &#8211; Customer Equipment<br />
SOO &#8211; Site Of Origin</p>
<p><a href="http://www.cisco.com/en/US/docs/ios/12_0s/feature/guide/s_mvesoo.html">MPLS SOO</a><br />
MPLS Fundamentals pp. 220-226 </p>
<p>BGP->EIGRP and EIGRP->BGP </p>
<p>Advertisement of the SOO BGP extended community attribute is used to identify routes that have originated from a site so that they are not re-advertised back into the same site.  Each SOO uniquely identifies the site and allows for the routes to be filtered.  SOO filtering is configured at the interface level.  It is commonly used when a site contains both VPN and back door links. </p>
<p>From the Cisco document:<br />
The configuration of the SOO extended community allows MPLS VPN traffic to be filtered on a per-site basis. The SoO extended community is configured in an inbound BGP route map on the PE router and is applied to the interface with the ip vrf sitemap command. The SOO extended community can be applied to all exit points at the customer site for more specific filtering but must be configured on all interfaces of PE routers that provide VPN services to CE routers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chainringcircus.org/eigrp-mpls-vpn-pe-ce-soo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

