Wednesday, September 5, 2012

[Virtual Network] Midokura’s MidoNet

Recently I saw the article about Midokura MidoNet as follows:
http://blog.ioshints.info/2012/08/midokuras-midonet-layer-2-4-virtual.html
It is a layer 2-4 virtual network solution and catches my attention and lets me want to know more about.

Meanwhile, Midokura also provide Quantum Plugin for MidoNet to integrate into OpenStack.
https://github.com/midokura/midonet-openstack

On its web site, it provides a lot of features in virtual network solution and is pretty amazing. Due to MidoNet is not an open source project, so we are not able to see how it exactly achieves all of these things.
http://www.midokura.com/midonet/openstack/

MidoNet Key Features

  • Fully virtualized Layer 2 through 7 networking
  • VLAN-less VLANs – Virtual L2 Distributed Level Isolation and Switching with virtually no limitations
  • Fully Distributed Architecture with no single points of failure
  • Virtual L3 Distributed Routing
  • Distributed Load Balancing and Firewall Services
  • NAT
  • VPN
  • Access Control Lists (ACLs)
  • Restful API
  • Web Based Management Control Panel
  • Monitoring and Metering of Networking Services
  • Live Migration
  • Rate Limiting
  • Virtual Tap (Port Monitoring and Mirroring)




[OpenStack] Existing High Availability Options for Networking

 Existing High Availability Options for Networking

    OpenStack offical web site has document to explain the existing HA options for networking. I think most of important item is the option 1: multi-host networking mode. This mode avoids from single point of failure when Nova-Network component is down and also eliminate the potential network bottleneck in single-host networking mode.

For more in details, please see the this:
http://docs.openstack.org/trunk/openstack-compute/admin/content/existing-ha-networking-options.html


Wednesday, August 29, 2012

[Ubuntu] How to build local apt repositories



Summary:
  1. Edit your sources.list file 
  2. Copy your debian packages to the folder where is the packages repository directory  (*.deb folder) 
  3. Change into the packages repository directory  (cd ~/repository) 
  4. Generate a Packages.gz file  (sudo dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz) 
  5. Install the build-essential package  (sudo apt-get install build-essentiall
  6.  Update apt-get server packages list  (sudo apt-get update)


Monday, August 27, 2012

[SDN] HP's SDN solution

http://www.infoworld.com/d/networking/hp-aims-three-part-effort-network-virtualization-200048?source=IFWNLE_nlt_virtualization_2012-08-16

Summary:
HP provides 3 tools (softwares) to deal with network virtualization using SDN
  • EVI (Ethernet Virtual Interconnect)
    • EVI creates a tunnel through the Layer 3 network by encapsulating the packets traveling between the data centers. Rival Cisco already has software that can do this, called OTV (Overlay Transport Virtualization), but it charges extra for that software.
  • MDC (Multitenant Device Context)
    • It allows for segregating the resources of multiple tenants in a virtualized environment without buying separate switches. This secures the data and applications of one department or cloud service customer from other tenants.
  • VSA
    • StoreVirtual VSA, for virtualizing storage management. The software is based on VSA (virtual storage appliance) technology from LeftHand Networks, which HP acquired in 2008.

Tuesday, August 21, 2012

[Trema] The real case to test flow-based ECMP Routing Switch App


The following picture is a topology that used in testing my ECMP Routing Switch App.

After host3 send packets to host1, the app starts making path process and the related log as below. You will see this app picks up 2 paths ( "0xe5->0xe3->0xe4"  and  "0xe5->0xe2->0xe4" ) and choose one of them to setup flow entries.

[pickup_next_candidate] Find a candidate = 0xe5
[update_distance] node = 0xe3, distance = 1
[update_distance] node = 0xe2, distance = 1
[pickup_next_candidate] Find a candidate = 0xe3
[update_distance] node = 0xe1, distance = 2
[update_distance] node = 0xe4, distance = 2
[update_distance] node = 0xe2, distance = 1
[pickup_next_candidate] Find a candidate = 0xe2
[update_distance] node = 0xe1, distance = 2
[update_distance] node = 0xe4, distance = 2
[pickup_next_candidate] Find a candidate = 0xe1
[pickup_next_candidate] Find a candidate = 0xe4
[build_hop_list] build a hop = 0xe4
[build_hop_list] build a hop = 0xe3
[build_hop_list] build a hop = 0xe5
[resolve_path] find a hop list 0
[pickup_next_candidate] Find a candidate = 0xe5
[update_distance] node = 0xe2, distance = 1
[pickup_next_candidate] Find a candidate = 0xe2
[update_distance] node = 0xe1, distance = 2
[update_distance] node = 0xe4, distance = 2
[pickup_next_candidate] Find a candidate = 0xe1
[pickup_next_candidate] Find a candidate = 0xe4
[build_hop_list] build a hop = 0xe4
[build_hop_list] build a hop = 0xe2
[build_hop_list] build a hop = 0xe5
[resolve_path] find a hop list 1
[resolve_path] has 2 paths, pick up the key = 0 from hash_value = 2169503748

[Trema][Concept] How to do flow-based ECMP in Routing Switch App

  As we have known that Routing Switch App uses Dijkstra algorithm to pick up the lowest cost of the path. Only one path will be selected. If we want to do flow-based ECMP, how to do it? I have a simple way to slightly modify the Routing Switch App and then it can become "ECMP Routing Switch" App.

  Here is a topology as follows. If the source is PC1 and destination is PC2, we can know that the source switch is A and destination switch is B. I will base on this to explain my idea.

  First, we setup a number of multi-path , for instance, 8, and let the loop to do Dijkstra algorithm these times.
  Second, we need to add a new chosen flag to record nodes in the path that we have picked up, and get rid of the source and destination node. And also, when Dijkstra algorithm is running, we also need to add a condition to avoid from choosing the node whose chosen flag is true.

For instance, Path 1 is A->B->C->D. We need to add flag on B and C as true.
                        Path 2 is A->E->F->D. We need to add flag on E and F as true.

In this case, Dijkstra algorithm is not able to pick up the third path so that making paths is done.
I have implemented this in Routing Switch App and it works. I will post the real case in the next article.


Wednesday, August 8, 2012

[Trema] Provide a monitoring application to watch port and flow loading

I currently provide a initial version of monitoring application to watch port and flow loading information. Here are some items about the configuration and criteria for sending notification.



The configuration
  • port_percentage_condition
    • the threshold of port loading percentage
  • port_setting_feature_rate
    • the speed rate of port
  • flow_bit_rate_conditon
    • the threshold of flow loading
  • flow_times_condition
    • how many seconds will flow become big flow when being over the threshold of flow loading

The notification criteria of Port Loading
  • Check port loading per 4 seconds
  • Calculate the percentage of port loading
    • port_bit_rate = avg_rx_bytes * 8
    • port_loading_percentage = port_bit_rate * 100 / port_feature_rate
  • If the port loading percentage is higer than port_percentage_condition, then it sends port loading notification
The notification criteria of Flow Loading
  • Check port loading per 4 seconds
  • Calculate the flow loading ( flow_bit_rate )
    • flow_bit_rate = bytes_count * 8 / duration seconds
  • If flow_bit_rate  is bigger than flow_bit_rate_condition, then flow_times adds 1.
  • If flow_times is higher than flow_times_condition, for instance, 3, then it sends flow loading notification