как пересылать пакеты на контроллер OpenDaylight - PullRequest
0 голосов
/ 01 марта 2019

Я использую Open vSwitch и OpenDaylight.i хочу пересылать пакеты на контроллер.то, что я хочу сделать, это построить брандмауэр, поэтому ovs сначала отправляет все пакеты контроллеру, и контроллер будет решать, должен ли пакет быть заблокирован или нет.я добавляю следующий код в datapath / datapath.c / ovs_dp_process_packet ()

    struct dp_upcall_info upcall;
    int error;
    memset(&upcall, 0, sizeof(upcall));
    upcall.cmd = OVS_PACKET_CMD_MISS;
    upcall.portid = ovs_vport_find_upcall_portid(p, skb);
    upcall.mru = OVS_CB(skb)->mru;
    error = ovs_dp_upcall(dp, skb, key, &upcall, 0);

, что я хочу сделать, это вызвать пакеты в контроллер, даже если они соответствуют потоковой таблице.но после того, как я соблюдаю код, он не работает.Так как же передать пакеты на контроллер?

1 Ответ

0 голосов
/ 09 марта 2019

OVS :

Добавление нового действия в OVS - это долгая история, за которой вы можете следить.Вот список наиболее важных файлов кода, которые вы должны изменить:

  • lib / ofp-actions.c : определение нового действия, кодирование, декодирование и форматирование
  • include / openvswitch / ofp-actions.h : распространяющееся действие
  • datapath / linux / compat / include / linux / openvswitch.h : определение на уровне ядра
  • lib / odp-util.c : определение длины байтов действия
  • ofproto / ofproto-dpif-xlate.c : этот файл обрабатывает соединениемежду ядром и пользовательским пространством.особенно если нет совпадения для нового потока
  • datapath / flow_netlink.c : определить байты действия в ядре
  • datapath / actions.c : выполнение действия

Для выполнения полных шагов я настоятельно рекомендую следующие Пользовательские действия Open vSwitch

После изменения в исходных файлах используйте эти командыв корневой директории OVS остановить, сделать и запустить его.убедитесь, что ваша версия gcc совпадает с версией, с которой были скомпилированы ваши заголовочные файлы Linux.

ovs-ctl stop

ovs-dpctl del-dp ovs-system

rmmod openvswitch

make clean

make modules_install clean

./boot.sh

./configure --with-linux=/lib/modules/`uname -r`/build --enable-Werror

make

make install

make modules_install

config_file="/etc/depmod.d/openvswitch.conf"

for module in datapath/linux/*.ko; do
  modname="$(basename ${module})"
  echo "override ${modname%.ko} * extra" >> "$config_file"
  echo "override ${modname%.ko} * weak-updates" >> "$config_file"
  done

depmod -a

modprobe openvswitch

lsmod | grep openvswitch

mkdir -p /usr/local/etc/openvswitch

ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

mkdir -p /usr/local/var/run/openvswitch

ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach --log-file

ovs-vsctl --no-wait init

ovs-vswitchd --pidfile --detach --log-file

export PATH=$PATH:/usr/local/share/openvswitch/scripts

ovs-ctl start

Контроллер :

В контроллере выдолжен иметь возможность создавать и нажимать Action для переключения.У меня нет информации о том, как определить новое действие в OpenDayLight, но я знаю, что в Floodlight это достигается с помощью Loxigen.

Если у вас возникли проблемы, не стесняйтесь связаться со мной.

...