 We are convinced that software defined networking has to be realized through programmability. In order to appreciate the kind of efforts that have gone in over the decade, let's start with looking at some open source projects in this particular domain. So we'll start off with some background, then we look at the operations. First of all, we start with OpenStack. OpenStack is basically an open source cloud software development platform. It is actually meant to allow the users, whether retail or service providers, to implement services at larger scale. The URL actually has all the details on OpenStack, the code which is publicly available. It consists of interrelated components to actually orchestrate, in other words, manage the diverse range of computing resources, storage, networking, etc., coming in from a pool of multiple vendors. The users interact with this OpenStack environment through web-based interface, a command line interface on certain proprietary softwares, and then particularly web services which are available in restful API format. So let's look at a very typical example of resource virtualization, or we say server virtualization for network function virtualization. So on the left-hand side, we see that we've got ComputeNode1, ComputeNode2, which are physically different machines. Each of these are running certain virtual machines and virtual routers and firewalls and a switch. So this is the environment which is connected to physical router and a firewall. So to begin with, if we look at the interaction between two virtual machines, if these two virtual machines are hosted on the same physical server, since these have been virtualized, so if VM1 wants to send something to VM2, it would be routed through the virtual switch which is created or realized on the same physical server. On the right-hand side, the same scenario is now being extended where virtual machine 1 wants to communicate with virtual machine 4. In this case, the two virtual switches would be forwarding the traffic to the external part of their network, that is, the virtual switch is going to send over to the physical switch and then back to the virtual switch of ComputeNode2. So this leads us to the concept of network function virtualization that we already have seen in our preceding lectures, but here we are going to look at it again. So broadly speaking, the functionality can be broken up into core and service. In core, it deals with the connectivity aspects of the virtual machines primarily at layer 2. Then at the service level functionality, the networking devices such as routers, firewalls, etc. are realized. So we have basically two constructs, the network and the subnet part. The command line interface which is available in OpenStack or its web-based equivalent, such networks and subnets could be created and each subnet or network is going to have its own virtual machines instantiated which are assigned or binded to appropriate networks. This leads us to another project or another initiative known as the OpenVSwitch. So it is the virtualization of a physical switch. OVS in brief is basically a multi-layer virtual switch. So it means it could go on to upper layers as well, starting off at the layer 2. The get repository with all the details is available here in the URL. Now this open virtual switch or OVS is deployed in virtualized environments at the layer 2, layer 3 for forwarding that is IP based forwarding and then some access control features are also implemented. This OpenVSwitch project also supports quality of service and handling traffic aggregates. So this is actually the bird's eye view of how the OpenVSwitch communicates with the SDN controller or the management entity and how this is implemented in the forwarding element kernel. So we have the OpenVSwitch daemon that communicates using OpenFlow protocol with the controller. It communicates with the database server using the open virtual switch database protocol and then it implements the policies on the forwarding element or the kernel module. So you can see that different interfaces are provided for the OpenVSwitch daemon to communicate with respective entities. I have taken the resources from Priram and Voruganti software defined networking with OpenStack implementation. This book was published by Packet Publishing back in 2016.