OpenVSwitch 1.6 开源版本放出来了,这个版本在进行 OF 流设置的时候,有一个很有趣的功能,就是可以指定端口掩码。
早在 OpenVSwitch 1.4 版本的时候就注意到这个功能,可惜 ovs-ofctl 使用手册中说这个功能只有 1.6 及以上版本才能使用。好不容易 1.6 版本放出来了,但 OpenVSwitch 却没有提供计算端口掩码的工具,坑爹啊~~~
没办法,勤劳是咱的优良传统,咱就“自己动手,丰衣足食”吧。写了个 Java 的小工具,可以计算端口掩码,发出来共享给大家。欢迎批评指正~~~
用法很简单,直接调用静态方法 OvsUtil.getPortMask(minPortNum, maxPortNum) 就 OK 了。
import java.util.ArrayList;
import java.util.List;
/**
* @author E2718282
* @version 0.1-beta
* @date 2012-3-24
*
* OVS工具类
*/
public class OvsUtil {
/**
* 端口位掩码数组
*
* 对于portBitMasks[i],按位与portBitMasks[i][0]可获取低i位的值,<br>
* 按位与portBitMasks[i][1]可获取高(16-i)位的值
*/
private static final int[][] portBitMasks = new int[][] { { 0, 0xffff },
{ 0x1, 0xfffe }, { 0x3, 0xfffc }, { 0x7, 0xfff8 }, { 0xf, 0xfff0 },
{ 0x1f, 0xffe0 }, { 0x3f, 0xffc0 }, { 0x7f, 0xff80 },
{ 0xff, 0xff00 }, { 0x1ff, 0xfe00 }, { 0x3ff, 0xfc00 },
{ 0x7ff, 0xf800 }, { 0xfff, 0xf000 }, { 0x1fff, 0xe000 },
{ 0x3fff, 0xc000 }, { 0x7fff, 0x8000 }, { 0xffff, 0 } };
/**
* 根据端口范围获取端口范围的掩码表示序列
*
* 由于端口号在1-65535之间,所以用int型表示足够了
*
* @param min
* 最小端口号
* @param max
* 最大端口号
*
* @return 表示最小端口号到最大端口号范围的掩码序列
*/
public static String[] getPortMask(int min, int max) {
if (min < 1 || max > 0xffff || min > max) {
System.out.println("错误的端口号或端口号范围!");
return new String[0];
}
List<String> masks = new ArrayList<String>();
for (int n = min; n <= max;) {
int i = 1;
for (; i <= 16; ++i) {
int x = n + portBitMasks[i][0];
if (x > max || (x & portBitMasks[i][1]) != (n & portBitMasks[i][1])) {
break;
}
}
// 因为i已经+1了,所以这里的--i就是掩码的长度
masks.add(toPortMask(n, --i));
// 下一个掩码前缀开始的地方
n += (portBitMasks[i][0] + 1);
}
return masks.toArray(new String[0]);
}
/**
* 根据开始端口号和掩码长度生成端口掩码
*
* @param port
* 端口号
* @param maskLen
* 掩码长度
*
* @return port/mask格式的端口掩码,如果掩码长度为0,则只返回端口号
*/
private static String toPortMask(int port, int maskLen) {
if (0 == maskLen) {
return "0x" + Integer.toHexString(port);
}
return "0x" + Integer.toHexString(port & portBitMasks[maskLen][1]) + "/0x"
+ Integer.toHexString(portBitMasks[maskLen][1]);
}
}
分享到:
相关推荐
openvswitch完全使用手册,详细的介绍了openvswitch的使用。
Openstack openvswitch neutron Openstack openvswitch neutron
Openstack openvswitch neutron Openstack openvswitch neutron
openvswitch可以和KVM结合使用。 Open vSwitch的特性 1 支持通过NetFlow sFlow IPFIX, SPAN, RSPAN, 和 GRE-tunneled镜像使虚拟机内部通讯可以被监控; 2 支持LACP (IEEE 802.1AX-2008)(多端口绑定)协议; 3 支持...
Open vSwitch的目標,是做一個具有產品級質量的多層虛擬交換機。通過可編程擴展,可以實現大規模網絡的自動化(配置、管理、維護)。它支持現有標準管理接口和協議(比如netFlow,sFlow,SPAN,RSPAN,CLI,LACP,...
本文主要对 OpenvSwitch(基于 2.3.90 版本) 重点模块的源码实现流程做了简要的阅读记录, 适合阅读 OpenvSwitch 源码的初级读者参考使用。
open vSwitch完全手册,很详细,值得收藏
更新openvswitch ./scripts/feeds install -a -p openvswitch 制作menuconfig 选择网络-> openvswitch-switch,openvswitch-brcompat和openvswitch-controller 回显'#CONFIG_KERNEL_BRIDGE未设置'>> .conf
OpenFlow交换机OpenvSwitch的部署使用说明
openvswitch中数据包在datapath里面的处理流程,主要为ovs_vport_received
介绍了OpenvSwitch的安装及相关配置
介绍了OpenVSwitch,可以作为初学者的参考
移植openvswitch中数据结构hmap,用于调试其中数据结构。本程序linux 64位 里面也编译好可执行程序,可直接运行。主要是学习openvswitch相关代码。
openvswitch-2..1.0一键安装脚本
openvswitch的RPM包
这个是描述在linux上安装open vswitch的文档!
Centos6.7 rpm包 openvswitch2.4.1 x86_64包含 kmod-openvswitch-2.4.1-1.el6.x86_64.rpm openvswitch-2.4.1-1.x86_64.rpm
OVS下的网络配置。网卡桥接网桥,多块网卡做bonding然后桥接网桥,有说明文档,也有配置文件。本人测试环境为centos6.2和openvswitch2.3.0
openvswitch代码openvswitch代码
Open vSwitch的特性 1 支持通过NetFlow sFlow IPFIX, SPAN, RSPAN, 和 GRE-tunneled镜像使虚拟机内部通讯可以被监控; 2 支持LACP (IEEE 802.1AX-2008)(多端口绑定)协议; 3 支持标准的 802.1Q VLAN模型以及 trunk...