Skip to content

Commit 2cc2f64

Browse files
authored
Merge pull request #162 from polycube-network/frisso-doc-fixes
Improved entry point of the documentation.
2 parents 1bb6758 + 3549780 commit 2cc2f64

File tree

10 files changed

+112
-74
lines changed

10 files changed

+112
-74
lines changed

Documentation/components/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Powerful applications based on polycube
2-
=======================================
1+
Standalone applications based on polycube
2+
=========================================
33

44
.. toctree::
55
:maxdepth: 2

Documentation/components/iptables/pcn-iptables.rst

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
pcn-iptables: An iptables clone based on eBPF
2-
=============================================
1+
pcn-iptables: a clone of iptables based on eBPF
2+
===============================================
3+
4+
Polycube includes the ``pcn-iptables`` standalone application, a stateful firewall whose syntax and semantic are compatible with the well-known ``iptables`` Linux tool.
5+
6+
The frontend provides the same CLI of iptables; users can set up security policies using the same syntax by simply executing ``pcn-iptables`` instead of ``iptables``.
7+
The backend is based on `eBPF` programs, more efficient classificaiton algorithms and runtime optimizations; the backend runs as a dedicated service in Polycube.
8+
39

4-
Polycube comes with ``iptables`` application (in brief ``pcn-iptables``) that provides an iptables clone, with compatible syntax and semantic.
5-
The backend is based on `eBPF` programs, more efficient algorithms and runtime optimizations.
6-
The frontend provides same iptables CLI, users can setup security policies using same syntax.
710

811
Supported features
912
------------------
-742 Bytes
Loading
16.4 KB
Binary file not shown.

Documentation/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Welcome to Polycube's documentation!
1010
:maxdepth: 2
1111
:caption: Contents:
1212

13+
intro
1314
quickstart
1415
installation
1516
cubes

Documentation/intro.rst

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
Introduction to Polycube
2+
========================
3+
4+
Polycube brief
5+
--------------
6+
7+
``Polycube`` is an **open source** software framework for Linux that enables the creation of **virtual networks** and provides **fast** and **lightweight** **network functions**, such as `bridge`, `router`, `nat`, `load balancer`, `firewall`, `DDoS mitigator`, and more.
8+
9+
Within each virtual network, individual network functions can be composed to build arbitrary **service chains** and provide custom network connectivity to **namespaces**, **containers**, **virtual machines**, and **physical hosts**.
10+
11+
Virtual functions, called `cubes`, are extremely **efficient** because are based on the recent `BPF` and `XDP` Linux kernel technologies. In addition, cubes are easily **extensible** and **customizable**.
12+
13+
Polycube can control its entire virtual topology and all the network services with a simple and coherent command line, available through the `polycubectl` tool.
14+
A set of equivalent commands can be issued diretly to `polycubed`, the Polycube REST-based daemon, for better machine-to-machine interaction.
15+
16+
Polycube also provides two working **standalone applications** built up using this framework.
17+
`pcn-K8s` is a Polycube-based CNI plug-in for *Kubernetes*, which can handle the network of an entire data center. It also delivers better throughput as compared with some of the existing CNI plug-ins.
18+
`pcn-iptables` is a more efficient and scalable clone of the existing Linux *iptables*.
19+
20+
A brief overview of the Polycube layered structure, including the command line interface (CLI), standalone applications, and some of the available cubes, is shown in the picture below.
21+
22+
.. image:: images/polycube-archi.png
23+
:alt: Polycube architecture brief
24+
25+
26+
Main features
27+
-------------
28+
29+
Extremely fast
30+
~~~~~~~~~~~~~~
31+
Polycube enables extremely fast and efficient network services, thanks to its capability to run inside the Linux kernel and, whenever possible, as close as possible to the network interface card driver, which reduces the time spent in ancillary components.
32+
33+
34+
Designed with service chaining in mind
35+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36+
Polycube supports the definition of multiple network scenarios through the composition of many elementary building blocks (i.e., *cubes*), which can be combined (e.g., attached one to the other) to create complex network services.
37+
For instance, several dockers can communicate through a bridge, which is then attached to a router to provide internet connectivity (possibly through a nat), while a firewall protects the entire infrastructure.
38+
39+
Polycube has been designed to simplify service chaining: cubes can be dynamically instantiated and seamlessly connected together using virtual links, mimicking traditional networks in which dedicated middlebox are connected with each other through physical wires.
40+
As a consequence, cubes can be composed to build arbitrary service chains and provide custom network connectivity to namespaces, docker, virtual machines, and physical hosts.
41+
42+
43+
Production-grade network services
44+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45+
Polycube greatly simplifies the communication between data, control, and management planes of a network service, hence it enables the creation of rich network services which include all the above features.
46+
In turn, this offers a simplified environment to service developers, who can leverage the power of Polycube to write the data/control and management parts of their network services.
47+
48+
In detail, most network services include a *data plane*, such as the longest prefix match algorithm in a router, a *control plane*, e.g., where routing protocols are executed, and a *management plane*, devoted to the configuration and monitoring of the service.
49+
`bpf` aims at the creation of fast data planes, leaving the rest under the responsibility of the developer; Polycube overcomes this limitation with a rich set of primitives natively provided by the framework.
50+
In addition, Polycube provides the software infrastructure required to overcome possible limitations of BPF in the data plane (e.g., the limited size of data plane programs), enabling the steering of packets that require complex processing in user-space, where previous limitations do not apply.
51+
52+
53+
Single point of control
54+
~~~~~~~~~~~~~~~~~~~~~~~
55+
Polycube provides a single point of control to the entire virtual network, including all the running services.
56+
Its unified command line interface enables the *setup* of the virtual infrastructure, it *instantiates* new services and connect them properly, handles the *lifecycle* of all running cubes, and supports the *configuration* and *monitoring* of all the running elements.
57+
58+
This is achieved by a unified command line interface ( `polycubectl`) that interacts with a REST-based daemon (`polycubed`) in charge of the supervision of the entire infrastructure.
59+
In addition, Polycube implements a *service agnostic* configuration mechanism, based on YANG data models and the RESTCONF protocol, in which new services can seamlessly develop and dynamically added to the framework, with the command line being automatically able to handle the above services without any modification.
60+
61+
62+
Outstanding performance with real applications
63+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
64+
Two standalone applications have been released to show the potential of Polycube, ``pcn-iptables`` and ``pcn-k8s``.
65+
66+
- `pcn-iptables`: The former is a clone of **iptables** that is able to filter packets passing through a Linux host, demonstrating how packet filtering can be achieved with impressive performance, while at the same time guaranteeing the same command line and the same external behavior of the original software.
67+
- `pcn-k8s`: The latter is a network plug-in for **Kubernetes**, i.e., a software that handles the entire virtual network of a Kubernetes cluster, which includes bridging, routing, NAT, load balancing and tunneling services. Our plug-in has been tested for scalability and guarantees outstanding performance in terms of network throughput.
68+
69+
70+
Powered by eBPF and XDP
71+
~~~~~~~~~~~~~~~~~~~~~~~
72+
`BPF` and `XDP` are the main Linux kernel technologies on which `Polycube` is based. `BPF` supports dynamic code injection in the Linux kernel at runtime, enabling the dynamic creation of a data plane. The `BPF` data plane has a minimal feature set which avoids processing overhead and is exactly tailored to user needs.
73+
74+
- `bpf` (Extended Berkeley Packet Filter) code is dynamically compiled and injected, checked for safety to avoid any hazard in the kernel, while efficiency is achieved thanks to a just-in-time compiler (JIT) that transforms each instruction into a native 64-bit (x64) code for maximum performance.
75+
- `XDP` (eXpress Data Path) provides a new way to intercept network packets very early in Linux network stack, with a significant gain in performance thanks to the possibility to avoid costly operations such as `skbuff` handling.
76+
77+
78+
Integrated with common Linux tools
79+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
80+
While configuring network services, people are already familiar with well-known Linux tools, such as `ifconfig`, `route`, `tcpdump`, and more.
81+
To foster a broader integration of Polycube and Linux, Polycube services can be configured with either its native CLI (and REST API), or exploiting most of the networking tools that are already used nowadays.
82+
83+
This offers an easy way for new users to play with Polycube services; it increases the potential of the framework that can leverage tons of existing software (e.g., Quagga for dynamic routing); it enables to seamlessly extend Linux networking with powerful and efficient eBPF/XDP-based services.
84+
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
Iptables
22
========
33

