Adding Cisco IOS support to NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support)

If  you’re a networking passionate I’m pretty sure you’ve already heard about NAPALM (no, I’m not talking about the flammable liquid used in warfare 🙂 ). Anyway, if you’ve not yet, you’re going to discover a very nice project for network automation.



What is it? Let’s quote its documentation page:

NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support) is a Python library that implements a set of functions to interact with different network device Operating Systems using a unified API.

It’s a project developed by David Barroso and Elisa Jasinska (thank you guys 😀 ), owned by Spotify and, as the quote says itself, it is used to interact with different hardware networking vendors. Basically, it works like an API on top of other APIs, adding another level of abstraction.

Lately, many vendors have developed APIs to making it easier to interact with their equipments. For example, most of the JunOS devices support Juniper PyEZ, and so do Cisco’s Nexus with its NX-API.

This way, if I want to interact with a Juniper device I can use PyEZ, whereas I’d use NX-API if I wish to talk with a Nexus switch, and the example continues with other specialized APIs.

What NAPALM does is hiding this layer unifying the way we access a networking device, regardless who built it.


Back to few days ago, NAPALM supported the following network OS:

  • Arista EOS
  • Juniper JunOS
  • Cisco IOS-XR
  • Cisco NX-OS
  • Fortinet FortiOS
  • IBM OS

This is possible thanks to the introduction of the NetworkDriver concept. Every time we want to interact with a device, we can only specify what OS we are going to talk to and NAPALM will select the correct NetworkDriver (basically, a library with all the functions related to that OS).

>>> from napalm import get_network_driver
>>> get_network_driver('eos')
>>> get_network_driver('iosxr')
>>> get_network_driver('junos')
>>> get_network_driver('fortios')

NAPALM will still use third party APIs but this will be trasparent to the user.

Cisco IOS support

Unlike NX-OS, Cisco IOS have no API support. Therefore, it’s not that straightforward to obtain structured data from it and at first NAPALM didn’t support it. So I thought this could be a nice spot to play 🙂

I forked the main repository and started to code.


Since no native API exists, I had to use something more general: netmiko. This is a pretty sweet Python library making it super easy to connect and interact with networking devices. Once a command is sent, netmiko can give me back the output and then I can start to filter and parse it.

The module is composed by 12 methods:

  • open(): opens the connection with the remote device. It is the first method to be used.
  • close(): closes the connection with the remote device.
  • load_merge_candidate(filename, config): loads a candidate configuration from a textfile or a configuration string. If both are passed, filename is picked. At this point no configuration is pushed to the device yet.
  • compare_config(): simply shows the list of commands proposed by the load_merge_candidate method and ready to be executed if commited.
  • discard_config(): what if we notice some errors after the compare_config? We can discard the proposed changes using this method.
  • commit_commit(): pushes the configuration from load_merge_candidate and saves the configuration.
  • rollback(): we can rollback the commited changes using this method. This simply adds the no keyword to commands (anyway it’s smart enough to recognize parent/child commands)
  • get_lldp_neighbors(): extracts lldp neighbors information from the device.
  • get_facts(): extracts information like uptime, vendor, os_version, serial_number, model, hostname, fqdn, and interface_list.
  • get_interfaces(): extracts information about interfaces including status and speed.
  • get_bgp_neighbors(): extracts information about BGP neighbors.
  • get_interfaces_counters(): extracts information about counters.


Now let’s see an example of how to use NAPALM.

The first thing we’re gonna do is to connect to our remote device specifying the OS type, username, password and IP address.

from netmiko import ConnectHandler
from napalm import get_network_driver
driver = get_network_driver('ios')
device = driver('', 'gabriele', 'gabriele')

Once we’re done, if everything went fine we’ll see the Python interactive shell confirming the SSH session has been established.


Now we can start to interact with our device. Let’s ask for some facts, for example:


