Для студентов МГУ им. Ломоносова 10 семестрa по предмету Программно-конфигурируемые сети (SDN) Домашнее заданиеДомашнее задание 2020-08-25 СтудИзба

Домашнее задание

Описание

Описание файла отсутствует

Список файлов в архиве

How to build p4

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# Installation

git clone https://github.com/p4lang/p4factory.git

cd p4factory

git submodule update --init --recursive

# If you will have errors then ssh-add your private key from github and repeat command

sudo ./install_depth.sh

./autogen.sh

./configure

# Makes virtual eth

sudo p4factory/tools/veth_setup.sh

cd ~/Desktop

git clone https://github.com/p4lang/tutorials.git

cd ~/Desktop

git clone https://github.com/osrg/ryu.git

sudo pip install ryu

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

cd targets/switch

make bm-p4ofagent PLUGIN_OPENFLOW=1

cd targets/l2_switch

make bm-p4ofagent PLUGIN_OPENFLOW=1

sudo ryu-manager --verbose ~/Desktop/ryu/ryu/app/simple_switch_13.p y

sudo python ~/Desktop/p4factory/mininet/openflow_l2. py --controller-ip 127.0.0.1 --cli

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# If something cracked this commands will clear the os memory

sudo mn -c ; sudo killall behavioral-model ; redis-cli FLUSHALL

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# ======================================== ======================================== =====================================

# Other

p4factory/tools/newtarget.py lvk_task

sudo python ~/Desktop/p4factory/mininet/l2_demo.py --num-hosts 4 --behavioral-exe ~/Desktop/p4factory/targets/l2_switch/be havioral-model

file_map

.

behavioral-model

bmv2

   main.c

   Makefile

   README.md

   run_bm.sh

