Software Research Seminar: Talk 1

  • Newell-Simon Hall
  • Mauldin Auditorium 1305
  • Ph.D. Student
  • Ph.D. Program in Software Engineering, Institute for Software Research
  • Carnegie Mellon University

The Packet Processing Police Is Coming: Moving Towards Better Abstractions for Checking & Designing Network Programs

Network functions, e.g. load balancers, firewalls, routers, have transitioned from expensive, dedicated, and (usually) proprietary hardware "building blocks" into components that can be programmed in software and deployed on common machines or even containers. Writing network functions—programming with packets—is more slick and flexible than ever, as there are a plethora of frameworks and high-level, domain-specific programming languages to choose from. Nonetheless, many network programs consist of code that exercises arbitrary logic and domain knowledge that only network engineers and administrators would or should know. Examples of this include updating checksums when a packet's contents has been modified or adjusting a payload length field of a IPv6 header if another header is added or removed within a packet. While static-typing captures interface specifications and how packet contents should behave, it doesn't enforce precise invariants around runtime arbitrary relationships like these examples. Instead, during the design phase of network functions, programmers should be given a easier way to specify these operational dependencies up front and define which invariants must hold, all without having to account for and keep track of what affects what at each and every step during development. In this talk, I'll present some background and examples on abstractions around programmable networks and present an approach we're taking in attempting to add dynamic, runtime contracts for specifying and checking these dependencies in common packet processing operations.



For More Information, Please Contact: