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

Курсовая работа: Домашнее задание

Описание

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

Характеристики курсовой работы

Учебное заведение
Просмотров
24
Скачиваний
1
Размер
2,64 Mb

Список файлов

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. Модификации тех файлов, которые правились.

Комментарии

Поделитесь ссылкой:
Рейтинг-
0
0
0
0
0
Поделитесь ссылкой:
Сопутствующие материалы
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее