Must Watch: History of Cisco IOS CLI

My first Cisco router was a blade for a Cabletron modular hub (anyone remembers what hubs were or a company named Cabletron?). We plugged it in, I read the documentation, figured out I had to type conf t and was faced with a blinking cursor staring back at me from an empty line.

A few years later I was invited to beta test Cisco software release 9.21 (it wasn’t called IOS yet). The best feature it had was the awesome configuration CLI with context-sensitive prompts and on-demand help.

Fast-forward a few more years. For one reason or another, I met Terry Slattery (second CCIE worldwide) and during one of our always-enlightening chats he told me he was the guy behind the new Cisco CLI, permanently making him a demigod in my eyes.

It took another two decades or so before I got the whole story, this time listening to a Network Collective podcast with Terry.

You SHOULD listen to the whole podcast (if you manage to find it in Internet Archive), I just wanted to share the hilarious pre-9.21 CLI history:

  • They got it right in the first iteration: router configuration should be in a file that the router would read, parse, and execute.
  • Routers had kilobytes of memory at that time. Adding something like vi or emacs into router code was unimaginable, so they expected the routers to read the file from a TFTP server.
  • Best laid plans fail when they meet reality. This time, they had to demonstrate the routers on a trade show, and for whatever stupid reason they couldn’t get a TFTP server in place.
  • A brief hacking session later, Cisco software got configure terminal that would allow you to enter configuration commands into an in-memory buffer (with no editing, syntax checking, or anything else). When you’d indicate you’re done the router would pretend the text came from a TFTP server.
  • Few releases later someone figured out it would be a great idea if they would parse the lines entered from the terminal connection on-the-fly… opening the Pandora box of let’s mess up the ACL that controls my access to the box one line at a time.
  • Needless to say, it took them another decade to implement reload in 5.

Now you know how we got to the horrible mess we have to deal with on a daily basis. While Cisco tried to rewrite Cisco IOS numerous times, they never really got it done, so we still have to deal with concepts from 1980s that were only slightly improved with Terry’s miraculous code from early 1990s.

Need a Rant?

I ranted about the stupidities of having to use an interface designed for human consumption in automation scripts in the Network Automation Roadblocks part of Network Automation 101 webinar.

Latest blog posts in CLI versus API series


  1. Prior to IOS 8 in 1990 or so, the CLI commands did not execute until after you pressed ^Z after the configuration session.

    Back then, a command command to unconfuse a hung interface was

    interface serial 0
    no shut

    Which would cycle the interface.

    Shortly after the local team in Japan upgraded our router there to 8.0, I had this session:

    interface serial 0

    Followed by an unwelcome international call to a sleeping manager who had to drive to the office to power cycle the unit.

    Filed under: Mistakes you make, once.

    The "clear interface" command ultimately fulfilled the old shut/no shut trick.

    Good times, good times.
    1. Mine was "debug ip bgp updates" with console logging enabled years before we got "reload in 5"... and as the router was in a colo within the same city I had no excuse to call someone to power-cycle it...
Add comment