build

   bin

      bm-p4ofagent

   bm

      obj

         action_profiles.d

         action_profiles.o

         actions.d

         actions.o

         calculations.d

         calculations.o

         checksums.d

         checksums.o

         conditional_tables.d

         conditional_tables.o

         conn_mgr.d

         conn_mgr.o

         conn_mgr_pd_rpc_constants.d

         conn_mgr_pd_rpc_constants.o

         conn_mgr_pd_rpc_types.d

         conn_mgr_pd_rpc_types.o

         dc.d

         dc.o

         deparser.d

         deparser.o

         devport_mgr.d

         devport_mgr.o

         devport_mgr_pd_rpc_constants.d

         devport_mgr_pd_rpc_constants.o

         devport_mgr_pd_rpc_types.d

         devport_mgr_pd_rpc_types.o

         egress_pipeline.d

         egress_pipeline.o

         field_list.d

         field_list.o

         fields.d

         fields.o

         ingress_pipeline.d

         ingress_pipeline.o

         lf.d

         lf.o

         mc.d

         mc.o

         mc_pd_rpc_constants.d

         mc_pd_rpc_constants.o

         mc_pd_rpc_types.d

         mc_pd_rpc_types.o

         metadata_recirc.d

         metadata_recirc.o

         metadata_utils.d

         metadata_utils.o

         mirroring.d

         mirroring.o

         ofpat_groups.d

         ofpat_groups.o

         ofpat_pipeline.d

         ofpat_pipeline.o

         ofpat_state.d

         ofpat_state.o

         p4_pd_rpc_constants.d

         p4_pd_rpc_constants.o

         p4_pd_rpc_types.d

         p4_pd_rpc_types.o

         parser.d

         parser.o

         pd.d

         pd_devport_mgr.d

         pd_devport_mgr.o

         pd_ms.d

         pd_ms.o

         pd.o

         pd_pre.d

         pd_pre.o

         pd_rpc_server.d

         pd_rpc_server.o

         pd_static.d

         pd_static.o

         pd_wrappers.d

         pd_wrappers.o

         pg.d

         pg_int.d

         pg_int.o

         pg.o

         phv.d

         phv.o

         pipeline.d

         pipeline.o

         pkt_manager.d

         pkt_manager.o

         portmanager.d

         portmanager.o

         pre.d

         pre.o

         queuing.d

         queuing.o

         res_constants.d

         res_constants.o

         res_types.d

         res_types.o

         rmt.d

         rmt.o

         stateful.d

         stateful.o

         tables.d

         tables.o

         tcam_cache.d

         tcam_cache.o

         value_set.d

         value_set.o

      plugin

         of

         src

         ofpat_groups.c

         ofpat_pipeline.c

         ofpat_state.c

         ofpat_state.h

         pd_wrappers.c

      src

         action_profiles.c

         action_profiles.h

         actions.c

         actions.h

         calculations.c

         calculations.h

         checksums_algos.h

         checksums.c

         checksums.h

         conditionals.h

         conditional_tables.c

         conn_mgr.cpp

         conn_mgr.h

         conn_mgr_pd_rpc_constants.cpp

         conn_mgr_pd_rpc_constants.h

         conn_mgr_pd_rpc_server.ipp

         conn_mgr_pd_rpc_types.cpp

         conn_mgr_pd_rpc_types.h

         conn_mgr_server.skeleton.cpp

         crc_tables.h

         dc.cpp

         dc.h

         dc_server.skeleton.cpp

         deparser.c

         deparser.h

         devport_mgr.cpp

         devport_mgr.h

         devport_mgr_pd_rpc_constants.cpp

         devport_mgr_pd_rpc_constants.h

         devport_mgr_pd_rpc_server.ipp

         devport_mgr_pd_rpc_types.cpp

         devport_mgr_pd_rpc_types.h

         devport_mgr_server.skeleton.cpp

         egress_pipeline.c

         enums.h

         field_list.c

         field_list.h

         fields.c

         fields.h

         ingress_pipeline.c

         lf.c

         lf.h

         mc.cpp

         mc.h

         mc_pd_rpc_constants.cpp

         mc_pd_rpc_constants.h

         mc_pd_rpc_server.ipp

         mc_pd_rpc_types.cpp

         mc_pd_rpc_types.h

         mc_server.skeleton.cpp

         metadata_recirc.c

         metadata_recirc.h

         metadata_utils.c

         metadata_utils.h

         mirroring.c

         mirroring_internal.h

         p4_pd_rpc_constants.cpp

         p4_pd_rpc_constants.h

         p4_pd_rpc_server.ipp

         p4_pd_rpc_types.cpp

         p4_pd_rpc_types.h

         parser.c

         parser.h

         pd.c

         pd_devport_mgr.c

         pd_ms.c

         pd_ms.h

         pd_pre.c

         pd_rpc_server.cpp

         pd_static.c

         pg.c

         pg_int.c

         pg_int.h

         phv.c

         phv.h

         pipeline.c

         pipeline.h

         pkt_manager.c

         pkt_manager.h

         portmanager.c

         portmanager.h

         pre.c

         pre_internal.h

         primitives_arith.h

         primitives.h

         queuing.c

         queuing.h

         res_constants.cpp

         res_constants.h

         res_types.cpp

         res_types.h

         rmt.c

         rmt_internal.h

         stateful.c

         stateful.h

         tables.c

         tables.h

         tcam_cache.c

         tcam_cache.h

         value_set.c

         value_set.h

      thrift

      conn_mgr_pd_rpc.thrift

      devport_mgr_pd_rpc.thrift

      mc_pd_rpc.thrift

      p4_pd_rpc.thrift

      res.thrift

   BMI

      obj

      bmi_interface.d

      bmi_interface.o

      bmi_port.d

      bmi_port.o

   graphs

   inc

      p4_sim

      mirroring.h

      ofpat_groups.h

      ofpat_pipeline.h

      openflow.h

      pd_devport_mgr.h

      pd.h

      pd_pre.h

      pd_rpc_server.h

      pd_static.h

      pd_wrappers.h

      pg.h

      pre.h

      rmt.h

      traffic_manager.h

   lib

      bm.a

      BMI.a

      p4ns_common.a

      p4utils.a

      plugin-openflow.a

   obj

      main.o

   p4ns_common

      obj

      p4ns_db.d

      p4ns_db.o

      p4ns_utils.d

      p4ns_utils.o

   p4utils

      obj

      atomic_int.d

      atomic_int.o

      cheap_tcam.d

      cheap_tcam.o

      cheap_trie.d

      cheap_trie.o

      circular_buffer.d

      circular_buffer.o

explanation (static NAT (no openflow))

Здравствуйте,

Я написал Static NAT.

