💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
一个交换机代表了一个数据路径(datapath),由一组端口、一个交换机ID(DPID)、相关能力和属性(capabilities / attributes)的描述以及一个channel组成。 protected boolean isConnected = false; // Channel liveness indication protected OVXDescriptionStatistics desc = null; // Switch statistics // T extends Port. protected HashMap<Short, T> portMap // The ports on this switch, keyed by port number protected OFFeaturesReply featuresReply // The Features Reply protected Long switchId // The DPID of the switch protected Channel channel // The control channel to the datapath Switch子类作为OVX与租户NOS()之间、OVX与datapath (PhysicalSwitch)之间的OpenFlow信道的锚点。所有到达OVX的消息要么分别被北向或南向的事件循环直接处理,要么通过sendMsg() 和 handleIO()方法发送到交换机。下面介绍继承了Switch的几个类: **PhysicalSwitch (extends Switch)**代表物理网络中的交换机。在OVX与交换机的握手通信期间,每个PhysicalSwitch的属性值来自两方面:由来自OVX的OpenFlow消息的内容填充,或者由运行时的状态消息填充。PhysicalSwitch维护了一张交换机的流表,每个XID翻译器代表与租户控制器之间的控制流量的OpenFlow XID。 相关组件: * `StatisticsManager statsMan` : 来自相关交换机的统计集合(MongoDB概念) * `AtomicReference<Map<Integer, List<OVXFlowStatisticsReply>>> flowStats` : 流表、以租户为key的项。 * `AtomicReference<Map<Short, OVXPortStatisticsReply>> portStats `: 端口统计,以端口为键值* * `XidTranslator<OVXSwitch> translator `: XID 聚合/分发器((de)multiplexer); * ` SwitchState state` : PhysicalSwitch实例的FSM。 PhysicalSwitch也包含了一个内部类,SwitchDeregAction,同步PhysicalSwitch之上的虚拟元素的状态。下一篇详细讨论OVX的状态管理。 **OVXSwitch (extends Switch)**是所有OVX中虚拟交换机的父类,也就是,对于租户控制器可见的交换机。OVXSwitch实现了FeaturesReply以响应租户,并维护虚拟流表,以及一个buffer map以存储bufferID为key,PacketIns为值。另外,OVXSwitch能够连接到多个控制器并处理控制器角色。关于角色管理,我们在下一篇博客翻译。 相关组件: * `LRULinkedHashMap<Integer, OVXPacketIn> bufferMap`; * `Integer tenantId` : 该交换机属于的租户网络的ID; * `OVXFlowTable flowTable` : 存储交换机的流表项的结构; * `XidTranslator<Channel> channelMux` : Channel 复用和解复用器((de)multiplexer), 对于多个NOS连接; * `RoleManager roleMan`: 管理租户控制器的角色消息; * `SwitchState state` : OVXSwitch 实例的FSM。 另外,OVXSwitch直接实现了一些OFFeaturesReply域: // Note, some attributes of a virtual switch are fixed: protected static int supportedActions = 0xFFF; // The supported actions. protected static int bufferDimension = 4096; // The buffer dimension. protected Short missSendLen = 128; // The miss send len. Default in spec is 128 protected OVXSwitchCapabilities capabilities; // The capabilities. 下述两个OVXSwitch的子类代表交换机虚拟化的两种模式。 * `OVXSingleSwitch`: 映射到单个物理交换机的虚拟交换机;* * `OVXBigSwitch`:映射到多个物理交换机的虚拟机交换机,并将这组交换机看做单个“Big”虚拟交换机(BVS)的交换矩阵。OVXBigSwitch维护一张穿过该虚拟交换矩阵的所有路径的路由表。* 相关组件: * `RoutingAlgorithms alg`:计算路径的算法,分为人工指定或者计算的最短路(SPF); * `HashMap<OVXPort, HashMap<OVXPort, SwitchRoute>> routeMap`: 给定出入端口条件下,BVS的路由映射; 图2.2 给出了上述Switch类在虚拟网中的位置。 ![这里写图片描述](http://img.blog.csdn.net/20160430103952102) 图2.2 OVX中不同Switch类 每个PhysicalSwitch (psw1, 2 and 3)直接对应物理网络中的一个交换机(switch1, 2, and 3)。虚拟交换机vsw1是一种OVXSingleSwitch的实例,直接映射在了PhysicalSwitch psw1之上。vsw2是一个OVXBigSwitch实例,映射在psw2和psw3之上,并且将两者之间的链路作为一个SwitchRoute。每个租户网络可以同时包含两种类型的OVXSwitch,只要它们不是位于相同的PhysicalSwitches上,也就是,在物理网络中不重叠。最后,物理交换机实例OpenFlow信道的终点。