As we can see, it’s a Cisco 3640 device whose IOS version is 12.4(16). It has 3 interfaces and its uptime value is set to 9 minutes.

Cool, right? 😀

Let’s try some other methods:


Earlier we discovered 3 interfaces exist in our device. Now we’ve just obtained some specific information about them using the get_interfaces() as well as BGP neighbors information thanks to get_bgp_neighbors().

Let’s see how NAPALM can help us with configuration management. Imagine we want to implement OSPF on our network. Just to keep it simple, we want to push the following configuration:

router ospf 1
network area 1

Using load_merge_candidate(filename=new_good.conf), we’ll load our configuration (assuming new_good.conf is the textfile containing the above config). Then, we can see what changes would be implemented using compare_config(). At that point, we can decide to either commit or discard these changes.

Here we’ve sudden realized our OSPF area should be and not 1. So we decide to discard the candidate configuration with discard_config(). We can use compare_config() to confirm that every possible change’s been discarded.


Since our last compare_config() doesn’t show anything, it means everything went fine.

Anyway, we still want to implement OSPF, so we fix the configuration and give it another try. This time we want to use a configuration string instead of a .conf file. We do this with load_merge_candidate(config=’router ospf 1\nnetwork area 0′). Then, if we are happy with it, we can commit.


..and this is how the router’s config look like:


At this point, if we want to rollback the change we can simply use rollback().


It’s been lot of fun to work on this patch and I’m happy to announce that now NAPALM supports IOS too since my PullRequest has been merged to the main repo 🙂

NAPALM is a really cool project and it’s popular among NetOps community and it’s also been presented at a NANOG conference. Here you can find the video from the awesome guys who actually designed and implemented it. Enjoy 🙂



If you’re interested about NAPALM or Network Automation in general you should definitely join the SLACK channel at network.toCode(). Here you’ll find lots of cool guys discussing fancy stuff on networking 🙂


Cisco Incubator Program – How to build a router

It’s been a while since my last post. I’ve been really busy with work (I’ll talk about this in another post 🙂 ), university stuff and I didn’t manage to find the time to write here, even if I have some pending articles to review and share soon.



If you’re following my journey, you already know I’m now part of the Cisco Incubator Program.  The program started few weeks ago with some interesting webinars about technical and non-technical topics. If you’re willing to learn new things and improve your skills thanks to the help of Cisco engineers, you can attend these webinars too, since they are public.

You can follow all the program updates and incoming/recorded sessions inside the Cisco Engineer Incubator page on Facebook.

There you can already find the following records:


Seminars are the key part of this program.

Basically, once a month, you’re invited to the nearest Cisco office to attend a full-day (6 hours + 1 hour lunch) seminar with Cisco engineers. Being a project running on several European countries, every office will be connected to Krakow (the main office) via Telepresence, where engineers will deliver the seminar.

Last thursday I attended the first one and now I’ll tell you how cool it’s been 🙂

How to build a router

Since I live in Catania, the nearest Cisco office is the one in Rome. So I need to take a flight every time to reach it. Because of this, I decided to attend this first seminar via WebEx from home, to save on flight expenses. Anyway, I’ve already booked the tickets for December and January seminars 🙂

The seminar was held by Wojciech Róg, a Customer Support Engineer working at Cisco TAC and the extended title was: How to build a router: the main principles or router architecture.

Anyway, the actual seminar was preceded by an introduction from Kamila Wegrzyn, our Project Manager for this program. She started introducing us all the people behind the program and their function inside it. Then she explained all the project benefits and expectation. I can only say that after her talk I was even more excited to start 🙂

After this part, Wojciech introduced himself and asked every one of us (around 20+ people from all over the Europe) to introduce ourself to the rest of the group. It was nice to see some familiar faces from the Assessment Centre day.

Then, we went technical!

The seminars was divided in 3 main parts:

  • The beginning
  • The middle
  • The future

The beginning

