`

OpenVSwitch 端口掩码计算工具

阅读更多
        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]);
	}
}
分享到:
评论
2 楼 E2718282 2012-11-20  
  
1 楼 flyzzy 2012-11-16  
  正需要,对我帮助很大

相关推荐

    openvswitch.pdf

    3. Open vSwitch提供了丰富的测试和调试工具,可以对网络的各个层面进行深入的监控和分析。 4. 通过创建和管理OVN(Open Virtual Network)资源,Open vSwitch支持网络虚拟化功能。 Open vSwitch的文档和教程: 1. ...

    openvswitch完全使用手册

    ### OpenvSwitch完全使用手册知识点概述 #### 一、OpenvSwitch简介 OpenvSwitch(简称OVS)是一款高性能的虚拟交换软件,专为虚拟化环境设计,支持Xen/XenServer、KVM及VirtualBox等多种虚拟化技术。在单台物理机器...

    openvswitch-2..1.0一键安装脚本

    总之,这个脚本是一个方便的工具,可以帮助快速部署OpenvSwitch 2.3.0,简化了安装步骤,尤其对于需要频繁部署或测试OVS环境的用户非常有用。在实际操作中,根据系统需求和安全策略,可能还需要对脚本进行调整,例如...

    OpenvSwitch的安装及使用

    ### OpenvSwitch的安装及使用 #### OpenvSwitch简介 **1.1 概述** OpenvSwitch(OVS)是一种高性能的多层虚拟交换机,遵循Apache 2.0开源许可协议,最初由Nicira Networks开发。其核心代码采用高度可移植的C语言...

    openvswitch的RPM包

    `openvswitch`这个RPM包包含了所有必要的组件和服务,如内核模块、用户空间工具和服务守护进程。安装过程一般包括以下几个步骤: 1. 更新包管理器索引:`sudo yum update` 2. 安装OVS包:`sudo yum install open...

    open vSwitch完全手册

    ### Open vSwitch (OVS) 完全手册精要解析 #### 一、OVS简介与功能概述 Open vSwitch(OVS)是一款高度可扩展的高性能开源虚拟交换机,旨在为虚拟化环境提供高性能的网络连接解决方案。OVS不仅支持传统虚拟交换机...

    OpenVSwitch的使用

    ### OpenVSwitch的使用 #### 一、OpenVSwitch简介 **OpenVSwitch**(简称OVS)是一种高性能的开源虚拟交换技术,被广泛应用于云计算和数据中心环境中的虚拟化网络解决方案。它支持多种网络虚拟化功能,如负载均衡...

    Open vSwitch in Neutron

    Open vSwitch(OVS)在Neutron中的应用是OpenStack云平台网络服务的重要组成部分。OpenStack Neutron,原名Quantum,是OpenStack项目中负责网络功能的服务,它提供了丰富的虚拟网络功能,允许用户自定义复杂的网络...

    Openstack openvswitch 介绍

    Openstack openvswitch neutron Openstack openvswitch neutron

    openvswitch网络配置说明及文件含bonding

    OpenvSwitch(简称OVS)是一款开源的虚拟交换机,广泛应用于云计算、数据中心以及软件定义网络(SDN)环境中。它的主要功能是提供高性能的网络虚拟化服务,允许在网络中创建多个逻辑网络,并且可以灵活地配置这些...

    How to Install Open vSwitch on Linux.

    3. **配置OVS**:通过`ovs-vsctl`命令行工具或配置文件对OVS进行配置,例如添加端口、创建桥接等。 4. **连接OpenFlow控制器**:如果需要,配置OVS连接到OpenFlow控制器,如`ovs-vsctl set Open_vSwitch . other_...

    openvswitch-2.7.0-1.x86_64.rpm

    openvswitch可以和KVM结合使用。 Open vSwitch的特性 1 支持通过NetFlow sFlow IPFIX, SPAN, RSPAN, 和 GRE-tunneled镜像使虚拟机内部通讯可以被监控; 2 支持LACP (IEEE 802.1AX-2008)(多端口绑定)协议; 3 支持...

    open vswitch openflow great tutorial

    Open vSwitch的目標,是做一個具有產品級質量的多層虛擬交換機。通過可編程擴展,可以實現大規模網絡的自動化(配置、管理、維護)。它支持現有標準管理接口和協議(比如netFlow,sFlow,SPAN,RSPAN,CLI,LACP,...

    OpenvSwitch安装及配置[归纳].pdf

    Open vSwitch 的运行原理是通过内核模块实现多个“数据路径”(类似于网桥),每个数据路径都可以有多个“ vports”(类似于桥内的端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中...

    Centos6.6 OpenVSwitch-2.3.2.rpm x86

    6. 配置OpenVSwitch,例如创建虚拟桥接设备、添加端口和设置流表规则。 通过以上步骤,用户能够在CentOS 6.6系统上成功部署并使用OpenVSwitch 2.3.2,构建灵活、可扩展的虚拟网络环境。对于数据中心和云服务提供商...

    openvswitch转发流程

    在Open vSwitch 2.0版本中,这一转发流程涉及到了port(端口)、bridge(桥接器)、flow table(流表)等多个关键组件。 Open vSwitch中的port是数据包进出的接口,可以是物理接口,也可以是虚拟接口。bridge类似于...

    openvswitch数据包处理

    Openvswitch(OVS)是一种开源的虚拟交换机,它提供了强大的网络连接功能,支持多种协议,可以在多种环境中实现复杂的网络拓扑。OVS的主要组件包括`ovs-vswitchd`、`openvswitch.ko`、`ovsdb-server`以及`lib`等模块...

    openvswitch:OpenWrt的Open vSwitch软件包

    更新openvswitch ./scripts/feeds install -a -p openvswitch 制作menuconfig 选择网络-&gt; openvswitch-switch,openvswitch-brcompat和openvswitch-controller 回显'#CONFIG_KERNEL_BRIDGE未设置'&gt;&gt; .conf

    openvswitch

    OpenvSwitch(简称OVS)是一款开源的...总的来说,OpenvSwitch是一个强大的网络虚拟化工具,其灵活性和可扩展性使其在云环境和容器化应用中发挥着重要作用。通过学习和实践,我们可以利用OVS构建高效、安全的网络架构。

    浅析嵌入式Linux部署Open vSwitch及应用.pdf

    ovs-vsctl用于配置和管理vSwitchd,它可以创建网桥并添加物理端口,构建Open vSwitch的基础。ovs-ofctl则通过OpenFlow协议管理交换机的流表,实现流表项的创建、修改和删除。 OpenFlow协议是OVS的核心,它使用流表...

Global site tag (gtag.js) - Google Analytics