<?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>Humair's Blogs</title>
	<atom:link href="http://humairahmed.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://humairahmed.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 02 May 2012 07:46:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Important IPv6 Addresses</title>
		<link>http://humairahmed.com/blog/?p=4224</link>
		<comments>http://humairahmed.com/blog/?p=4224#comments</comments>
		<pubDate>Wed, 02 May 2012 05:32:41 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[important ipv4 addresses]]></category>
		<category><![CDATA[important ipv6 addresses]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[ip address]]></category>
		<category><![CDATA[IPv4]]></category>
		<category><![CDATA[ipv4 ip address]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[ipv6 ip address]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[special ipv4 addresses]]></category>
		<category><![CDATA[special ipv6 ip addresses]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=4224</guid>
		<description><![CDATA[For easy reference, I&#8217;ve listed some important IPv6 address ranges below. 0:0:0:0:0:0:0:0 &#8211; equals ::. This is equivalent to IPv4&#8242;s 0.0.0.0 IP address. It is usually the source address of a host using DHCP stateful configuration and is also referred to as a non-routable meta-address used to designate an invalid, unknown, or non applicable target. [...]]]></description>
			<content:encoded><![CDATA[<p><br/> For easy reference, I&#8217;ve listed some important IPv6 address ranges below. <span id="more-4224"></span> <br/></p>
<blockquote><p>
0:0:0:0:0:0:0:0 &#8211; equals ::. This is equivalent to IPv4&#8242;s 0.0.0.0 IP address. It is usually the source address of a host using DHCP stateful configuration and is also referred to as a non-routable meta-address used to designate an invalid, unknown, or non applicable target. <br/><br />
0:0:0:0:0:0:0:1 &#8211; equal to ::1. This is the equivalent of the 127.0.0.1 which is the Internet protocol (IP) loopback address also referred to as the “localhost&#8221;. <br/><br />
0:0:0:0:0:0:192.168.1.2 &#8211; in a mixed IPv6/IPv4 network environment, an IPv4 address is appended as the last 32 bits of an IPv6 address. <br/><br />
2000::/3 &#8211; the global unicast address range. <br/><br />
FC00::/7 &#8211; the unique local unicast range. <br/><br />
FE80::/10 &#8211; the link local unicast range. <br/><br />
FF00::/8 &#8211; the multicast range. <br/><br />
3FFF:FFFF::/32 &#8211; reserved for examples and documentation. <br/><br />
2001:0DB8::/32 &#8211; also reserved for examples and documentation <br/><br />
2002::/16 &#8211; used with 6to4 tunneling.
</p></blockquote>
<p> <br/><br />
As an example of implementation, 2001:0DB8:0123::/48 stands for the network with addresses 2001:0DB8:0123:0000:0000:0000:0000:0000 through 2001:0DB8:0123:FFFF:FFFF:FFFF:FFFF:FFFF.<br />
<br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=4224&text=Important IPv6 Addresses" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=4224</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Networking:  Blocking Access to a Website via Extended Access List [Video]</title>
		<link>http://humairahmed.com/blog/?p=4217</link>
		<comments>http://humairahmed.com/blog/?p=4217#comments</comments>
		<pubDate>Mon, 16 Apr 2012 11:38:02 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[Cisco 2811]]></category>
		<category><![CDATA[Cisco 2811 router]]></category>
		<category><![CDATA[Cisco 2950]]></category>
		<category><![CDATA[Cisco 2950-24]]></category>
		<category><![CDATA[Cisco 2950-24 switch]]></category>
		<category><![CDATA[Cisco switch]]></category>
		<category><![CDATA[extended access list]]></category>
		<category><![CDATA[Extended ACL]]></category>
		<category><![CDATA[prevent hosts from accessing a website]]></category>
		<category><![CDATA[prevent specific hosts from accessing a website]]></category>
		<category><![CDATA[router]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=4217</guid>
		<description><![CDATA[This video demonstrates how to use an extended access list to prevent specific hosts from accessing a website. In this lab I use two Cisco 2811 routers [IOS 12.4(15)T1] and two Cisco 2950-24 switches [IOS 12.1(22)EA4].]]></description>
			<content:encoded><![CDATA[<p><br/>This video demonstrates how to use an extended access list to prevent specific hosts from accessing a website. In this lab I use two Cisco 2811 routers [IOS 12.4(15)T1] and two Cisco 2950-24 switches [IOS 12.1(22)EA4]. <span id="more-4217"></span><br />
<br/></p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/3J9opu80HfI?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=4217&text=Networking:  Blocking Access to a Website via Extended Access List [Video]" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=4217</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Networking: Spanning Tree Protocol Basics [Video]</title>
		<link>http://humairahmed.com/blog/?p=4209</link>
		<comments>http://humairahmed.com/blog/?p=4209#comments</comments>
		<pubDate>Sun, 15 Apr 2012 09:55:26 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Loop Avoidance]]></category>
		<category><![CDATA[loop prevention]]></category>
		<category><![CDATA[network loops]]></category>
		<category><![CDATA[Spanning Tree Protocol]]></category>
		<category><![CDATA[STP]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=4209</guid>
		<description><![CDATA[This video covers some of the basics of how Spanning Tree Protocol (STP) works in a network. To learn more about Spanning Tree Protocol see some of my prior blogs on STP.]]></description>
			<content:encoded><![CDATA[<p><br/>This video covers some of the basics of how Spanning Tree Protocol (STP) works in a network. To learn more about Spanning Tree Protocol see some of <a href="http://humairahmed.com/blog/?s=spanning+tree">my prior blogs on STP</a>. <span id="more-4209"></span><br />
<br/></p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/T2lgp65Rbk0?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=4209&text=Networking: Spanning Tree Protocol Basics [Video]" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=4209</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Algebra: Linear Equations (Coin Problem) [Video]</title>
		<link>http://humairahmed.com/blog/?p=4196</link>
		<comments>http://humairahmed.com/blog/?p=4196#comments</comments>
		<pubDate>Sun, 15 Apr 2012 07:12:21 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Algebra]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[algebra]]></category>
		<category><![CDATA[algebra coin problem]]></category>
		<category><![CDATA[coin]]></category>
		<category><![CDATA[coin problem]]></category>
		<category><![CDATA[math]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=4196</guid>
		<description><![CDATA[I created and uploaded this video to youtube back in 2009. This video demonstates how to solve a simple algebra coin problem.]]></description>
			<content:encoded><![CDATA[<p><br/><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/coins-e1334473699669.gif" alt="Coins" title="Coins" width="250" height="127" class="alignleft size-full wp-image-4197" /> <br/>I created and uploaded this video to <a href="http://www.youtube.com/watch?v=lwDUG3kyr9U">youtube</a> back in 2009. This video demonstates how to solve a simple algebra coin problem. <span id="more-4196"></span><br />
<br/><br/><br/></p>
<p><iframe width="500" height="375" src="http://www.youtube.com/embed/lwDUG3kyr9U?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=4196&text=Algebra: Linear Equations (Coin Problem) [Video]" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=4196</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chemistry: Calculate the Mass of an Atom [Video]</title>
		<link>http://humairahmed.com/blog/?p=4169</link>
		<comments>http://humairahmed.com/blog/?p=4169#comments</comments>
		<pubDate>Sun, 15 Apr 2012 06:05:07 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Chemistry]]></category>
		<category><![CDATA[General Chemistry]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[avogadro's number]]></category>
		<category><![CDATA[chemistry]]></category>
		<category><![CDATA[chlorine atom]]></category>
		<category><![CDATA[general chemistry]]></category>
		<category><![CDATA[mass of an atom]]></category>
		<category><![CDATA[mass of atom]]></category>
		<category><![CDATA[mass of chlorine atom]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=4169</guid>
		<description><![CDATA[I created and uploaded this video to youtube back in 2009. This video demonstrates how to solve a simple chemistry problem. I calculate the mass of a Chlorine atom.]]></description>
			<content:encoded><![CDATA[<p><br/><a href="http://humairahmed.com/blog/wp-content/uploads/2012/04/chlorine_atom.jpg"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/chlorine_atom-150x150.jpg" alt="Chlorine Atom" title="Chlorine Atom" width="150" height="150" class="alignleft size-thumbnail wp-image-4175" /></a> <br/>I created and uploaded this video to <a href="http://www.youtube.com/watch?v=Eu7u6H2NTl8">youtube</a> back in 2009. This video demonstrates how to solve a simple chemistry problem. I calculate the mass of a Chlorine atom. <span id="more-4169"></span><br />
<br/><br/><br/><br/><br/><br/></p>
<p><iframe width="500" height="375" src="http://www.youtube.com/embed/Eu7u6H2NTl8?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p><br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=4169&text=Chemistry: Calculate the Mass of an Atom [Video]" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=4169</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python &#8211; Implementing Caching in Your Applications via Dictionaries</title>
		<link>http://humairahmed.com/blog/?p=4109</link>
		<comments>http://humairahmed.com/blog/?p=4109#comments</comments>
		<pubDate>Fri, 06 Apr 2012 08:54:51 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Chemistry]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[amu]]></category>
		<category><![CDATA[atomic mass]]></category>
		<category><![CDATA[atomic mass unit]]></category>
		<category><![CDATA[atomic masses]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[caching scheme]]></category>
		<category><![CDATA[chemistry]]></category>
		<category><![CDATA[compound]]></category>
		<category><![CDATA[dictionaries]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[dictionary cache]]></category>
		<category><![CDATA[element]]></category>
		<category><![CDATA[formula mass]]></category>
		<category><![CDATA[h2o]]></category>
		<category><![CDATA[mass]]></category>
		<category><![CDATA[molecular mass]]></category>
		<category><![CDATA[molecule]]></category>
		<category><![CDATA[python dictionary]]></category>
		<category><![CDATA[python dictionary cache]]></category>
		<category><![CDATA[water]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=4109</guid>
		<description><![CDATA[In this blog I demonstrate how you can implement and take advantage of caching in your Python scripts/applications. Caching allows you to complete tasks more rapidly by storing and reusing results for repeated operations using the same criteria. For example, consider a function that takes several arguments and performs a complex calculation. What if you [...]]]></description>
			<content:encoded><![CDATA[<p><br/><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/periodic_table-e1333706324101.gif" alt="Periodic Table of the Elements" title="Periodic Table of the Elements" width="250" height="208" class="alignleft size-full wp-image-4161" />In this blog I demonstrate how you can implement and take advantage of caching in your Python scripts/applications.<br />
<br/>Caching allows you to complete tasks more rapidly by storing and reusing results for repeated operations using the same criteria. For example, consider a function that takes several arguments and performs a complex calculation. What if you passed the same arguments to this function ten times; well, without caching, the same operation and complex calculation will be performed ten times. <span id="more-4109"></span><br />
<br/>Fortunately, if a caching scheme is implemented correctly, the application will perform the complex calculation only once and save the arguments and calculated results; if the same exact arguments are passed to the function again, the application will know that the calculation has been done in the past and can just return the prior results instead of performing a recalculation. As you can imagine, application performance can greatly be improved by caching; this is the reason most all high-traffic commercial web applications implement some caching scheme.<br />
<br/>For this blog, I created a Python application that calculates the molecular/formula mass of some simple compounds. The molecular/formula mass of a compound is the sum of atomic masses of all its component elements. For example, the molecule H2O or water is equal to a molecular mass of 18.016 amu [(2 x atomic mass of H) + (1 x atomic mass of O)].<br />
<br/>Below is the Python function I created that takes a molecular/formula string as an argument, parses the respective information, and calculates the molecular/formula mass. The element data is pulled from an external text file which holds the symbol and atomic mass for the respective element.<br />
<div id="attachment_4111" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/04/calculate_molecular_mass-e1333699355486.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/calculate_molecular_mass-e1333699355486.png" alt="Python function that calculates molecular mass" title="Python function that calculates molecular mass" width="575" height="337" class="size-full wp-image-4111" /></a><p class="wp-caption-text">Python function that calculates molecular mass</p></div><br />
In the above function, the second to last line saves the results to a dictionary and saves the respective passed in arguments as the keys. Now, if you look at the first four lines of the function, you can see that upon entering the function the same dictionary is checked to see if the arguments passed in were already passed in prior &#8211; if so, the saved results are returned, skipping the entire recalculation and saving time.<br />
<br/>To prove that the caching mechanism is really improving performance, I wrote a function called &#8216;calculateTime&#8217; which takes the molecular formula as a string and times how long it takes to calculate the molecular/formula mass. Below is the function code. <div id="attachment_4122" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/04/molecular_mass_timer-e1333700933908.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/molecular_mass_timer-e1333700933908.png" alt="Python function for timing how long it takes to calculate the molecular mass" title="Python function for timing how long it takes to calculate the molecular mass" width="575" height="80" class="size-full wp-image-4122" /></a><p class="wp-caption-text">Python function for timing how long it takes to calculate the molecular mass</p></div><br />
In the test code below, you can see I call the &#8216;calculateTime&#8217; function four times. The first three times, the molecular formula passed in as an argument is different in each case. However, in the fourth call to the &#8216;calculateTime&#8217; function, you can see I used the same argument as the third call to the function. I would expect the fourth call to return much faster than the other three as the same arguments were used for the call prior and the results should have been cached. <div id="attachment_4130" class="wp-caption aligncenter" style="width: 372px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/04/molecular_mass_test.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/molecular_mass_test.png" alt="Python molecular mass test code" title="Python molecular mass test code" width="362" height="359" class="size-full wp-image-4130" /></a><p class="wp-caption-text">Python molecular mass test code</p></div><br />
The &#8216;calculateTime&#8217; function  prints out the time in seconds it took to return a result. You can see in the fourth call there is a huge jump in calculation time for the &#8216;calculateMolecularMass&#8217; function. You&#8217;ve just witnessed caching at work. This is a relatively simple program; just imagine how much time can be saved in a huge commercial system. <div id="attachment_4137" class="wp-caption aligncenter" style="width: 427px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/04/molecular_mass_results.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/04/molecular_mass_results.png" alt="Python molecular mass test program results" title="Python molecular mass test program results" width="417" height="59" class="size-full wp-image-4137" /></a><p class="wp-caption-text">Python molecular mass test program results</p></div> <br/> You can download the full source code for this application from the <a href="http://humairahmed.com/#Downloads">download section</a> of this website.<br />
<br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=4109&text=Python - Implementing Caching in Your Applications via Dictionaries" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=4109</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coding a XenServer Client in Python &#8211; Monitoring Multiple VMs via Multiple Threads</title>
		<link>http://humairahmed.com/blog/?p=3981</link>
		<comments>http://humairahmed.com/blog/?p=3981#comments</comments>
		<pubDate>Fri, 30 Mar 2012 08:08:10 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Virtualization and Cloud Computing]]></category>
		<category><![CDATA[Citrix]]></category>
		<category><![CDATA[Citrix Xen]]></category>
		<category><![CDATA[Citrix Xen API]]></category>
		<category><![CDATA[Citrix XenAPI]]></category>
		<category><![CDATA[Citrix XenServer]]></category>
		<category><![CDATA[HueXenClient]]></category>
		<category><![CDATA[ICMP]]></category>
		<category><![CDATA[ICMP packets]]></category>
		<category><![CDATA[Network Monitoring]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[PMW]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[ports]]></category>
		<category><![CDATA[PyDev]]></category>
		<category><![CDATA[PyDev plug-in]]></category>
		<category><![CDATA[Python megawidgets]]></category>
		<category><![CDATA[Python megawidgets library]]></category>
		<category><![CDATA[python pmw]]></category>
		<category><![CDATA[thread]]></category>
		<category><![CDATA[threads]]></category>
		<category><![CDATA[Tkinter]]></category>
		<category><![CDATA[Tkinter GUI library]]></category>
		<category><![CDATA[VM Monitoring]]></category>
		<category><![CDATA[VM Network Monitoring]]></category>
		<category><![CDATA[Xen]]></category>
		<category><![CDATA[XenAP]]></category>
		<category><![CDATA[XenCenter]]></category>
		<category><![CDATA[XenClient]]></category>
		<category><![CDATA[XenServer]]></category>
		<category><![CDATA[XenServer 6.0]]></category>
		<category><![CDATA[XenServer pool]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=3981</guid>
		<description><![CDATA[In some prior blogs I had written about developing an ESXi client in Java which could connect to a VMware ESXi server and perform some management tasks. In this blog, I will describe developing a Cirtrix XenServer Client in Python that connects to a Citrix XenServer or XenServer pool; the client can also perform management [...]]]></description>
			<content:encoded><![CDATA[<p><br/><div id="attachment_4048" class="wp-caption alignleft" style="width: 251px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_api_test_3.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_api_test_3-241x300.png" alt="HueXenClient - XenServer client written in Python using the Citrix XenAPI" title="HueXenClient - XenServer client written in Python using the Citrix XenAPI" width="241" height="300" class="size-medium wp-image-4048" /></a><p class="wp-caption-text">HueXenClient - XenServer client written in Python using the Citrix XenAPI</p></div>In some <a href="http://humairahmed.com/blog/?p=3851">prior blogs</a> I had written about developing an ESXi client in Java which could connect to a VMware ESXi server and perform some management tasks. In this blog, I will describe developing a Cirtrix XenServer Client in Python that connects to a Citrix XenServer or XenServer pool; the client can also perform management tasks and provides some advanced monitoring features. <span id="more-3981"></span><br />
<br/>HueXenClient is the name of the program; it was written to demonstrate the possibilities of what can be done using the Citrix XenAPI. The most advanced feature of the program is the capability to monitor multiple VMs simultaneously for loss of network connectivity. The program acts as a management station and pings the VMs via internal mechanism by creating its own ICMP packets and sending the ping request.<br />
<br/>This program was written in a short time-span; even-so, I have included proper error/exception handling for all issues I came across during testing. I will be adding on to this application over the next few releases which will be available on <a href="https://github.com/HumairAhmed/HueXenClient">GitHub</a> and on the <a href="http://humairahmed.com/#Downloads">download section</a> of this website. For the latest code, you should download from <a href="https://github.com/HumairAhmed/HueXenClient">GitHub</a>.<br />
<br/><br/><strong><u>Development Environment Setup:</u></strong><br />
<br/>HueXenClient is written in Python and uses the included Tkinter GUI library in addition to the <a href="http://pmw.sourceforge.net/">Python megawidgets library</a> and the <a href="http://community.citrix.com/display/xs/Download+SDKs">Citrix XenAPI</a> for XenServer 6.0.<br />
<br/>You can use whatever editor you like. I used the Eclipse program and the <a href="http://pydev.org/">PyDev plug-in</a>. It should also be mentioned that this program was developed, run, and tested on a Windows 7 machine. Although, it should theoretically work with Linux, this has not been tested with Linux and some of the libraries/code may behave differently.<br />
<br/>If you download the program from <a href="https://github.com/HumairAhmed/HueXenClient">GitHub</a>, you will have to download the <a href="http://pmw.sourceforge.net/">Python megawidgets library</a> separately and appropriately link to all the libraries. If you download the code from <a href="http://humairahmed.com/#Downloads">my personal website</a>, I have included the entire Eclipse project with respective libraries within the download package. However, you will still need to install Eclipse and the <a href="http://pydev.org/">PyDev plug-in</a> if that’s what you choose to use.<br />
<br/><br/><strong><u>Testing Environment Setup:</u></strong><br />
<div id="attachment_3985" class="wp-caption alignleft" style="width: 210px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_server_pool-e1333028181508.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_server_pool-e1333028181508.png" alt="Citrix XenServer Pool Setup" title="Citrix XenServer Pool Setup" width="200" height="273" class="size-full wp-image-3985" /></a><p class="wp-caption-text">Citrix XenServer Pool Setup</p></div><br />
This program was developed, run, and tested on a Windows 7 machine. It was tested against a XenServer setup which consisted of two XenServers in a XenServer pool. Nine VMs existed across both servers combined. Each VM only had one NIC adapter and IP assigned to it. Currently the VM Network Monitoring feature of the application only supports monitoring a VM with one NIC and IP assigned. Also, XenTools must be installed on the respective VM for many of the application functions to work. Additionally, in my setup, all hosts and VMs were part of the same network.<br />
<br/><br/><br/><br/><strong><u>Running the Program:</u></strong><br />
<br/>I used Windows 7 as the operating system during the development process. To run the program from Eclipse, make sure you have the <a href="http://pydev.org/">Pydev Eclipse plugin</a> installed. Right click Eclipse and “Run as administrator”. You must run as administrator or root as the application opens sockets and sends ICMP packets without depending on the operating system. If you downloaded the zip file from <a href="http://humairahmed.com/#Downloads">my website</a>, I have included all the libraries you need in the zip file with the entire Eclipse project.<br />
<br/><strong>Connecting to the master and slave host of the XenServer pool:</strong><br />
<br/>You must enter the IP address of the XenServer pool master host before attempting to connect, otherwise, you must select the ‘Login to slave host option’ from the ‘Options’ menu as shown below before connecting. Note, you can only perform operations when connecting to the master host. You can only view VMs and “Filter powered-on VMs by host” when connecting to a slave host. <div id="attachment_4037" class="wp-caption aligncenter" style="width: 420px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_api_test_1.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_api_test_1.png" alt="HueXenCHueXenClient - connecting to a slave host of a XenServer Pool" title="HueXenClient - connecting to a slave host of a XenServer Pool" width="410" height="131" class="size-full wp-image-4037" /></a><p class="wp-caption-text">HueXenClient - connecting to a slave host of a XenServer Pool</p></div><br />
<br/><strong><u>VM Network Monitoring Feature:</u></strong><br />
<br/>Currently the VM Network Monitoring feature of the application only supports monitoring a VM with one NIC and IP assigned. XenTools must also be installed on the respective VM. The VM Network monitoring feature is a check mark option under the “Options&#8221; menu in the toolbar. It will be grayed-out until you select a VM from the dropdown box. Once you select the “Start network monitoring on VM” option from the menu, the network connectivity to the VM is monitored by the application via ICMP ping packets. Two pings are sent around every 5 seconds. If two consecutive pings are missed, a snapshot of the VM is automatically created and the VM stops being monitored. This is demonstrated below using a single VM and by disabling the VM’s adapter so that the pings are intentionally missed. </p>
<p><br/>It is important to remember that that the application is monitoring the VM via external pings, so you must ensure that the application has IP reach-ability to the VM you would like to monitor.<br />
<br/><strong>1.</strong> <div id="attachment_4042" class="wp-caption aligncenter" style="width: 421px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_api_test_4.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_api_test_4.png" alt="HueXenClient - enabling network monitoring on a VM" title="HueXenClient - enabling network monitoring on a VM" width="411" height="512" class="size-full wp-image-4042" /></a><p class="wp-caption-text">HueXenClient - enabling network monitoring on a VM</p></div></p>
<p><strong>2.</strong><div id="attachment_4025" class="wp-caption alignleft" style="width: 564px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_server_pool2.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_server_pool2-e1333157708873.png" alt="XenCenter - disabling the network adapter of the VM being monitored" title="XenCenter - disabling the network adapter of the VM being monitored" width="554" height="392" class="size-full wp-image-4025" /></a><p class="wp-caption-text">XenCenter - disabling the network adapter of the VM being monitored</p></div></p>
<p><strong>3.</strong><div id="attachment_4034" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_server_snap-e1333031457408.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_server_snap-e1333031457408.png" alt="XenCenter - snapshot of VM automatically created after two consecutive pings are missed" title="XenCenter - snapshot of VM automatically created after two consecutive pings are missed" width="575" height="379" class="size-full wp-image-4034" /></a><p class="wp-caption-text">XenCenter - snapshot of VM automatically created after two consecutive pings are missed</p></div></p>
<p><br/><strong><u>VM Network Monitoring on Multiple VMs Simultaneously:</u></strong><br />
<br/>Since the application is using threads, simultaneous VM network monitoring is supported. This feature is pretty cool and implementing it was a bit of a challenge. I used an <a href="https://github.com/jedie/python-ping">open source python ping implementation</a> which had to be modified to work correctly with my application. Since ICMP does not innately have a concept of ports, I had to implement a way for the correct VM to receive the response, otherwise messages are received by all listeners. I accomplished this by creating a unique hash for each thread that associates it with the respective VM.<br />
<br/>One important thing to remember is that in an app like this where multiple threads are running in the background, you want to make sure you implement a solution where the threads are killed when the application is exited. I implemented the below code in both the &#8216;Disconnect&#8217; button and the &#8216;Exit&#8217; option in the menu. Upon exit, it loops through all the VMs and if needed gets its monitoring object and shuts it down, which in turn shuts down the associated thread for that VM which is sending out the pings. Pretty cool! <div id="attachment_4054" class="wp-caption alignleft" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_shut_monitoring-e1333033984230.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/xen_shut_monitoring-e1333033984230.png" alt="HueXenClient code - upon exiting app, shuts down any VM monitoring threads" title="HueXenClient code - upon exiting app, shuts down any VM monitoring threads" width="575" height="204" class="size-full wp-image-4054" /></a><p class="wp-caption-text">HueXenClient code - upon exiting app, shuts down any VM monitoring threads</p></div><br />
<br/>As you can see this app can be pretty useful and can easily be expanded. That&#8217;s it for this tutorial; feel free to dive into the <a href="https://github.com/HumairAhmed/HueXenClient">code</a>!<br />
<br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=3981&text=Coding a XenServer Client in Python - Monitoring Multiple VMs via Multiple Threads" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=3981</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EIGRP &#8211; Best Path Selection</title>
		<link>http://humairahmed.com/blog/?p=3955</link>
		<comments>http://humairahmed.com/blog/?p=3955#comments</comments>
		<pubDate>Tue, 27 Mar 2012 10:58:49 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[Cisco 3725]]></category>
		<category><![CDATA[Cisco 3725 router]]></category>
		<category><![CDATA[Cisco 3725 routers]]></category>
		<category><![CDATA[delay]]></category>
		<category><![CDATA[delay of the line]]></category>
		<category><![CDATA[EIGRP]]></category>
		<category><![CDATA[EIGRP calculation]]></category>
		<category><![CDATA[eigrp load balancing]]></category>
		<category><![CDATA[Enhanced Interior Gateway Routing Protocol]]></category>
		<category><![CDATA[equal cost load balancing]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[routing table]]></category>
		<category><![CDATA[topology table]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=3955</guid>
		<description><![CDATA[By default EIGRP uses bandwidth and delay of the line to determine the best path to a remote network. However, if desired, EIGRP can use a composite of four metrics: bandwidth, delay, reliability, and load. Maximum transmission unit (MTU) is not used in EIGRP calculations but is a required parameter in some EIGRP-related commands. Also, [...]]]></description>
			<content:encoded><![CDATA[<p><br/>By default EIGRP uses bandwidth and delay of the line to determine the best path to a remote network. However, if desired, EIGRP can use a composite of four metrics: bandwidth, delay, reliability, and load. Maximum transmission unit (MTU) is not used in EIGRP calculations but is a required parameter in some EIGRP-related commands. Also, by default, EIGRP will provide equal-cost load balancing across up to four links. You can disable load balancing by setting the ‘maximum-paths’ to ’1′. In this lab I use four Cisco 3725 routers [IOS 12.4(15)T10] to demonstrate EIGRP path selection behavior on Cisco routers. <span id="more-3955"></span> Below is a diagram of my setup. <div id="attachment_3957" class="wp-caption aligncenter" style="width: 550px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/eigrp_top_unequal.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/eigrp_top_unequal.png" alt="EIGRP lab topology" title="EIGRP lab topology" width="540" height="338" class="size-full wp-image-3957" /></a><p class="wp-caption-text">EIGRP lab topology</p></div><br />
My initial topology and routing table is displayed below. <div id="attachment_3958" class="wp-caption aligncenter" style="width: 541px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/laba_show_ip_eigrp_top.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/laba_show_ip_eigrp_top.png" alt="Initial R1 EIGRP topology table" title="Initial R1 EIGRP topology table" width="531" height="624" class="size-full wp-image-3958" /></a><p class="wp-caption-text">Initial R1 EIGRP topology table</p></div> <div id="attachment_3960" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/laba_show_ip_ro-e1332844150785.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/laba_show_ip_ro-e1332844150785.png" alt="Initial R1 EIGRP routing table" title="Initial R1 EIGRP routing table" width="575" height="551" class="size-full wp-image-3960" /></a><p class="wp-caption-text">Initial R1 EIGRP routing table</p></div><br />
As you can see from the above, since EIGRP provides equal-cost load balancing across for up to four links, both equal routes to the 12.0.0.0/30 network are in the topology and routing table. Below, I lower the bandwidth of the 10.0.13.0/30 link to 50 MB and since bandwidth is a metric used by EIGRP to determine the best path, you can see that the 10.0.13.0/30 link remains in the topology table but is removed from the routing table. Only the 11.0.0.0/30 link to the 12.0.0.0/30 network remains in the routing table. <div id="attachment_3964" class="wp-caption aligncenter" style="width: 540px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/labb_show_ip_eigrp_top.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/labb_show_ip_eigrp_top.png" alt="R1 EIGRP topology table after lowering the bandwidth of the 10.0.13.0/30 link" title="R1 EIGRP topology table after lowering the bandwidth of the 10.0.13.0/30 link" width="530" height="657" class="size-full wp-image-3964" /></a><p class="wp-caption-text">R1 EIGRP topology table after lowering the bandwidth of the 10.0.13.0/30 link</p></div> <div id="attachment_3965" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/labb_show_ip_ro-e1332845144501.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/labb_show_ip_ro-e1332845144501.png" alt="R1 EIGRP routing table after lowering the bandwidth of the 10.0.13.0/30 link" title="R1 EIGRP routing table after lowering the bandwidth of the 10.0.13.0/30 link" width="575" height="538" class="size-full wp-image-3965" /></a><p class="wp-caption-text">R1 EIGRP routing table after lowering the bandwidth of the 10.0.13.0/30 link</p></div> <br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=3955&text=EIGRP - Best Path Selection" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=3955</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting-up Basic iBGP and eBGP on Cisco Routers</title>
		<link>http://humairahmed.com/blog/?p=3924</link>
		<comments>http://humairahmed.com/blog/?p=3924#comments</comments>
		<pubDate>Thu, 15 Mar 2012 14:32:51 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[AS]]></category>
		<category><![CDATA[Autonomous Number]]></category>
		<category><![CDATA[Autonomous Numbers]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[BGP table]]></category>
		<category><![CDATA[Border Gateway Protocol]]></category>
		<category><![CDATA[Cisco 3725]]></category>
		<category><![CDATA[Cisco 3725 router]]></category>
		<category><![CDATA[eBGP]]></category>
		<category><![CDATA[established]]></category>
		<category><![CDATA[established state]]></category>
		<category><![CDATA[External BGP]]></category>
		<category><![CDATA[iBGP]]></category>
		<category><![CDATA[Internal BGP]]></category>
		<category><![CDATA[Multihomed]]></category>
		<category><![CDATA[neighbor]]></category>
		<category><![CDATA[neighbor relationship]]></category>
		<category><![CDATA[Neighbors]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[prefxes]]></category>
		<category><![CDATA[redistribute connected]]></category>
		<category><![CDATA[redistribute static]]></category>
		<category><![CDATA[redistribution of static and connected routes into BGP]]></category>
		<category><![CDATA[show ip bgp]]></category>
		<category><![CDATA[show ip bgp summary]]></category>
		<category><![CDATA[state]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=3924</guid>
		<description><![CDATA[The Border Gateway Protocol (BGP) is a protocol used to make core routing decisions on the Internet. BGP is commonly mislabeled or referred to as an IP routing protocol. However, it is not a routing protocol; rather, it is a TCP application that carries routing information with it. It is better referred to as a [...]]]></description>
			<content:encoded><![CDATA[<p><br/>The Border Gateway Protocol (BGP) is a protocol used to make core routing decisions on the Internet. BGP is commonly mislabeled or referred to as an IP routing protocol. However, it is not a routing protocol; rather, it is a TCP application that carries routing information with it. It is better referred to as a reach-ability protocol rather than a routing protocol. <span id="more-3924"></span></p>
<p><br/>External BGP (eBGP) helps connect networks with different Autonomous Numbers (AS) to each other. eBGP is used heavily by Internet service providers to establish routing between one another; this is especially the case if they are multihomed (for more info on multihoming, see my prior blog, <a href="http://humairahmed.com/blog/?p=3883">Single/Dual and Multihomed Connections</a>). Internal BGP (iBGP) is a BGP connection within the same AS and is used as a way to exchange BGP information between multiple BGP border routers. </p>
<p><br/>In this lab, I use three Cisco 3725 routers [IOS 12.4(15)T10] to demonstrate how to setup basic iBGP and eBGP on Cisco routers. I have two routers, R1 and R2, in AS 200 and setup iBGP between them. R3 is in AS 400 so I setup eBGP between R1 and R3. I configured loopback addresses on both R2 and R3 to confirm communication is good between them; this also helps confirm that BGP is working properly. Below is the lab setup I used. <div id="attachment_3925" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/ibgp_ebgp.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/ibgp_ebgp.png" alt="BGP lab setup" title="BGP lab setup" width="575" height="380" class="size-full wp-image-3925" /></a><p class="wp-caption-text">BGP lab setup</p></div></p>
<p><br/>The configuration I used to setup the routers is shown below. Note, in BGP, the redistribution of static and connected routes into BGP is enabled with the &#8220;redistribute connected&#8221; and &#8220;redistribute static&#8221; commands. I use the &#8220;redistribute connected&#8221; command below.</p>
<p><br/><strong>R1 Configuration</strong></p>
<blockquote><p>
- enable<br />
- conf t<br />
- router bgp 200<br />
- redistribute connected<br />
- neighbor 180.0.0.2 remote-as 400<br />
- neighbor 10.0.0.2 remote-as 200<br />
- exit<br />
- exit<br />
- write
</p></blockquote>
<p><br/><strong>R2 Configuration</strong></p>
<blockquote><p>
- enable<br />
- conf t<br />
- router bgp 200<br />
- redistribute connected<br />
- neighbor 10.0.0.1 remote-as 200<br />
- exit<br />
- exit<br />
- write
</p></blockquote>
<p><br/><strong>R3 Configuration</strong></p>
<blockquote><p>
- enable<br />
- conf t<br />
- router bgp 400<br />
- redistribute connected<br />
- neighbor 180.0.0.1 remote-as 200<br />
- exit<br />
- exit<br />
- write
</p></blockquote>
<p><br/>The &#8220;show ip bgp summary&#8221; command outputs the identified neighbors and their associated Autonomous System (AS) number. The current state of the neighbor relationship is also listed. If all is working, this show display as &#8216;established&#8217; or show the count of prefixes learned. The prefixes indicate the prefixes learned from the respective neighbor and confirms the state is established. </p>
<p><br/>Below, from the &#8220;show ip bgp summary&#8221; command run on both R2 an R3, you can see that the respective neighbor is listed and the state is established with each having learned three prefxes. <div id="attachment_3930" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/r2_show_ip_bgp_summ-e1331820138545.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/r2_show_ip_bgp_summ-e1331820138545.png" alt="R2 - &quot;show ip bgp summary&quot; output" title="R2 - &quot;show ip bgp summary&quot; output" width="575" height="229" class="size-full wp-image-3930" /></a><p class="wp-caption-text">R2 - &quot;show ip bgp summary&quot; output</p></div> <div id="attachment_3931" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/r3_show_ip_bgp_summ-e1331820121975.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/r3_show_ip_bgp_summ-e1331820121975.png" alt="R3 - &quot;show ip bgp summary&quot; output" title="R3 - &quot;show ip bgp summary&quot; output" width="575" height="230" class="size-full wp-image-3931" /></a><p class="wp-caption-text">R3 - &quot;show ip bgp summary&quot; output</p></div></p>
<p><br/>Next, I display the BGP table of R2 via the &#8220;show ip bgp&#8221; command. As you can see, all respective routes have been learned. Further, I ping from the loopback on R2 (2.2.2.2) to the loopback on R3 (3.3.3.3) to confirm there is no issue with communication. If you are having issues establishing a neighbor relationship, you may want to enable &#8220;logging console&#8221; and &#8220;logging buffer&#8221;; this will allow you to see triggered events on the screen and via the &#8220;show logging&#8221; command. <div id="attachment_3935" class="wp-caption aligncenter" style="width: 585px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/r2_show_ip_bgp-e1331820852913.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/r2_show_ip_bgp-e1331820852913.png" alt="R2&#039;s BGP table and confirming communication via ping" title="R2&#039;s BGP table and confirming communication via ping" width="575" height="289" class="size-full wp-image-3935" /></a><p class="wp-caption-text">R2&#039;s BGP table and confirming communication via ping</p></div><br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=3924&text=Setting-up Basic iBGP and eBGP on Cisco Routers" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=3924</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Single/Dual and Multihomed Connections</title>
		<link>http://humairahmed.com/blog/?p=3883</link>
		<comments>http://humairahmed.com/blog/?p=3883#comments</comments>
		<pubDate>Mon, 12 Mar 2012 14:04:47 +0000</pubDate>
		<dc:creator>Humair</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Protocols]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[BGP]]></category>
		<category><![CDATA[Border Gateway Protocol]]></category>
		<category><![CDATA[connection redundancy]]></category>
		<category><![CDATA[dual homed]]></category>
		<category><![CDATA[dual multihomed]]></category>
		<category><![CDATA[internet redundancy]]></category>
		<category><![CDATA[isp]]></category>
		<category><![CDATA[isp redundancy]]></category>
		<category><![CDATA[redundancy]]></category>
		<category><![CDATA[single homed]]></category>
		<category><![CDATA[single multihomed]]></category>

		<guid isPermaLink="false">http://humairahmed.com/blog/?p=3883</guid>
		<description><![CDATA[Network engineers will sometimes speak of connections to their ISP(s) in terms of single homed, dual homed, single multihomed, and dual multihomed. Here is a breakdown and clarification of what this terminology means: - Single Homed (1 link per ISP, 1 ISP) - Dual Homed (2+ links per ISP, 1 ISP) - Single Multihomed (1 [...]]]></description>
			<content:encoded><![CDATA[<p><br/>Network engineers will sometimes speak of connections to their ISP(s) in terms of single homed, dual homed, single multihomed, and dual multihomed. Here is a breakdown and clarification of what this terminology means:</p>
<blockquote><p>
- Single Homed (1 link per ISP, 1 ISP)<br />
- Dual Homed (2+ links per ISP, 1 ISP)<br />
- Single Multihomed (1 link per ISP, 2+ ISPs)<br />
- Dual Multihomed (2+ links per ISP, 2+ ISPs)
</p></blockquote>
<p> <span id="more-3883"></span></p>
<p><br/>Obviously, if you are a datacenter or large enterprise, dual multihomed is definitely costly but the way to go. A dual multihomed setup can help with redundancy, but just as importantly decisions can be made, for instance by BGP (Border Gateway Protocol), on the best path to reach various destinations.. Below are some graphical examples.</p>
<p><br/><strong><u>Single Homed</u></strong> <div id="attachment_3889" class="wp-caption aligncenter" style="width: 596px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/single_homed.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/single_homed.png" alt="Single Homed" title="Single Homed" width="586" height="165" class="size-full wp-image-3889" /></a><p class="wp-caption-text">Single Homed</p></div></p>
<p><br/><strong><u>Dual Homed</u></strong> <div id="attachment_3892" class="wp-caption aligncenter" style="width: 596px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/dual_homed-e1331557731194.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/dual_homed-e1331557731194.png" alt="Dual Homed" title="Dual Homed" width="586" height="557" class="size-full wp-image-3892" /></a><p class="wp-caption-text">Dual Homed</p></div></p>
<p><br/><strong><u>Single Multihomed</u></strong> <div id="attachment_3915" class="wp-caption aligncenter" style="width: 596px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/single_multihomed-e1331560864890.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/single_multihomed-e1331560864890.png" alt="Single Multihomed" title="Single Multihomed" width="586" height="613" class="size-full wp-image-3915" /></a><p class="wp-caption-text">Single Multihomed</p></div></p>
<p><br/><strong><u>Dual Multihomed</u></strong> <div id="attachment_3913" class="wp-caption aligncenter" style="width: 596px"><a href="http://humairahmed.com/blog/wp-content/uploads/2012/03/dual_multihomed-e1331560626538.png"><img src="http://humairahmed.com/blog/wp-content/uploads/2012/03/dual_multihomed-e1331560626538.png" alt="Dual Multihomed" title="Dual Multihomed" width="586" height="620" class="size-full wp-image-3913" /></a><p class="wp-caption-text">Dual Multihomed</p></div><br/></p>
<div style="clear:both;margin-bottom:5px;">
				<a href="http://twitter.com/share?url=http://humairahmed.com/blog/?p=3883&text=Single/Dual and Multihomed Connections" target="_blank" title="Click here if you liked this article">
					<img src="http://humairahmed.com/blog/wp-content/plugins/twitter-plugin/images/twitt.gif" alt="Twitt" />
				</a>
			</div>]]></content:encoded>
			<wfw:commentRss>http://humairahmed.com/blog/?feed=rss2&#038;p=3883</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

