The Humble API

2 January 2018 | Comments Off on The Humble API

Network Engineering and coding, like many other things in the information technology world, share overlapping concepts—even if we don’t often recognize the overlap because we are too busy making up new names to describe the same thing. For this week’s video, I turn my attention to the Application Programming Interface, or the API.

Exaggerating the End of NetEng

19 December 2016 | 11 Comments

The argument around learning to code, it seems, always runs something like this: We don’t need network engineers any longer, or we won’t in five years. Everything is going to be automated. All we’ll really need is coders who can write a python script to make it all work. Forget those expert level certifications. Just…

snaproute Go BGP Code Dive (14): First Steps in Processing an Update

12 December 2016 | Comments Off on snaproute Go BGP Code Dive (14): First Steps in Processing an Update

In the last post on this topic, we found the tail of the update chain. The actual event appears to be processed here— case BGPEventUpdateMsg: st.fsm.StartHoldTimer() bgpMsg := data.(*packet.BGPMessage) st.fsm.ProcessUpdateMessage(bgpMsg) —which is found around line 734 of fsm.go. The second line of code in this snippet is interesting; it’s a little difficult to understand what…

snaproute Go BGP Code Dive (13): Finding the tail of the update chain

31 October 2016 | Comments Off on snaproute Go BGP Code Dive (13): Finding the tail of the update chain

Just in time for Hallo’ween, the lucky thirteenth post in the BGP code dive series. In this series, we’re working through the Snaproute Go implementation of BGP just to see how a production, open source BGP implementation really works. Along the way, we’re learning something about how larger, more complex projects are structured, and also…

snaproute Go BGP Code Dive (12): Moving to Established

10 October 2016 | Comments Off on snaproute Go BGP Code Dive (12): Moving to Established

In last week’s post, the new BGP peer we’re tracing through the snaproute BGP code moved from open to openconfirmed by receiving, and processing, the open message. In processing the open message, the list of AFIs this peer will support was built, the hold timer set, and the hold timer started. The next step is…

snaproute Go BGP Code Dive (11): Moving to Open Confirm

26 September 2016 | Comments Off on snaproute Go BGP Code Dive (11): Moving to Open Confirm

In the last post in this series, we began considering the bgp code that handles the open message that begins moving a new peer to open confirmed state. This is the particular bit of code of interest— case BGPEventBGPOpen: st.fsm.StopConnectRetryTimer() bgpMsg := data.(*packet.BGPMessage) if st.fsm.ProcessOpenMessage(bgpMsg) { st.fsm.sendKeepAliveMessage() st.fsm.StartHoldTimer() st.fsm.ChangeState(NewOpenConfirmState(st.fsm)) } We looked at how this…

snaproute Go BGP Code Dive (10): Moving to Open Confirm

12 September 2016 | Comments Off on snaproute Go BGP Code Dive (10): Moving to Open Confirm

In the last post on this topic, we traced how snaproute’s BGP code moved to the open state. At the end of that post, the speaker encodes an open message using packet, _ := bgpOpenMsg.Encode(), and then sends it. What we should be expecting next is for an open message from the new peer to…

snaproute Go BGP Code Dive (9): Moving to Open

29 August 2016 | Comments Off on snaproute Go BGP Code Dive (9): Moving to Open

In the last session of snaproute BGP code dive—number 8, in fact— I started looking at how snaproute’s BGP moves from connect to open. This is the chain of calls from that post— st.fsm.StopConnectRetryTimer() st.fsm.SetPeerConn(data) st.fsm.sendOpenMessage() st.fsm.SetHoldTime(st.fsm.neighborConf.RunningConf.HoldTime, st.fsm.neighborConf.RunningConf.KeepaliveTime) st.fsm.StartHoldTimer() st.BaseState.fsm.ChangeState(NewOpenSentState(st.BaseState.fsm)) The past post covered the first two steps in this process, so this post will…

snaproute Go BGP Code Dive (8): Moving to Open

15 August 2016 | Comments Off on snaproute Go BGP Code Dive (8): Moving to Open

Last week we left off with our BGP peer in connect state after looking through what this code, around line 261 of fsm.go in snaproute’s Go BGP implementation— func (st *ConnectState) processEvent(event BGPFSMEvent, data interface{}) { switch event { …. case BGPEventConnRetryTimerExp: st.fsm.StopConnToPeer() st.fsm.StartConnectRetryTimer() st.fsm.InitiateConnToPeer() …. What we want to do this week is pick…

snaproute Go BGP Code Dive (7): Moving to Connect

8 August 2016 | Comments Off on snaproute Go BGP Code Dive (7): Moving to Connect

In last week’s post, we looked at how snaproute’s implementation of BGP in Go moves into trying to connect to a new peer—we chased down the connectRetryTimer to see what it does, but we didn’t fully work through what the code does when actually moving to connect. To jump back into the code, this is…