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

