Saturday, January 30, 2010

Networkers at Cisco Live 2010 - Barcelona

1 year after, i revisited Barcelona for this year's Networkers at Cisco Live 2010. This time i focused mostly on training.

Below you'll find my experience, expressed in the usual ranking model:

Category Grade Comments
Hotel B- I stayed at a non-Cisco hotel.
+ : it was only 3 mins walk from the CCIB
+ : best breakfast you could ask for
- : wi-fi access wasn't free
- : A/C has a strange issue with heat

Buses - I didn't use them.

Conference B- Better than last year's.
Center This time techtorials were made in normal rooms.
The most annoying thing was that there were some construction
works near the CCIB, which made projectors in some rooms bouncing.
Restrooms were still not enough (or food was too "energetic").

Training A- I tried to follow my usual two categories :
MPLS/VPLS & Carrier Ethernet. This time i focused more on
theoretical training, so i didn't choose any labs.
7 out of 14 sessions that i chose were advanced,
the rest were intermediate.
I met again the same French speaker who was hard to understand,
but i must admit he's a guru. Techtorial (Advanced L2VPN) was
very well presented by the two speakers, although some
introductory stuff could have been avoided. Technical material
presented in breakout sessions was according to my expectations,
besides one session which proved more introductory and less
intermediate. Biggest annoyance was that most advanced sessions
included information that couldn't be presented in just ~2 hours,
something the made the speakers pass it over in quick steps.
Imho, some advanced sessions should be made 3 hours with a
10' break and should be made available only in morning hours.
Trying to watch the advanced session "LFA - a simple protection
technique for IP/MPLS networks" at 18:00 is like hearing Dino's
session about LISP after a hangover.
The intermediate session about "Anatomy of Network Elements" was
an unexpected surprise, that proved too informative.
Online scheduler should provide an option to add alternative
sessions too (regardless of their availability), so you can always
have a quick look at your desired schedule.
For example, under each scheduled session you should see all other
available sessions that you have in your interests.

Meet the A- I arranged a single meeting with a Cisco engineer,
Engineer which proved valuable for one of my issues.
Sessions Cisco's major fault (hence the minus) was that it
wasn't possible to schedule a meeting through the web
and at the same time the meeting centre was well hidden
in the world of solutions, behind the food area.
Since my free time was limited, i had to actually run there,
schedule a meeting by hand and then return back for the next

Food B+ I didn't try breakfast (i had at the hotel).
Lunch had good quality, could have bigger variety.
Fruits and desserts were great.
Local specialties didn't impress me, so my meals were limited.

Snacks B- Snacks were average, dessert was good.

On-Site Help B Is there a taboo with Spanish people speaking English?

Cisco Store A I bought two books at a 30% discount price.
I couldn't find an old one though.

Conference C Better than last year's plastic bag, but still nothing exceptional.
Bags I used my own bag.

Registration C- Just the usual session guide and a very small CCIE label pin.
Pack No DVD, no usb stick.

Internet A- I had my EeePC and wireless was ok on every spot i tried.
Access PowerStations were only in the ground floor;
CCIE Lounge should have some of these too.

Networkers B- Too heavy and too large for my netbook.
Virtual Many unneeded features, personalization per attendee should be
supported. All PDFs should include the session title in their name.
A corrupted zip archive was created every time i tried adding
all sessions to a single download.
Some zip archives included more than one files with the same name
but different sizes.

World of - Like last year, i didn't have time to check it thoroughly.

Food at WoS - I didn't try it.

CCIE Lounge B Power stations should have been provided in the CCIE Lounge.
Also more lounge chairs would help in certain cases.

Certification - I didn't have time for an exam, so i didn't recertify my CCIE
as i was hoping.

Keynote - Since Chambers wasn't talking, i decided to miss this one and
get some sleep instead (previous night had been too long).

CCIE Party - Was there one?