1) внутри архива файлы расположены так, как они были расположены у меня в workspace для успешной работы.

это один файл из папки mininet и папка lvk_task, в которой находится свитч

2) Я удалил папку build, т.к. она много весит, поэтому сначала нужно сделать "make bm"

3) Можно открыть файл run_add_demo_entries.sh и увидеть топологию того, что запускает mininet

4) мой NAT - static, т.е. он заменяет у пакета конкретные ip адреса из внутренней сети, на конкретные ip адреса из внешней сети

5) все умеют делать ping всех, за исключением h3-h4 - они находятся в одной подсети, и потому если запустить ping, они не пользуются default gateway (заданный в скрипте mininet), а шлют arp запросы, которые я обрабатывать не умею. Зато для всех остальных пар хосты находятся в разных подсетях и потому пользуют default gateway, однако arp не шлют, потому что в mininet нужное значение сразу прописывается при запуске в каждый хост.

6) свитч состоит из 7 таблиц:

- таблица определения, что пакет пришёл из intranet (определяется по тому, из какого порта свитча прилетел пакет)

- таблица определения, что пакет идёт в internet (определяется по ipv4 dstAddr - если пакет идёт не в сеть intranet, то он идёт в интернет)

- таблица подмены source адреса, вызываемая, если пакет идёт из intranet в интернет

- таблица подмены destination адреса, вызываемая, если пакет пришёл из интернета в intranet

3 стандартные таблицы, которые я взял из simple_router

- таблица определения, в какой порт коммутатора выкинуть пакет по dstAddr ipv4

- таблица подмены dst mac в зависимости от dstAddr (обычная операция, свойственная рутеру)

- таблица подмены src mac в зависимости от того, из какого порта рутер выкинет пакет (тоже обычная операция, но вообще говоря, её можно убрать, потому что в данном конкретном примере, всё сработает и без неё (т.к. есть другая процедура через mininet - как заставить пакет с хоста быть посланным в коммутатор))

7) Для запуска нужно вызвать "run_demo.sh" - она запустит mininet топологию, автоматически зальёт правила на свитч/

8) В результате на моём нате можно задать, какие порты рутера являются внутренними, а какие внешними, задать статическое отображение одних ip-адресов на другие ip-адреса, а также статически задать данные для последних 3-х таблиц, используемых для обычной маршрутизации пакетов.

9) Всё происходит исключительно статически, никакого openflow и обучения

В прикреплённом файле "How to build p4" находится необходимый комплект команд, чтобы скомпилировать p4 фреймворк, switch и запустить его в режиме openflow с ryu (вряд ли это можно считать частью задания).

Условие домашнего задания 2016

На наш взгляд одной из очень интересных тем является язык P4 (и темы сходные с ним, типа NetASM). Поэтому хотелось бы, чтобы вы почувствовали на практике, что это такое и как работа с ним выглядит.

Поэтому надо зайти на сайт p4.org и там:

- посмотреть видео по ссылке "SEE HOW P4 WORKS"

- перейти по ссылке "Try It" http://p4.org/code/

По ссылке нужно будет перейти на гитхаб в p4factory. Это окружение, в котором можно будет компилировать p4 программму, запускать получившийся свитч, запускать мининет, на хостах можно запускать docker контейнеры.

Далее задание носит творческий характер. Возможные направления:

1. Внести модификации в sample программу так, чтобы на коммутаторе выполнялась некоторая дополнительная функция типа ограничения трафика, трансляции адресов, для ЦОД (https://github.com/p4lang/tutorials/tre e/master/examples).

2. Установить OpenFlow агент и попробовать подключить контроллер (https://github.com/p4lang/p4ofagent).

Задание сдается в виде небольшое отчета о том, что было сделано. Кроме того рекурсивный вывод всех файлов и поддиректорий вашего workspace для p4. Модификации тех файлов, которые правились.

Комментарии

Сопутствующие материалы
Дата публикации 25 августа 2020 в 14:26
Рейтинг -
0
0
0
0
0
Автор Koala (- из 5)
Цена Бесплатно
Скачивания 0
Просмотры 20
Размер 2,64 Mb
Безопасность Файл был вручную проверен администрацией в том числе и на вирусы
Поделитесь ссылкой:
Свежие статьи
Популярно сейчас