如何将数据包转发到OpenDaylight控制器

问题描述 投票:0回答:1

我使用Open vSwitch和OpenDaylight.i想要将数据包转发到控制器。我想要做的是建立一个防火墙,所以ov首先将所有数据包发送到控制器,控制器将判断是否应该阻止数据包。我在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);

我想要做的是将数据包上传到控制器,即使它们与流量表匹配。但在我编写代码后,它不起作用。那么如何将数据包上调到控制器?

sdn opendaylight openvswitch
1个回答
2
投票

OVS:

向OVS添加新操作是一个很长的故事,您可以遵循。这是您应该更改的最重要代码文件的列表:

  • lib / of-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:在内核中定义action的字节
  • datapath / actions.c:执行操作

对于完整的步骤,我强烈建议关注Custom Open vSwitch Actions

更改源文件后,在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

控制器:

在控制器中,您应该能够创建并按下要切换的动作。我没有关于在OpenDayLight中定义新Action的方式的信息,但我知道在Floodlight中它是通过使用Loxigen实现的。

如果您有任何问题,请随时与我联系。

© www.soinside.com 2019 - 2024. All rights reserved.