Customer C Although it was a 2-day event, i can't say i enjoyed it.
Appreciation There were 2 live events (one per day), but nothing remarkable.
Event Maybe for locals it was something special.
Snacks and food were limited; at least drinks were plenty.
Also, it should have started after the end of sessions.

Cisco Live A+ Everything that makes a positive contribution to society
Initiative is more than welcome.

Overall B Since i had put training at a high priority this time, this
networking event fulfilled my expectations. Nevertheless,
i still believe the USA based one is far better in regards to
everything else.
In any case, if you want to mess with the best class
of Cisco engineers, don't miss the networkers events

Note to Cisco :
Next time, please use a single page for everything. Having to flip through,, for finding the required info can be quite tricky sometimes. Apart from having to keep track of all your login credentials.

Saturday, January 16, 2010

Shaper granularity on ME-3400 demystified

Everyone using ME-3400 switches might have noticed the following error message when trying to configure an output policy-map under an interface:

QoS: Configuration failed. The configured rate 4000000 bps is not
achievable in hw within 1% of configuration.
Closest value(s) are: 11111120 bps, 5882368 bps

Cisco documentation is cryptic (as always) about the details of this, but it has to do with some hardware limitation of this specific platform. In particular the granularity of the hardware for the shaping action is somehow based on pre-configured values.

The ME-3400 (as most lower end switches) has physical memory buffers, which can be used by IOS only in bunches of specific (pre-configured) sizes. In routers and high end switches, QoS is usually implemented in software through the use of memory pools, which allows the IOS to use parts of buffers with variable sizes.

Egress shaping on ME-3400 comes into two categories : Port shaping and Class-based shaping. Port shaping applies to all traffic passing through an interface, while class-based shaping applies to specific classes of traffic leaving an interface. Each one of them is using a different formula in order to give you all the supported values.

Port shaping values are based on the following formula:

(1 - 16

) * IfSpeed

N is a value between 17 and 64000
IfSpeed is the interface speed : 10 Mbps, 100 Mbps, 1 Gbps
The result in then rounded up to a multiple of 16.
An equivalent excel formula would be : CEILING((1-16/N)*IfSpeed;16)

Class-based shaping values are based on the following much simpler formula:


* IfSpeed

N is a value between 1 and 15625
IfSpeed is the interface speed : 10 Mbps, 100 Mbps, 1 Gbps

You can see some possible values in the table below:

According to the above table, in the port shaper the low end granularity is very coarse and the high end granularity is very dense, while the opposite happens in the class-based shaper. So there is no possibility you can have a <58 Mbps port shaper for 1 Gbps interfaces, as there is no possibility to have <5,8 Mbps port shaper for 100 Mbps interfaces. Similarly you can't have a 700 Mbps class-based shaper on a 1000 Mbps interface, nor a 80 Mbps class-based shaper on a 100 Mbps interface.

Let's take for example the following policy-map configuration which is applied on a 1 Gbps interface.

policy-map CHILD
shape average 100000
policy-map PARENT
class class-default
shape average 930000000
service-policy CHILD

If you try to change the shaper of the child class to a value >500 Mbps, you'll get a warning like the following:

3400(config-pmap-c)#shape average 700000000
QoS: Configuration failed. The configured rate 700000000 bps is not achievable in hw within 1% of configuration.
Closest value(s) are: 930000000 bps, 500000000 bps

If you check the formula for the class-based shaper (or have a quick look at the table), 930000000 is not actually a valid value to configure, but it gets printed because this is the limit imposed by the parent class. You just have to ignore it.

If you need specific values you might want to try changing the speed of the interface : choosing between 10/100/1000 should be easy for BaseTX interfaces, while 100/1000 Mbps SFPs exist for the SFP-based ones.

Also, it's strongly recommended that you disable port speed autonegotiation when you attach an output policy map to a 10/100/1000 port, to prevent the port from autonegotiating to a rate that would make the output policy map invalid.