This part was designed to review the key concepts of how IOS works and its architecture. Why is it designed in this way? What are the benefit? What is missing?

This broadly covered both hardware and software aspects. It was really interesting to understand how things work inside the box.

During this phase Wojciech asked a lot of questions and gave us mini assignments, like “Ok, during the next 5 minutes you have to think about how we can improve our product and present it“. I think this was really useful to both involve us and make us think.

The middle

This part was designed to explain how Cisco improved IOS, switching from some paradigms to others and how it culminated developing IOS-XE and ASR1000.

This time we went really deep into the ASR1000 architecture: internal components communication, control plan/data plane separation,  modular designs etc.

We then focused on 3 key components: RP, ESP and SIP. We digged deep into both hardware and sofware sides.

The future

This last part was about Cisco vision for future applications.

But first, Wojciech asked again how we could move to the future and present it to the group.

He then exposed us to the Cisco vision and to the Cisco ISR 4000. Again, we went deep on this 🙂 Here he explaned how the router treats an incoming packet, letting ut understand all the internal communications when such event occour.

I got really interested about the FIA (Feature Invocation Array): basically, when a packet is dropped, it happend at a certain point into the packet processing. The FIA is an array containing the sequence of all the features that a packet needs to be processed by in order to be delivered out of the router. This mean that if the packet is dropped, we can know exactly at what point it has been discarded if we know how the FIA looks like.


The seminars has been awesome. Topics were interesting and Wojciech  managed to present them in the clearest way possible. Also, the way he involved us has been great in order to keep us active (you’ll feel tired after several hours, but you’re keeped engaged).

Next seminar will be on December 17th with the title “Introduction to Cisco Collaboration through Voice and Video”, and I can’t wait to attend it at Cisco office in Rome 🙂


Enabling Network Automation using NTC-Ansible

A couple of months ago I wrote about Ansible and how it can enhance network automation. I also did a (very) little multi-vendor lab to show an example of what can be achieved with this tool.

Today I’m gonna write about an interesting project called ntc-ansible which exploits Ansible awesomeness into networks.


It’s an Open Source project launched by Jason Edelman (LinkedIn page, Blog) and his new-founded company Network to Code (it couldn’t have a better name 😀 ). You can find and download it here. It’s mainly composed by 2 module: ntc_show_commands and ntc_config_commands.


The problem is this: most of the network equipments, doesn’t matter the vendor who made them, don’t return structured data like XML or JSON back from show commands but just simple text. This can be painful if you want to automate some task, like gaining devices’ inventory information. A possible solution could be writing a Python module that would connect to your devices using SSH API, execute commands, retrieve output and, finally, parse the output using Regular Expressions. This is OK, but it’s a lenghty and not always simple procedure.

Ntc-ansible want to simplify all the above.

“ntc_show_commans is a multi-vendor module that can automate converting raw text from show commands into structured data, namely JSON.”

How? This module exploits another interesting tool called TextFSM which is a “Python module that implements a template based state machine for parsing semi-formatted text.” Basically, it takes two inputs, a raw file containing a show command output and a well defined template, and it returns a list of records that contains the data parsed from the text.

So, using ntc-ansible’s ntc_show_commands module we can write a simple Ansible playbook to obtain structured data from network devices in an easy way. Then, we can also use those data to do whatever we want (we’ll see an example of this later on this post).


- ntc_show_command:
    command:'show vlan'
    host:{{ inventory_hostname }}
    username:{{ username }}
    password:{{ password }}


This module enables us to write commands to devices that don’t have API. This can be done in two ways: specifying a list of commands or passing a file containing the commands to be executed. This is an useful module and later I’ll show an example of how this can help to do some auto-remediation.


# write vlan data
- ntc_config_command:
    connection: ssh
    platform: cisco_nxos
      - vlan 10
      - name vlan_10
      - end
    host: "{{ inventory_hostname }}"
    username: "{{ username }}"
    password: "{{ password }}"
    secret: "{{ secret }}"

# write config from file
- ntc_config_command:
    connection: ssh
    platform: cisco_nxos
    commands_file: "dynamically_created_config.txt"
    host: "{{ inventory_hostname }}"
    username: "{{ username }}"
    password: "{{ password }}"
    secret: "{{ secret }}"

Auto-Remediation with NTC-Ansible

The above introduction is far to be enough to let you understand how this tool really works and what it really does. So, in this section we’ll move together across all the steps needed to implement a simple auto-remediation.


A common routine task is to take a network node offline gracefully. This can be done prepending AS_PATH in BGP. Let’s imagine something happened into our network requiring us to drain traffic from a device (like a fan problem or something else). We’ll exploit ntc-ansible to write an Ansible playbook to achieve it (this can also be automatically triggered to be fully automated, but let’s focus on the playbook for now).

A common BGP prepending configuration looks like this (actually this is the one I have configured on my virtual lab):

route-map prepend permit 10
set as-path prepend last-as 3

router bgp 10
neighbor remote-as 20
neighbor route-map prepend out
neighbor remote-as 30
neighbor route-map prepend out

So, we’ll need to write a template extracting BGP neighbors information (from the show ip bgp summary command). We’ll achieve this using the ntc_show_commands module. Then, we’ll need to generate the proper configuration and to push it to the device using the ntc_config_commands module.

But first, we have to write a template for our show command.

TextFSM Template

The template file consists of two top level sections.

  • The Value definitions, which describe the columns of data to extract.
  • One or more State definitions, describing the various states of the engine whilst parsing data. A set of rules is defined in order to perform the parsing. The first and mandatory State is Start.

You can find a great guide on how to write one here.

My show ip bgp summary output looks like this:

BGP router identifier, local AS number 10
BGP table version is 21, main routing table version 21
7 network entries using 819 bytes of memory
8 path entries using 416 bytes of memory
3/2 BGP path/bestpath attribute entries using 372 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1631 total bytes of memory
BGP activity 9/2 prefixes, 13/5 paths, scan interval 60 secs

Neighbor      V   AS   MsgRcvd   MsgSent   TblVer  InQ OutQ    Up/Down State/PfxRcd   4   20       297             435          21       0      0        06:48:44         3   4   30       409             414          21       0      0        06:45:40         0

I have highlighted the field I’m interested in. These are my Values. Now I need to define RegEx for them.

Value BGP_NEIGH (\d+\.\d+\.\d+\.\d+)
Value NEIGH_AS (\d+)

^${BGP_NEIGH}\s+\S+\s+${NEIGH_AS}.*\s\d+:\d+:\d+\s+${STATE_PFXRCD} -> Record

Regular Expressions on Value lines are used to define what we are interested in, while those inside the State are used to find the defined pattern inside each output line. We’ll save this new template inside the ./ntc_templates directory. This directory contains all the commands supported by the ntc_show_commands module as well as an index file with a list of them. Each line of this file is in this format:

cisco_ios_show_ip_bgp_summary.template, .*, cisco_ios, sh[[ow]] ip bgp sum[[mary]]

The highlited RegEx is used to select the rigth template based on the chosen command inside the playbook.


Using this template I’ll have a table with the selected values. Now I can make a first test with ntc_show_commands


  hosts: cisco_ios
  connection: local
  gather_facts: False

    - name: TEST TEMPLATE
        connection: ssh                   
        platform: cisco_ios               
        command: "show ip bgp summary"   
        host: "{{ inventory_hostname }}"  
        username: "{{ username }}"
        password: "{{ password }}"
      register: results

    - debug: var=results.response

On the same directory I have an inventory file looking like this:

[cisco_ios] username=cisco password=cisco secret=cisco

as = 10

If you are familiar with Ansible all the fields are self-explanatory. Running this we’ll obtain the following:


