我使用Open vSwitch和OpenDaylight。我想将数据包转发到控制器。我要做的是建立防火墙,因此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);
我想做的是即使与流表匹配的数据包也要上调到控制器。但是我编译代码后,它不起作用。那么如何上传数据包到控制器?
答案 0 :(得分:2)
OVS :
向OVS添加新动作是一个很长的故事,您可以遵循。这是您应该更改的最重要的代码文件的列表:
有关完整步骤,我强烈建议您遵循 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
控制器:
在控制器中,您应该能够创建并按Action进行切换。我没有有关在OpenDayLight中定义新操作的方式的信息,但是,我知道在Floodlight中可以通过使用Loxigen来实现。
如果您有任何问题,请随时与我联系。