P4 is a high-level programming language designed for describing how network packets are processed by network devices such as switches,
routers, and network interface cards (NICs). P4 is protocol-independent, meaning that it is not tied to any particular network protocol,
and instead provides a way to program the packet processing behavior of network devices at a high level.
With P4, network designers can define the way in which packets are processed and forwarded through a network,
providing greater flexibility and control over network behavior. P4 programs can be used to define how packets are matched and modified,
how routing decisions are made, and how quality of service (QoS) policies are implemented.
This allows network operators to optimize their networks for specific use cases and to adapt to changing network requirements.
WHAT ARE SOME USES FOR P4 LANGUAGE?
Network Function Virtualization
P4 language can be used to program the packet processing behavior of virtual network functions in NFV architectures.
This allows network operators to deploy and manage network functions in a more flexible and scalable manner.
Software-Defined Networking
P4 can be used to program the packet processing behavior of SDN switches and controllers.
This allows network operators to define and manage network policies in a more granular and programmatic way.
Traffic Engineering
P4 can be used to optimize traffic engineering in large-scale networks,
allowing network operators to control traffic routing and forwarding based on traffic patterns,
network topology, and other factors.
WHAT IS THIS PROJECT?
What are we doing here?
The Problem
The limitations of big traditional networks have become apparent as their success has grown.
They lack the flexibility needed to adapt to changing circumstances, making them cumbersome to manage and prone to outages.
Furthermore, tracing issues throughout the network topology can be challenging, leading to lengthy downtime and frustrated users.
Making rapid alterations to the network is nearly impossible, as it requires extensive planning and can often lead to preventative rather than reactive solutions.
To address these challenges, a network designed using the P4 language is being developed.
The Project
This project aims to create a more dynamic and adaptable network infrastructure,
which can be easily reconfigured to meet the demands of modern business environments.
With its ability to quickly adapt and respond to changing conditions, this new network promises to revolutionize the way we think about traditional networking.
Components
To ensure the success of our network project, we have divided it into three parts, each designed by a different team member.
Controlling APIs
By: David Araújo
Backend
By: João Machado
Dashboard
By: Guilherme Craveiro
×
Controlling APIs
The controlling APIs section provides an overview of two critical APIs that offer comprehensive control over the network environment.
The first API translates HTTP requests into effective communication with P4 devices via the P4Runtime, which uses gRPC.
The P4Runtime provides a standard and programmatic interface between control-plane applications and the underlying P4-based data plane devices.
This API facilitates the control of a variety of P4-based devices, including switches, routers, network interface cards (NICs), and other devices.
With P4Runtime, network operators can achieve fine-grained control over network behavior, including packet forwarding and processing.
The second API enables programmatic control over a Mininet network environment using HTTP requests.
Mininet is a popular open-source network emulator that enables rapid prototyping and testing of complex network scenarios.
With this API, network operators can dynamically create, configure, and destroy network topologies on-demand.
This API provides an intuitive and easy-to-use interface for network operators to control network behavior and experiment with different network topologies,
routing schemes, and traffic patterns.
×
Backend
Our backend is built with a flexible data model using MongoDB, allowing for easy scalability and customization based on your needs.
Whether you're handling large amounts of data or require specific data structures, our backend can accommodate it.
We understand the importance of security and privacy when it comes to handling user data.
Our backend provides built-in authentication and authorization mechanisms to ensure only authorized users have access to specific data.
Additionally, we provide user metadata storage to support user-level customization and personalization of your application.
We provide seamless integration with Prometheus and Grafana for metric visualization and monitoring.
Our backend generates metric data to help you make informed decisions and provide insights into your application's performance.
Our backend provides a service broker to enable easy communication between microservices,
ensuring smooth and efficient communication between different parts of your application.
Our backend is built using a microservice architecture, allowing for the creation and deployment of independent services that can be scaled and modified as needed.
This architecture ensures flexibility, resilience, and scalability, making it an ideal choice for modern applications.
×
Dashboard
A dashboard is a powerful tool that provides a user-friendly interface to display critical information about a network topology.
A well-designed dashboard generates tables that display available network topologies, including details about hosts, switches, and the links that connect them.
This information helps network administrators identify issues and quickly troubleshoot problems.
In addition, the dashboard includes information about the team responsible
for managing the network and provides assistance to non-experienced users.
By presenting all relevant information in a clear and concise manner, a well-designed dashboard enhances network visibility and
helps ensure that the network operates efficiently and effectively.
PROJECT DEVELOPMENT
This section will cover the development process of a project that was divided into four distinct milestones: inception and project planning, elaboration,
construction, and release. Each milestone represents a crucial phase in the project's development,
with specific goals and deliverables to achieve before progressing to the next stage.
Inception and Project Planning
During the inception phase of our project focused on networks defined by the P4 language, we started by identifying a problem that needed to be solved.
After conducting research on the existing work, we selected the main features that would enable us to solve the problem effectively.
These features included real-time monitoring of the network, creating a dashboard for multiple users, with control over the network and reactive reconfiguration.
To achieve these objectives, we defined a set of tasks that included requirement analysis and architecture design, defining a set of telemetry data,
creating a custom dashboard, and the creation of an agent.
Additionally, we set a series of rules to dynamically reprogram the devices according to data traffic analysis.
By setting clear goals and tasks during the inception phase, we were able to lay a strong foundation for the rest of
the project and ensure that we were on the right track from the very beginning.
Elaboration
In the elaboration phase of designing networks using P4 language, it is crucial to begin by defining the state of the art.
This involves considering monitoring and inband network telemetry, which are essential for tracking network behavior and identifying potential issues.
The expected use and results of the network must also be defined, including whether it will be deployed on new or existing networks,
used simultaneously with other SDN controllers or as a standalone solution, and whether it will have an observer role over the network,
or will be capable of autonomous reactive topology reconfiguration.
Once these factors have been established, the next step is to elicit the requirements for the network.
This involves a thorough study of similar implementations, as well as brainstorming sessions, task analysis,
and domain analysis to identify the specific needs and goals of the network. By carefully considering all of these factors,
designers can ensure that the resulting network is highly effective, efficient, and capable of meeting the needs of the organization or user.
After eliciting the requirements for the network, the next step is to create use cases for the project. Use cases describe the interaction between the network and the users, outlining the specific tasks or goals that the network is designed to accomplish. These use cases provide a clear understanding of how the network will be used, and help ensure that it is aligned with the needs of the organization or user.
In addition to creating use cases, it is also important to create personas, which are fictional characters that represent the different types of users who will be interacting with the network. Personas help to personalize the design process and provide a clear understanding of the needs and expectations of different users.
Finally, a mock-up of the system should be created. This is a prototype of the network design that allows stakeholders to visualize how the system will look and function. The mock-up can be used to test the usability of the system and gather feedback from stakeholders before the final implementation. By creating use cases, personas, and a mock-up of the system, designers can ensure that the resulting network is tailored to the needs of the users and is intuitive and easy to use.
Construction
During the construction phase, one of the key goals was to deploy networks defined by the P4 language.
To achieve this, we focused on four main objectives:
1) deploying networks via controller request or connecting to existing networks,
2) programming running devices to ensure they meet our network specifications,
3) viewing existing network topologies to gain insight into the network structure,
4) ensuring that the backend could fetch device counters for Grafana monitoring.
To accomplish these goals, we divided the project into three main components:
controlling APIs, a backend system, and a dashboard for monitoring and visualization.
This approach helped us achieve our goals more efficiently and provided a clear structure for each team member to focus on their specific tasks.
Release
During the Release Phase of the project, significant upgrades were implemented to enhance the functionality and visual representation of the dashboard. The development team focused on integrating advanced features that would empower users to gain valuable insights from complex networks and streamline their interactions with the project's backend.
One of the key highlights of this phase was the introduction of a cutting-edge visual representation network within the dashboard. This enhancement allowed users to effortlessly analyze and comprehend intricate data patterns through intuitive and visually appealing displays. The network visualizations provided an effective means to grasp complex relationships and identify critical trends, enabling users to make informed decisions with greater confidence.
In addition to the visual upgrades, the development team also incorporated a crucial feature that revolutionized the user experience: the option to send commands directly to the backend of the project. This advancement empowered users to interact dynamically with the system, enabling them to perform various actions, initiate processes, and customize settings with ease. By seamlessly bridging the gap between the dashboard and the project's backend, this new functionality enhanced efficiency, responsiveness, and overall usability.
While focusing on the technical aspects, the Release Phase also emphasized organization and preparation for the project's official release. The team diligently reviewed and refined the entire system, ensuring that it met the highest quality standards and addressed potential vulnerabilities. Rigorous testing and debugging processes were conducted to eliminate any remaining bugs or glitches, guaranteeing a stable and reliable platform for end-users.
Additionally, meticulous attention was given to streamlining workflows, optimizing resource allocation, and enhancing the overall user interface. The aim was to provide a seamless and intuitive user experience that would facilitate user adoption and satisfaction.