As we can see, the command has been correctly executed and data is well parsed in a JSON-like manner. Now we can decide to use these data to do whatever we want.

Our goal is to drain traffic from the device making it less prefered through BGP AS prepending. So, we need to configure AS prependig for every BGP neighbor. Thanks to ntc_show_commands now we know who BGP neighbors are and we can use this knowledge to build the proper configuration.

We write two other task in order to do so:

      lineinfile: dest=./drain.config line="router bgp {{ as }}\nneighbor {{ item['bgp_neigh'] }} route-map prepend out" state=present create=True
        - "{{ results.response }}"

    - name: ADDING ROUTE-MAP
      lineinfile: dest=./drain.config line="route-map prepend permit 10\nset as-path prepend last-as 3"

The first one builds the actual BGP configuration and store it inside the drain.config file. The state flagsetted to present, and the create flag, setted to True, let the playbook create a new file if it does not exist yet. Let’s run the expanded playbook now:

Senza titolo-7

If the playbook works fine, the drain.config file will appear like this:

router bgp 10
neighbor route-map prepend out
router bgp 10
neighbor route-map prepend out

route-map prepend permit 10
set as-path prepend last-as 3

At this point we write the ntc_config_commands task to configure our device:

        connection: ssh
        platform: cisco_ios
          - router bgp "{{ as }}"
        commands_file: "./drain.config"
        host: "{{ inventory_hostname }}"
        username: "{{ username }}"
        password: "{{ password }}"
        secret: "{{ secret }}"

..and now let’s run it again..

Senza titolo-9

As the screen shows, everything has been successful and we can verify it from a show ip bgp on a neighboring device (of course we could do this inside the playbook itself writing another task. Ignore BGP configuration, I’ve just built a sample lab to show ntc-ansible usage).

Senza titolo-4

..and inside red circles we can see the effect of our run.


This post wanted to be a practical introduction to ntc-ansible and a way to let me do some practice with its modules. I think this project to be really interesting and it’s also receiving lot of good feedbacks from people who are already using it in their environments.

Senza titolo-2

If you find interesting too, you can contribute writing more templates. I did it and I’m doing it right now 🙂

Cisco Incubator Program Assessment Centre: Passed!

In my last post I told you about my experience at the Assessment Centre for the Cisco Incubator Program.

Now I’m happy and excited to inform you that I passed and I’m officially a partecipant of the program! 😀

I already said how well the Assessment Centre was organized and how interesting the experience has been, but now I want to highlight the one thing I’m most impressed by so far:

Cisco management seemed to really take care of us as candidates during the AC and now as official partecipants. The most important example of this is that the Incubator Program manager is taking the time to call every single candidate to deliver personalized feedback about how they performed during the Assessment Centre!

This is awesome by itself, but you realize the word “awesome” is not enough when you know the actual number of call he his doing: 120+!!!

That’s really impressive! There will be 66 total partecipant in this program, but he is taking the time to call even those who didn’t make it to let them know what they need to improve. Again, that’s impressive!

Going back to the program, it’s composed as follows:

  • Webinars: conducted every Wednesday and topics include Professional Development, R&S, Data Center, Collaboration, Mobility and Security.
  • Seminars: conducted once a month at Cisco office via Telepresence and topics include Professional Development, R&S, Data Center, Collaboration, and Security.
  • Cisco Academy: CCNA or CCNP courses, based on partecipant’s level.
  • English language mentoring: those partecipants who need to improve their English can also benefit and improve their language skills thanks to the 1:1 technical conversations with native speakers.

The program looks as challenging as interesting and I can’t wait to start (seminars and webinars’ topic descriptions couldn’t be more interesting).

I’m quite lucky to be part of it and my Project:Me10 project will benefit from this a lot 🙂

If you’re interested in the program you should indeed “Like” the Cisco Engineer Incubator page on Facebook 😉

