Over the last few weeks, my research group has developed a reasonable understanding of the router hardware-technologies that lead up to modern programmable routers. This week, we were ready to start exploring the software technologies built on top of this hardware to expose the hardware’s potential to the end-user. In the early stages of programmable routers, when routers were still relatively fixed-function in their design, the OpenFlow protocol offered a standardized way to modify router behavior over the network without exposing internal functionality. We studied an early paper detailing the general design and use cases of OpenFlow in the context of a college campus. Understanding the way routing hardware has changed since the creation of OpenFlow, it was clear that the standard wasn’t complete enough, nor was it evolving fast enough to meet the needs of RMT routers and similar. OpenFlow has since been largely expanded-on/replaced in many contexts by the more flexible P4 router programming language. We began exploring P4 via another paper explaining the design, structure, and use-cases for P4.

Having the hardware background from the past few weeks, I felt like I understood why the P4 language is structured in the way that it is. The pipelined, match-based structure of routers, all the way down to the physical hardware, necessitates a programming language that reflects these design decisions. While I was a bit hesitant at first to spend so much time reading about these technologies prior to working with them, I now recognize that for something so domain-specific, it simply doesn’t make sense to attempt to work with such closely-integrated hardware and software without understanding the way the two are built off of each other. The paper on P4 included a fair amount of sample code written in P4 designed to showcase the structure and features of the language. While I understood a fair amount of it, I believe that actually working with P4 code and implementing things on my own will be the best way to proceed to more completely understand what the language is capable of and how it maps onto the hardware. I believe we will be starting work on this next week.