Programmable Data Planes (text)
by
Sasha Shkrebets
—
last modified
Mar 20, 2023 07:58 AM
n the second lesson we will talk about various projects underway to make the
data plane more programmable and scalable both in software and in hardware.
This module has an optional programming assignment and a quiz on the concepts.
Let's quickly review what a conventional data plan looks like.
Before we talk about customizing the data plan let's
quickly review what a conventional data plan looks like.
Welcome back.
We are now beginning a module on the programmable data plane.
This short module will have two lessons.
In the first lesson, we'll explore a particular piece of software called Click.
That allows the programmer to customize data plane operations.
In the second lesson we will talk about various projects underway to make the
data plane more programmable and scalable both in software and in hardware.
This module has an optional programming assignment and a quiz on the concepts.
Let's quickly review what a conventional data plan looks like.
Before we talk about customizing the data plan let's
quickly review what a conventional data plan looks like.
First, a router receives the packet.
It examines the packet header, looking for the destination for that packet.
It consults its local forwarding table to determine the next hop output interface.
It then modifies the header and passes
the packet to the appropriate output interface.
Conventional data planes typically perform a simple lookup such as that shown here.
For example an IP router would perform a longest prefix match.
The open flow switches that we have been
talking about perform a match action data plain operation.
What if we wanted to perform a richer set of operations in the data plain
besides just a simple look up or a simple match action operation?
That would require additional customizations in the data plane.
Now to customize the data plane we merely need to recognize that
the data plane is nothing more
than streaming algorithms that operated on packets.
They match on some bits in the packet.
And they perform a simple action typically at the behest of the control plane.
The data plane of course can perform
a wide range of functions including packet forwarding.
But also a more sophisticated set of operations
including access control, manipulation of packet header fields.
Traffic monitoring, buffering, marking the packet, traffic shaping.
In other words, shaping the traffic so that it does not exceed a particular rate.
And deep packet inspection.
In other words, looking into the payload of the packet.
For example, to determine whether malware might be present.
Now performing such a sophisticated set of operations in a data plane
obviously requires the ability to customize the data plane in various ways.
And software presents unique opportunities for customizing the data plane.
Network devices are quite diverse.
They range from routers to switches,
to load balancers, to depacket inspection devices.
Despite the diversity of these devices, it can be very difficult to add or
modify the functions of these existing devices,
often because the functions are implemented in hardware.
In particular, even with open flow switches, we see that
the switches are capable of a particular match action paradigm.
But that is really only one type of data plane.
So we'd like to think about whether we could extend
the capabilities of the existing data planes, potentially in software.
The design goals for a programmable data plane are flexibility,.
In other words we should be able to
perform a variety of different data plane operations.
It should be extensible so that if we want to
add new data plane operations that should be fairly easy.
And there should be clean interfaces
between different types of data plane operations.
To make it easy to compose different types of data plane operations.
Such as forwarding, traffic shaping, and so forth.
The click modular router is one
such customizable data plane implemented in software.
The key building block in click are elements.
Each individual element and click performs a unique data plan function such as
packet switching, lookup and classification, dropping, and so forth the
idea is that a developer of a customized data plan would take these click
elements and snap them together into a packet processing pipeline.
Here's a simple pipeline that takes packets from the E zero interface,
counts them and discards them by assembling building blocks developers
can implement a variety of increasingly complex functions.
Running a click configuration is quite simple.
Let's just take a quick look at a configuration that
takes packets from an input interface, prints them, and discards them.
You can see here that the configuration is very simple.
We take a source element, something that captures the packets, send it
to a print element, and then send it to a discard element.
To run Click, we simply invoke the configuration file.
Now we can see that Click is printing
every packet that it's seeing on the interface EN2.
Now the examples that we have explored in this particular lecture are rather simple.
But you can explore a lot more on the Click homepage.
Which has links to both example configurations for various types of custom
data plan operations such as NAT, tunneling, IP routing, and so forth.
And a link to a list of elements that perform a variety of custom
data plane operations ranging from traffic generation
to classification to counters and timestamps, to packet
modification, to scheduling shaping and queue management.
It's possible to stitch together Click elements to build an entire IP router.
The configuration here shows how the various existing Click
elements can be used to build an IP router.
It's even possible to write your own elements
in Click and invoke them with the Click configuration.
So in summary, we not only need the control plane
to be programmable, but the data plane should also be programmable.
We have explored one way of customizing the
data plane through a programmable software router called Click.
The example configurations that we've seen, show that complex data
plane functions can be performed using simple building blocks.
And as it turns out, the performance
that Click provides is still acceptable for prototyping.
Various performance experiments show that Click is still about 90%
as fast as the base Linux system for packet forwarding.
There won't be any required Click programing assignments in this
course, but the module has an optional Click programing assignment
and I encourage you to check that out if you're
interested in learning a bit more about programmable data planes.