Cisco Incubator Program – Assessment Centre

As I mentioned in my previous post, a couple of weeks ago I passed a phone interview for the Cisco Engineer Incubator Program.

It is a special educational program designed by Cisco engineers and Cisco Networking Academy to support employment of talented students and graduates. Specifically to support those who are interested in networking technologies and starting a career in IT.

You will benefit from free CCNP course at your local Cisco Networking Academy. There will also be advanced technology and soft skills seminars and webinars delivered by Cisco experts during our regular virtual and live office visits as well as meetings with the Krakow Global Support Center team.

So, selected students would receive free CCNP course, free CCNP exam vouchers, technical webinars and technical (and non-technical) workshop once a month a Cisco office.

Something to be defined SUPER COOL! 😀

Few day later, I was contacted back and informed that I was selected for the recruiting process’ last stage: the Assessment Centre.


My Assessment Centre started at 12:30 p.m. and finished at 16:00 p.m. and it was organized into 4 sessions:

  • Technical questionnarie, 30 minutes.
  • Group role-play, 1 hour.
  • Managers interview, 1 hour.
  • Technical presentation and interview, 1 hour.

Everything was remotely managed by Cisco Kraków team and the whole assessment was delivered using Telepresence, which is awesome.



It was composed of about 10 multiple-choice questions and the difficult leval was CCNA-like. This was indeed the easiest part of the day and I completed it without problems.


This was the session that I was scared the most at first. I was completely wrong anyway, since there was nothing to be scared 🙂

I was connected with other 3 different Cisco offices where other candidates were based and with Cisco Kraków team who delivered the interview.

Our assessors gave us a task and our goal was to work as a team and find and present the solution for the given problem. I really enjoyed this section also thanks to my fellow candidates who were awesome and collaborative. At the end I think we made a nice work (at least from a team work point of view, which was the main goal I suppose).


During this stage I was connected to 2 other managers, one from HR and one from Cisco Advanced Services.

Summary: I don’t think I could have a better experience, seriously!!!

They have seemed to be really interested during the interview, both on my profile and on trying to make me have the best experience possible from the interview itself.

Questions ranged from my CV, to previous experiences, to future perspectives and general interestes. They have challenged me on and on but it was fine since questions were interesting and they were kind.

After the interview I was a little bit sad because I’d have liked it to last even longer 🙂


Let’s say that not everything can go well all the time.

Summary: I don’t think I could have a worst experience, seriously!!!

I won’t go into details this time, but during this interview I felt really bad about how the assessor approached me and his general behaviour. I felt humiliated at some point and I’d have wanted to stop the interview. He asked me very few technical questions and asked tons of unrelated (and useless, in my humble opinion) ones.

Again, I don’t think I could have a worst experience.


My general experience is more than positive. The whole day was well organized and I really enjoyed most of the AC.

At Cisco Rome (where I was located) everyone was kind and helpful. I spent some time with some Cisco guys before and after my interview and they gave me interesting and useful advice. The environment was awesome too. So, in summary, I’m really happy 🙂 I’ve started dreaming about being at a Cisco office since the very first moment I entered in an Academy and now finally I did it.

Now let’s wait next week for AC’s results!

Project:Me10 – 40% Completed

Time rus fast and 4 months are already passed since I started this journey. I believe it’s important to stop for a moment and analyze how I’ve done so far in order to plan the remaing 6 months ahead.


I’ve already passed two certifications:

  • JNCIA: the entry point to the Juniper’s world.
  • BCVRE: a certification from Brocade focused on its virtual solution.


As I said in my previous update, I was going to focus on some Linux and Network Automation skills. During the past two months I’ve started using tools and technologies like Ansible, Jinja2, SQLite3 and I’ve done a eavy usage of GNS3 and VirtualBox to set up a working virtual environment. I’ve also completed the Linux Command Line course on Code Academy.

I’ve posted two little projects about those topics:

