3. Компоненты RUNOS

3.1. Базовые

  • Common.hh
    Подключает:
  • Flow.hh

    Представление потока.

  • SwitchConnection.hh

    Представление соединения с коммутатором.

  • Decision.hh

    Решения для PacketMissHandler.

  • Controller.hh

    Controller.

  • Application.hh

    Базовый тип для приложений.

  • Config.hh

    Инструмент для работы с конфигурационном файлом.

  • FluidOXMAdapter.hh

    Связующее звено между RUNOS::OXM и LibFluid

  • Loader.hh

    Загрузчик приложений : Loader.

  • PacketParser.hh

    Разбор пакетов протоколов семейтсва TCP/IP.

3.2. Приложения

  • RestMultipart.hh

    RestMultipart.

    That module allows REST users to get switch statistics that can be delivered by MultipleRequest messages. Modify actions are implemented in RestFlowMod and StaticFlowPusher modules.

    Handling of each GET consists of the following steps:

    • switching in handleGET method

    • calling sendGetRequest(corresponding type, <params>) and turning in event loop

    • waiting for the response from a switch and it’s handling

      • handler (onResponse) updated variable that corresponds to the reply type(of13::MultipartReplyFlow replyFlow, for example)
      • handler wakes up handleGET method
    • responding to the user

  • RestFlowMod.hh

    RestFlowMod.

    REST interface for flow enties construction and deletion of existing ones.

    Allows to add new flow entries to a switch (to any already existing table excluding Maple’s one): You can use table numbers in range of [0, ctrl->handler_table() - 1]. POST request:

    POST /api/rest-flowmod/flow/<switch_id>
    body of the request: JSON description of a new flow
    

    Imlemantation logic is the same as in RestMultipart.

    If you want to add new handler, you need to go trouth the following steps:

    • add new path to be handeled: init: acceptPath(Method::POST, “flowentry”);
    • implement your logic in a “case” of handlePOST (GET, DELETE, etc)
  • RestStringProcessing.hh

    В данном модуле содержатся функции и макросы, призванные автоматизировать рутинные действия при работе с json11::Json и строками. Используется в ref-restMultipart-class и ref-restFlowMod-class.

3.3. Инструменты

  • AppObect.hh

    Базовый класс для объектов event-модели

  • Event.hh

    event-модель

  • ILinkDiscovery.hh

    Интерфейс приложения LinkDiscovery.

  • json11.hpp

    Json библиотека.

  • LLDP.hh

    описание LLDP заголовка пакета.

  • OFMsgUnion.hh

    OpenFlow сообщения.

  • ORTransaction.hh

    Канал для общения с коммутаторами.

  • Rest.hh

    Базовый класс для приложений, поддерживающих REST

3.4. Библиотеки

3.4.1. api

Интерфейс для некоторых компонентов RUNOS

  • api/Packet.hh

    Интерфейс для чтения и изменения полей пакета протоколов семейтсва TCP/IP.

  • api/PacketMissHandler.hh

    Интерфейс для функций обработчиков в PacketMissHandler.

  • api/SerializablePacket.hh

    Интерфейс для сериализации пакетов протоколов семейства TCP/IP.

  • api/TraceablePacket.hh

    Интерфейс для Packet, работающим с runos::maple

3.4.2. maple

Реализация ядра maple.

  • maple/Backend.hh

    Интерфейс для maple, для работы с сетью

  • maple/Flow.hh

    Представление потока для maple

  • maple/Tracer.hh

    Трассировка PacketMissHandler’ов

  • maple/TraceTree.hh

    Релазиация TraceTree

  • maple/TraceablePacketImpl.hh

    Реализация Packet, работающим с maple

  • maple/LoggableTracer.hh

    Tracer с логированием.

  • maple/Runtime.hh

    Интерфейс maple.

3.4.3. openflow

  • openflow/common.hh

    база openflow

  • openflow/openflow-1.0.h

    OpenFlow1 definitions

  • openflow/openflow-1.3.5.h

    OpenFlow1.3 definitions

  • openflow/openflow-1.5.1.h

    OpenFlow1.5 definitons.

3.4.4. oxm

Библиотека реализующая oxm поля OpenFlow.

  • oxm/bit_traits.hh

    Размеры типов в битах.

  • oxm/errors.hh

    Возможные exceptions.

  • oxm/field.hh

    filed, value and mask

  • oxm/field_set.hh

    Наборы полей.

  • oxm/openflow_basic.hh

    Основные поля TCP/IP.

3.4.5. types

  • types/ethaddr.hh

    обретка для ethernet адреса

  • types/IPv6Addr.hh

    обертка для IPv6 адреса

  • types/exception.hh

    Базовый тип для exception