4-
Please refer to :doc:`pcn-iptables <../../components/iptables/pcn-iptables>`
4+
This cube implements all the control/data plane of ``pcn-iptables``.
5+
The ``pcn-iptables`` frontend connects to this service through the ``polycubed`` REST interface.
6+
7+
Please refer to :doc:`pcn-iptables <../../components/iptables/pcn-iptables>` for more information.

Documentation/tutorials/index.rst

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ Prerequisites
99
Before starting the tutorials, ``polycubed`` has to be running and ``polycubectl`` must be available.
1010
Please refer to the :doc:`Quickstart <../quickstart>` document to get those components ready.
1111

12-
Tutorials list
13-
--------------
12+
Available tutorials
13+
-------------------
1414

1515
.. toctree::
16-
:maxdepth: 2
16+
:maxdepth: 1
1717

1818
tutorial1/tutorial1
1919
tutorial2/tutorial2
20-
tutorial3/tutorial3
20+
tutorial3/tutorial3
21+

Documentation/tutorials/tutorial3/tutorial3.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
Tutorial 3: Creating a complex service that includes bridges and routers
2-
========================================================================
1+
Tutorial 3: creating a service chain with bridges and routers
2+
=============================================================
33

44
This tutorial shows how to create a complex service by means of a topology that includes two routers, two bridges and five virtual interfaces (simulating five hosts).
55
Each host is a part of a different network and it sends packets to its default gateway, which forwards them to the proper interface based on the (static) routing table.

README.md

Lines changed: 6 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -8,73 +8,19 @@
88

99
``Polycube`` is an **open source** software framework that provides **fast** and **lightweight** **network functions** such as bridges, routers, firewalls, and others.
1010

11-
Polycube services, called `cubes`, are based on the recent `BPF` and `XDP` Linux kernel technologies and hence are extremely **efficient**. In addition, cubes are easily **extensible** and **customizable**.
12-
Available cubes include `bridge`, `router`, `nat`, `load balancer`, `firewall`, `DDoS mitigator`, and more.
11+
Polycube services, called `cubes`, can be composed to build arbitrary **service chains** and provide custom network connectivity to **namespaces**, **containers**, **virtual machines**, and **physical hosts**.
1312

14-
Cubes can be composed to build arbitrary **service chains** and provide custom network connectivity to **namespaces**, **containers**, **virtual machines**, and **physical hosts**.
15-
Polycube networks can be controlled by a coherent, uniform and simple command line, named `polycubectl`, which interacts with a REST-based daemon, `polycubed`.
13+
For more information, jump to the [Documentation](Documentation) section.
1614

17-
Polycube provides also some proof-of-concept **complex applications** based upon this framework, such as `pcn-k8s`, a brand new network plug-in for *Kubernetes*, which can handle the network of an entire datacenter and that outperforms existing solutions, and `pcn-iptables`, a much more efficient clone of *iptables*.
1815