Moreover, I’m currently working on other projects, both personal and collaborating with other awesome peers.


This is something I’m really proud of, because I feel like I’m doing something useful for other “networking dreamers” like me 🙂

I’ve performed 4 interviews to ex-interns so far:


Few week ago I applied to the Cisco Engineer Incubator Program

It is a special educational program designed by Cisco engineers and Cisco Networking Academy to support employment of talented students and graduates. Specifically to support those who are interested in networking technologies and starting a career in IT.

You will benefit from free CCNP course at your local Cisco Networking Academy. There will also be advanced technology and soft skills seminars and webinars delivered by Cisco experts during our regular virtual and live office visits as well as meetings with the Krakow Global Support Center team.

This is something really interesting to me and so I decided to give it a try.

Yesterday I passed the phone interview and within the next few days I should be noticed whether I’m selected to attend the assessment center, which is the last step into the selection process. Fingers crossed 🙂


I’m receiving lot of support and positive feedbacks from everyone. More and more people and young guys seem to be interested in this project and this makes me really happy. My blog visits are also increasing rapidly, starting from a total of 146 views in June to almost 600 during these first 10 days of October.

Moreover, many experienced professional reached out offering tips and help, which is something I’d never thought could happen. Probably this is the most important goal reached so far 🙂


CERTS: As stated into the Project:Me10’s Manifesto, the next major milestone is represented by the JNCIS-ENT certification. Today I’m starting my studies and I’m going to complete them within November.

PROJECT:THEM: I’m working on two more interviews to be posted soon and I’m sure you’ll find them so interesting 🙂

AUTOMATION: I’m going to keep studying and practicing NetOps skills with Vagrant, Cumulus VX and TextFSM being on top of my wish list.

NETWORKING SKILLS: Among JNCIS-ENT, I’m going to going deep on some topics I feel I’m not that confortable like before.

So, back to work 🙂


Project:Them04 – Bruce DeWald

Here we are again with another interview! 😀

Today, our guest is Bruce, a young and brilliant Network Engineer from the US. Despite his youth he already have a lot of experience on the field and I’m sure you’ll enjoy his contribution here and his tips. Let’s go 🙂

Gabriele: Hey Bruce, welcome! Let’s start simple: Who are you? Where are you from? How old are you?

Bruce: Hello! My name is Bruce DeWald and I’m from a tiny town in Pennsylvania, US. I’m 21 and currently a senior at RIT.

G: What did you study and where?

B: I’m currently a senior studying Applied Networking and Systems Administration at Rochester Institute of Technology. I’ll be graduating in May 2016 with my undergraduate degree.

G: Based on your LinkedIn page, you have a lot of experience on IT. Can you talk us about your past experiences?

B: I’ve had three related jobs to network engineering. My first and current position is at my department’s on campus computer labs. I have built and manage our current server and network infrastructure. This job has given me a lot of experience as I’ve had the ability to learn a lot of new things and be able to do it myself as this isn’t a production infrastructure that a company relies on.

My second experience (Summer 2014) was a Network Engineering Internship at Harris Corporation in Melbourne, Florida. I worked more with network management and monitoring tools here ensuring the infrastructure remained up. I also got to recreate some topologies in the lab to troubleshoot issues we were having which was a lot of fun.

My most recent experience was this past summer interning at Cisco Meraki which I’ll elaborate on further on.


G: As you said, your most recent experience has been at Cisco Meraki, Tell me about it. How did you apply?

B: I actually applied at RIT’s career fair in October 2014. We have a career fair twice a year where over 250 companies come to recruit our students.

G: How was the recruiting process organized? 

B: At the career fair itself I was asked some very brief questions (about 5 or so) to supplement my resume to get a baseline about my knowledge. A few weeks later I had two one hour skype interviews. About a month after that I had a final one hour skype interview with the manager. Finally, an additional month went by until I heard back that I had received an offer (December 2014).

