This is the Softwarized and virtualized mobile networks (aka Networking II) group project's repository by Daniele Della Pietra, Matteo Mazzonelli and Giovanni Valer.
ℹ We have implemented two different scenarios, each with its own topology and simulations.
Here we imagine having a city, whose network is divided in 2 slices: the first (from now on: slice_1) is dedicated to citizens' traffic while the second (slice_2) is dedicated to essential services (eg. police, hospital).
It might happen that a natural disaster, boycott, or accident leads to irreparable damages to a part of the network (let's imagine switch s4 unreachable).
In such a situation we would like to dynamically change the slices, in order to have slice_1 overlaying slice_2, and so allowing communication between h4 and h5. Furthermore, we require that the available throughput of switch s2 is 80% dedicated to slice_2, since essential services could need even more capability in case of natural disaster.
- ✅ Dynamical slices' morphing
- ✅ Essential services have 80% of dedicated throughput
Launch network:
ryu-manager dynamic_slicing.py & sudo python3 network.py
👉 WHEN SWITCH 4 IS ON:
Test reachability by running mininet> pingall
Use command dpctl dump-flows
to show the flow tables. Notice that h4 communicates with h5 through switch s4:
Test bandwidth of slices with iperf
👉 WHEN SWITCH 4 IS UNREACHABLE:
Let's use the same commands after event: 'Switch 4 – OFF'
Test reachability by running mininet> pingall
As we can see slicing is preserved, citizens don't have access to essential services slice, and vice versa.
Use command dpctl dump-flows
to show the flow tables. Notice that h4 communicates with h5 through citizens' slice:
Test bandwidth of slices with iperf
80% of available bandwidth is used by essential services and 20% by citizens, just as desired.
mininet> exit
$ sudo mn -c
In this second scenario we have the network of a classroom. When students work on group projects, the different goups can't communicate "too much". So there are three slices which are interconnected by a fourth one (let's assume it's the teacher).
Moreover, not every single packet is allowed to pass through connect_slice: in fact there is a maximum amount of UDP packets sendable between slices, and when the threshold is exceeded the UDP packets are discarded.
- ✅ Connecting SDN slices
- ✅ Stateful packet filtering: exceeding UDP packets are discarded
Launch network:
./run_controllers.sh & sudo python3 network.py
Test reachability by running mininet> pingall
Use command mininet> h1 ping h10
and dpctl dump-flows
in order to check packets' flow from h1 to h10 through connecting slice (switch s6):
Send UDP packets from slice 3 to slice 1:
After a certain amount of UDP packets transmitted, switch s6 stops UDP connection between slice 1 and slice 3. This event doesn't affect TCP and ICMP packets' flows.
Every 60 seconds UDP connections are restored and packets' counters are reset:
mininet> exit
$ sudo mn -c