19-
A brief overview of the Polycube layered structure is shown in the picture below.
20-
21-
22-
![Polycube architecture brief](Documentation/images/polycube-archi.png)
23-
24-
**End users** can leverage the already available cubes to *create*, *configure* and *control* complex network services in their hosts.
25-
**Service developers**, instead, can create new network services by leveraging the power of the Polycube framework, which takes care of handling most of the glue logic needed for the service to operate. Operations such as data handling and validation and the entire REST interface are automatically generated, while other tasks such as interactions with the data plane running in the kernel are greatly simplified. This enables developers to concentrate on the main logic of their services, leaving the rest to Polycube.
26-
27-
28-
## Getting Started
29-
- [What is Polycube?](#Polycube)
16+
## Quick links
17+
- [What is Polycube?](Documentation/intro.rst)
3018
- [Quickstart](Documentation/quickstart.rst)
3119
- [Documentation](Documentation)
3220
- [pcn-k8s - Kubernetes network provider](Documentation/components/k8s/pcn-kubernetes.rst)
3321
- [pcn-iptables - Iptables clone](Documentation/components/iptables/pcn-iptables.rst)
3422

35-
## Main features
36-
37-
### Extremely fast
38-
Polycube enables extremely fast and efficient network services, thanks to its capability to run inside the Linux kernel and, whenever possible, as close as possible to the network interface card driver, which reduces the time spent in ancillary components.
39-
40-
41-
### Service chaining
42-
Polycube supports the definition of multiple network scenarios through the composition of many elementary building blocks (i.e., *cubes*), which can be combined (e.g., attached one to the other) to create complex network services.
43-
For instance, several dockers can communicate through a bridge, which is then attached to a router to provide internet connectivity (possibly through a nat), while a firewall protects the entire infrastructure.
44-
45-
Polycube has been designed to simplify service chaining: cubes can be dynamically instantiated and seamlessly connected together using virtual links, mimicking traditional networks in which dedicated middlebox are connected with each other through physical wires.
46-
As a consequence, cubes can be composed to build arbitrary service chains and provide custom network connectivity to namespaces, docker, virtual machines, and physical hosts.
47-
48-
49-
### Production-grade network services
50-
Polycube greatly simplifies the way data, control, and management planes communicate, hence enabling the creation of rich network services that include all the above features.
51-
In turn, this offers a simplified environment to service developers, who can leverage the power of Polycube to write the data/control and management parts of their network services.
52-
53-
In detail, most network services include a *data plane*, such as the longest prefix match algorithm in a router, a *control plane*, e.g., where routing protocols are executed, and a *management plane*, devoted to the configuration and monitoring of the service.
54-
`bpf` aims at the creation of fast data planes, leaving the rest under the responsibility of the developer; Polycube overcomes this limitation with a rich set of primitives natively provided by the framework.
55-
In addition, Polycube provides the software infrastructure required to overcome possible limitations of BPF in the data plane (e.g., the limited size of data plane programs), enabling the steering of packets that require complex processing in user-space, where previous limitations doesn't apply.
56-
57-
58-
### Single point of control
59-
Polycube provides a single point of control to the entire virtual network, including all the running services.
60-
Its unified command line interface enables the *setup* of the virtual infrastructure, it *instantiates* new services and connect them properly, handles the *lifecycle* of all running cubes, and supports the *configuration* and *monitoring* of all the running elements.
61-
62-
This is achieved by a unified command line interface ( `polycubectl`) that interacts with a REST-based daemon (`polycubed`) in charge of the supervision of the entire infrastructure.
63-
In addition, Polycube implements a *service agnostic* configuration mechanism, based on YANG data models and the RESTCONF protocol, in which new services can seamlessly develop and dynamically added to the framework, with the command line being automatically able to handle the above services without any modification.
64-
65-
66-
### Outstanding performance with real applications
67-
Two complex applications have been released to show the potential of Polycube, ``pcn-iptables`` and ``pcn-k8s``.
68-
69-
- `pcn-iptables`: The former is a clone of **iptables** that is able to filter packets passing through a Linux host, demonstrating how packet filtering can be achieved with impressive performance, while at the same time guaranteeing the same command line and the same external behavior of the original software.
70-
- `pcn-k8s`: The latter is a network plug-in for **Kubernetes**, i.e., a software that handles the entire virtual network of a Kubernetes cluster, which includes bridging, routing, NAT, load balancing and tunneling services. Our plug-in has been tested for scalability and guarantees outstanding performance in terms of network throughput.
71-
72-
## Powered by eBPF and XDP
73-
74-
`BPF` and `XDP` are the main Linux kernel technologies on which `Polycube` is based. `BPF` supports dynamic code injection in the Linux kernel at runtime, enabling the dynamic creation of a data plane. The `BPF` data plane has a minimal feature set which avoids processing overhead and is exactly tailored to user needs.
75-
76-
- `bpf` (Extended Berkeley Packet Filter) code is dynamically compiled and injected, checked for safety to avoid any hazard in the kernel, while efficiency is achieved thanks to a just-in-time compiler (JIT) that transforms each instruction into a native 64-bit (x64) code for maximum performance.
77-
- `XDP` (eXpress Data Path) provides a new way to intercept network packets very early in Linux network stack, with a significant gain in performance thanks to the possibility to avoid costly operations such as `skbuff` handling.
7823

7924
## Licence
80-
Polycube is licensed under the Apache License, Version 2.0 (ALv2)
25+
Polycube is licensed under the Apache License, Version 2.0 (ALv2).
26+

0 commit comments

Comments
 (0)