G: Is there anything about interviews you can share (without breaking any NDA)?

B: All three of my interviews were extremely technical with maybe about 10% of the time being spent on behavioral questions. They involved going through network troubleshooting scenarios that my interviewer would draw out on the board. These interviews were quite challenging but were also a lot of fun!

G: How was your internship organized? Have you done any kind of training?

B: My internship lasted eleven weeks over the summer. The first two weeks had training throughout and we eased ourselves into the job. The rest of the internship we were essentially on our own. By that I mean no one was holding our hand and we were doing real work but everyone around the entire office was extremely friendly and helpful as we had questions.

G: What was your role?

B: My official title was “Network Support Engineer Intern.” This involved handling customer cases revolving around the Meraki product. Some days I would close lots of cases because the customers would be asking easy questions. Other days I would spend an entire day on 2 or 3 cases. These cases might have required reading through lots of documentation, asking more senior employees for their expertise, or recreating the issue in our lab. Any time a case required further investigation we would recreate the customer topology in our lab. This both helped me learn the product/networking better, but also allowed us to see exactly what the customer was seeing.


G: What do you like the most about Cisco Meraki and your job as an intern?

B: The culture and atmosphere around the office made it a really enjoyable place to work in.There’s so many places to relax and so many great people around the office. Several times at lunch we would be joined by people we had never met before (often from another department) and have a great conversation over lunch.

G: How does Cisco Meraki “treat” its interns? What kind of “perks” did you receive?

B: We were treated just like full time employees. About the only difference between us and the full time employees was that we didn’t get health insurance. Meraki even provides awesome housing for us during the internship. Which is great because the cost of rent in San Francisco is ridiculous! Besides the awesome office, other perks we got were free breakfast & lunch, with occasional dinners and micro kitchens all around the office with tons of healthy (and unhealthy) snacks. We also got other random perks like free massages one day. There was also a gym in the building that we could use to work out before/after work.

G: In your opinion, what are the skills that a Cisco Meraki intern candidate should have?

B: In my opinion, the primary skill one needs at this job and any other in this field, is the ability to adapt and learn quickly. This field is always changing and companies are always shifting which technologies they use. The ability to learn something new quickly is a great skill to have. As for this particular internship, network troubleshooting skills were essential as that is pretty much what the internship entailed.

G: At the end of the internship, does they give the opportunity to convert it into a fulltime position?

B: Yes, if interested, interns can go through a few additional interviews to review their internship and skills to see if they get a full time offer.

G: How did you prepare yourself for the interviews?

B: I didn’t do any particular training for the interviews as I felt that my past experience and education had adequately prepared me for the internship. I am very happy with the education I have received and lucky to have gotten the experience that I have.

G: Can you share with us any advice for someone who want to start career in network engineering?

B: I think someone who’s interested in network engineering should play around with the technology as much as possible. I think it’s great to teach yourself new things that you are interested in. Occasionally I go into my department labs and just play with something new to teach myself. I also Co-Founded a networking club at RIT called NextHop where we try to teach students things that aren’t covered by our classes to better prepare students for a career in networking or systems administration.

I also personally believe that certs are a great way to both prove that you know something and teach yourself something new. I currently have my CCNA R&S and am pursuing others.

G: As always, one last question. What are your plans for the future?

B: My plans for the future are to obtain a full time Network Engineering position in the San Francisco Bay Area starting May 2016.

G: With such experience, knowledge and personality I’m sure you will have no problems with landing a wonderful position in any field you’d want 🙂

Many many thanks for your time, Bruce. We wish you all the best for everything 🙂

B: Thanks. It’s been a pleasure!

Honestly, I’m pretty amazed by Bruce’s story. He is so young and yet so skilled!

If you want to do like Bruce, this is the Cisco Meraki’s career page where you can find all the available positions. Don’t be shy, let’s apply 🙂