https://github.com/sadimer/sdn_hw
https://github.com/sadimer/sdn_hw
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/sadimer/sdn_hw
- Owner: sadimer
- Created: 2024-11-11T14:31:38.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-11-11T14:48:03.000Z (over 1 year ago)
- Last Synced: 2024-11-11T15:33:34.979Z (over 1 year ago)
- Language: Python
- Size: 4.88 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Задание по SDN для спецкурса "Современные облачные технологии"
## Гайд по установке и запуску
**Установить на свой компьютер openvswitch**
Для debian/ubuntu: ```sudo apt-get install openvswitch-switch```
Для rhel/centos/rocky: ```sudo yum install openvswitch``` или ```sudo dnf install openvswitch```
**Установить mininet и osken:**
```sudo pip install -r requirements.txt```
Либо ```sudo apt-get install mininet``` или ```sudo yum install mininet``` или ```sudo dnf install mininet```
**Запустить конфигурацию Mininet для отладки вашего алгоритма (на примере задачи 1):**
```sudo python3 tasks/task_1/mininet_cli.py```
**Запустить контроллер OSKen в режиме отладки (на примере задачи 1):**
```sudo osken-manager tasks/task_1/task.py```
**Запустить оценочное тестирование:**
```sudo pytest .```
## Задание 1 (6 баллов из 10)
В этом задании вам нужно реализовать алгоритм обучения MAC-адресов (MAC Learning) в файле `tasks/task_1/task.py` с использованием фреймворка OSKen для создания SDN-приложений.
### Как работает обучение MAC-адресов в коммутаторе:
1) Когда устройство получает пакет на одном из портов, оно проверяет заголовок Ethernet-кадра.
2) Извлекает из него MAC-адрес отправителя.
3) Запоминает порт, на который пришёл пакет, и добавляет эту информацию в таблицу коммутации `mac_table` (данное поле класса `SimpleSwitch`).
4) Если в таблице уже есть запись с `destination MAC-адресом` пакета, коммутатор перенаправляет его на порт, указанный в таблице. Если же записи нет, то коммутатор делает широковещательную рассылку, отправляя пакет на все доступные порты.
### Важно:
Для выполнения задания вам потребуется запрограммировать обработку пакетов, попадающих на контроллер, и настройку правил `match-action`. Эти правила позволят устройствам коммутатора узнавать, где находится `destination MAC_ADDRESS`, и прекращать широковещательную рассылку.
Для этого:
- По умолчанию, в таблице каждого коммутатора должно быть правило с наименьшим приоритетом, отправляющее пакеты на контроллер, если для них нет соответствующих `destination MAC_ADDRESS` правил.
- При отправке пакета на контроллер генерируется событие `EventOFPPacketIn`, в теле которого содержатся все слои пакета по модели OSI. Вы можете использовать это событие для обработки необходимых полей.
Ссылки на полезные ресурсы: [Примеры на GitHub](https://github.com/faucetsdn/ryu/blob/master/ryu/app) и [документация OSKen](https://docs.openstack.org/os-ken/latest/developing.html).
## Задание 2 (4 балла из 10)
В этом задании нужно расширить алгоритм обучения MAC-адресов с учётом VLAN. Реализацию выполняем в файле `tasks/task_2/task.py` с помощью OSKen.
### Отличие от предыдущего задания:
Теперь порты разделяются на разные сегменты (VLAN), и в каждом VLAN могут быть порты с одинаковыми IP-адресами.
- Порты с MAC-адресами из списка ниже будут работать в режиме `ACCESS`, соответствующем указанному VLAN.
- Остальные порты будут работать в режиме `TRUNK`, предназначенном для связи между коммутаторами.

### Важно:
- Для каждого VLAN создаётся отдельная таблица MAC-адресов на каждом коммутаторе.
```python
VLAN_MAPPING = {
"10:00:00:00:00:01": 1,
"10:00:00:00:00:02": 1,
"10:00:00:00:00:06": 1,
"10:00:00:00:00:03": 2,
"10:00:00:00:00:04": 2,
"10:00:00:00:00:05": 2,
}