Keep in mind that ME-3400E (the new enhanced version of ME-3400) implements a improved version of Egress Shaping Granularity, which uses a simpler linear formula. It's 64 Kbps for the class-based shaper and 100/500/1000 Kbps for the 10/100/1000 Mbps port-based shaper (100 Kbps for 10 Mbps ports, 500 Kbps for 100 Mbps ports, 1000 Kbps for 1000 Mbps ports).

Sunday, January 10, 2010

crinv (Create Inventory Report)

Some months ago i was searching for a simple inventory management tool, that could catalogue my company's devices, mainly for updating our support contracts.

I tried quite a few of free ones, some demos of commercial ones, but i didn't find what i was looking for. Most of them were bloated with features i didn't need and i had to dig very deeply in order to customize them. So i decided (once more) to write my own.

crinv (Create Inventory Report is the full name) is a very simple script written in perl, that produces a csv file containing the most basic attributes you would need from your inventory management tool. Then you can load the csv file in Excel and produce whatever reports you like.

crinv takes as an argument a text file where you have to put your devices, one per line.

# Format of devices' file
# -----------------------
# - The general format of each line is "device|community"
# - Only device is required, community is optional
# - All white spaces are removed before processing each line
# - Lines starting with # are comments and will be ignored
# - Lines starting with | are ignored
# - The | character must be used on each line for seperation between device and community
# - Devices without a community use the default/cli community
# - Lines without a | character are considered to be devices and use the default/cli community
# Output csv filename is created automatically after removing any extension from the
# devices input filename and adding .csv to it

There are quite a few of display filters into the script that you can change, to order to suit your needs. Feel free to experiment with them, although the default values should be fine for most of you. For the hierarchical output, check below:

# In order to make the output kind of hierarchical, you have to change the following two parameters:
# my $left_space = " "; # This can be any character(s) you want to use to produce the left indent effect
# # spaces are prefered since tab characters do not show up in Excel
# my $display_level = 1; # This must be 1 for hierarchical output

Usage is quite simple:

E:\perl> -d devices.txt

crinv (Create Inventory Report) v0.9 (10-Jan-2010)
(c) 2009-2010 Tassos (
Found 2 valid devices in 'devices.txt'...
Collecting snmp data...
Getting snmp data from 'router1'...
Getting snmp data from 'router2'...
Finished collecting snmp data!
Processing snmp data...
Finished processing snmp data!
Generating report...
Finished generating report 'devices.csv'...

This will process all devices from devices.txt and use the default community name for devices that don't have one. You can check the included readme.txt for more details.

Below you can see screenshots from some generated reports using different display filters (some parts have been intentionally hidden).

1) No hierarchical output

2) Hierarchical minimal output

3) Hierarchical output

In its simplest form, you just have to create a text file with all your devices (one per line) and then run crinv on it by supplying the snmp community as a parameter:

crinv -f devices.txt -c COMMUNITY

You can download crinv from here.


1) I have only tested it on Cisco devices and on a limited range of them. If you find it not working on a relatively new Cisco device, please inform me and i'll try to have a look at it. I can't guarantee anything due to my shortage of free time.

From readme.txt:

# Please note that not all Cisco devices support the Entity MIB and those that support it, do not
# always display the correct information.
# The following modular devices have been tested (with latest IOS) and seem to return correct values:
# 6500, 7600, 10000, ASR1000, 12000.
# The following smaller devices have been tested (with latest IOS) and seem to return correct values:
# 2950, 2960, ME3400, 3750, 3845, 7200/G1, 7200/G2. 7200s may show a different S/N than the actual one.

2) I don't know if there is a limit on the number of devices that can be processed at once (probably it depends on the hardware perl is running on). On a modest SUN workstation, ~500 devices (~50 of them were modular) were processed without any problem in about 20 mins (snmp is taking the most time). Of course, you can always split your devices in smaller parts and process many different files in parallel.

3) Right now i'm not planning of making it a full-blown application. This was created for servicing my own needs mainly (as many other scripts in my job), but i thought others could benefit from it too.

Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Greece License.