Adding DON changes to the repo
Change-Id: I694a3483cfddd5cff8d0a95466087b0e0e9897ba
6
etc/don/don.conf
Normal file
@ -0,0 +1,6 @@
|
||||
[DEFAULT]
|
||||
# Deployment type should be devstack/multinode
|
||||
deployment_type=multinode
|
||||
|
||||
[neutron]
|
||||
|
0
openstack_dashboard/don/__init__.py
Normal file
22
openstack_dashboard/don/api.py
Normal file
@ -0,0 +1,22 @@
|
||||
from don import models
|
||||
|
||||
|
||||
def save_data(timestamp, data):
|
||||
wb = models.collector.objects.create(timestamp=timestamp, data=data)
|
||||
wb.save()
|
||||
return True
|
||||
|
||||
|
||||
def list_collection(request):
|
||||
return models.collector.objects.values('id', 'timestamp', 'data')
|
||||
|
||||
|
||||
def get_collection(request, id=None):
|
||||
try:
|
||||
return models.collector.objects.get(id=id)
|
||||
except models.collector.DoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
def remove_collection(request, id):
|
||||
models.collector.objects.get(id=id).delete()
|
0
openstack_dashboard/don/archive/__init__.py
Normal file
10
openstack_dashboard/don/archive/panel.py
Normal file
@ -0,0 +1,10 @@
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
import horizon
|
||||
from don import dashboard
|
||||
|
||||
|
||||
class archive(horizon.Panel):
|
||||
name = _("Archive")
|
||||
slug = "archive"
|
||||
|
||||
dashboard.DonDashboard.register(archive)
|
11
openstack_dashboard/don/archive/templates/archive/index.html
Normal file
@ -0,0 +1,11 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON Archive" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("DON Archive") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
{{ table.render }}
|
||||
{% endblock %}
|
11
openstack_dashboard/don/archive/templates/archive/view.html
Normal file
@ -0,0 +1,11 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON View" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("View") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<!-- {{ table.render }} -->
|
||||
{% endblock %}
|
13
openstack_dashboard/don/archive/urls.py
Normal file
@ -0,0 +1,13 @@
|
||||
from django.conf.urls import patterns
|
||||
from django.conf.urls import url
|
||||
from don.archive.views \
|
||||
import ArchiveView
|
||||
from . import views
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
# url(r'^dbview/',DBView.as_view() , name='dbview'),
|
||||
url(r'^dbview/', views.dbview, name='dbview'),
|
||||
url(r'^$', ArchiveView.as_view(), name='index'),
|
||||
|
||||
)
|
49
openstack_dashboard/don/archive/views.py
Normal file
@ -0,0 +1,49 @@
|
||||
from django.core.urlresolvers import reverse
|
||||
from don import api
|
||||
from don import tables as don_tables
|
||||
from horizon import tables
|
||||
# from horizon.views import APIView
|
||||
import time
|
||||
from django.conf import settings
|
||||
from django import http
|
||||
|
||||
|
||||
class ArchiveView(tables.DataTableView):
|
||||
template_name = 'don/archive/index.html'
|
||||
table_class = don_tables.CollectionTable
|
||||
|
||||
def get_data(self):
|
||||
data = api.list_collection(self.request)
|
||||
for item in data:
|
||||
item['timestamp'] = str(time.ctime(float(item.get('timestamp'))))
|
||||
return data
|
||||
|
||||
|
||||
def dbview(request):
|
||||
id = request.GET.get('id')
|
||||
data = api.get_collection(request, id)
|
||||
pwd = settings.ROOT_PATH
|
||||
JSON_FILE = pwd + '/don/ovs/don.json'
|
||||
don = open(JSON_FILE, 'w')
|
||||
don.write(str(data.data))
|
||||
don.close()
|
||||
return http.HttpResponseRedirect(
|
||||
reverse('horizon:don:ovs:view'))
|
||||
|
||||
'''
|
||||
class DBView(APIView):
|
||||
template_name = 'don/archive/view.html'
|
||||
|
||||
def get_data(self,request, context, *args, **kwargs):
|
||||
id = self.request.GET.get('id')
|
||||
data = api.get_collection(self.request,id)
|
||||
pwd = settings.ROOT_PATH
|
||||
JSON_FILE = pwd + '/don/ovs/don.json'
|
||||
don = open(JSON_FILE,'w')
|
||||
don.write(str(data.data))
|
||||
don.close()
|
||||
time.sleep(2)
|
||||
return http.HttpResponseRedirect(
|
||||
reverse('horizon:don:ovs:view'))
|
||||
|
||||
'''
|
13
openstack_dashboard/don/dashboard.py
Normal file
@ -0,0 +1,13 @@
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
import horizon
|
||||
|
||||
|
||||
class DonDashboard(horizon.Dashboard):
|
||||
name = _("DON")
|
||||
slug = "don"
|
||||
panels = ('ovs', 'archive') # Add your panels here.
|
||||
default_panel = 'ovs' # Specify the slug of the dashboard's default panel.
|
||||
|
||||
|
||||
horizon.register(DonDashboard)
|
11
openstack_dashboard/don/models.py
Normal file
@ -0,0 +1,11 @@
|
||||
"""
|
||||
Stub file to work around django bug: https://code.djangoproject.com/ticket/7198
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
class collector(models.Model):
|
||||
# collector table fields
|
||||
timestamp = models.CharField(max_length=50)
|
||||
data = models.TextField()
|
0
openstack_dashboard/don/ovs/__init__.py
Normal file
37
openstack_dashboard/don/ovs/admin-openrc.sh
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# To use an OpenStack cloud you need to authenticate against the Identity
|
||||
# service named keystone, which returns a **Token** and **Service Catalog**.
|
||||
# The catalog contains the endpoints for all services the user/tenant has
|
||||
# access to - such as Compute, Image Service, Identity, Object Storage, Block
|
||||
# Storage, and Networking (code-named nova, glance, keystone, swift,
|
||||
# cinder, and neutron).
|
||||
#
|
||||
# *NOTE*: Using the 2.0 *Identity API* does not necessarily mean any other
|
||||
# OpenStack API is version 2.0. For example, your cloud provider may implement
|
||||
# Image API v1.1, Block Storage API v2, and Compute API v2.0. OS_AUTH_URL is
|
||||
# only for the Identity API served through keystone.
|
||||
export OS_AUTH_URL=http://10.0.2.15:5000/v2.0
|
||||
|
||||
# With the addition of Keystone we have standardized on the term **tenant**
|
||||
# as the entity that owns the resources.
|
||||
export OS_TENANT_ID=5e40d18284c34e0fb9cdb6f92f651f71
|
||||
export OS_TENANT_NAME="admin"
|
||||
export OS_PROJECT_NAME="admin"
|
||||
|
||||
# In addition to the owning entity (tenant), OpenStack stores the entity
|
||||
# performing the action as the **user**.
|
||||
export OS_USERNAME="admin"
|
||||
|
||||
# With Keystone you pass the keystone password.
|
||||
#echo "Please enter your OpenStack Password: "
|
||||
#read -sr OS_PASSWORD_INPUT
|
||||
#export OS_PASSWORD=$OS_PASSWORD_INPUT
|
||||
export OS_PASSWORD="password"
|
||||
|
||||
# If your configuration has multiple regions, we set that information here.
|
||||
# OS_REGION_NAME is optional and only valid in certain environments.
|
||||
export OS_REGION_NAME="RegionOne"
|
||||
# Don't leave a blank variable, unset it if it was empty
|
||||
if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi
|
412
openstack_dashboard/don/ovs/analyzer.py
Normal file
@ -0,0 +1,412 @@
|
||||
#
|
||||
# analyzer.py:
|
||||
#
|
||||
# This file implements the following:
|
||||
# 1. Analysis of the collected info
|
||||
# 2. Report any problems
|
||||
# 3. Report what is correct
|
||||
#
|
||||
import pprint
|
||||
import re
|
||||
import argparse
|
||||
import subprocess
|
||||
import json
|
||||
import os
|
||||
from itertools import combinations
|
||||
|
||||
from common import settings, debug, get_router
|
||||
from common import load_json, get_subnet, is_network_public
|
||||
import yaml
|
||||
|
||||
tick = '✔'
|
||||
cross = '✘'
|
||||
|
||||
|
||||
def get_vm_qrouters(info, vm):
|
||||
vms = info['vms']
|
||||
if not vms.has_key(vm):
|
||||
return 'unknown'
|
||||
|
||||
# Get IP of any of the VM's interfaces
|
||||
for ip in vms[vm]['interfaces'].keys():
|
||||
break
|
||||
|
||||
routers = []
|
||||
subnet = get_subnet(ip)
|
||||
namespaces = info['namespaces']
|
||||
for nms in namespaces.keys():
|
||||
if re.search('^qrouter-', nms):
|
||||
if not namespaces[nms].has_key('interfaces'):
|
||||
continue
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
ip = namespaces[nms]['interfaces'][intf]
|
||||
if re.search(subnet, ip):
|
||||
routers.append(nms)
|
||||
return routers
|
||||
|
||||
# Even if there is one qrouter namespace via which all ping tests passed, we
|
||||
# consider the ping test to be a success.
|
||||
|
||||
|
||||
def did_ping_test_pass(cmds):
|
||||
qrouter_result = True
|
||||
for qrouter in sorted(cmds.keys()):
|
||||
debug('Checking ping status in qrouter %s' % qrouter)
|
||||
qrouter_result = True
|
||||
for key in cmds[qrouter].keys():
|
||||
(src_vm, dst_vm) = key
|
||||
for key2 in sorted(cmds[qrouter][key].keys()):
|
||||
(src_ip, dst_ip) = key2
|
||||
result = cmds[qrouter][key][key2]['pass']
|
||||
if not result:
|
||||
qrouter_result = False
|
||||
break # check the next namsepace, this one failed
|
||||
# if all ping passed via this qrouter, return true
|
||||
if qrouter_result:
|
||||
return qrouter_result
|
||||
|
||||
# There was no qrouter via which all pings passed!
|
||||
return qrouter_result
|
||||
|
||||
|
||||
def run_ping_command(cmd, comment=''):
|
||||
debug('Running ' + comment + ': ' + cmd)
|
||||
return subprocess.check_output(cmd,
|
||||
shell=True,
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True).replace('\t', ' ')
|
||||
|
||||
|
||||
def report_file_open(report_file):
|
||||
f = open(report_file, 'w')
|
||||
f.write('<html>\n')
|
||||
f.write('<head>\n')
|
||||
f.write(
|
||||
'<script type="text/javascript" src="{{ STATIC_URL }}/don/CollapsibleLists.js"></script>\n')
|
||||
f.write(
|
||||
'<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/don/don.css">\n')
|
||||
f.write('<title>DON: Analysis Results</title>\n')
|
||||
f.write('</head>\n')
|
||||
f.write('<body onload=CollapsibleLists.apply()>\n')
|
||||
|
||||
return f
|
||||
|
||||
|
||||
def report_file_close(file_handle):
|
||||
file_handle.write('</body>\n')
|
||||
file_handle.write('</html>\n')
|
||||
|
||||
|
||||
def print_ping_result(cmds, overall_result, info, comment=None):
|
||||
lines = []
|
||||
lines.append('<h2>Ping Test Results</h2>\n')
|
||||
if comment:
|
||||
lines.append('<h3>%s</h3>\n' % comment)
|
||||
lines.append('<ul class="collapsibleList">\n')
|
||||
for qrouter in sorted(cmds.keys()):
|
||||
router = get_router(qrouter, info)
|
||||
lines.append(' <li>%s (Namespace [%s])\n' % (router, qrouter))
|
||||
lines.append(' <ul class="collapsibleList">\n')
|
||||
for key in sorted(cmds[qrouter].keys()):
|
||||
(src_vm, dst_vm) = key
|
||||
lines.append(' <li>%s → %s\n' % (src_vm, dst_vm))
|
||||
lines.append(' <ul class="collapsibleList">\n')
|
||||
for key2 in sorted(cmds[qrouter][key].keys()):
|
||||
(src_ip, dst_ip) = key2
|
||||
result = cmds[qrouter][key][key2]['pass']
|
||||
result_str = '<font class="fail">%s</font>' % cross
|
||||
if result:
|
||||
result_str = '<font class="pass">%s</font>' % tick
|
||||
lines.append(' <li>%15s → %15s %s\n' %
|
||||
(src_ip, dst_ip, result_str))
|
||||
lines.append(' <ul class="collapsibleList">\n')
|
||||
if result:
|
||||
lines.append(' <pre class="pass">\n')
|
||||
else:
|
||||
lines.append(' <pre class="fail">\n')
|
||||
for line in cmds[qrouter][key][key2]['output'].split('\n'):
|
||||
lines.append(line + '\n')
|
||||
lines.append(' </pre>\n')
|
||||
lines.append(' </ul>\n')
|
||||
lines.append(' </li>\n')
|
||||
lines.append(' </ul>\n')
|
||||
lines.append(' </li>\n')
|
||||
lines.append(' </ul>\n')
|
||||
lines.append(' </li>\n')
|
||||
lines.append('</ul>\n')
|
||||
|
||||
overall_str = '<font class="fail">%s</font>' % cross
|
||||
if overall_result:
|
||||
overall_str = '<font class="pass">%s</font>' % tick
|
||||
lines.append('OVERALL RESULT: %s\n' % overall_str)
|
||||
return lines
|
||||
|
||||
|
||||
def get_vm_credentials(config_file='credentials.yaml'):
|
||||
try:
|
||||
with open(config_file, 'r') as s:
|
||||
return yaml.safe_load(s)
|
||||
except IOError, e:
|
||||
print '%s :%s' % (e.args[1], config_file)
|
||||
raise
|
||||
|
||||
|
||||
def test_ping(info):
|
||||
debug('Running ping test')
|
||||
vms = info['vms']
|
||||
vm_credentials = get_vm_credentials()
|
||||
for vm in sorted(vms.keys()):
|
||||
vms[vm]['qrouter'] = get_vm_qrouters(info, vm)
|
||||
|
||||
vm_pairs = list(combinations(sorted(vms.keys()), 2))
|
||||
pprint.pprint(vm_pairs)
|
||||
cmds = {}
|
||||
for (src_vm, dst_vm) in vm_pairs:
|
||||
for qrouter in vms[src_vm]['qrouter']:
|
||||
debug(qrouter)
|
||||
if not cmds.has_key(qrouter):
|
||||
cmds[qrouter] = {}
|
||||
cmds[qrouter][(src_vm, dst_vm)] = {}
|
||||
for src_ip in vms[src_vm]['interfaces'].keys():
|
||||
if is_network_public(src_ip, src_vm, info):
|
||||
continue
|
||||
for dst_ip in vms[dst_vm]['interfaces'].keys():
|
||||
if is_network_public(dst_ip, dst_vm, info):
|
||||
continue
|
||||
username = vm_credentials.get(
|
||||
src_vm, vm_credentials['default'])['username']
|
||||
passwd = vm_credentials.get(src_vm, vm_credentials[
|
||||
'default'])['password']
|
||||
cmd = 'sudo ip netns exec ' + qrouter
|
||||
cmd += ' python ping.py --src_ip %s --dst_ip %s --username "%s" --passwd "%s" --count %d --timeout %d' % \
|
||||
(src_ip, dst_ip, username, passwd, 1, 2)
|
||||
|
||||
comment = 'Ping [%s (%s) => %s (%s)]' % (
|
||||
src_vm, src_ip, dst_vm, dst_ip)
|
||||
output = run_ping_command(cmd, comment=comment)
|
||||
a = json.loads(output)
|
||||
success = a['pass']
|
||||
cmds[qrouter][(src_vm, dst_vm)][(src_ip, dst_ip)] = {
|
||||
'cmd': cmd,
|
||||
'output': output,
|
||||
'pass': success
|
||||
}
|
||||
|
||||
debug(pprint.pformat(cmds))
|
||||
ping_test_passed = did_ping_test_pass(cmds)
|
||||
|
||||
return (ping_test_passed, cmds)
|
||||
|
||||
|
||||
def run_ovs_command(cmd, comment=''):
|
||||
debug('Running ' + comment + ': ' + cmd)
|
||||
return subprocess.check_output(cmd,
|
||||
shell=True,
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True).replace('\t', ' ')
|
||||
|
||||
|
||||
def process_ovs_output(output):
|
||||
for line in output:
|
||||
if re.search('PASS', line):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def print_ovs_result(cmds, overall_result, info, comment=None):
|
||||
lines = []
|
||||
lines.append('<h2>OVS Test Results</h2>\n')
|
||||
if comment:
|
||||
lines.append('<h3>%s</h3>\n' % comment)
|
||||
lines.append('<ul class="collapsibleList">\n')
|
||||
lines.append(' <li>OVS bridge br-int\n')
|
||||
lines.append(' <ul class="collapsibleList">\n')
|
||||
for tag in sorted(cmds.keys()):
|
||||
lines.append(' <li>tag %s\n' % (tag))
|
||||
lines.append(' <ul class="collapsibleList">\n')
|
||||
for key in sorted(cmds[tag].keys()):
|
||||
(src_port, dst_port) = key
|
||||
result = cmds[tag][key]['pass']
|
||||
result_str = '<font class="fail">%s</font>' % cross
|
||||
if result:
|
||||
result_str = '<font class="pass">%s</font>' % tick
|
||||
lines.append(' <li>%3s → %3s %s\n' %
|
||||
(src_port, dst_port, result_str))
|
||||
lines.append(' <ul class="collapsibleList">\n')
|
||||
if result:
|
||||
lines.append(' <pre class="pass">\n')
|
||||
else:
|
||||
lines.append(' <pre class="fail">\n')
|
||||
for line in cmds[tag][key]['output'].split('\n'):
|
||||
lines.append(line + '\n')
|
||||
lines.append(' </ul>\n')
|
||||
lines.append(' </li>\n')
|
||||
lines.append(' </ul>\n')
|
||||
lines.append(' </li>\n')
|
||||
|
||||
lines.append(' </ul>\n')
|
||||
lines.append(' </li>\n')
|
||||
lines.append('</ul>\n')
|
||||
|
||||
overall_str = '<font class="fail">%s</font>' % cross
|
||||
if overall_result:
|
||||
overall_str = '<font class="pass">%s</font>' % tick
|
||||
lines.append('OVERALL RESULT: %s\n' % overall_str)
|
||||
return lines
|
||||
|
||||
|
||||
def test_ovs(info):
|
||||
debug('Running OVS test')
|
||||
ovs_test_passed = True
|
||||
cmds = {}
|
||||
|
||||
# first construct a dictionary of tag to br-int ports
|
||||
br_int_ports = info['bridges']['br-int']['ports']
|
||||
|
||||
tag_to_port = {}
|
||||
for port in br_int_ports.keys():
|
||||
if not re.search('^qvo', port):
|
||||
continue
|
||||
tag = br_int_ports[port]['tag']
|
||||
port_id = br_int_ports[port]['id']
|
||||
if not tag_to_port.has_key(tag):
|
||||
tag_to_port[tag] = []
|
||||
tag_to_port[tag].append((port_id, port))
|
||||
|
||||
debug(pprint.pformat(tag_to_port))
|
||||
for tag in sorted(tag_to_port.keys(), key=lambda x: int(x)):
|
||||
cmds[tag] = {}
|
||||
port_count = len(tag_to_port[tag])
|
||||
if port_count < 2:
|
||||
debug('tag %s is used by single port %s. Skipping test!' %
|
||||
(tag, tag_to_port[tag][0]))
|
||||
continue
|
||||
|
||||
port_list = list(map(lambda (x, y): x, tag_to_port[tag]))
|
||||
sorted_port_list = sorted(port_list, key=lambda x: int(x))
|
||||
port_pairs = list(combinations(sorted_port_list, 2))
|
||||
|
||||
for (src_port, dst_port) in port_pairs:
|
||||
cmds[tag][(src_port, dst_port)] = {}
|
||||
|
||||
cmd = ''
|
||||
cmd += 'python ovs.py --src_port_id %s --dst_port_id %s --tag %s --ovs_bridge br-int' % \
|
||||
(src_port, dst_port, tag)
|
||||
comment = 'ovs [tag: %s port %s => %s' % (tag, src_port, dst_port)
|
||||
output = run_ovs_command(cmd, comment=comment)
|
||||
success = process_ovs_output(output)
|
||||
if not success:
|
||||
ovs_test_passed = False
|
||||
|
||||
cmds[tag][(src_port, dst_port)] = {
|
||||
'cmd': cmd,
|
||||
'output': output,
|
||||
'pass': success
|
||||
}
|
||||
|
||||
return (ovs_test_passed, cmds)
|
||||
|
||||
|
||||
# Dictionary of tests
|
||||
test_suite = {
|
||||
'ping': {
|
||||
'help': 'Ping test between all pairs of VMs',
|
||||
'func': test_ping,
|
||||
'result': 'not run',
|
||||
'formatter': print_ping_result,
|
||||
'html': None,
|
||||
},
|
||||
'ovs': {
|
||||
'help': 'OVS test between all pairs of ports using the same tag in br-int',
|
||||
'func': test_ovs,
|
||||
'result': 'not run',
|
||||
'formatter': print_ovs_result,
|
||||
'html': None,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def analyze(json_filename, params):
|
||||
settings['debug'] = True
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||
CUR_DIR = os.getcwd()
|
||||
os.chdir(BASE_DIR + '/ovs')
|
||||
# NEW_DIR = os.getcwd()
|
||||
# return BASE_DIR + ':' + CUR_DIR + ':' + NEW_DIR
|
||||
debug('This is what I am going to analyze')
|
||||
my_info = load_json(json_filename)
|
||||
|
||||
for test in test_suite.keys():
|
||||
flag = 'test:' + test
|
||||
if params[flag] or params['test:all']:
|
||||
(result, cmds) = test_suite[test]['func'](my_info)
|
||||
if result:
|
||||
test_suite[test]['result'] = 'PASS'
|
||||
else:
|
||||
test_suite[test]['result'] = 'FAIL'
|
||||
lines = test_suite[test]['formatter'](cmds,
|
||||
result,
|
||||
my_info,
|
||||
test_suite[test]['help'])
|
||||
test_suite[test]['html'] = lines
|
||||
|
||||
debug(params['test:report_file'])
|
||||
f = report_file_open(params['test:report_file'])
|
||||
for test in test_suite.keys():
|
||||
if test_suite[test]['html']:
|
||||
for line in test_suite[test]['html']:
|
||||
f.write(line)
|
||||
report_file_close(f)
|
||||
os.chdir(CUR_DIR)
|
||||
|
||||
|
||||
def check_args():
|
||||
parser = argparse.ArgumentParser(description='Static analysis of output of commands',
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug',
|
||||
help='Enable debugging',
|
||||
default=True, action='store_true')
|
||||
parser.add_argument('--info_file', dest='info_file',
|
||||
help='Info is read in JSON format in this file',
|
||||
default="don.json", type=str)
|
||||
parser.add_argument('--ping', dest='ping',
|
||||
help='ping test between all VMs', default=False,
|
||||
action='store_true')
|
||||
parser.add_argument('--ping_count', dest='ping_count',
|
||||
help='how many ping packets to send',
|
||||
default=2, type=int)
|
||||
parser.add_argument('--ping_timeout', dest='ping_timeout',
|
||||
help='ping timeout period in seconds',
|
||||
default=2, type=int)
|
||||
parser.add_argument('--ovs', dest='ovs',
|
||||
help='ovs test between ports using same tag in br-int',
|
||||
default=False, action='store_true')
|
||||
parser.add_argument('--test_all', dest='test_all',
|
||||
help='Perform all tests in test suite',
|
||||
default=False, action='store_true')
|
||||
parser.add_argument('--error_file', dest='error_file',
|
||||
help='All errors will be reported to this file',
|
||||
type=str, default='don.error.txt')
|
||||
parser.add_argument('--report_file', dest='report_file',
|
||||
help='Report will be written in this file in HTML format',
|
||||
type=str, default='don.report.html')
|
||||
args = parser.parse_args()
|
||||
|
||||
settings['debug'] = args.debug
|
||||
settings['info_file'] = args.info_file
|
||||
settings['error_file'] = args.error_file
|
||||
settings['test:all'] = args.test_all
|
||||
settings['test:ping'] = args.test_all or args.ping
|
||||
settings['test:ping_count'] = args.ping_count
|
||||
settings['test:ping_timeout'] = args.ping_timeout
|
||||
settings['test:ovs'] = args.test_all or args.ovs
|
||||
settings['test:report_file'] = args.report_file
|
||||
|
||||
|
||||
def main():
|
||||
check_args()
|
||||
analyze(settings['info_file'], settings)
|
||||
pprint.pprint(test_suite)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
965
openstack_dashboard/don/ovs/collector.py
Normal file
@ -0,0 +1,965 @@
|
||||
#
|
||||
# This file runs a whole bunch of commands (on the shell), parses their outputs
|
||||
# and constructs a dictionary of extracted information.
|
||||
#
|
||||
import pprint
|
||||
import re
|
||||
import argparse
|
||||
import os
|
||||
from common import settings, debug, error, status_update, dump_json
|
||||
from common import execute_cmd, connect_to_box, get_vm_credentials
|
||||
import ConfigParser
|
||||
# from analyzer import analyze
|
||||
|
||||
don_config = ConfigParser.ConfigParser()
|
||||
try:
|
||||
don_config.read('/etc/don/don.conf')
|
||||
except Exception, e:
|
||||
print e
|
||||
deployment_type = don_config.get('DEFAULT', 'deployment_type')
|
||||
|
||||
|
||||
def get_env(filename):
|
||||
try:
|
||||
lines = open(os.getcwd() + os.sep + filename, 'r').read().splitlines()
|
||||
except IOError, e:
|
||||
print "%s :%s" % (e.args[1], filename)
|
||||
raise
|
||||
env = {}
|
||||
for line in lines:
|
||||
if line.startswith('export'):
|
||||
m = re.search(r'export (.+)=(.+)', line)
|
||||
if m:
|
||||
key = m.group(1).replace('"', '')
|
||||
val = m.group(2).replace('"', '')
|
||||
env.update({key: val})
|
||||
return env
|
||||
|
||||
myenv = os.environ.copy()
|
||||
myenv.update(get_env('admin-openrc.sh'))
|
||||
|
||||
# Contains all info gathered by parsing the output of commands
|
||||
info = {
|
||||
'vms': {},
|
||||
'brctl': {},
|
||||
'bridges': {
|
||||
'br-ex': {'ports': {}},
|
||||
'br-int': {'ports': {}},
|
||||
'br-tun': {'ports': {}}
|
||||
},
|
||||
'floating_ips': {},
|
||||
}
|
||||
|
||||
|
||||
def add_new_command(cmd_dict, cmd_key, cmd):
|
||||
if cmd_dict.has_key(cmd_key):
|
||||
error(cmd_key + ' already exists in command dictionary')
|
||||
return
|
||||
cmd_dict[cmd_key] = cmd
|
||||
|
||||
|
||||
def record_linuxbridge(bridge, interface_list):
|
||||
brctl_dict = info['brctl']
|
||||
if brctl_dict.has_key(bridge):
|
||||
error('Bridge ' + bridge + ' repeated! Overwriting!')
|
||||
brctl_dict[bridge] = {'interfaces': interface_list}
|
||||
|
||||
|
||||
def get_bridge_entry(br):
|
||||
bridge_dict = info['bridges']
|
||||
if not bridge_dict.has_key(br):
|
||||
error('Bridge ' + br + ' does not exist! Supported bridges: ' +
|
||||
str(bridge_dict.keys()))
|
||||
return None
|
||||
return bridge_dict.get(br)
|
||||
|
||||
|
||||
#
|
||||
# Parser functions (for each command). Each function has the sample input
|
||||
# as a comment above it.
|
||||
#
|
||||
'''
|
||||
<uuid>31b1cfcc-ca85-48a9-a84a-8b222d377080</uuid>
|
||||
<nova:name>VM1</nova:name>
|
||||
<source bridge='qbrb0f5cfc8-4d'/>
|
||||
<uuid>f9743f1c-caeb-4892-af83-9dc0ac757545</uuid>
|
||||
<nova:name>VM2</nova:name>
|
||||
<source bridge='qbr6ce314cb-a5'/>
|
||||
'''
|
||||
|
||||
|
||||
def cat_instance_parser(parse_this):
|
||||
vm_dict = info['vms']
|
||||
|
||||
uuid = None
|
||||
name = None
|
||||
src_bridge = None
|
||||
for line in parse_this:
|
||||
m = re.search('<uuid>(\S+)</uuid>', line)
|
||||
if m:
|
||||
uuid = m.group(1)
|
||||
continue
|
||||
m = re.search('<nova:name>(\S+)</nova:name>', line)
|
||||
if m:
|
||||
name = m.group(1)
|
||||
continue
|
||||
m = re.search('<source bridge=\'(\S+)\'/>', line)
|
||||
if m:
|
||||
src_bridge = m.group(1)
|
||||
|
||||
if not vm_dict.has_key(name):
|
||||
vm_dict[name] = {}
|
||||
|
||||
vm_entry = vm_dict[name]
|
||||
vm_entry['uuid'] = uuid
|
||||
if not vm_entry.has_key('src_bridge'):
|
||||
vm_entry['src_bridge'] = []
|
||||
vm_entry['tap_dev'] = []
|
||||
vm_entry['src_bridge'].append(src_bridge)
|
||||
vm_entry['tap_dev'].append(src_bridge.replace('qbr', 'tap'))
|
||||
|
||||
|
||||
'''
|
||||
bridge name bridge id STP enabled interfaces
|
||||
qbr6ce314cb-a5 8000.9255d5550cf8 no qvb6ce314cb-a5
|
||||
tap6ce314cb-a5
|
||||
qbrb0f5cfc8-4d 8000.b2277f2c981b no qvbb0f5cfc8-4d
|
||||
tapb0f5cfc8-4d
|
||||
virbr0 8000.000000000000 yes
|
||||
'''
|
||||
|
||||
|
||||
def brctl_show_parser(parse_this):
|
||||
interfaces = []
|
||||
bridge = None
|
||||
for line in parse_this:
|
||||
m = re.search('(qbr\S+)\s+\S+\s+\S+\s+(\S+)', line)
|
||||
if m:
|
||||
# We already have a bridge, that means we are now lookign at the
|
||||
# next bridge
|
||||
if bridge:
|
||||
record_linuxbridge(bridge, interfaces)
|
||||
interfaces = []
|
||||
bridge = m.group(1)
|
||||
interfaces.append(m.group(2))
|
||||
continue
|
||||
m = re.search('^\s+(\S+)', line)
|
||||
if m:
|
||||
interfaces.append(m.group(1))
|
||||
|
||||
# handle the last bridge
|
||||
if bridge:
|
||||
record_linuxbridge(bridge, interfaces)
|
||||
|
||||
'''
|
||||
ubuntu@ubuntu-VirtualBox:~/don$ sudo ovs-vsctl show
|
||||
0fc4d93f-28e0-408a-8edb-21d5ec76b2c3
|
||||
Bridge br-tun
|
||||
fail_mode: secure
|
||||
Port patch-int
|
||||
Interface patch-int
|
||||
type: patch
|
||||
options: {peer=patch-tun}
|
||||
Port br-tun
|
||||
Interface br-tun
|
||||
type: internal
|
||||
Bridge br-int
|
||||
fail_mode: secure
|
||||
Port "tap3b74b285-71"
|
||||
tag: 2
|
||||
Interface "tap3b74b285-71"
|
||||
type: internal
|
||||
Port patch-tun
|
||||
Interface patch-tun
|
||||
type: patch
|
||||
options: {peer=patch-int}
|
||||
Port "qvob0f5cfc8-4d"
|
||||
tag: 2
|
||||
Interface "qvob0f5cfc8-4d"
|
||||
Port "qr-77ce7d4c-d5"
|
||||
tag: 1
|
||||
Interface "qr-77ce7d4c-d5"
|
||||
type: internal
|
||||
Port "qr-56cf8a2d-27"
|
||||
tag: 2
|
||||
Interface "qr-56cf8a2d-27"
|
||||
type: internal
|
||||
Port "qvo6ce314cb-a5"
|
||||
tag: 2
|
||||
Interface "qvo6ce314cb-a5"
|
||||
Port br-int
|
||||
Interface br-int
|
||||
type: internal
|
||||
Port "tap9d44135a-45"
|
||||
tag: 1
|
||||
Interface "tap9d44135a-45"
|
||||
type: internal
|
||||
Bridge br-ex
|
||||
Port "qg-2909632b-b8"
|
||||
Interface "qg-2909632b-b8"
|
||||
type: internal
|
||||
Port br-ex
|
||||
Interface br-ex
|
||||
type: internal
|
||||
Port "qg-e2fb759b-60"
|
||||
Interface "qg-e2fb759b-60"
|
||||
type: internal
|
||||
ovs_version: "2.0.2"
|
||||
'''
|
||||
|
||||
|
||||
def ovs_vsctl_show_parser(parse_this):
|
||||
bridge = None
|
||||
bridge_dict = info['bridges']
|
||||
for line in parse_this:
|
||||
m = re.search('Bridge\s+(br-\S+)', line)
|
||||
if m:
|
||||
bridge = str(m.group(1))
|
||||
if not bridge_dict.has_key(bridge):
|
||||
error(
|
||||
'Skipping bridge [' + bridge + ']! Supported bridges: ' +
|
||||
str(bridge_dict.keys()))
|
||||
bridge = None
|
||||
continue
|
||||
bridge_entry = bridge_dict.get(bridge)
|
||||
if bridge:
|
||||
m = re.search('fail_mode: (\S+)', line)
|
||||
if m:
|
||||
bridge_entry['fail_mode'] = m.group(1)
|
||||
continue
|
||||
m = re.search('Port (\S+)', line)
|
||||
if m:
|
||||
# the port names seem to have double quotes around them!
|
||||
port = m.group(1).replace('"', '')
|
||||
if not bridge_entry['ports'].has_key(port):
|
||||
bridge_entry['ports'][port] = {}
|
||||
port_entry = bridge_entry['ports'][port]
|
||||
continue
|
||||
m = re.search('tag: (\d+)', line)
|
||||
if m:
|
||||
port_entry['tag'] = m.group(1)
|
||||
continue
|
||||
m = re.search('Interface (\S+)', line)
|
||||
if m:
|
||||
# the interface names seem to have double quotes around them!
|
||||
interface = m.group(1).replace('"', '')
|
||||
if not port_entry.has_key('interfaces'):
|
||||
port_entry['interfaces'] = {}
|
||||
port_entry['interfaces'][interface] = {}
|
||||
interface_entry = port_entry['interfaces'][interface]
|
||||
continue
|
||||
m = re.search('type: (\S+)', line)
|
||||
if m:
|
||||
interface_entry['type'] = m.group(1)
|
||||
continue
|
||||
m = re.search('options: {(\S+)}', line)
|
||||
if m:
|
||||
options = m.group(1)
|
||||
interface_entry['options'] = options
|
||||
continue
|
||||
|
||||
'''
|
||||
OFPT_FEATURES_REPLY (xid=0x2): dpid:00008207ee8eee4d
|
||||
n_tables:254, n_buffers:256
|
||||
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
|
||||
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST \
|
||||
SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
|
||||
4(patch-tun): addr:e2:ce:31:60:94:e0
|
||||
config: 0
|
||||
state: 0
|
||||
speed: 0 Mbps now, 0 Mbps max
|
||||
5(tap9d44135a-45): addr:00:00:00:00:00:00
|
||||
config: PORT_DOWN
|
||||
state: LINK_DOWN
|
||||
speed: 0 Mbps now, 0 Mbps max
|
||||
6(qr-77ce7d4c-d5): addr:00:00:00:00:00:00
|
||||
config: PORT_DOWN
|
||||
state: LINK_DOWN
|
||||
speed: 0 Mbps now, 0 Mbps max
|
||||
7(tap3b74b285-71): addr:00:00:00:00:00:00
|
||||
config: PORT_DOWN
|
||||
state: LINK_DOWN
|
||||
speed: 0 Mbps now, 0 Mbps max
|
||||
8(qr-56cf8a2d-27): addr:00:00:00:00:00:00
|
||||
config: PORT_DOWN
|
||||
state: LINK_DOWN
|
||||
speed: 0 Mbps now, 0 Mbps max
|
||||
9(qvob0f5cfc8-4d): addr:7a:82:4f:4e:a0:ab
|
||||
config: 0
|
||||
state: 0
|
||||
current: 10GB-FD COPPER
|
||||
speed: 10000 Mbps now, 0 Mbps max
|
||||
10(qvo6ce314cb-a5): addr:42:92:2a:95:28:ed
|
||||
config: 0
|
||||
state: 0
|
||||
current: 10GB-FD COPPER
|
||||
speed: 10000 Mbps now, 0 Mbps max
|
||||
LOCAL(br-int): addr:82:07:ee:8e:ee:4d
|
||||
config: 0
|
||||
state: 0
|
||||
speed: 0 Mbps now, 0 Mbps max
|
||||
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0
|
||||
'''
|
||||
|
||||
|
||||
def ovs_ofctl_show_br_parser(bridge, parse_this):
|
||||
bridge_dict = info['bridges']
|
||||
if not bridge_dict.has_key(bridge):
|
||||
error('Skipping bridge [' + bridge +
|
||||
']! Supported bridges: ' + str(bridge_dict.keys()))
|
||||
return
|
||||
bridge_entry = bridge_dict.get(bridge)
|
||||
pprint.pprint(bridge_entry)
|
||||
|
||||
for line in parse_this:
|
||||
m = re.search('(\d+)\((\S+)\):\s+addr:(\S+)', line)
|
||||
if m:
|
||||
port_id = m.group(1)
|
||||
port = m.group(2)
|
||||
port_mac = m.group(3)
|
||||
if not bridge_entry['ports'].has_key(port):
|
||||
bridge_entry['ports'][port] = {}
|
||||
port_entry = bridge_entry['ports'][port]
|
||||
port_entry['id'] = port_id
|
||||
port_entry['mac'] = port_mac
|
||||
continue
|
||||
|
||||
m = re.search('(\w+)\((\S+)\):\s+addr:(\S+)', line)
|
||||
if m:
|
||||
port_id = m.group(1)
|
||||
port = m.group(2)
|
||||
port_mac = m.group(3)
|
||||
if not bridge_entry['ports'].has_key(port):
|
||||
bridge_entry['ports'][port] = {}
|
||||
port_entry = bridge_entry['ports'][port]
|
||||
port_entry['id'] = port_id
|
||||
port_entry['mac'] = port_mac
|
||||
|
||||
pass
|
||||
|
||||
# These three are all wrappers for each of the three bridges
|
||||
|
||||
|
||||
def ovs_ofctl_show_br_int_parser(parse_this):
|
||||
ovs_ofctl_show_br_parser('br-int', parse_this)
|
||||
|
||||
|
||||
def ovs_ofctl_show_br_ex_parser(parse_this):
|
||||
ovs_ofctl_show_br_parser('br-ex', parse_this)
|
||||
|
||||
|
||||
def ovs_ofctl_show_br_tun_parser(parse_this):
|
||||
ovs_ofctl_show_br_parser('br-tun', parse_this)
|
||||
|
||||
'''
|
||||
+--------------------------------------+-------+--------+------------+-------------+--------------------------------------------------------+
|
||||
| ID | Name | Status | Task State | Power State | Networks |
|
||||
+--------------------------------------+-------+--------+------------+-------------+--------------------------------------------------------+
|
||||
| 31b1cfcc-ca85-48a9-a84a-8b222d377080 | VM1 | ACTIVE | - | Running | private=10.0.2.3 |
|
||||
| f9743f1c-caeb-4892-af83-9dc0ac757545 | VM2 | ACTIVE | - | Running | private=10.0.2.4 |
|
||||
| 83b547b9-9578-4840-997a-5aa1c4e829b0 | VM3-1 | ACTIVE | - | Running | private2=10.0.3.3 |
|
||||
| 17b4685e-5cbe-4dd1-862a-6f89c191e1e7 | VM3-2 | ACTIVE | - | Running | private2=10.0.3.4 |
|
||||
| ee4952a3-0700-42ea-aab3-7503bc9d87e2 | VM4 | ACTIVE | - | Running | private2=10.0.3.5; public=172.24.4.4; private=10.0.2.5 |
|
||||
+--------------------------------------+-------+--------+------------+-------------+--------------------------------------------------------+
|
||||
'''
|
||||
|
||||
|
||||
def nova_list_parser(parse_this):
|
||||
vm_dict = info['vms']
|
||||
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line) or \
|
||||
re.search('Networks', line):
|
||||
continue
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
|
||||
vm = parts[2]
|
||||
networks = parts[6].split(';')
|
||||
networks = [x.strip() for x in networks]
|
||||
|
||||
if not vm_dict.has_key(vm):
|
||||
vm_dict[vm] = {'interfaces': {}}
|
||||
|
||||
for entry in networks:
|
||||
# excluding ipv6 ip
|
||||
if len(entry.split(',')) > 1:
|
||||
network = entry.split('=')[0]
|
||||
ip = filter(lambda a: re.search("(\d+\.\d+\.\d+\.\d+)", a) is not
|
||||
None, entry.split('=')[1].split(','))[0].strip()
|
||||
else:
|
||||
(network, ip) = entry.split(',')[0].split('=')
|
||||
vm_dict[vm]['interfaces'][ip] = {'network': network}
|
||||
|
||||
pass
|
||||
|
||||
|
||||
'''
|
||||
+--------------------------------------+------+-------------------+-----------------------------------------------------------------------------------+
|
||||
| id | name | mac_address | fixed_ips |
|
||||
+--------------------------------------+------+-------------------+-----------------------------------------------------------------------------------+
|
||||
| 1dd820b1-98bd-4f39-b1ab-e89ecc67ae43 | | fa:16:3e:0f:36:26 | {"subnet_id": "75ae4ce8-495d-4f53-93d1-bf98e55d6658", "ip_address": "172.24.4.4"} |
|
||||
| 1f73af79-fa69-4433-bcab-16d7a0bc2607 | | fa:16:3e:dc:c8:de | {"subnet_id": "dbc9717f-5a08-48bb-92e2-ed2da443541b", "ip_address": "10.0.3.1"} |
|
||||
| 2909632b-b8a3-436b-aabd-9868d0c1051e | | fa:16:3e:af:95:a9 | {"subnet_id": "75ae4ce8-495d-4f53-93d1-bf98e55d6658", "ip_address": "172.24.4.2"} |
|
||||
| 3b74b285-71d0-4311-8a69-2b032eebbe13 | | fa:16:3e:70:09:45 | {"subnet_id": "1083b740-45ce-49be-b603-73cbc26af5d7", "ip_address": "10.0.2.2"} |
|
||||
| 56cf8a2d-27b7-4eab-a334-349c70520868 | | fa:16:3e:8a:ce:cb | {"subnet_id": "1083b740-45ce-49be-b603-73cbc26af5d7", "ip_address": "10.0.2.1"} |
|
||||
| 6ce314cb-a599-4af8-8187-bdb0bfa88809 | | fa:16:3e:83:b1:60 | {"subnet_id": "1083b740-45ce-49be-b603-73cbc26af5d7", "ip_address": "10.0.2.4"} |
|
||||
| 77ce7d4c-d5b9-4669-b23c-b0d9ee5f58c8 | | fa:16:3e:a6:de:15 | {"subnet_id": "531f1674-2b46-4ad7-9d73-4c41d215cc99", "ip_address": "10.0.0.1"} |
|
||||
| 9c34adc0-c655-4b00-89ba-ca65def56fe0 | | fa:16:3e:a1:e7:f5 | {"subnet_id": "dbc9717f-5a08-48bb-92e2-ed2da443541b", "ip_address": "10.0.3.4"} |
|
||||
| 9d44135a-4551-4448-9c80-d211b023c3eb | | fa:16:3e:80:83:c9 | {"subnet_id": "531f1674-2b46-4ad7-9d73-4c41d215cc99", "ip_address": "10.0.0.2"} |
|
||||
| b0f5cfc8-4da0-42ad-8c18-6f29870bfb2a | | fa:16:3e:ae:a2:17 | {"subnet_id": "1083b740-45ce-49be-b603-73cbc26af5d7", "ip_address": "10.0.2.3"} |
|
||||
| c03437a8-8a44-4615-b160-e1ef227d63c5 | | fa:16:3e:7f:b6:a5 | {"subnet_id": "dbc9717f-5a08-48bb-92e2-ed2da443541b", "ip_address": "10.0.3.5"} |
|
||||
| cb7d8a29-8140-4ed0-a1c7-03cbf0be0c5b | | fa:16:3e:33:ee:b1 | {"subnet_id": "1083b740-45ce-49be-b603-73cbc26af5d7", "ip_address": "10.0.2.5"} |
|
||||
| e2fb759b-602a-4fcd-8674-e8f5fe297dbc | | fa:16:3e:ea:47:b5 | {"subnet_id": "75ae4ce8-495d-4f53-93d1-bf98e55d6658", "ip_address": "172.24.4.3"} |
|
||||
| e4f25d71-5684-4ccc-8114-2465a84ecc58 | | fa:16:3e:90:c7:d3 | {"subnet_id": "dbc9717f-5a08-48bb-92e2-ed2da443541b", "ip_address": "10.0.3.2"} |
|
||||
| f57aa80e-2ef3-4031-a0a4-bc12d2445687 | | fa:16:3e:2e:6e:91 | {"subnet_id": "dbc9717f-5a08-48bb-92e2-ed2da443541b", "ip_address": "10.0.3.3"} |
|
||||
+--------------------------------------+------+-------------------+-----------------------------------------------------------------------------------+
|
||||
'''
|
||||
|
||||
|
||||
def neutron_port_list_parser(parse_this):
|
||||
tap_to_ip = {}
|
||||
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line) or \
|
||||
re.search('fixed_ips', line):
|
||||
continue
|
||||
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
|
||||
tap = parts[1][:11]
|
||||
# ip = parts[4].split(':')[-1].replace('}', '')
|
||||
m = re.search('"ip_address": "(\S+)"', parts[4])
|
||||
if m:
|
||||
ip = m.group(1)
|
||||
tap_to_ip[tap] = ip
|
||||
|
||||
info['tap_to_ip'] = tap_to_ip
|
||||
pass
|
||||
|
||||
'''
|
||||
+--------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------+
|
||||
| id | name | external_gateway_info | distributed | ha |
|
||||
+--------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------+
|
||||
| 8c981cdb-c19f-47c1-8149-f85a506c486c | router1 | {"network_id": "640ece56-c6dc-4868-8e7a-12547508098a", "enable_snat": true, "external_fixed_ips": [{"subnet_id": "75ae4ce8-495d-4f53-93d1-bf98e55d6658", "ip_address": "172.24.4.2"}]} | False | False |
|
||||
| ac41aab2-f9c3-4a06-8eef-f909ee1e6e50 | router | {"network_id": "640ece56-c6dc-4868-8e7a-12547508098a", "enable_snat": true, "external_fixed_ips": [{"subnet_id": "75ae4ce8-495d-4f53-93d1-bf98e55d6658", "ip_address": "172.24.4.3"}]} | False | False |
|
||||
+--------------------------------------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------+
|
||||
'''
|
||||
|
||||
|
||||
def neutron_router_list_parser(parse_this):
|
||||
routers = {}
|
||||
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line) or \
|
||||
re.search('external_gateway_info', line):
|
||||
continue
|
||||
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
|
||||
router_id = parts[1]
|
||||
name = parts[2]
|
||||
|
||||
network_id = 'unknown'
|
||||
m = re.search('"network_id":\s+"(\S+)"', parts[3])
|
||||
if m:
|
||||
network_id = m.group(1)
|
||||
|
||||
ip_address = 'x.x.x.x'
|
||||
m = re.search('"ip_address":\s+"(\d+\.\d+\.\d+\.\d+)"', parts[3])
|
||||
if m:
|
||||
ip_address = m.group(1)
|
||||
|
||||
routers[name] = {'id': router_id,
|
||||
'ip_address': ip_address,
|
||||
'network_id': network_id,
|
||||
}
|
||||
|
||||
info['routers'] = routers
|
||||
|
||||
# now add some more commands to get further information for
|
||||
# l3-agents which run in different namespaces
|
||||
for router in info['routers'].keys():
|
||||
uuid = info['routers'][router]['id']
|
||||
namespace = 'qrouter-' + uuid
|
||||
|
||||
cmd_key = 'netns_' + namespace
|
||||
cmd = {
|
||||
'cmd': 'echo namespace: ' + namespace + '; echo "sudo ip netns exec ' + namespace + ' ip a" > /tmp/don.bash; bash /tmp/don.bash',
|
||||
'help': 'Collect namespace info for l3-agent',
|
||||
'shell': True,
|
||||
'output': None,
|
||||
'order': 100,
|
||||
'parser': ip_namespace_qrouter_parser,
|
||||
}
|
||||
add_new_command(commands, cmd_key, cmd)
|
||||
pass
|
||||
|
||||
|
||||
def ip_namespace_qrouter_parser(parse_this):
|
||||
nm_dict = info['namespaces']
|
||||
|
||||
qr_intf = None
|
||||
qg_intf = None
|
||||
ip = None
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line):
|
||||
continue
|
||||
m = re.search('^namespace: (\S+)', line)
|
||||
if m:
|
||||
namespace = m.group(1)
|
||||
continue
|
||||
|
||||
m = re.search('^\d+: (qr-\S+):', line)
|
||||
if m:
|
||||
qr_intf = m.group(1)
|
||||
continue
|
||||
|
||||
m = re.search('^\d+: (qg-\S+):', line)
|
||||
if m:
|
||||
qg_intf = m.group(1)
|
||||
continue
|
||||
|
||||
m = re.search('inet (\d+\.\d+\.\d+\.\d+/\d+)', line)
|
||||
if m:
|
||||
ip = m.group(1)
|
||||
|
||||
if not nm_dict[namespace].has_key('interfaces'):
|
||||
nm_dict[namespace] = {'interfaces': {}}
|
||||
|
||||
if qg_intf:
|
||||
nm_dict[namespace]['interfaces'][qg_intf] = ip
|
||||
elif qr_intf:
|
||||
nm_dict[namespace]['interfaces'][qr_intf] = ip
|
||||
else:
|
||||
continue
|
||||
|
||||
qr_intf = None
|
||||
qg_intf = None
|
||||
ip = None
|
||||
pass
|
||||
|
||||
|
||||
def ip_namespace_qdhcp_parser(parse_this):
|
||||
nm_dict = info['namespaces']
|
||||
|
||||
tap_intf = None
|
||||
ip = None
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line):
|
||||
continue
|
||||
m = re.search('^namespace: (\S+)', line)
|
||||
if m:
|
||||
namespace = m.group(1)
|
||||
continue
|
||||
|
||||
m = re.search('^\d+: (tap\S+):', line)
|
||||
if m:
|
||||
tap_intf = m.group(1)
|
||||
|
||||
m = re.search('inet (\d+\.\d+\.\d+\.\d+/\d+)', line)
|
||||
if m:
|
||||
ip = m.group(1)
|
||||
|
||||
if not nm_dict[namespace].has_key('interfaces'):
|
||||
nm_dict[namespace] = {'interfaces': {}}
|
||||
|
||||
if tap_intf:
|
||||
nm_dict[namespace]['interfaces'][tap_intf] = ip
|
||||
|
||||
tap_intf = None
|
||||
ip = None
|
||||
pass
|
||||
|
||||
|
||||
'''
|
||||
+--------------------------------------+----------+----------------------------------------------------------+
|
||||
| id | name | subnets |
|
||||
+--------------------------------------+----------+----------------------------------------------------------+
|
||||
| 0a355cf0-00d0-45e1-9a3a-9aca436510d5 | private2 | 8393a2da-09dd-46e8-a26f-caf9f12c48f5 10.0.3.0/24 |
|
||||
| 3b4ddfcb-49b8-46ae-9ecd-cb4f9b1830fc | public | 2dd78cb6-eb90-44ea-82b0-bbdb7316edb2 172.24.4.0/24 |
|
||||
| | | 304ce342-18fe-4b4a-aa49-f5c7e5e31b2a 2001:db8::/64 |
|
||||
| 4b7a42e8-cc16-411c-b932-989106c2f934 | private1 | cc580da4-0b61-4982-ae7b-d2d5c441b1d7 10.0.2.0/24 |
|
||||
| bfedebe8-c436-4056-8d12-1d2f7e62e8ec | private | 4deed2ad-e184-43a9-8cc7-4493aa07f78f fdfd:57f1:b2ba::/64 |
|
||||
| | | 8e2c5cfd-fbc1-4fe0-9f5e-f0b0dc070fb8 10.0.0.0/24 |
|
||||
+--------------------------------------+----------+----------------------------------------------------------+
|
||||
'''
|
||||
|
||||
|
||||
def neutron_net_list_parser(parse_this):
|
||||
networks = {}
|
||||
|
||||
ip = 'unknown'
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line) or re.search('subnets', line):
|
||||
continue
|
||||
|
||||
# Skip IPv6 for the time being
|
||||
m = re.search('^\| (\S+) \| (\S+)\s+\| \S+ (\S+)', line)
|
||||
if m:
|
||||
network_id = m.group(1)
|
||||
name = m.group(2)
|
||||
possible_ip = m.group(3)
|
||||
if re.search('\.', possible_ip):
|
||||
ip = possible_ip
|
||||
networks[network_id] = {'name': name,
|
||||
'ip': ip
|
||||
}
|
||||
m = re.search('^\|\s+\|\s+\| \S+ (\S+)', line)
|
||||
if m:
|
||||
possible_ip = m.group(1)
|
||||
if re.search('\.', possible_ip):
|
||||
ip = possible_ip
|
||||
networks[network_id] = {'name': name,
|
||||
'ip': ip
|
||||
}
|
||||
ip = 'Unknown'
|
||||
|
||||
info['networks'] = networks
|
||||
|
||||
# now add some more commands to get further information for
|
||||
# dhcp agents which run in different namespaces
|
||||
for network_id in networks.keys():
|
||||
# There is no dhcp agent run for public network
|
||||
if networks[network_id]['name'] == 'public':
|
||||
continue
|
||||
|
||||
namespace = 'qdhcp-' + network_id
|
||||
|
||||
cmd_key = 'netns_' + namespace
|
||||
cmd = {
|
||||
'cmd': 'echo namespace: ' + namespace + '; echo "sudo ip netns exec ' + namespace + ' ip a" > /tmp/don.bash; bash /tmp/don.bash',
|
||||
'help': 'Collect namespace info for dhcp-agent',
|
||||
'shell': True,
|
||||
'output': None,
|
||||
'order': 110,
|
||||
'parser': ip_namespace_qdhcp_parser,
|
||||
}
|
||||
add_new_command(commands, cmd_key, cmd)
|
||||
pass
|
||||
|
||||
|
||||
'''
|
||||
qdhcp-d5357ad8-df8b-4f19-8433-9db13304e4b2
|
||||
qrouter-ac41aab2-f9c3-4a06-8eef-f909ee1e6e50
|
||||
qdhcp-49be53de-33ed-480a-a06e-6e77c8f887dc
|
||||
qrouter-8c981cdb-c19f-47c1-8149-f85a506c486c
|
||||
qdhcp-82b0e328-4530-495e-a43f-238ef7a53d62
|
||||
'''
|
||||
|
||||
|
||||
def ip_netns_parser(parse_this):
|
||||
namespaces = {}
|
||||
|
||||
for line in parse_this:
|
||||
if re.search('^q', line):
|
||||
namespaces[line] = {}
|
||||
|
||||
info['namespaces'] = namespaces
|
||||
|
||||
|
||||
def dummy_parser(parse_this):
|
||||
debug('Dummy Parser :-)')
|
||||
pass
|
||||
|
||||
|
||||
def floating_ip_list_parser(parse_this):
|
||||
floating_ips = {}
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line) or re.search('Pool', line):
|
||||
continue
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
floating_ip = parts[2]
|
||||
vm_id = parts[3]
|
||||
pool = parts[5]
|
||||
# ignore floating ips which is not assigned to any vms
|
||||
if vm_id != '-':
|
||||
floating_ips.update(
|
||||
{vm_id: {'floating_ip': floating_ip, 'pool': pool}})
|
||||
info['floating_ips'] = floating_ips
|
||||
|
||||
|
||||
# static commands whose output have info that help us diagnose
|
||||
commands = {
|
||||
'nova_list':
|
||||
{
|
||||
'cmd': ['nova', 'list'],
|
||||
'help': 'Collect list of VMs from nova',
|
||||
'env': True,
|
||||
'output': None,
|
||||
'order': 1,
|
||||
'parser': nova_list_parser,
|
||||
},
|
||||
'cat_instance':
|
||||
{
|
||||
'cmd': 'cat /etc/libvirt/qemu/instance-*.xml | egrep -e "<uuid>" -e "nova:name" -e "source bridge"',
|
||||
'help': 'Collect some info from the launched VMs',
|
||||
'sudo': True,
|
||||
'shell': True,
|
||||
'output': None,
|
||||
'order': 2,
|
||||
'parser': cat_instance_parser,
|
||||
},
|
||||
'neutron_port_list':
|
||||
{
|
||||
'cmd': ['neutron', 'port-list'],
|
||||
'help': 'Collect neutron configured ports',
|
||||
'env': True,
|
||||
'output': None,
|
||||
'order': 3,
|
||||
'parser': neutron_port_list_parser,
|
||||
},
|
||||
'neutron_router_list':
|
||||
{
|
||||
'cmd': ['neutron', 'router-list'],
|
||||
'help': 'Collect neutron configured routers',
|
||||
'env': True,
|
||||
'output': None,
|
||||
'order': 4,
|
||||
'parser': neutron_router_list_parser,
|
||||
},
|
||||
'neutron_net_list':
|
||||
{
|
||||
'cmd': ['neutron', 'net-list'],
|
||||
'help': 'Collect neutron configured networks',
|
||||
'env': True,
|
||||
'output': None,
|
||||
'order': 5,
|
||||
'parser': neutron_net_list_parser,
|
||||
},
|
||||
'ip_netns':
|
||||
{
|
||||
'cmd': ['ip', 'netns'],
|
||||
'help': 'Collect network namespaces',
|
||||
'output': None,
|
||||
'order': 6,
|
||||
'parser': ip_netns_parser,
|
||||
},
|
||||
|
||||
'brctl_show':
|
||||
{
|
||||
'cmd': ['brctl', 'show'],
|
||||
'help': 'Collect information about bridges (linuxbridge) configured',
|
||||
'output': None,
|
||||
'order': 10,
|
||||
'parser': brctl_show_parser,
|
||||
},
|
||||
'ovs_appctl_fdb_show_br_ex':
|
||||
{
|
||||
'cmd': ['ovs-appctl', 'fdb/show', 'br-ex'],
|
||||
'help': 'Collect mac data base for bridge br-ex',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 20,
|
||||
'parser': None,
|
||||
},
|
||||
'ovs_appctl_fdb_show_br_int':
|
||||
{
|
||||
'cmd': ['ovs-appctl', 'fdb/show', 'br-int'],
|
||||
'help': 'Collect mac data base for ovs bridge br-int',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 21,
|
||||
'parser': None,
|
||||
},
|
||||
'ovs_appctl_fdb_show_br_tun':
|
||||
{
|
||||
'cmd': ['ovs-appctl', 'fdb/show', 'br-tun'],
|
||||
'help': 'Collect mac data base for ovs bridge br-tun',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 22,
|
||||
'parser': None,
|
||||
},
|
||||
'ovs_vsctl_show':
|
||||
{
|
||||
'cmd': ['ovs-vsctl', 'show'],
|
||||
'help': 'Collect ovs bridge info',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 30,
|
||||
'parser': ovs_vsctl_show_parser,
|
||||
},
|
||||
'ovs_ofctl_show_br_ex':
|
||||
{
|
||||
'cmd': ['ovs-ofctl', 'show', 'br-ex'],
|
||||
'help': 'Collect openflow information for ovs bridge br-ex',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 40,
|
||||
'parser': ovs_ofctl_show_br_ex_parser,
|
||||
},
|
||||
'ovs_ofctl_show_br_int':
|
||||
{
|
||||
'cmd': ['ovs-ofctl', 'show', 'br-int'],
|
||||
'help': 'Collect openflow information for ovs bridge br-int',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 41,
|
||||
'parser': ovs_ofctl_show_br_int_parser,
|
||||
},
|
||||
'ovs_ofctl_show_br_tun':
|
||||
{
|
||||
'cmd': ['ovs-ofctl', 'show', 'br-tun'],
|
||||
'help': 'Collect openflow information for ovs bridge br-tun',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 42,
|
||||
'parser': ovs_ofctl_show_br_tun_parser,
|
||||
},
|
||||
'ovs_ofctl_dump_flows_br_ex':
|
||||
{
|
||||
'cmd': ['ovs-ofctl', 'dump-flows', 'br-ex'],
|
||||
'help': 'Collect openflow flow table information for ovs bridge br-ex',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 50,
|
||||
'parser': None,
|
||||
},
|
||||
'ovs_ofctl_dump_flows_br_int':
|
||||
{
|
||||
'cmd': ['ovs-ofctl', 'dump-flows', 'br-int'],
|
||||
'help': 'Collect openflow flow table information for ovs bridge br-int',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 51,
|
||||
'parser': None,
|
||||
},
|
||||
'ovs_ofctl_dump_flows_br_tun':
|
||||
{
|
||||
'cmd': ['ovs-ofctl', 'dump-flows', 'br-tun'],
|
||||
'help': 'Collect openflow flow table information for ovs bridge br-tun',
|
||||
'sudo': True,
|
||||
'output': None,
|
||||
'order': 52,
|
||||
'parser': None,
|
||||
},
|
||||
'instance_floating_ip_list':
|
||||
{
|
||||
'cmd': ['nova', 'floating-ip-list'],
|
||||
'help': 'Collect floating ip information for instances',
|
||||
'env': True,
|
||||
'output': None,
|
||||
'order': 53,
|
||||
'parser': floating_ip_list_parser,
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
|
||||
def check_args():
|
||||
parser = argparse.ArgumentParser(description='Runs commands, collects, and parses output',
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug', help='Enable debugging',
|
||||
default=True, action='store_true')
|
||||
parser.add_argument('--info_file', dest='info_file',
|
||||
help='Info will be stored in JSON format in this file',
|
||||
default="don.json", type=str)
|
||||
args = parser.parse_args()
|
||||
|
||||
settings['debug'] = args.debug
|
||||
settings['info_file'] = args.info_file
|
||||
|
||||
|
||||
def all_commands_executed(commands):
|
||||
for cmd in commands.keys():
|
||||
if commands[cmd]['parser']:
|
||||
done = commands[cmd].get('done', False)
|
||||
if done is False:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def get_vm_info_from_compute(cmd):
|
||||
output = execute_cmd(['nova', 'hypervisor-list'],
|
||||
sudo=False, shell=False, env=myenv).split('\n')
|
||||
compute_list = get_hypervisor(output)
|
||||
vm_info = []
|
||||
compute_creds = get_vm_credentials()
|
||||
for node in compute_list:
|
||||
creds = compute_creds.get('hypervisor').get(
|
||||
node, compute_creds.get('hypervisor')['default'])
|
||||
ssh = connect_to_box(node, creds['username'], creds['password'])
|
||||
(stdin, out, err) = ssh.exec_command('sudo ' + cmd)
|
||||
vm_info.extend(out.read().splitlines())
|
||||
ssh.close()
|
||||
return vm_info
|
||||
|
||||
|
||||
def exec_on_remote(cmd):
|
||||
node_details = get_vm_credentials()
|
||||
creds = node_details.get('network')
|
||||
# print "sudo "+cmd
|
||||
ssh = connect_to_box(creds['hostname'], creds[
|
||||
'username'], creds['password'])
|
||||
(stdin, out, err) = ssh.exec_command(cmd)
|
||||
if len(err.read()):
|
||||
return []
|
||||
return out.read().splitlines()
|
||||
|
||||
|
||||
def get_hypervisor(parse_this):
|
||||
hypervisor = []
|
||||
for line in parse_this:
|
||||
if re.search('^\+', line) or re.search('^$', line) or re.search('Hypervisor hostname', line):
|
||||
continue
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
name = parts[2]
|
||||
hypervisor.append(name)
|
||||
return hypervisor
|
||||
|
||||
|
||||
def main():
|
||||
check_args()
|
||||
|
||||
iteration = 0
|
||||
# Parser of any specific command might add more commands to be executed.
|
||||
# Hence continue in a loop.
|
||||
while True:
|
||||
if (all_commands_executed(commands) or iteration >= 10):
|
||||
break
|
||||
iteration += 1
|
||||
status_update('Iteration: ' + str(iteration))
|
||||
|
||||
sorted_keys = sorted(commands.items(), key=lambda (k, v): v['order'])
|
||||
for (cmd, dontcare) in sorted_keys:
|
||||
# Only collect stuff for which we have written a parser
|
||||
if commands[cmd]['parser']:
|
||||
if commands[cmd].get('done', False):
|
||||
continue
|
||||
if commands[cmd].has_key('help'):
|
||||
status_update(commands[cmd]['help'])
|
||||
shell = commands[cmd].get('shell', False)
|
||||
env = None
|
||||
if commands[cmd].get('env', False):
|
||||
env = myenv
|
||||
sudo = commands[cmd].get('sudo', False)
|
||||
if deployment_type == 'multinode':
|
||||
# handling for network node
|
||||
if cmd.startswith('netns_'):
|
||||
commands[cmd]['output'] = exec_on_remote(
|
||||
commands[cmd]['cmd'])
|
||||
if cmd == 'cat_instance':
|
||||
commands[cmd]['output'] = get_vm_info_from_compute(commands[
|
||||
cmd]['cmd'])
|
||||
print commands[cmd]['output']
|
||||
else:
|
||||
commands[cmd]['output'] = execute_cmd(
|
||||
commands[cmd]['cmd'], sudo=sudo, shell=shell, env=env).split('\n')
|
||||
else:
|
||||
commands[cmd]['output'] = execute_cmd(
|
||||
commands[cmd]['cmd'], sudo=sudo, shell=shell, env=env).split('\n')
|
||||
commands[cmd]['parser'](commands[cmd]['output'])
|
||||
commands[cmd]['done'] = True
|
||||
|
||||
debug('============= COMMANDS =============')
|
||||
# debug(pprint.pformat(commands))
|
||||
status_update('Writing collected info into ' + settings['info_file'])
|
||||
dump_json(info, settings['info_file'])
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
295
openstack_dashboard/don/ovs/common.py
Normal file
@ -0,0 +1,295 @@
|
||||
# common.py: Common functions and data structures used by multiple modules.
|
||||
|
||||
import paramiko
|
||||
import sys
|
||||
import re
|
||||
import pprint
|
||||
import subprocess
|
||||
import yaml
|
||||
|
||||
# Program settings
|
||||
settings = {
|
||||
'debug': False,
|
||||
}
|
||||
|
||||
# Helper functions.
|
||||
|
||||
|
||||
def debug(msg):
|
||||
if settings['debug']:
|
||||
if not sys.stdout == sys.__stdout__:
|
||||
tmp = sys.stdout
|
||||
sys.stdout = sys.__stdout__
|
||||
print('DEBUG: ' + msg)
|
||||
sys.stdout = tmp
|
||||
else:
|
||||
print('DEBUG: ' + msg)
|
||||
|
||||
|
||||
def error(msg):
|
||||
if not sys.stdout == sys.__stdout__:
|
||||
tmp = sys.stdout
|
||||
sys.stdout = sys.__stdout__
|
||||
print('ERROR: ' + msg)
|
||||
sys.stdout = tmp
|
||||
else:
|
||||
print('ERROR: ' + msg)
|
||||
|
||||
|
||||
def warning(msg):
|
||||
if not sys.stdout == sys.__stdout__:
|
||||
tmp = sys.stdout
|
||||
sys.stdout = sys.__stdout__
|
||||
print('WARNING: ' + msg)
|
||||
sys.stdout = tmp
|
||||
else:
|
||||
print('WARNING: ' + msg)
|
||||
|
||||
|
||||
def status_update(msg):
|
||||
# storing in log file for interactive display on UI
|
||||
log = open('collector_log.txt', 'w')
|
||||
if not sys.stdout == sys.__stdout__:
|
||||
tmp = sys.stdout
|
||||
sys.stdout = sys.__stdout__
|
||||
print('STATUS: ' + msg)
|
||||
log.write('msg')
|
||||
sys.stdout = tmp
|
||||
else:
|
||||
print('STATUS: ' + msg)
|
||||
log.write(msg)
|
||||
|
||||
|
||||
def dump_json(json_info, json_filename):
|
||||
import json
|
||||
try:
|
||||
outfile = open(json_filename, "w")
|
||||
except IOError, e:
|
||||
print e
|
||||
print 'Couldn\'t open <%s>; Redirecting output to stdout' % json_filename
|
||||
outfile = sys.stdout
|
||||
|
||||
json.dump(json_info, outfile)
|
||||
outfile.flush()
|
||||
outfile.close()
|
||||
|
||||
|
||||
def load_json(json_filename):
|
||||
import json
|
||||
try:
|
||||
infile = open(json_filename, "r")
|
||||
except IOError, e:
|
||||
print e
|
||||
print 'Couldn\'t open <%s>; Error!' % json_filename
|
||||
return None
|
||||
|
||||
tmp = json.load(infile)
|
||||
infile.close()
|
||||
return tmp
|
||||
|
||||
|
||||
def connect_to_box(server, username, password, timeout=3):
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
try:
|
||||
ssh.connect(server, username=username,
|
||||
password=password, timeout=timeout)
|
||||
except:
|
||||
return None
|
||||
return ssh
|
||||
# def connect_to_box (server, username, password,timeout=3) :
|
||||
# pass
|
||||
|
||||
# this function i will modify to get data from a file instead of giving
|
||||
# command directly
|
||||
|
||||
|
||||
def ssh_cmd(ssh, cmd):
|
||||
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd)
|
||||
error = ssh_stderr.read()
|
||||
if len(error):
|
||||
print 'ERROR: ' + error
|
||||
output = ssh_stdout.read()
|
||||
ssh_stdout.flush()
|
||||
return output
|
||||
|
||||
# TODO (right now assumes subnet mask to be 24 bits long)
|
||||
|
||||
|
||||
def get_subnet(ip):
|
||||
subnet = '.'.join(ip.split('.')[:3])
|
||||
return subnet
|
||||
|
||||
|
||||
def get_router(namespace, info):
|
||||
routers = info.get('routers', None)
|
||||
if not routers:
|
||||
return 'Unknown'
|
||||
for router in routers.keys():
|
||||
if routers[router]['id'] in namespace:
|
||||
return router
|
||||
|
||||
return 'Unknown'
|
||||
|
||||
# TODO (guaranteed way of figuring out whether network is private or public)
|
||||
|
||||
|
||||
def is_network_public(ip, vm, info):
|
||||
vm_entry = info['vms'].get(vm)
|
||||
entry = vm_entry['interfaces'].get(ip, None)
|
||||
if not entry:
|
||||
error('Interface: ' + ip + ' does not exist!')
|
||||
return False
|
||||
if re.search('public', entry['network']):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def get_intf_ip(info, interface):
|
||||
intf = strip_interface(interface)
|
||||
return info['tap_to_ip'].get(intf, 'x.x.x.x')
|
||||
|
||||
|
||||
def ip_to_intf(info, ip):
|
||||
for intf, intf_ip in info['tap_to_ip'].iteritems():
|
||||
if intf_ip == ip:
|
||||
return intf
|
||||
return None
|
||||
|
||||
|
||||
def router_to_namespace(info, router):
|
||||
router_entry = info['routers'].get(router, None)
|
||||
if not router_entry:
|
||||
return None
|
||||
net_id = router_entry.get('id', None)
|
||||
if not net_id:
|
||||
return None
|
||||
return 'qrouter-' + net_id
|
||||
|
||||
|
||||
def intf_to_namespace(info, intf):
|
||||
nms_dict = info['namespaces']
|
||||
for nms in nms_dict.keys():
|
||||
if nms_dict[nms].has_key('interfaces'):
|
||||
if nms_dict[nms]['interfaces'].has_key(intf):
|
||||
return nms
|
||||
return None
|
||||
|
||||
|
||||
def get_ip_network(info, vm, ip):
|
||||
intf_entry = info['vms'][vm]['interfaces'].get(ip, None)
|
||||
if not intf_entry:
|
||||
return 'unknown'
|
||||
return intf_entry.get('network', 'unknown')
|
||||
|
||||
|
||||
def get_vlan_tag(info, interface):
|
||||
intf = strip_interface(interface)
|
||||
|
||||
intf = 'qvo' + intf
|
||||
br_int = info['bridges']['br-int']
|
||||
debug('Getting vlan tag for ' + intf)
|
||||
if br_int['ports'].has_key(intf):
|
||||
return br_int['ports'][intf].get('tag', '0')
|
||||
return '0'
|
||||
|
||||
|
||||
def strip_interface(intf):
|
||||
x = intf
|
||||
x = x.replace('tap', '')
|
||||
x = x.replace('qbr', '')
|
||||
x = x.replace('qvb', '')
|
||||
x = x.replace('qvo', '')
|
||||
return x
|
||||
|
||||
|
||||
def get_port_ovs_id_tag(info, vm, port_ip):
|
||||
for key, ip in info['tap_to_ip'].iteritems():
|
||||
if ip == port_ip:
|
||||
qvo = 'qvo' + key
|
||||
qvo_entry = info['bridges']['br-int']['ports'].get(qvo, None)
|
||||
if not qvo_entry:
|
||||
return None
|
||||
ovs_id = qvo_entry.get('id', None)
|
||||
ovs_tag = qvo_entry.get('tag', None)
|
||||
return (ovs_id, ovs_tag)
|
||||
return None
|
||||
|
||||
|
||||
def execute_cmd(cmd, sudo=False, shell=False, env=None):
|
||||
if sudo:
|
||||
if shell is False:
|
||||
mycmd = ['sudo'] + cmd
|
||||
else:
|
||||
mycmd = 'sudo ' + cmd
|
||||
else:
|
||||
mycmd = cmd
|
||||
|
||||
pprint.pprint(mycmd)
|
||||
return subprocess.check_output(mycmd,
|
||||
shell=shell,
|
||||
stderr=subprocess.STDOUT,
|
||||
env=env,
|
||||
universal_newlines=True).replace('\t', ' ')
|
||||
|
||||
|
||||
def get_instance_ips(objs):
|
||||
ip_list = []
|
||||
for line in objs:
|
||||
if re.search('^\+', line) or re.search('^$', line) or re.search('Networks', line):
|
||||
continue
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
# vm = parts[2]
|
||||
networks = parts[6].split(';')
|
||||
networks = [x.strip() for x in networks]
|
||||
for entry in networks:
|
||||
# excluding ipv6 ip
|
||||
if len(entry.split(',')) > 1:
|
||||
# network = entry.split('=')[0]
|
||||
ip = filter(lambda a: re.search("(\d+\.\d+\.\d+\.\d+)", a) is not None,
|
||||
entry.split('=')[1].split(','))[0].strip()
|
||||
ip_list.append(ip)
|
||||
else:
|
||||
ip_list.append(entry.split(',')[0].split('=')[1])
|
||||
return ip_list
|
||||
|
||||
|
||||
def get_router_names(objs):
|
||||
routers = []
|
||||
|
||||
for line in objs:
|
||||
if re.search('^\+', line) or re.search('^$', line) or re.search('external_gateway_info', line):
|
||||
continue
|
||||
parts = line.split('|')
|
||||
parts = [x.strip() for x in parts]
|
||||
|
||||
name = parts[2]
|
||||
routers.append(name)
|
||||
return routers
|
||||
|
||||
|
||||
def get_env(file_path):
|
||||
try:
|
||||
lines = open(file_path, 'r').read().splitlines()
|
||||
except IOError, e:
|
||||
print "%s :%s" % (e.args[1], file_path)
|
||||
raise
|
||||
env = {}
|
||||
for line in lines:
|
||||
if line.startswith('export'):
|
||||
m = re.search(r'export (.+)=(.+)', line)
|
||||
if m:
|
||||
key = m.group(1).replace('"', '')
|
||||
val = m.group(2).replace('"', '')
|
||||
env.update({key: val})
|
||||
return env
|
||||
|
||||
|
||||
def get_vm_credentials(config_file='credentials.yaml'):
|
||||
try:
|
||||
with open(config_file, 'r') as s:
|
||||
return yaml.safe_load(s)
|
||||
except IOError, e:
|
||||
print '%s :%s' % (e.args[1], config_file)
|
||||
raise
|
24
openstack_dashboard/don/ovs/credentials.yaml
Normal file
@ -0,0 +1,24 @@
|
||||
# provide VM credentials Ex: vm1,vm2 .. if no vms specified default values will be taken
|
||||
|
||||
default:
|
||||
username: cirros
|
||||
password: cubswin:)
|
||||
vm1:
|
||||
username: cirros
|
||||
password: cubswin:)
|
||||
vm2:
|
||||
username: cirros
|
||||
password: cubswin:)
|
||||
|
||||
hypervisor:
|
||||
default:
|
||||
username: ubuntu
|
||||
password: cisco123
|
||||
compute1:
|
||||
username:
|
||||
password:
|
||||
|
||||
network:
|
||||
hostname: 127.0.0.1
|
||||
username: ubuntu
|
||||
password: cisco123
|
1
openstack_dashboard/don/ovs/don.json
Normal file
@ -0,0 +1 @@
|
||||
{"bridges": {"br-tun": {"fail_mode": "secure", "ports": {"br-tun": {"mac": "6e:7a:19:13:c9:4e", "interfaces": {"br-tun": {"type": "internal"}}, "id": "LOCAL"}, "patch-int": {"mac": "42:49:d2:83:bc:8b", "interfaces": {"patch-int": {"type": "patch", "options": "peer=patch-tun"}}, "id": "1"}}}, "br-int": {"fail_mode": "secure", "ports": {"qr-8c1c0cb3-5e": {"mac": "00:00:00:00:00:00", "interfaces": {"qr-8c1c0cb3-5e": {"type": "internal"}}, "tag": "1", "id": "4"}, "qr-43b83157-3b": {"mac": "00:00:00:00:00:00", "interfaces": {"qr-43b83157-3b": {"type": "internal"}}, "tag": "2", "id": "8"}, "qr-a9ed186b-b6": {"mac": "00:00:00:00:00:00", "interfaces": {"qr-a9ed186b-b6": {"type": "internal"}}, "tag": "1", "id": "3"}, "qvo71ac5bef-7c": {"mac": "22:ef:c1:2f:74:b4", "interfaces": {"qvo71ac5bef-7c": {}}, "tag": "2", "id": "7"}, "qvo8aa60600-7b": {"mac": "6e:4a:ba:9e:41:fc", "interfaces": {"qvo8aa60600-7b": {}}, "tag": "2", "id": "6"}, "tap88750e1e-d1": {"mac": "00:00:00:00:00:00", "interfaces": {"tap88750e1e-d1": {"type": "internal"}}, "tag": "1", "id": "9"}, "tap59f90a3b-f5": {"mac": "42:e1:86:34:b2:89", "interfaces": {"tap59f90a3b-f5": {"type": "internal"}}, "id": "5"}, "patch-tun": {"mac": "46:85:0f:44:94:dd", "interfaces": {"patch-tun": {"type": "patch", "options": "peer=patch-int"}}, "id": "1"}, "br-int": {"mac": "f6:7f:12:2e:66:49", "interfaces": {"br-int": {"type": "internal"}}, "id": "LOCAL"}, "tap053da1b7-53": {"mac": "2e:e3:08:d3:e4:fa", "interfaces": {"tap053da1b7-53": {"type": "internal"}}, "id": "2"}, "tap1e1c73c9-35": {"mac": "00:00:00:00:00:00", "interfaces": {"tap1e1c73c9-35": {"type": "internal"}}, "tag": "2", "id": "10"}}}, "br-ex": {"ports": {"qg-757bf552-73": {"mac": "00:00:00:00:00:00", "interfaces": {"qg-757bf552-73": {"type": "internal"}}, "id": "2"}, "qg-26e738c4-f8": {"mac": "00:00:00:00:00:00", "interfaces": {"qg-26e738c4-f8": {"type": "internal"}}, "id": "1"}, "br-ex": {"mac": "62:ed:7e:21:23:08", "interfaces": {"br-ex": {"type": "internal"}}, "id": "LOCAL"}}}}, "routers": {"router1": {"network_id": "3f6dda86-0ae2-475d-a71c-a0d8d7233a0a", "ip_address": "172.24.4.3", "id": "90111551-6cfc-4be0-b1c2-ce8bffb7edf6"}}, "vms": {"vm2": {"tap_dev": ["tap71ac5bef-7c"], "interfaces": {"10.10.0.4": {"network": "private1"}}, "src_bridge": ["qbr71ac5bef-7c"], "uuid": "ddb4de16-4729-4732-a73b-557d75f28180"}, "vm1": {"tap_dev": ["tap8aa60600-7b"], "interfaces": {"10.10.0.3": {"network": "private1"}}, "src_bridge": ["qbr8aa60600-7b"], "uuid": "72973345-78b0-4886-8fe9-9e29aa9fba9f"}}, "brctl": {"qbr71ac5bef-7c": {"interfaces": ["qvb71ac5bef-7c", "tap71ac5bef-7c"]}, "qbr8aa60600-7b": {"interfaces": ["qvb8aa60600-7b"]}}, "namespaces": {"qrouter-5a5b1d7f-263e-4d7f-a508-60d359d68a01": {}, "qdhcp-25fe7626-552c-4040-b2b6-8050ff7590e0": {"interfaces": {"tap88750e1e-d1": "10.0.0.3/24"}}, "qrouter-90111551-6cfc-4be0-b1c2-ce8bffb7edf6": {"interfaces": {"qg-757bf552-73": "172.24.4.3/24", "qr-43b83157-3b": "10.10.0.1/24"}}, "qdhcp-f89297fc-3edf-47cf-9d3a-15d40639cb77": {"interfaces": {"tap1e1c73c9-35": "10.10.0.5/24"}}}, "networks": {"f89297fc-3edf-47cf-9d3a-15d40639cb77": {"ip": "10.10.0.0/24", "name": "private1"}, "3f6dda86-0ae2-475d-a71c-a0d8d7233a0a": {"ip": "172.24.4.0/24", "name": "public"}, "25fe7626-552c-4040-b2b6-8050ff7590e0": {"ip": "10.0.0.0/24", "name": "private"}}, "tap_to_ip": {"": "fdb4:816a:6faf:0:f816:3eff:feb1:fb45", "a9ed186b-b6": "10.0.0.1", "1e1c73c9-35": "10.10.0.5", "71ac5bef-7c": "10.10.0.4", "8aa60600-7b": "10.10.0.3", "26e738c4-f8": "172.24.4.2", "88750e1e-d1": "10.0.0.3", "43b83157-3b": "10.10.0.1", "8c1c0cb3-5e": "fdb4:816a:6faf::1", "757bf552-73": "172.24.4.3"}}
|
10
openstack_dashboard/don/ovs/forms.py
Normal file
@ -0,0 +1,10 @@
|
||||
from django import forms
|
||||
|
||||
|
||||
class PingForm(forms.Form):
|
||||
src_ip = forms.CharField(label='Source IP', widget=forms.Select(
|
||||
attrs={'class': 'form-control switchable'}, choices=[('', "")]))
|
||||
dst_ip = forms.CharField(label='Destination IP', widget=forms.Select(
|
||||
attrs={'class': 'form-control switchable'}, choices=[('', "")]))
|
||||
router = forms.CharField(label='Router', widget=forms.Select(
|
||||
attrs={'class': 'form-control switchable'}, choices=[('', "")]))
|
11
openstack_dashboard/don/ovs/load_json.py
Normal file
@ -0,0 +1,11 @@
|
||||
import pprint
|
||||
import sys
|
||||
|
||||
from common import load_json
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print ('Usage: ' + sys.argv[0] + ' <json file to display>')
|
||||
exit(1)
|
||||
|
||||
info = load_json(sys.argv[1])
|
||||
pprint.pprint(info)
|
176
openstack_dashboard/don/ovs/ovs.py
Normal file
@ -0,0 +1,176 @@
|
||||
#
|
||||
# ovs.py: Runs ovs-appctl command to check if A -> B flow is working fine.
|
||||
#
|
||||
#
|
||||
import re
|
||||
import argparse
|
||||
import json
|
||||
from common import debug, settings
|
||||
from common import execute_cmd
|
||||
|
||||
params = {}
|
||||
|
||||
output_dict = {
|
||||
'comment': None,
|
||||
'pass': None,
|
||||
'command_list': [],
|
||||
'errors': [],
|
||||
'debugs': [],
|
||||
}
|
||||
|
||||
# Learn a MAC on the dst port and then check if sending from the src port to
|
||||
# the learned MAC gives correct lookup
|
||||
|
||||
|
||||
def ovs_test(src_port_id, dst_port_id, tag, ovs_bridge):
|
||||
smac = 'AA:BB:CC:DD:EE:11'
|
||||
dmac = 'AA:BB:CC:DD:EE:22'
|
||||
cmd_dict = {}
|
||||
|
||||
# Step 0. Flush the fdb
|
||||
cmd = ''
|
||||
cmd += 'sudo ovs-appctl fdb/flush br-int'
|
||||
output = execute_cmd(cmd, shell=True).split('\n')
|
||||
cmd_dict['cmd'] = cmd
|
||||
cmd_dict['output'] = output
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
cmd_dict = {}
|
||||
|
||||
# Step 1. run command that will learn smac
|
||||
cmd = ''
|
||||
cmd += 'sudo ovs-appctl ofproto/trace %s in_port=%s' % (
|
||||
ovs_bridge, src_port_id)
|
||||
cmd += ',dl_src=' + smac + ',dl_dst=' + dmac + ' -generate'
|
||||
output = execute_cmd(cmd, shell=True).split('\n')
|
||||
cmd_dict['cmd'] = cmd
|
||||
cmd_dict['output'] = output
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
cmd_dict = {}
|
||||
|
||||
# Step 2. verify that the mac has been learnt
|
||||
cmd = ''
|
||||
cmd += 'sudo ovs-appctl fdb/show br-int'
|
||||
output = execute_cmd(cmd, shell=True).split('\n')
|
||||
cmd_dict['cmd'] = cmd
|
||||
cmd_dict['output'] = output
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
cmd_dict = {}
|
||||
|
||||
port = None
|
||||
for line in output:
|
||||
m = re.search('(\d)\s+(\d+)\s+(\S+)\s+\d+', line)
|
||||
if m:
|
||||
mac = m.group(3)
|
||||
if mac.lower() == smac.lower():
|
||||
port = m.group(1)
|
||||
vlan = m.group(2)
|
||||
debug(line)
|
||||
break
|
||||
if not port:
|
||||
output_dict['errors'].append(
|
||||
'%s not learnt on port %s' % (smac, src_port_id))
|
||||
output_dict['pass'] = False
|
||||
return False
|
||||
|
||||
if vlan != tag:
|
||||
output_dict['errors'].append(
|
||||
'%s learnt on vlan %s but should have been learnt on vlan %s on port %s' % (smac, vlan, tag, port))
|
||||
output_dict['pass'] = False
|
||||
return False
|
||||
output_dict['debugs'].append(
|
||||
'%s learnt on expected vlan %s on port %s' % (smac, vlan, port))
|
||||
|
||||
# Step 3. now do a lookup using the dst port id and dmac as the smac of
|
||||
# step 1.
|
||||
cmd = ''
|
||||
cmd += 'sudo ovs-appctl ofproto/trace %s in_port=%s' % (
|
||||
ovs_bridge, dst_port_id)
|
||||
cmd += ',dl_src=' + dmac + ',dl_dst=' + smac + ' -generate'
|
||||
output = execute_cmd(cmd, shell=True).split('\n')
|
||||
cmd_dict['cmd'] = cmd
|
||||
cmd_dict['output'] = output
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
cmd_dict = {}
|
||||
|
||||
forwarded = False
|
||||
egress_port = None
|
||||
for line in output:
|
||||
if re.search('forwarding to learned port', line):
|
||||
forwarded = True
|
||||
continue
|
||||
m = re.search('Datapath actions: (.*)', line)
|
||||
if m:
|
||||
egress_port = m.group(1)
|
||||
continue
|
||||
|
||||
result = True
|
||||
if not forwarded:
|
||||
output_dict['errors'].append('Packet for learnt mac not forwarded!')
|
||||
result = False
|
||||
else:
|
||||
output_dict['debugs'].append(
|
||||
'Packet for learnt mac forwarded properly')
|
||||
|
||||
if egress_port:
|
||||
if egress_port == src_port_id:
|
||||
output_dict['debugs'].append(
|
||||
'Packet forwarded to correct port %s' % egress_port)
|
||||
else:
|
||||
output_dict['errors'].append('Packet forwarded to incorrect port %s, expected %s' %
|
||||
(egress_port, src_port_id))
|
||||
result = False
|
||||
else:
|
||||
output_dict['errors'].append('No egress port assigned to packet! Expected %s' %
|
||||
src_port_id)
|
||||
result = False
|
||||
|
||||
output_dict['pass'] = result
|
||||
return result
|
||||
|
||||
|
||||
def check_args():
|
||||
global params
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description='OVS test', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug',
|
||||
help='Enable debugging', default=False, action='store_true')
|
||||
parser.add_argument('--src_port_id', dest='src_port_id',
|
||||
help='OVS src port id (required)', type=str, required=True)
|
||||
parser.add_argument('--dst_port_id', dest='dst_port_id',
|
||||
help='OVS dst port id (required)', type=str, required=True)
|
||||
parser.add_argument(
|
||||
'--tag', dest='tag', help='VLAN tag of port (required)', type=str, required=True)
|
||||
parser.add_argument('--ovs_bridge', dest='ovs_bridge',
|
||||
help='OVS bridge to be tested (required)', type=str, required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
settings['debug'] = args.debug
|
||||
params['src_port_id'] = args.src_port_id
|
||||
params['dst_port_id'] = args.dst_port_id
|
||||
params['tag'] = args.tag
|
||||
params['ovs_bridge'] = args.ovs_bridge
|
||||
|
||||
|
||||
def main():
|
||||
global output_dict
|
||||
|
||||
check_args()
|
||||
|
||||
src_port_id = params['src_port_id']
|
||||
dst_port_id = params['dst_port_id']
|
||||
tag = params['tag']
|
||||
ovs_bridge = params['ovs_bridge']
|
||||
|
||||
ovs_success = ovs_test(src_port_id, dst_port_id, tag, ovs_bridge)
|
||||
|
||||
output_dict[
|
||||
'comment'] = 'ovs %s port %s --> %s' % (ovs_bridge, src_port_id, dst_port_id)
|
||||
output_dict['pass'] = ovs_success
|
||||
|
||||
a = json.dumps(output_dict, sort_keys=True, indent=4)
|
||||
print a
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
12
openstack_dashboard/don/ovs/panel.py
Normal file
@ -0,0 +1,12 @@
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
import horizon
|
||||
from don import dashboard
|
||||
|
||||
|
||||
class ovs(horizon.Panel):
|
||||
name = _("OVS")
|
||||
slug = "ovs"
|
||||
|
||||
|
||||
dashboard.DonDashboard.register(ovs)
|
496
openstack_dashboard/don/ovs/path.py
Normal file
@ -0,0 +1,496 @@
|
||||
#
|
||||
# path.py: Figures out a path between two IP addresses and then traces it
|
||||
#
|
||||
# HOWTO:
|
||||
#
|
||||
import re
|
||||
import pprint
|
||||
import subprocess
|
||||
import argparse
|
||||
import os.path
|
||||
import signal
|
||||
import json
|
||||
import time
|
||||
from common import error, settings, debug, status_update
|
||||
from common import load_json, execute_cmd, dump_json
|
||||
from common import ip_to_intf, intf_to_namespace, router_to_namespace
|
||||
|
||||
COUNT = 10 # how many packets to be captured by tcpdump
|
||||
|
||||
|
||||
def get_port_info(info, port_ip):
|
||||
port_info = None
|
||||
for tap, ip in info['tap_to_ip'].iteritems():
|
||||
if ip == port_ip:
|
||||
port_info = {}
|
||||
port_info['ip'] = ip
|
||||
port_info['ports'] = {}
|
||||
port_info['ports']['tap'] = 'tap' + tap
|
||||
port_info['ports']['brctl'] = 'qbr' + tap
|
||||
port_info['ports']['qvb'] = 'qvb' + tap
|
||||
port_info['ports']['qvo'] = 'qvo' + tap
|
||||
|
||||
# also get the tag (used later to figure out where to run tcpdump)
|
||||
br_int = info['bridges'].get('br-int', None)
|
||||
if not br_int:
|
||||
error('No OVS integration bridge (br-int)! Cannot proceed')
|
||||
return None
|
||||
|
||||
tag = br_int['ports'][port_info['ports']['qvo']]['tag']
|
||||
port_info['tag'] = tag
|
||||
|
||||
break
|
||||
return port_info
|
||||
|
||||
|
||||
def qrouter_usable(qrouter, src_ip, dst_ip, username, passwd):
|
||||
status_update('Testing whether %s is reachable via qrouter %s (dst %s)' % (
|
||||
src_ip, qrouter, dst_ip))
|
||||
outfile = 'path.testping.txt'
|
||||
ping_process = launch_ping(
|
||||
src_ip, dst_ip, username, passwd, 2, 2, qrouter, outfile)
|
||||
status_update("Ping process %s" % (ping_process))
|
||||
time.sleep(5)
|
||||
|
||||
ping_pass = process_ping(outfile, src_ip, check_ssh_connectivity_only=True)
|
||||
|
||||
if ping_pass:
|
||||
status_update('IP %s is reachable via qrouter: %s' % (src_ip, qrouter))
|
||||
return True
|
||||
else:
|
||||
error('IP %s is reachable via qrouter: %s' % (src_ip, qrouter))
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def launch_ping(src_ip, dst_ip, username, passwd, count, timeout, qrouter, filename):
|
||||
cmd = 'sudo ip netns exec ' + str(qrouter)
|
||||
cmd += ' python ping.py --src_ip %s --dst_ip %s --username "%s" --passwd "%s" --count %d --timeout %d' % \
|
||||
(src_ip, dst_ip, username, passwd, count, timeout)
|
||||
cmd += ' > %s 2>&1' % filename
|
||||
|
||||
p = subprocess.Popen(cmd, shell=True)
|
||||
|
||||
return p
|
||||
|
||||
|
||||
def capture_network_packets(params, hop_list):
|
||||
global net_info
|
||||
|
||||
net_info = {
|
||||
'pids': [],
|
||||
'hops': hop_list,
|
||||
}
|
||||
|
||||
for hop in net_info['hops']:
|
||||
dev = hop['dev']
|
||||
nms = hop['nms']
|
||||
filename = 'net.tcpdump.%s.txt' % (dev)
|
||||
if os.path.isfile(filename):
|
||||
os.remove(filename)
|
||||
cmd = 'sudo ip netns exec %s ' % nms
|
||||
cmd += 'tcpdump -v icmp -i %s -c %d -l > %s 2>&1' % (
|
||||
dev, params['count'], filename)
|
||||
pid = subprocess.Popen(cmd, shell=True).pid
|
||||
net_info['pids'].append(pid)
|
||||
status_update(
|
||||
'net: tcpdump launched with pid %d for interface %s' % (pid, dev))
|
||||
pass
|
||||
|
||||
|
||||
def capture_packets(params, tag='src', src_tag=None):
|
||||
if tag == 'src':
|
||||
port_info = src_info
|
||||
elif tag == 'dst':
|
||||
port_info = dst_info
|
||||
else:
|
||||
error('tag has to be one of [src, dst]!')
|
||||
return
|
||||
|
||||
# XXX TODO
|
||||
# If src_tag and dst_tag are the same, then we need to monitor on just
|
||||
# br-int. Else, we will need to monitor on qr- ports (router ports)
|
||||
|
||||
port_info['pids'] = []
|
||||
for port in port_info['ports'].keys():
|
||||
intf = port_info['ports'][port]
|
||||
filename = '%s.tcpdump.%s.txt' % (tag, intf)
|
||||
if os.path.isfile(filename):
|
||||
os.remove(filename)
|
||||
cmd = 'sudo tcpdump -v icmp -i %s -c %d -l > %s 2>&1' % (
|
||||
intf, params['count'], filename)
|
||||
pid = subprocess.Popen(cmd, shell=True).pid
|
||||
port_info['pids'].append(pid)
|
||||
status_update(
|
||||
'%s: tcpdump launched with pid %d for interface %s' % (tag, pid, intf))
|
||||
|
||||
|
||||
def process_ping(filename, ip=None, check_ssh_connectivity_only=False):
|
||||
if not os.path.isfile(filename):
|
||||
return False
|
||||
|
||||
status_update('Trying to read ' + filename)
|
||||
with open(filename) as f:
|
||||
lines = f.readlines()
|
||||
pprint.pprint(lines)
|
||||
|
||||
info = load_json(filename)
|
||||
if not check_ssh_connectivity_only:
|
||||
return info.get('pass', False)
|
||||
|
||||
cmd_list = info['command_list']
|
||||
for cmd in cmd_list:
|
||||
m = re.search(
|
||||
'ssh (\S+) with provided username and passwd', cmd['cmd'])
|
||||
if m:
|
||||
if ip == m.group(1):
|
||||
return cmd['pass']
|
||||
return False
|
||||
|
||||
|
||||
def process_network_captures():
|
||||
global net_info
|
||||
|
||||
net_info['counts'] = {}
|
||||
net_info['pass'] = []
|
||||
net_info['fail'] = []
|
||||
|
||||
for hop in net_info['hops']:
|
||||
dev = hop['dev']
|
||||
|
||||
# Assume tcpdump did not capture anything
|
||||
net_info['counts'][dev] = 0
|
||||
net_info['fail'].append(dev)
|
||||
|
||||
filename = 'net.tcpdump.%s.txt' % (dev)
|
||||
if not os.path.isfile(filename):
|
||||
continue
|
||||
|
||||
with open(filename) as f:
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
m = re.search('(\d+)\s+packets captured', line)
|
||||
if m:
|
||||
net_info['counts'][dev] = int(m.group(1))
|
||||
net_info['pass'].append(dev)
|
||||
break
|
||||
'''
|
||||
cmd = 'grep captured ' + filename
|
||||
output = execute_cmd(cmd, shell=True).split('\n')[0]
|
||||
|
||||
m = re.search('(\d+)\s+packets captured', output)
|
||||
if m:
|
||||
net_info['counts'][dev] = int(m.group(1))
|
||||
net_info['pass'].append(dev)
|
||||
else:
|
||||
net_info['counts'][dev] = 0
|
||||
net_info['fail'].append(dev)
|
||||
'''
|
||||
|
||||
|
||||
def process_captures(tag='src'):
|
||||
if tag == 'src':
|
||||
port_info = src_info
|
||||
elif tag == 'dst':
|
||||
port_info = dst_info
|
||||
else:
|
||||
error('tag has to be one of [src, dst]!')
|
||||
return
|
||||
|
||||
port_info['counts'] = {}
|
||||
port_info['pass'] = []
|
||||
port_info['fail'] = []
|
||||
for key in port_info['ports'].keys():
|
||||
intf = port_info['ports'][key]
|
||||
|
||||
# Assume tcpdump did not capture anything
|
||||
port_info['counts'][key] = 0
|
||||
port_info['fail'].append(intf)
|
||||
filename = '%s.tcpdump.%s.txt' % (tag, intf)
|
||||
|
||||
if not os.path.isfile(filename):
|
||||
continue
|
||||
|
||||
with open(filename) as f:
|
||||
lines = f.readlines()
|
||||
for line in lines:
|
||||
m = re.search('(\d+)\s+packets captured', line)
|
||||
if m:
|
||||
port_info['counts'][key] = int(m.group(1))
|
||||
port_info['pass'].append(intf)
|
||||
break
|
||||
|
||||
'''
|
||||
cmd = 'grep captured ' + filename
|
||||
output = execute_cmd(cmd, shell=True).split('\n')[0]
|
||||
|
||||
m = re.search('(\d+)\s+packets captured', output)
|
||||
if m:
|
||||
port_info['counts'][key] = int(m.group(1))
|
||||
port_info['pass'].append(intf)
|
||||
else:
|
||||
port_info['counts'][key] = 0
|
||||
port_info['fail'].append(intf)
|
||||
'''
|
||||
|
||||
|
||||
def cleanup_processes(pid_list):
|
||||
pprint.pprint(pid_list)
|
||||
for pid in pid_list:
|
||||
try:
|
||||
os.kill(pid, signal.SIGKILL)
|
||||
status_update('Successfully killed pid: %d' % pid)
|
||||
except OSError:
|
||||
status_update('Process with pid: %d no longer exists' % pid)
|
||||
continue
|
||||
pass
|
||||
|
||||
|
||||
def check_args(params):
|
||||
|
||||
parser = argparse.ArgumentParser(description='Does ping test and captures packets along the expected path',
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug',
|
||||
help='Enable debugging', default=True,
|
||||
action='store_true')
|
||||
parser.add_argument('--src_ip', dest='src_ip',
|
||||
help='IP from where ping will be run (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--dst_ip', dest='dst_ip',
|
||||
help='IP to which ping will be run (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--username', dest='username',
|
||||
help='SSH login username (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--passwd', dest='passwd',
|
||||
help='SSH login passwd (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--json_file', dest='json_file',
|
||||
help='JSON file having info of installation (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--count', dest='count',
|
||||
help='ping count', type=int, default=COUNT)
|
||||
parser.add_argument('--timeout', dest='timeout',
|
||||
help='ping timeout (-W option of ping) in seconds',
|
||||
type=int, default=2)
|
||||
parser.add_argument('--router', dest='router',
|
||||
help='router to be used for the test', type=str,
|
||||
required=True)
|
||||
parser.add_argument('--path_file', dest='path_file',
|
||||
help="Test results are printed in this file in JSON format",
|
||||
type=str, default='path.json')
|
||||
args = parser.parse_args()
|
||||
|
||||
params['debug'] = args.debug
|
||||
params['src_ip'] = args.src_ip
|
||||
params['dst_ip'] = args.dst_ip
|
||||
params['username'] = args.username
|
||||
params['passwd'] = args.passwd
|
||||
params['count'] = args.count
|
||||
params['timeout'] = args.timeout
|
||||
params['json_file'] = args.json_file
|
||||
params['router'] = args.router
|
||||
params['path_file'] = args.path_file
|
||||
|
||||
|
||||
def path_same_network(params, nms_hops=None):
|
||||
src_ip = params['src_ip']
|
||||
dst_ip = params['dst_ip']
|
||||
json_file = params['json_file']
|
||||
username = params['username']
|
||||
passwd = params['passwd']
|
||||
count = params['count']
|
||||
timeout = params['timeout']
|
||||
qrouter = params['qrouter']
|
||||
router = params['router']
|
||||
|
||||
if qrouter_usable(qrouter, src_ip, dst_ip, username, passwd):
|
||||
outfile = 'path.ping.txt'
|
||||
ping_process = launch_ping(src_ip, dst_ip, username, passwd, count,
|
||||
timeout, qrouter, outfile)
|
||||
debug('Ping started with pid: %d' % ping_process.pid)
|
||||
|
||||
capture_packets(params, 'src')
|
||||
capture_packets(params, 'dst', src_tag=src_info['tag'])
|
||||
if src_info['tag'] != dst_info['tag']:
|
||||
capture_network_packets(params, nms_hops)
|
||||
|
||||
status_update('Waiting %s sec for tcpdump and ping processes to complete' % (
|
||||
params['count'] + 2))
|
||||
time.sleep(params['count'] + 4)
|
||||
|
||||
status_update('if processes have not stopped, lets kill them')
|
||||
cleanup_processes([ping_process.pid] +
|
||||
src_info['pids'] + dst_info['pids'])
|
||||
if net_info:
|
||||
cleanup_processes(net_info['pids'])
|
||||
|
||||
process_captures('src')
|
||||
process_captures('dst')
|
||||
if src_info['tag'] != dst_info['tag']:
|
||||
process_network_captures()
|
||||
ping_pass = process_ping(outfile)
|
||||
|
||||
debug(pprint.pformat(src_info))
|
||||
debug(pprint.pformat(dst_info))
|
||||
debug(pprint.pformat(net_info))
|
||||
info = {
|
||||
'src': src_ip,
|
||||
'dst': dst_ip,
|
||||
'src_info': src_info,
|
||||
'dst_info': dst_info,
|
||||
'net_info': net_info,
|
||||
'ping_pass': ping_pass,
|
||||
'error': '',
|
||||
}
|
||||
|
||||
status_update('Dumping results into %s in JSON format' %
|
||||
params['path_file'])
|
||||
dump_json(info, params['path_file'])
|
||||
|
||||
if params['plot']:
|
||||
cmd = 'python plot.py --info_file %s --highlight_file %s --combined_file static/ping' % (
|
||||
json_file, params['path_file'])
|
||||
status_update('Running ' + cmd)
|
||||
output = execute_cmd(cmd, shell=True).split('\n')
|
||||
debug(pprint.pformat(output))
|
||||
status_update('Done')
|
||||
else:
|
||||
err_msg = 'Cannot reach %s via router %s' % (src_ip, router)
|
||||
info = {
|
||||
'src': src_ip,
|
||||
'dst': dst_ip,
|
||||
'src_info': src_info,
|
||||
'dst_info': dst_info,
|
||||
'ping_pass': False,
|
||||
'error': err_msg
|
||||
}
|
||||
error(err_msg)
|
||||
status_update('Dumping results into %s in JSON format' %
|
||||
params['path_file'])
|
||||
dump_json(info, params['path_file'])
|
||||
status_update('Done')
|
||||
|
||||
|
||||
def run_remote_cmd(cmd):
|
||||
debug('Running: ' + cmd)
|
||||
return subprocess.check_output(cmd,
|
||||
shell=True,
|
||||
stderr=subprocess.STDOUT,
|
||||
universal_newlines=True).replace('\t', ' ')
|
||||
|
||||
|
||||
def get_next_hop(src_info, dst_info, qrouter, params):
|
||||
next_hop_list = []
|
||||
next_hop = None
|
||||
|
||||
username = params['username']
|
||||
passwd = params['passwd']
|
||||
src_ip = src_info['ip']
|
||||
dst_ip = dst_info['ip']
|
||||
|
||||
remote_cmd = ' ip route get %s' % dst_ip
|
||||
|
||||
cmd = 'sudo ip netns exec ' + qrouter
|
||||
cmd += ' python run_nms_cmd.py --host_ip %s --username "%s" --passwd "%s" --cmd "%s" ' % \
|
||||
(src_ip, username, passwd, remote_cmd)
|
||||
|
||||
output = run_remote_cmd(cmd)
|
||||
a = json.loads(output)
|
||||
|
||||
if not a['pass']:
|
||||
return []
|
||||
|
||||
json_file = params['json_file']
|
||||
info = load_json(json_file)
|
||||
|
||||
next_hop = {}
|
||||
for cmd in a['command_list']:
|
||||
if re.search('ip route get', cmd['cmd']):
|
||||
m = re.search('\S+\s+via\s+(\S+)', cmd['output'][0])
|
||||
if m:
|
||||
next_hop['ip'] = m.group(1)
|
||||
next_hop['dev'] = 'qr-' + ip_to_intf(info, next_hop['ip'])
|
||||
next_hop['nms'] = intf_to_namespace(info, next_hop['dev'])
|
||||
break
|
||||
|
||||
next_hop_list.append(next_hop)
|
||||
|
||||
cmd = 'sudo ip netns exec ' + next_hop['nms']
|
||||
cmd += remote_cmd
|
||||
|
||||
output = run_remote_cmd(cmd).split('\n')
|
||||
|
||||
prev_nms = next_hop['nms']
|
||||
next_hop = {}
|
||||
m = re.search('\S+\s+dev\s+(\S+)', output[0])
|
||||
if m:
|
||||
next_hop['dev'] = m.group(1)
|
||||
next_hop['nms'] = prev_nms
|
||||
|
||||
next_hop_list.append(next_hop)
|
||||
return next_hop_list
|
||||
|
||||
|
||||
def path(params):
|
||||
global src_info
|
||||
global dst_info
|
||||
global net_info
|
||||
|
||||
src_info = None
|
||||
dst_info = None
|
||||
net_info = None
|
||||
|
||||
settings['debug'] = True
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||
CUR_DIR = os.getcwd()
|
||||
if not re.search('/openstack_dashboard/don/', CUR_DIR):
|
||||
os.chdir(BASE_DIR + '/ovs')
|
||||
NEW_DIR = os.getcwd()
|
||||
debug(BASE_DIR + ':' + CUR_DIR + ':' + NEW_DIR)
|
||||
|
||||
src_ip = params['src_ip']
|
||||
dst_ip = params['dst_ip']
|
||||
json_file = params['json_file']
|
||||
router = params['router']
|
||||
|
||||
debug('Json_file: ' + json_file)
|
||||
|
||||
info = load_json(json_file)
|
||||
qrouter = router_to_namespace(info, router)
|
||||
params['qrouter'] = qrouter
|
||||
|
||||
src_info = get_port_info(info, src_ip)
|
||||
dst_info = get_port_info(info, dst_ip)
|
||||
|
||||
if src_info is None:
|
||||
return "Source ip not found on the network"
|
||||
if dst_info is None:
|
||||
return "Destination ip not found on the network"
|
||||
if qrouter is None:
|
||||
return "No such router information found on the network"
|
||||
|
||||
# src and dst are in the same network
|
||||
if src_info['tag'] == dst_info['tag']:
|
||||
path_same_network(params)
|
||||
else:
|
||||
status_update('The source and destination are in different networks')
|
||||
next_hop_list = get_next_hop(src_info, dst_info, qrouter, params)
|
||||
if len(next_hop_list) == 0:
|
||||
error('Could not find next hop list from %s to %s' %
|
||||
(src_ip, dst_ip))
|
||||
path_same_network(params, next_hop_list)
|
||||
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
params = {}
|
||||
check_args(params)
|
||||
|
||||
settings['debug'] = params['debug']
|
||||
path(params)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
122
openstack_dashboard/don/ovs/ping.py
Normal file
@ -0,0 +1,122 @@
|
||||
#
|
||||
# ping.py: Runs a ping test from src_ip to dst_ip. Also provides analysis if
|
||||
# things are not okay (TBD).
|
||||
#
|
||||
# HOWTO:
|
||||
#
|
||||
# For OpenStack, this program must be run from inside the correct namespace
|
||||
#
|
||||
# sudo ip netns exec qrouter-ac41aab2-f9c3-4a06-8eef-f909ee1e6e50 python ping.py 10.0.3.3 10.0.2.4 cirros "cubswin:)"
|
||||
#
|
||||
import re
|
||||
import argparse
|
||||
import json
|
||||
from common import connect_to_box, ssh_cmd
|
||||
from common import settings
|
||||
|
||||
|
||||
params = {}
|
||||
|
||||
output_dict = {
|
||||
'comment': None,
|
||||
'pass': None,
|
||||
'command_list': [],
|
||||
'errors': [],
|
||||
}
|
||||
|
||||
|
||||
def ping_test(src_ip, dst_ip, username, passwd, count, timeout):
|
||||
global output_dict
|
||||
result = False
|
||||
cmd_dict = {}
|
||||
try:
|
||||
ssh = connect_to_box(src_ip, username, passwd)
|
||||
cmd_dict['cmd'] = 'ssh %s with provided username and passwd' % src_ip
|
||||
if not ssh:
|
||||
cmd_dict['output'] = 'Could not ssh to ' + src_ip
|
||||
cmd_dict['pass'] = False
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
return False
|
||||
else:
|
||||
cmd_dict['pass'] = True
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
cmd_dict = {}
|
||||
cmd = 'ping -c %s -W %s %s' % (count, timeout, dst_ip)
|
||||
output = ssh_cmd(ssh, cmd).split('\n')
|
||||
cmd_dict['cmd'] = cmd
|
||||
cmd_dict['output'] = output
|
||||
for line in output:
|
||||
m = re.search('(\d+) packets transmitted, (\d+) packets received', line) or \
|
||||
re.search('(\d+) packets transmitted, (\d+) received',
|
||||
line) # also handles cirros vm ping response
|
||||
if m:
|
||||
tx_pkts = float(m.group(1))
|
||||
rx_pkts = float(m.group(2))
|
||||
if rx_pkts / tx_pkts >= 0.75:
|
||||
result = True
|
||||
break
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
print '\nkeyboardinterrupt caught (again)'
|
||||
print '\n...Program Stopped Manually!'
|
||||
raise
|
||||
cmd_dict['pass'] = result
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
return result
|
||||
|
||||
|
||||
def check_args():
|
||||
global params
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Ping test',
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug',
|
||||
help='Enable debugging',
|
||||
default=False, action='store_true')
|
||||
parser.add_argument('--src_ip', dest='src_ip',
|
||||
help='IP from where ping will be run (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--dst_ip', dest='dst_ip',
|
||||
help='IP to which ping will be run (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--username', dest='username',
|
||||
help='SSH login username (required)', type=str,
|
||||
required=True)
|
||||
parser.add_argument('--passwd', dest='passwd',
|
||||
help='SSH login passwd (required)',
|
||||
type=str, required=True)
|
||||
parser.add_argument('--count', dest='count',
|
||||
help='ping count', type=str, default='2')
|
||||
parser.add_argument('--timeout', dest='timeout',
|
||||
help='ping timeout (-W option of ping) in seconds',
|
||||
type=str, default='4')
|
||||
args = parser.parse_args()
|
||||
|
||||
settings['debug'] = args.debug
|
||||
params['src_ip'] = args.src_ip
|
||||
params['dst_ip'] = args.dst_ip
|
||||
params['username'] = args.username
|
||||
params['passwd'] = args.passwd
|
||||
params['count'] = args.count
|
||||
params['timeout'] = args.timeout
|
||||
|
||||
|
||||
def main():
|
||||
global output_dict
|
||||
|
||||
check_args()
|
||||
|
||||
src_ip = params['src_ip']
|
||||
dst_ip = params['dst_ip']
|
||||
ping_success = ping_test(src_ip, dst_ip,
|
||||
params['username'], params['passwd'],
|
||||
params['count'], params['timeout'])
|
||||
|
||||
output_dict['comment'] = 'PING %s to %s' % (src_ip, dst_ip)
|
||||
output_dict['pass'] = ping_success
|
||||
|
||||
a = json.dumps(output_dict, sort_keys=True, indent=4)
|
||||
print a
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
898
openstack_dashboard/don/ovs/plot.py
Normal file
@ -0,0 +1,898 @@
|
||||
#
|
||||
# plot.py: Generates an SVG file showing the networking internals of a compute node.
|
||||
#
|
||||
import pprint
|
||||
import subprocess
|
||||
import re
|
||||
import argparse
|
||||
import sys
|
||||
import random
|
||||
|
||||
from common import settings, debug, warning
|
||||
from common import load_json, get_subnet
|
||||
from common import get_vlan_tag, get_intf_ip, get_ip_network
|
||||
|
||||
|
||||
class DotGenerator:
|
||||
|
||||
def __init__(self, in_json_filename,
|
||||
compute_dot_file, compute_svg_file,
|
||||
network_dot_file, network_svg_file,
|
||||
combined_dot_file, combined_svg_file,
|
||||
highlight_file):
|
||||
self.json_filename = in_json_filename
|
||||
|
||||
self.compute_dot_file = compute_dot_file
|
||||
self.compute_svg_file = compute_svg_file
|
||||
self.network_dot_file = network_dot_file
|
||||
self.network_svg_file = network_svg_file
|
||||
self.combined_dot_file = combined_dot_file
|
||||
self.combined_svg_file = combined_svg_file
|
||||
self.highlight_file = highlight_file
|
||||
|
||||
settings['debug'] = True
|
||||
|
||||
self.highlight_info = None
|
||||
if highlight_file:
|
||||
self.highlight_info = load_json(self.highlight_file)
|
||||
if not self.highlight_info.get('net_info'):
|
||||
self.highlight_info['net_info'] = {'pass': [],
|
||||
'fail': []
|
||||
}
|
||||
|
||||
self.info = load_json(self.json_filename)
|
||||
self.outfile = None
|
||||
|
||||
self.colors = {
|
||||
'vms': '#ff9933',
|
||||
'tap': '#99ffff',
|
||||
'qbr': '#9966ff',
|
||||
'br-int': '#ff6666',
|
||||
'br-tun': '#ff6666',
|
||||
'qvb': '#ffcc00',
|
||||
'qvo': '#ffcc00',
|
||||
'tun': '#ffcc00',
|
||||
'int': '#ffcc00',
|
||||
'routers': '#ff9933',
|
||||
'vlan': [],
|
||||
'error': '#f00000',
|
||||
'edge': '#0066cc',
|
||||
'dontcare': '#909090',
|
||||
'pass': '#b2f379',
|
||||
'fail': '#f00000',
|
||||
'edge_pass': '#009900',
|
||||
'floating_ip': '#b3ffb3',
|
||||
}
|
||||
self.__set_vlan_color_table()
|
||||
pprint.pprint(self.info)
|
||||
|
||||
def __port_pass(self, port):
|
||||
if self.highlight_file:
|
||||
if port.replace('.', '') == self.highlight_info['src_info']['ip'].replace('.', '') or \
|
||||
port.replace('.', '') == self.highlight_info['dst_info']['ip'].replace('.', ''):
|
||||
return self.highlight_info['ping_pass']
|
||||
if self.highlight_info['src_info'].has_key('pass') and port in self.highlight_info['src_info']['pass'] or \
|
||||
self.highlight_info['dst_info'].has_key('pass') and port in self.highlight_info['dst_info']['pass'] or \
|
||||
self.highlight_info['net_info'].has_key('pass') and port in self.highlight_info['net_info']['pass']:
|
||||
return True
|
||||
return False
|
||||
|
||||
def __port_fail(self, port):
|
||||
if self.highlight_file:
|
||||
if port.replace('.', '') == self.highlight_info['src_info']['ip'].replace('.', '') or \
|
||||
port.replace('.', '') == self.highlight_info['dst_info']['ip'].replace('.', ''):
|
||||
return not self.highlight_info['ping_pass']
|
||||
if self.highlight_info['src_info'].has_key('fail') and port in self.highlight_info['src_info']['fail'] or \
|
||||
self.highlight_info['dst_info'].has_key('fail') and port in self.highlight_info['dst_info']['fail'] or \
|
||||
self.highlight_info['net_info'].has_key('fail') and port in self.highlight_info['net_info']['fail']:
|
||||
return True
|
||||
return False
|
||||
|
||||
def __get_edge_color(self, src_tag, dst_tag):
|
||||
if not self.highlight_file:
|
||||
return self.__get_color('edge')
|
||||
|
||||
sport = src_tag
|
||||
dport = dst_tag
|
||||
m = re.search('\S+:(\S+)', src_tag)
|
||||
if m:
|
||||
sport = m.group(1)
|
||||
|
||||
m = re.search('\S+:(\S+)', dst_tag)
|
||||
if m:
|
||||
dport = m.group(1)
|
||||
|
||||
spass = self.__port_pass(sport)
|
||||
dpass = self.__port_pass(dport)
|
||||
|
||||
sfail = self.__port_fail(sport)
|
||||
dfail = self.__port_fail(dport)
|
||||
|
||||
debug('%s (p%d f%d) -> %s (p%d f%d)' % (sport, spass, sfail, dport,
|
||||
dpass, dfail))
|
||||
|
||||
if spass or dpass:
|
||||
return self.colors['edge_pass']
|
||||
if sfail and dfail:
|
||||
return self.colors['fail']
|
||||
|
||||
return self.colors['dontcare']
|
||||
|
||||
def __get_color(self, tag):
|
||||
if self.highlight_file:
|
||||
return self.colors['dontcare']
|
||||
else:
|
||||
return self.colors[tag]
|
||||
|
||||
def __hsv_to_rgb(self, h, s, v):
|
||||
h_i = int((h * 6))
|
||||
f = h * 6 - h_i
|
||||
p = v * (1 - s)
|
||||
q = v * (1 - f * s)
|
||||
t = v * (1 - (1 - f) * s)
|
||||
|
||||
if h_i == 0:
|
||||
r, g, b = v, t, p
|
||||
if h_i == 1:
|
||||
r, g, b = q, v, p
|
||||
if h_i == 2:
|
||||
r, g, b = p, v, t
|
||||
if h_i == 3:
|
||||
r, g, b = p, q, v
|
||||
if h_i == 4:
|
||||
r, g, b = t, p, v
|
||||
if h_i == 5:
|
||||
r, g, b = v, p, q
|
||||
|
||||
return [r * 256, g * 256, b * 256]
|
||||
|
||||
def __set_vlan_color_table(self):
|
||||
i = 20
|
||||
random.seed(1)
|
||||
while i > 0:
|
||||
colors = self.__hsv_to_rgb(random.random(), 0.5, 0.95)
|
||||
colors = [hex(int(x)).split('x')[1] for x in colors]
|
||||
colors = ''.join(x for x in colors)
|
||||
self.colors['vlan'].append('#' + colors)
|
||||
i -= 1
|
||||
debug(pprint.pformat(self.colors['vlan']))
|
||||
|
||||
# port becomes relevant only if highlight_file is specified.
|
||||
def __get_vlan_color(self, tag, port='dummy'):
|
||||
if self.highlight_file:
|
||||
if self.__port_pass(port):
|
||||
return self.colors['pass']
|
||||
elif self.__port_fail(port):
|
||||
return self.colors['fail']
|
||||
else:
|
||||
return self.colors['dontcare']
|
||||
else:
|
||||
total_colors = len(self.colors['vlan'])
|
||||
return self.colors['vlan'][int(tag) % total_colors]
|
||||
|
||||
def __get_total_vm_port_count(self):
|
||||
port_count = 0
|
||||
for vm in self.info['vms'].keys():
|
||||
port_count += len(self.info['vms'][vm]['src_bridge'])
|
||||
return port_count
|
||||
|
||||
# TODO XXX needs some work to handle different subnet mask length. LPM needs
|
||||
# to be implemented!
|
||||
def __get_network_id(self, ip):
|
||||
networks = self.info['networks']
|
||||
subnet = get_subnet(ip)
|
||||
|
||||
for net in networks.keys():
|
||||
if re.search(subnet, networks[net]['ip']):
|
||||
return net
|
||||
return None
|
||||
|
||||
def __get_network_name(self, ip):
|
||||
network_id = self.__get_network_id(ip)
|
||||
return self.info['networks'][network_id]['name']
|
||||
|
||||
def __get_tap_interface(self, namespace, qr_intf):
|
||||
namespaces = self.info['namespaces']
|
||||
ip = namespaces[namespace]['interfaces'][qr_intf]
|
||||
network_id = self.__get_network_id(ip)
|
||||
if not network_id:
|
||||
return 'No TAP! 1'
|
||||
qdhcp = 'qdhcp-' + network_id
|
||||
if not namespaces.has_key(qdhcp):
|
||||
return 'No TAP! 2'
|
||||
for intf in namespaces[qdhcp]['interfaces'].keys():
|
||||
return (qdhcp, intf)
|
||||
pass
|
||||
|
||||
def __get_router_port_count(self, router, port_type='qr'):
|
||||
port_count = 0
|
||||
router_id = self.info['routers'][router]['id']
|
||||
qrouter = 'qrouter-' + router_id
|
||||
|
||||
namespaces = self.info['namespaces']
|
||||
for nms in namespaces.keys():
|
||||
if re.search('^' + qrouter, nms):
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^' + port_type, intf):
|
||||
port_count += 1
|
||||
return port_count
|
||||
|
||||
def __get_total_port_count(self, port_type='qr'):
|
||||
port_count = 0
|
||||
for router in self.info['routers'].keys():
|
||||
port_count += self.__get_router_port_count(router, port_type)
|
||||
|
||||
return port_count
|
||||
|
||||
def __get_total_dhcp_port_count(self):
|
||||
port_count = 0
|
||||
namespaces = self.info['namespaces']
|
||||
|
||||
for nms in namespaces.keys():
|
||||
if re.search('^qdhcp-', nms):
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^tap', intf):
|
||||
port_count += 1
|
||||
return port_count
|
||||
|
||||
def __html_row_open(self):
|
||||
print '<TR>'
|
||||
|
||||
def __html_row_close(self):
|
||||
print '</TR>'
|
||||
|
||||
def __html_row(self, name, rspan, cspan, color, tag=None):
|
||||
# tags do not allow "-" (dash) in DOT language. Convert to "_"
|
||||
# (underscore)
|
||||
if tag:
|
||||
print '<TD ROWSPAN="%d" COLSPAN="%d" BGCOLOR="%s" PORT="%s">%s</TD>' % (rspan, cspan, color, tag.replace('-', '_'), name)
|
||||
else:
|
||||
print '<TD ROWSPAN="%d" COLSPAN="%d" BGCOLOR="%s">%s</TD>' % (rspan, cspan, color, name)
|
||||
pass
|
||||
|
||||
def __html_edge(selft, src_tag, dst_tag, color, penwidth="4", style=None):
|
||||
src_tag = src_tag.replace('-', '_')
|
||||
dst_tag = dst_tag.replace('-', '_')
|
||||
if not style:
|
||||
print '%s:s -> %s:n [color = "%s", penwidth = "%s"]' % (src_tag,
|
||||
dst_tag,
|
||||
color,
|
||||
penwidth)
|
||||
else:
|
||||
print '%s:s -> %s:n [color = "%s", penwidth = "%s", style="%s"]' % (src_tag,
|
||||
dst_tag,
|
||||
color,
|
||||
penwidth,
|
||||
style)
|
||||
|
||||
def __digraph_open(self, tag):
|
||||
msg = 'digraph DON_' + tag + ' {' + \
|
||||
'''
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
'''
|
||||
print msg
|
||||
|
||||
def __digraph_close(self):
|
||||
msg = '\n}\n'
|
||||
print msg
|
||||
|
||||
def __cluster_name(self, tag, col_span, color="white"):
|
||||
self.__html_row_open()
|
||||
port = tag.replace(' ', '').replace('-', '_')
|
||||
print '<TD COLSPAN="%d" BORDER="0" BGCOLOR="%s" PORT="%s">%s</TD>' % (col_span, color, port, tag)
|
||||
self.__html_row_close()
|
||||
|
||||
def __cluster_open_plain(self, tag, label=None):
|
||||
print 'subgraph cluster_%s {' % (tag)
|
||||
print 'style=filled'
|
||||
if label:
|
||||
print 'label="%s"' % (label)
|
||||
|
||||
def __cluster_close_plain(self):
|
||||
print '}\n'
|
||||
|
||||
def __cluster_open(self, tag, color="white"):
|
||||
print 'subgraph cluster_%s {' % (tag)
|
||||
print '%s [ shape = plaintext, label = <' % (tag)
|
||||
print '<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="%s">' % (color)
|
||||
pass
|
||||
|
||||
def __cluster_close(self):
|
||||
print '</TABLE>>];\n'
|
||||
print '}\n'
|
||||
pass
|
||||
|
||||
def __plot_title_edges(self, tag):
|
||||
if tag == 'compute':
|
||||
src_tag = 'ComputeNode'
|
||||
dst_tag = 'VMs'
|
||||
else:
|
||||
src_tag = 'NetworkNode'
|
||||
dst_tag = 'br_ex'
|
||||
self.__html_edge(src_tag, dst_tag,
|
||||
self.__get_color('edge'), style="invis")
|
||||
|
||||
def __plot_vms(self):
|
||||
col_span = self.__get_total_vm_port_count()
|
||||
row_span = 1
|
||||
self.__cluster_open('VMs')
|
||||
self.__cluster_name('VMs', col_span)
|
||||
|
||||
# Plot each VM at a time
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
col_span = len(self.info['vms'][vm]['src_bridge'])
|
||||
if self.info['floating_ips'].get(self.info['vms'][vm]['uuid']):
|
||||
col_span = col_span + 1
|
||||
self.__html_row(vm, row_span, col_span, self.__get_color('vms'))
|
||||
self.__html_row_close()
|
||||
|
||||
# Plot the networks for each port
|
||||
self.__html_row_open()
|
||||
col_span = 1
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
floating_ip_info = self.info['floating_ips'].get(
|
||||
self.info['vms'][vm]['uuid'])
|
||||
if floating_ip_info:
|
||||
network = floating_ip_info.get('pool')
|
||||
self.__html_row('Floating -' + network, row_span,
|
||||
col_span, self.colors['floating_ip'])
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
tag = get_vlan_tag(self.info, bridge)
|
||||
ip = get_intf_ip(self.info, bridge)
|
||||
network = get_ip_network(self.info, vm, ip)
|
||||
color = self.__get_vlan_color(tag)
|
||||
if re.search('unknown', network):
|
||||
color = self.__get_color('error')
|
||||
self.__html_row(network, row_span, col_span, color)
|
||||
self.__html_row_close()
|
||||
|
||||
# Plot the IPs for each port
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
floating_ip_info = self.info['floating_ips'].get(
|
||||
self.info['vms'][vm]['uuid'])
|
||||
if floating_ip_info:
|
||||
ip = floating_ip_info.get('floating_ip')
|
||||
self.__html_row(ip, row_span, col_span, self.colors[
|
||||
'floating_ip'], ip.replace('.', ''))
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
tag = get_vlan_tag(self.info, bridge)
|
||||
ip = get_intf_ip(self.info, bridge)
|
||||
color = self.__get_vlan_color(tag, ip)
|
||||
if re.search('x.x.x.x', ip):
|
||||
color = self.__get_color('error')
|
||||
self.__html_row(ip, row_span, col_span,
|
||||
color, ip.replace('.', ''))
|
||||
self.__html_row_close()
|
||||
|
||||
self.__cluster_close()
|
||||
pass
|
||||
|
||||
def __plot_linux_bridge(self):
|
||||
row_span = 1
|
||||
col_span = self.__get_total_vm_port_count()
|
||||
self.__cluster_open('LinuxBridge')
|
||||
self.__cluster_name('Linux Bridge', col_span)
|
||||
|
||||
# There must be one linuxbridge entity per VM port.
|
||||
col_span = 1
|
||||
# First, the tap devices
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
if self.info['brctl'].has_key(bridge):
|
||||
for dev in self.info['brctl'][bridge]['interfaces']:
|
||||
if re.search('^tap', dev):
|
||||
tag = get_vlan_tag(self.info, bridge)
|
||||
self.__html_row(dev, row_span, col_span,
|
||||
self.__get_vlan_color(tag, dev), dev)
|
||||
break
|
||||
self.__html_row_close()
|
||||
|
||||
# Second, the linuxbridges
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
if self.info['brctl'].has_key(bridge):
|
||||
tag = get_vlan_tag(self.info, bridge)
|
||||
self.__html_row(bridge, row_span, col_span,
|
||||
self.__get_vlan_color(tag, bridge), bridge)
|
||||
self.__html_row_close()
|
||||
|
||||
# Third, the qvb (one part of eth-pair) devices
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
if self.info['brctl'].has_key(bridge):
|
||||
for dev in self.info['brctl'][bridge]['interfaces']:
|
||||
if re.search('^qvb', dev):
|
||||
tag = get_vlan_tag(self.info, bridge)
|
||||
self.__html_row(dev, row_span, col_span,
|
||||
self.__get_vlan_color(tag, dev), dev)
|
||||
break
|
||||
self.__html_row_close()
|
||||
self.__cluster_close()
|
||||
pass
|
||||
|
||||
def __plot_br_int_compute(self):
|
||||
br_int = self.info['bridges']['br-int']
|
||||
row_span = 1
|
||||
col_span = self.__get_total_vm_port_count()
|
||||
|
||||
self.__cluster_open('compute_br_int')
|
||||
self.__cluster_name('OVS br_int', col_span)
|
||||
|
||||
# The qvo (pairs with qvb part in linuxbridge) devices
|
||||
col_span = 1
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
qvo_port = bridge.replace('qbr', 'qvo')
|
||||
if br_int['ports'].has_key(qvo_port):
|
||||
port_id = '[' + br_int['ports'][qvo_port]['id'] + '] '
|
||||
tag = br_int['ports'][qvo_port]['tag']
|
||||
self.__html_row(port_id + qvo_port, row_span, col_span,
|
||||
self.__get_vlan_color(tag, qvo_port), qvo_port)
|
||||
self.__html_row_close()
|
||||
|
||||
# The vlan tags for each of the devices
|
||||
col_span = 1
|
||||
self.__html_row_open()
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
qvo_port = bridge.replace('qbr', 'qvo')
|
||||
if br_int['ports'].has_key(qvo_port):
|
||||
tag = br_int['ports'][qvo_port]['tag']
|
||||
self.__html_row('VLAN tag:' + tag, row_span, col_span,
|
||||
self.__get_vlan_color(tag), qvo_port + 'tag_' + tag)
|
||||
self.__html_row_close()
|
||||
|
||||
col_span = self.__get_total_vm_port_count()
|
||||
# Display the patch-tun port
|
||||
self.__html_row_open()
|
||||
tun_port = 'patch-tun'
|
||||
if br_int['ports'].has_key(tun_port):
|
||||
port_id = '[' + br_int['ports'][tun_port]['id'] + '] '
|
||||
self.__html_row(port_id + tun_port, row_span, col_span,
|
||||
self.__get_color('tun'), tun_port)
|
||||
else:
|
||||
self.__html_row(tun_port, row_span, col_span,
|
||||
self.__get_color('error'), tun_port)
|
||||
self.__html_row_close()
|
||||
|
||||
self.__cluster_close()
|
||||
pass
|
||||
|
||||
# TODO
|
||||
def __plot_br_ex_to_br_int(self):
|
||||
namespaces = self.info['namespaces']
|
||||
|
||||
for nms in namespaces.keys():
|
||||
if not re.search('^qrouter-', nms):
|
||||
continue
|
||||
if not namespaces[nms].has_key('interfaces'):
|
||||
warning('namespace %s does not have any interface' % nms)
|
||||
continue
|
||||
qg_intf = None
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^qg-', intf):
|
||||
qg_intf = intf
|
||||
break
|
||||
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^qr-', intf):
|
||||
src_tag = 'br_ex:' + qg_intf
|
||||
dst_tag = 'network_br_int:' + intf
|
||||
self.__html_edge(src_tag, dst_tag,
|
||||
self.__get_color('edge'))
|
||||
pass
|
||||
|
||||
def __plot_br_ex_network(self):
|
||||
routers = self.info['routers']
|
||||
namespaces = self.info['namespaces']
|
||||
br_ex = self.info['bridges']['br-ex']
|
||||
|
||||
row_span = 1
|
||||
max_col_span = self.__get_total_port_count(port_type='qg')
|
||||
|
||||
self.__cluster_open('br_ex')
|
||||
self.__cluster_name('OVS br_ex', max_col_span)
|
||||
|
||||
# Display the router name associated with each qg port
|
||||
self.__html_row_open()
|
||||
for router in sorted(routers.keys()):
|
||||
col_span = self.__get_router_port_count(router, port_type='qg')
|
||||
self.__html_row(router, row_span, col_span,
|
||||
self.__get_color('routers'), router)
|
||||
self.__html_row_close()
|
||||
|
||||
# Display the ips for each qg port
|
||||
self.__html_row_open()
|
||||
for router in sorted(routers.keys()):
|
||||
col_span = self.__get_router_port_count(router, port_type='qg')
|
||||
qrouter = 'qrouter-' + routers[router]['id']
|
||||
for nms in namespaces.keys():
|
||||
if re.search('^' + qrouter, nms):
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^qg-', intf):
|
||||
ip = namespaces[nms]['interfaces'][intf]
|
||||
self.__html_row(ip, row_span, col_span,
|
||||
self.__get_color('routers'), ip)
|
||||
self.__html_row_close()
|
||||
|
||||
# For each router, print the qg- interfaces
|
||||
self.__html_row_open()
|
||||
for router in sorted(routers.keys()):
|
||||
col_span = self.__get_router_port_count(router, port_type='qg')
|
||||
qrouter = 'qrouter-' + routers[router]['id']
|
||||
for nms in namespaces.keys():
|
||||
if re.search('^' + qrouter, nms):
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^qg-', intf):
|
||||
port_id = '[' + br_ex['ports'][intf]['id'] + '] '
|
||||
self.__html_row(port_id + intf, row_span, col_span,
|
||||
self.__get_color('routers'), intf)
|
||||
self.__html_row_close()
|
||||
|
||||
self.__cluster_close()
|
||||
|
||||
def __plot_br_int_network(self):
|
||||
routers = self.info['routers']
|
||||
namespaces = self.info['namespaces']
|
||||
br_int = self.info['bridges']['br-int']
|
||||
|
||||
row_span = 1
|
||||
# max_col_span = self.__get_total_port_count(port_type='qr') + \
|
||||
# self.__get_total_dhcp_port_count()
|
||||
max_col_span = self.__get_total_port_count(port_type='qr') * 2
|
||||
col_span = max_col_span
|
||||
|
||||
self.__cluster_open('network_br_int')
|
||||
self.__cluster_name('OVS br_int', col_span)
|
||||
|
||||
# For each router, print the qr- and tap (dhcp) interfaces
|
||||
temp_info = []
|
||||
col_span = 1
|
||||
self.__html_row_open()
|
||||
for router in sorted(routers.keys()):
|
||||
qrouter = 'qrouter-' + routers[router]['id']
|
||||
for nms in namespaces.keys():
|
||||
if re.search('^' + qrouter, nms):
|
||||
for intf in namespaces[nms]['interfaces'].keys():
|
||||
if re.search('^qr-', intf):
|
||||
tag = br_int['ports'][intf]['tag']
|
||||
port_id = '[' + br_int['ports'][intf]['id'] + '] '
|
||||
color = self.__get_vlan_color(tag, intf)
|
||||
self.__html_row(
|
||||
port_id + intf, row_span, col_span, color, intf)
|
||||
# now plot the corresponding tap interface
|
||||
(tap_nms, tap) = self.__get_tap_interface(nms, intf)
|
||||
tag = br_int['ports'][tap]['tag']
|
||||
color = self.__get_vlan_color(tag, tap)
|
||||
port_id = '[' + br_int['ports'][tap]['id'] + '] '
|
||||
self.__html_row(
|
||||
port_id + tap, row_span, col_span, color, tap)
|
||||
|
||||
a = {
|
||||
'qr_intf': intf,
|
||||
'tap_intf': tap,
|
||||
'qr_ip': namespaces[nms]['interfaces'][intf],
|
||||
'tap_ip': namespaces[tap_nms]['interfaces'][tap],
|
||||
}
|
||||
temp_info.append(a)
|
||||
self.__html_row_close()
|
||||
|
||||
# The vlan tags for each of the qr- and tap ports
|
||||
col_span = 1
|
||||
self.__html_row_open()
|
||||
for entry in temp_info:
|
||||
qr_intf = entry['qr_intf']
|
||||
tap_intf = entry['tap_intf']
|
||||
|
||||
tag = br_int['ports'][qr_intf]['tag']
|
||||
self.__html_row('VLAN tag:' + tag, row_span, col_span,
|
||||
self.__get_vlan_color(tag), qr_intf + 'tag_' + tag)
|
||||
|
||||
tag = br_int['ports'][tap_intf]['tag']
|
||||
self.__html_row('VLAN tag:' + tag, row_span, col_span,
|
||||
self.__get_vlan_color(tag), tap_intf + 'tag_' + tag)
|
||||
|
||||
self.__html_row_close()
|
||||
|
||||
# Display the ips with each of the qr- and tap ports
|
||||
self.__html_row_open()
|
||||
for entry in temp_info:
|
||||
qr_intf = entry['qr_intf']
|
||||
qr_ip = entry['qr_ip']
|
||||
tap_intf = entry['tap_intf']
|
||||
tap_ip = entry['tap_ip']
|
||||
|
||||
tag = br_int['ports'][qr_intf]['tag']
|
||||
self.__html_row(qr_ip, row_span, col_span,
|
||||
self.__get_vlan_color(tag),
|
||||
qr_intf + qr_ip)
|
||||
|
||||
tag = br_int['ports'][tap_intf]['tag']
|
||||
self.__html_row(tap_ip, row_span, col_span,
|
||||
self.__get_vlan_color(tag),
|
||||
tap_intf + tap_ip)
|
||||
|
||||
self.__html_row_close()
|
||||
|
||||
# The network names (private1, private2, etc.)
|
||||
col_span = 2
|
||||
self.__html_row_open()
|
||||
for entry in temp_info:
|
||||
network_name = self.__get_network_name(entry['qr_ip'])
|
||||
tag = br_int['ports'][entry['qr_intf']]['tag']
|
||||
self.__html_row(network_name, row_span, col_span,
|
||||
self.__get_vlan_color(tag), network_name)
|
||||
self.__html_row_close()
|
||||
|
||||
# The routers in the system
|
||||
self.__html_row_open()
|
||||
for router in sorted(self.info['routers'].keys()):
|
||||
# For each qr port that is also a tap port (for dhcp)
|
||||
col_span = self.__get_router_port_count(router, port_type='qr') * 2
|
||||
self.__html_row(router, row_span, col_span,
|
||||
self.__get_color('routers'), router)
|
||||
self.__html_row_close()
|
||||
|
||||
# Display the patch-tun port
|
||||
self.__html_row_open()
|
||||
tun_port = 'patch-tun'
|
||||
debug('max_col_span 2: ' + str(max_col_span))
|
||||
if br_int['ports'].has_key(tun_port):
|
||||
port_id = '[' + br_int['ports'][tun_port]['id'] + '] '
|
||||
self.__html_row(port_id + tun_port, row_span, max_col_span,
|
||||
self.__get_color('tun'), tun_port)
|
||||
else:
|
||||
self.__html_row(tun_port, row_span, max_col_span,
|
||||
self.__get_color('error'), tun_port)
|
||||
self.__html_row_close()
|
||||
|
||||
self.__cluster_close()
|
||||
|
||||
def __plot_br_tun(self, tag):
|
||||
br_tun = self.info['bridges']['br-tun']
|
||||
row_span = 1
|
||||
col_span = self.__get_total_vm_port_count()
|
||||
self.__cluster_open(tag + '_br_tun')
|
||||
self.__cluster_name('OVS br_tun', col_span)
|
||||
|
||||
# Display the patch-int port
|
||||
col_span = self.__get_total_vm_port_count()
|
||||
self.__html_row_open()
|
||||
int_port = 'patch-int'
|
||||
if br_tun['ports'].has_key(int_port):
|
||||
port_id = '[' + br_tun['ports'][int_port]['id'] + '] '
|
||||
self.__html_row(port_id + int_port, row_span,
|
||||
col_span, self.__get_color('int'), int_port)
|
||||
else:
|
||||
self.__html_row(int_port, row_span, col_span,
|
||||
self.__get_color('error'), int_port)
|
||||
self.__html_row_close()
|
||||
|
||||
self.__cluster_close()
|
||||
|
||||
def __plot_vms_to_linuxbridge(self):
|
||||
brctl = self.info['brctl']
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
ip = get_intf_ip(self.info, bridge)
|
||||
if brctl.has_key(bridge):
|
||||
for dev in brctl[bridge]['interfaces']:
|
||||
if re.search('^tap', dev):
|
||||
src_tag = 'VMs:' + ip.replace('.', '')
|
||||
dst_tag = 'LinuxBridge:' + dev
|
||||
color = self.__get_edge_color(src_tag, dst_tag)
|
||||
self.__html_edge(src_tag, dst_tag, color)
|
||||
break
|
||||
pass
|
||||
|
||||
def __plot_linuxbridge_to_br_int(self):
|
||||
brctl = self.info['brctl']
|
||||
br_int = self.info['bridges']['br-int']
|
||||
|
||||
for vm in sorted(self.info['vms'].keys()):
|
||||
for bridge in sorted(self.info['vms'][vm]['src_bridge']):
|
||||
if brctl.has_key(bridge):
|
||||
for dev in brctl[bridge]['interfaces']:
|
||||
if re.search('^qvb', dev):
|
||||
qvo_port = bridge.replace('qbr', 'qvo')
|
||||
if br_int['ports'].has_key(qvo_port):
|
||||
src_tag = 'LinuxBridge:' + dev
|
||||
dst_tag = 'compute_br_int:' + qvo_port
|
||||
color = self.__get_edge_color(src_tag, dst_tag)
|
||||
self.__html_edge(src_tag, dst_tag, color)
|
||||
break
|
||||
pass
|
||||
|
||||
def __plot_br_int_to_br_tun(self, tag):
|
||||
br_int = self.info['bridges']['br-int']['ports']
|
||||
br_tun = self.info['bridges']['br-tun']['ports']
|
||||
|
||||
tun_port = 'patch-tun'
|
||||
int_port = 'patch-int'
|
||||
if br_int.has_key(tun_port) and br_tun.has_key(int_port):
|
||||
tun_peer = br_int[tun_port]['interfaces'][
|
||||
tun_port].get('options', None)
|
||||
int_peer = br_tun[int_port]['interfaces'][
|
||||
int_port].get('options', None)
|
||||
if tun_peer and int_peer:
|
||||
if re.search('peer=' + int_port, tun_peer) and \
|
||||
re.search('peer=' + tun_port, int_peer):
|
||||
src_tag = tag + '_br_int:' + tun_port
|
||||
dst_tag = tag + '_br_tun:' + int_port
|
||||
self.__html_edge(src_tag, dst_tag,
|
||||
self.__get_color('edge'))
|
||||
return
|
||||
pass
|
||||
|
||||
def plot_combined(self):
|
||||
self.outfile = open(self.combined_dot_file, 'w')
|
||||
sys.stdout = self.outfile
|
||||
|
||||
tag = 'DON'
|
||||
self.__digraph_open(tag)
|
||||
|
||||
self.__cluster_open_plain('DONComputeNode')
|
||||
self.plot_compute_node()
|
||||
self.__cluster_close_plain()
|
||||
|
||||
self.__cluster_open_plain('DONNetworkNode')
|
||||
self.plot_network_node()
|
||||
self.__cluster_close_plain()
|
||||
|
||||
self.__digraph_close()
|
||||
|
||||
self.outfile.close()
|
||||
sys.stdout = sys.__stdout__
|
||||
|
||||
def plot_compute_node(self):
|
||||
tag = 'compute'
|
||||
redirected = False
|
||||
if sys.stdout == sys.__stdout__:
|
||||
self.outfile = open(self.compute_dot_file, "w")
|
||||
sys.stdout = self.outfile
|
||||
redirected = True
|
||||
self.__digraph_open(tag)
|
||||
|
||||
# Title
|
||||
self.__cluster_open('ComputeNode', 'red')
|
||||
self.__cluster_name('Compute Node', 1, 'yellow')
|
||||
self.__cluster_close()
|
||||
|
||||
# Plot nodes
|
||||
self.__cluster_open_plain('Nova')
|
||||
self.__plot_vms()
|
||||
self.__plot_linux_bridge()
|
||||
self.__cluster_close_plain()
|
||||
|
||||
self.__cluster_open_plain('OVS')
|
||||
self.__plot_br_int_compute()
|
||||
self.__plot_br_tun(tag)
|
||||
self.__cluster_close_plain()
|
||||
|
||||
# Plot edges
|
||||
self.__plot_title_edges(tag)
|
||||
self.__plot_vms_to_linuxbridge()
|
||||
self.__plot_linuxbridge_to_br_int()
|
||||
self.__plot_br_int_to_br_tun(tag)
|
||||
|
||||
if redirected:
|
||||
self.__digraph_close()
|
||||
self.outfile.close()
|
||||
sys.stdout = sys.__stdout__
|
||||
|
||||
def generate_compute_svg(self):
|
||||
cmd = ['/usr/bin/dot', '-Tsvg', self.compute_dot_file,
|
||||
'-o', self.compute_svg_file]
|
||||
debug(pprint.pformat(cmd))
|
||||
subprocess.call(cmd)
|
||||
debug('Done generating compute SVG')
|
||||
|
||||
def plot_network_node(self):
|
||||
tag = 'network'
|
||||
redirected = False
|
||||
if sys.stdout == sys.__stdout__:
|
||||
self.outfile = open(self.network_dot_file, "w")
|
||||
sys.stdout = self.outfile
|
||||
redirected = True
|
||||
self.__digraph_open(tag)
|
||||
|
||||
self.__cluster_open('NetworkNode', 'red')
|
||||
self.__cluster_name('Network Node', 1, 'yellow')
|
||||
self.__cluster_close()
|
||||
|
||||
# Plot nodes
|
||||
self.__cluster_open_plain('OVS')
|
||||
self.__plot_br_ex_network()
|
||||
self.__plot_br_int_network()
|
||||
self.__plot_br_tun(tag)
|
||||
self.__cluster_close_plain()
|
||||
|
||||
# Plot edges
|
||||
self.__plot_title_edges(tag)
|
||||
self.__plot_br_int_to_br_tun(tag)
|
||||
self.__plot_br_ex_to_br_int()
|
||||
|
||||
if redirected:
|
||||
self.__digraph_close()
|
||||
self.outfile.close()
|
||||
sys.stdout = sys.__stdout__
|
||||
|
||||
def generate_network_svg(self):
|
||||
cmd = ['/usr/bin/dot', '-Tsvg', self.network_dot_file,
|
||||
'-o', self.network_svg_file]
|
||||
debug(pprint.pformat(cmd))
|
||||
subprocess.call(cmd)
|
||||
debug('Done generating network SVG')
|
||||
|
||||
def generate_combined_svg(self):
|
||||
cmd = ['/usr/bin/dot', '-Tsvg', self.combined_dot_file,
|
||||
'-o', self.combined_svg_file]
|
||||
debug(pprint.pformat(cmd))
|
||||
subprocess.call(cmd)
|
||||
debug('Done generating network SVG')
|
||||
|
||||
|
||||
def check_args():
|
||||
parser = argparse.ArgumentParser(description='Plot the compute node network internals',
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug',
|
||||
help='Enable debugging', default=True, action='store_true')
|
||||
parser.add_argument('--info_file', dest='info_file',
|
||||
help='Info is read in JSON format in this file', default="don.json", type=str)
|
||||
parser.add_argument('--compute_file', dest='compute_file',
|
||||
help='[compute_file].dot and [compute_file].svg will be generated for compute node', default="compute", type=str)
|
||||
parser.add_argument('--network_file', dest='network_file',
|
||||
help='[network_file].dot and [network_file].svg will be generated for network node', default="network", type=str)
|
||||
parser.add_argument('--combined_file', dest='combined_file',
|
||||
help='[combined_file].dot and [combined_file].svg will be generated', default="don", type=str)
|
||||
parser.add_argument('--highlight_file', dest='highlight_file',
|
||||
help='pass and fail node are specified in this file', default=None, type=str)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
settings['debug'] = args.debug
|
||||
settings['info_file'] = args.info_file
|
||||
settings['compute_dot_file'] = args.compute_file + '.dot'
|
||||
settings['compute_svg_file'] = args.compute_file + '.svg'
|
||||
settings['network_dot_file'] = args.network_file + '.dot'
|
||||
settings['network_svg_file'] = args.network_file + '.svg'
|
||||
settings['combined_dot_file'] = args.combined_file + '.dot'
|
||||
settings['combined_svg_file'] = args.combined_file + '.svg'
|
||||
settings['highlight_file'] = args.highlight_file
|
||||
|
||||
|
||||
def main():
|
||||
check_args()
|
||||
plotter = DotGenerator(settings['info_file'],
|
||||
settings['compute_dot_file'],
|
||||
settings['compute_svg_file'],
|
||||
settings['network_dot_file'],
|
||||
settings['network_svg_file'],
|
||||
settings['combined_dot_file'],
|
||||
settings['combined_svg_file'],
|
||||
settings['highlight_file'],
|
||||
)
|
||||
if not settings['highlight_file']:
|
||||
plotter.plot_compute_node()
|
||||
plotter.generate_compute_svg()
|
||||
|
||||
plotter.plot_network_node()
|
||||
plotter.generate_network_svg()
|
||||
|
||||
plotter.plot_combined()
|
||||
plotter.generate_combined_svg()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
92
openstack_dashboard/don/ovs/run_nms_cmd.py
Normal file
@ -0,0 +1,92 @@
|
||||
#
|
||||
# run_nms_cmd.py: This needs to be run from inside appropriate namespace
|
||||
#
|
||||
# sudo ip netns exec qrouter-ac41aab2-f9c3-4a06-8eef-f909ee1e6e50 python # run_nms_cmd.py "command"
|
||||
#
|
||||
import argparse
|
||||
import json
|
||||
from common import connect_to_box, ssh_cmd
|
||||
from common import settings
|
||||
|
||||
|
||||
params = {}
|
||||
|
||||
output_dict = {
|
||||
'comment': None,
|
||||
'pass': None,
|
||||
'command_list': [],
|
||||
'errors': [],
|
||||
}
|
||||
|
||||
|
||||
def run_nms_cmd(args):
|
||||
global output_dict
|
||||
host_ip = args['host_ip']
|
||||
username = args['username']
|
||||
passwd = args['passwd']
|
||||
cmd_to_run = args['cmd']
|
||||
|
||||
result = True
|
||||
cmd_dict = {}
|
||||
try:
|
||||
ssh = connect_to_box(host_ip, username, passwd)
|
||||
cmd_dict['cmd'] = 'ssh %s with provided username and passwd' % host_ip
|
||||
if not ssh:
|
||||
cmd_dict['output'] = 'Could not ssh to ' + host_ip
|
||||
cmd_dict['pass'] = False
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
return False
|
||||
else:
|
||||
cmd_dict['pass'] = True
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
cmd_dict = {}
|
||||
cmd = cmd_to_run
|
||||
output = ssh_cmd(ssh, cmd).split('\n')
|
||||
cmd_dict['cmd'] = cmd
|
||||
cmd_dict['output'] = output
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
print '\nkeyboardinterrupt caught (again)'
|
||||
print '\n...Program Stopped Manually!'
|
||||
result = False
|
||||
raise
|
||||
cmd_dict['pass'] = result
|
||||
output_dict['command_list'].append(cmd_dict)
|
||||
return result
|
||||
|
||||
|
||||
def check_args():
|
||||
global params
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Run command from inside nms', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||
parser.add_argument('--debug', dest='debug',
|
||||
help='Enable debugging', default=False, action='store_true')
|
||||
parser.add_argument('--host_ip', dest='host_ip',
|
||||
help='IP where the command will be run', type=str, required=True)
|
||||
parser.add_argument('--username', dest='username',
|
||||
help='SSH login username (required)', type=str, required=True)
|
||||
parser.add_argument('--passwd', dest='passwd',
|
||||
help='SSH login passwd (required)', type=str, required=True)
|
||||
parser.add_argument('--cmd', dest='cmd',
|
||||
help='cmd to be run', type=str, required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
settings['debug'] = args.debug
|
||||
params['host_ip'] = args.host_ip
|
||||
params['username'] = args.username
|
||||
params['passwd'] = args.passwd
|
||||
params['cmd'] = args.cmd
|
||||
|
||||
|
||||
def main():
|
||||
global output_dict
|
||||
|
||||
check_args()
|
||||
|
||||
output_dict['pass'] = run_nms_cmd(params)
|
||||
|
||||
a = json.dumps(output_dict, sort_keys=True, indent=4)
|
||||
print a
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
152
openstack_dashboard/don/ovs/static/CollapsibleLists.js
Normal file
@ -0,0 +1,152 @@
|
||||
/*
|
||||
|
||||
CollapsibleLists.js
|
||||
|
||||
An object allowing lists to dynamically expand and collapse
|
||||
|
||||
Created by Stephen Morley - http://code.stephenmorley.org/ - and released under
|
||||
the terms of the CC0 1.0 Universal legal code:
|
||||
|
||||
http://creativecommons.org/publicdomain/zero/1.0/legalcode
|
||||
|
||||
*/
|
||||
|
||||
// create the CollapsibleLists object
|
||||
var CollapsibleLists =
|
||||
new function(){
|
||||
|
||||
/* Makes all lists with the class 'collapsibleList' collapsible. The
|
||||
* parameter is:
|
||||
*
|
||||
* doNotRecurse - true if sub-lists should not be made collapsible
|
||||
*/
|
||||
this.apply = function(doNotRecurse){
|
||||
|
||||
// loop over the unordered lists
|
||||
var uls = document.getElementsByTagName('ul');
|
||||
for (var index = 0; index < uls.length; index ++){
|
||||
|
||||
// check whether this list should be made collapsible
|
||||
if (uls[index].className.match(/(^| )collapsibleList( |$)/)){
|
||||
|
||||
// make this list collapsible
|
||||
this.applyTo(uls[index], true);
|
||||
|
||||
// check whether sub-lists should also be made collapsible
|
||||
if (!doNotRecurse){
|
||||
|
||||
// add the collapsibleList class to the sub-lists
|
||||
var subUls = uls[index].getElementsByTagName('ul');
|
||||
for (var subIndex = 0; subIndex < subUls.length; subIndex ++){
|
||||
subUls[subIndex].className += ' collapsibleList';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* Makes the specified list collapsible. The parameters are:
|
||||
*
|
||||
* node - the list element
|
||||
* doNotRecurse - true if sub-lists should not be made collapsible
|
||||
*/
|
||||
this.applyTo = function(node, doNotRecurse){
|
||||
|
||||
// loop over the list items within this node
|
||||
var lis = node.getElementsByTagName('li');
|
||||
for (var index = 0; index < lis.length; index ++){
|
||||
|
||||
// check whether this list item should be collapsible
|
||||
if (!doNotRecurse || node == lis[index].parentNode){
|
||||
|
||||
// prevent text from being selected unintentionally
|
||||
if (lis[index].addEventListener){
|
||||
lis[index].addEventListener(
|
||||
'mousedown', function (e){ e.preventDefault(); }, false);
|
||||
}else{
|
||||
lis[index].attachEvent(
|
||||
'onselectstart', function(){ event.returnValue = false; });
|
||||
}
|
||||
|
||||
// add the click listener
|
||||
if (lis[index].addEventListener){
|
||||
lis[index].addEventListener(
|
||||
'click', createClickListener(lis[index]), false);
|
||||
}else{
|
||||
lis[index].attachEvent(
|
||||
'onclick', createClickListener(lis[index]));
|
||||
}
|
||||
|
||||
// close the unordered lists within this list item
|
||||
toggle(lis[index]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* Returns a function that toggles the display status of any unordered
|
||||
* list elements within the specified node. The parameter is:
|
||||
*
|
||||
* node - the node containing the unordered list elements
|
||||
*/
|
||||
function createClickListener(node){
|
||||
|
||||
// return the function
|
||||
return function(e){
|
||||
|
||||
// ensure the event object is defined
|
||||
if (!e) e = window.event;
|
||||
|
||||
// find the list item containing the target of the event
|
||||
var li = (e.target ? e.target : e.srcElement);
|
||||
while (li.nodeName != 'LI') li = li.parentNode;
|
||||
|
||||
// toggle the state of the node if it was the target of the event
|
||||
if (li == node) toggle(node);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/* Opens or closes the unordered list elements directly within the
|
||||
* specified node. The parameter is:
|
||||
*
|
||||
* node - the node containing the unordered list elements
|
||||
*/
|
||||
function toggle(node){
|
||||
|
||||
// determine whether to open or close the unordered lists
|
||||
var open = node.className.match(/(^| )collapsibleListClosed( |$)/);
|
||||
|
||||
// loop over the unordered list elements with the node
|
||||
var uls = node.getElementsByTagName('ul');
|
||||
for (var index = 0; index < uls.length; index ++){
|
||||
|
||||
// find the parent list item of this unordered list
|
||||
var li = uls[index];
|
||||
while (li.nodeName != 'LI') li = li.parentNode;
|
||||
|
||||
// style the unordered list if it is directly within this node
|
||||
if (li == node) uls[index].style.display = (open ? 'block' : 'none');
|
||||
|
||||
}
|
||||
|
||||
// remove the current class from the node
|
||||
node.className =
|
||||
node.className.replace(
|
||||
/(^| )collapsibleList(Open|Closed)( |$)/, '');
|
||||
|
||||
// if the node contains unordered lists, set its class
|
||||
if (uls.length > 0){
|
||||
node.className += ' collapsibleList' + (open ? 'Open' : 'Closed');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}();
|
BIN
openstack_dashboard/don/ovs/static/button-closed.png
Normal file
After Width: | Height: | Size: 256 B |
BIN
openstack_dashboard/don/ovs/static/button-open.png
Normal file
After Width: | Height: | Size: 240 B |
BIN
openstack_dashboard/don/ovs/static/button.png
Normal file
After Width: | Height: | Size: 230 B |
21
openstack_dashboard/don/ovs/static/compute.dot
Normal file
@ -0,0 +1,21 @@
|
||||
digraph DON_compute {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
111
openstack_dashboard/don/ovs/static/compute.svg
Normal file
@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_compute Pages: 1 -->
|
||||
<svg width="365pt" height="620pt"
|
||||
viewBox="0.00 0.00 365.00 620.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 616)">
|
||||
<title>DON_compute</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-616 361,-616 361,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="none" stroke="black" points="204,-548 204,-604 324,-604 324,-548 204,-548"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="87,-344 87,-500 349,-500 349,-344 87,-344"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="187,-352 187,-492 341,-492 341,-352 187,-352"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="95,-396 95,-448 179,-448 179,-396 95,-396"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-304 266,-304 266,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-156 16,-296 258,-296 258,-156 16,-156"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="81,-16 81,-100 193,-100 193,-16 81,-16"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="220,-560 220,-592 308,-592 308,-560 220,-560"/>
|
||||
<polygon fill="yellow" stroke="none" points="225,-565 225,-587 303,-587 303,-565 225,-565"/>
|
||||
<text text-anchor="start" x="230.5" y="-573.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="203,-364 203,-480 325,-480 325,-364 203,-364"/>
|
||||
<polygon fill="white" stroke="none" points="208,-453 208,-475 320,-475 320,-453 208,-453"/>
|
||||
<text text-anchor="start" x="253.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="208,-425 208,-448 262,-448 262,-425 208,-425"/>
|
||||
<polygon fill="none" stroke="black" points="208,-425 208,-448 262,-448 262,-425 208,-425"/>
|
||||
<text text-anchor="start" x="225.5" y="-434" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="267,-425 267,-448 320,-448 320,-425 267,-425"/>
|
||||
<polygon fill="none" stroke="black" points="267,-425 267,-448 320,-448 320,-425 267,-425"/>
|
||||
<text text-anchor="start" x="284" y="-434" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="208,-397 208,-420 262,-420 262,-397 208,-397"/>
|
||||
<polygon fill="none" stroke="black" points="208,-397 208,-420 262,-420 262,-397 208,-397"/>
|
||||
<text text-anchor="start" x="217.5" y="-406" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="267,-397 267,-420 320,-420 320,-397 267,-397"/>
|
||||
<polygon fill="none" stroke="black" points="267,-397 267,-420 320,-420 320,-397 267,-397"/>
|
||||
<text text-anchor="start" x="276" y="-406" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="208,-369 208,-392 262,-392 262,-369 208,-369"/>
|
||||
<polygon fill="none" stroke="black" points="208,-369 208,-392 262,-392 262,-369 208,-369"/>
|
||||
<text text-anchor="start" x="214.5" y="-378" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="267,-369 267,-392 320,-392 320,-369 267,-369"/>
|
||||
<polygon fill="none" stroke="black" points="267,-369 267,-392 320,-392 320,-369 267,-369"/>
|
||||
<text text-anchor="start" x="273" y="-378" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<text text-anchor="middle" x="137" y="-419.5" font-family="Helvetica,sans-Serif" font-size="10.00">LinuxBridge</text>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="32,-168 32,-284 242,-284 242,-168 32,-168"/>
|
||||
<polygon fill="white" stroke="none" points="37,-257 37,-279 237,-279 237,-257 37,-257"/>
|
||||
<text text-anchor="start" x="112.5" y="-265.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="37,-229 37,-252 136,-252 136,-229 37,-229"/>
|
||||
<polygon fill="none" stroke="black" points="37,-229 37,-252 136,-252 136,-229 37,-229"/>
|
||||
<text text-anchor="start" x="43.5" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-229 141,-252 237,-252 237,-229 141,-229"/>
|
||||
<polygon fill="none" stroke="black" points="141,-229 141,-252 237,-252 237,-229 141,-229"/>
|
||||
<text text-anchor="start" x="147" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="37,-201 37,-224 136,-224 136,-201 37,-201"/>
|
||||
<polygon fill="none" stroke="black" points="37,-201 37,-224 136,-224 136,-201 37,-201"/>
|
||||
<text text-anchor="start" x="60.5" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-201 141,-224 237,-224 237,-201 141,-201"/>
|
||||
<polygon fill="none" stroke="black" points="141,-201 141,-224 237,-224 237,-201 141,-201"/>
|
||||
<text text-anchor="start" x="163" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="37,-173 37,-196 237,-196 237,-173 37,-173"/>
|
||||
<polygon fill="none" stroke="black" points="37,-173 37,-196 237,-196 237,-173 37,-173"/>
|
||||
<text text-anchor="start" x="109.5" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge2" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M128.116,-403.866C113.505,-374.046 86,-310.304 86,-253"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M146.058,-403.886C160.956,-374.097 189,-310.4 189,-253"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="97,-28 97,-88 177,-88 177,-28 97,-28"/>
|
||||
<polygon fill="white" stroke="none" points="102,-61 102,-83 172,-83 172,-61 102,-61"/>
|
||||
<text text-anchor="start" x="111" y="-69.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="102,-33 102,-56 172,-56 172,-33 102,-33"/>
|
||||
<polygon fill="none" stroke="black" points="102,-33 102,-56 172,-56 172,-33 102,-33"/>
|
||||
<text text-anchor="start" x="111" y="-42" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge4" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M137,-172C137,-120.889 137,-108.111 137,-57"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
31
openstack_dashboard/don/ovs/static/dashboard/ovs/view.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Internal View</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Internal View
|
||||
</th>
|
||||
<tr>
|
||||
<td align="center" class="clickme">
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/analyze'">
|
||||
Analyze</button>
|
||||
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/ping'">
|
||||
Ping Tracer</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="don.svg" width="100%" height="850" type="image/svg+xml" id="don_svg"></object></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
212
openstack_dashboard/don/ovs/static/don.css
Normal file
@ -0,0 +1,212 @@
|
||||
body {
|
||||
font-family: "Courier New", Helvetica, "Times New Roman",
|
||||
Times, serif;
|
||||
color: black;
|
||||
background-color: #ffffff
|
||||
}
|
||||
|
||||
pre {
|
||||
width: 500px; /* specify width */
|
||||
white-space: pre-wrap; /* CSS3 browsers */
|
||||
white-space: -moz-pre-wrap !important; /* 1999+ Mozilla */
|
||||
white-space: -pre-wrap; /* Opera 4 thru 6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 and up */
|
||||
/* word-wrap: break-word; */ /* IE 5.5+ and up */
|
||||
font-family: "Courier New", monospace;
|
||||
line-height: 1.6em;
|
||||
margin: 1.7em 0 1.7em 0.3em;
|
||||
font-size: 12px;
|
||||
/* overflow-x: auto; */ /* Firefox 2 only */
|
||||
width: 90%; /* only if needed */
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: Georgia, Helvetica,san-Serif;
|
||||
font-weight: bold;
|
||||
font-size: 20pt;
|
||||
/*color:#fffff0;*/
|
||||
color: #2A4E68;
|
||||
padding: 5px;
|
||||
margin: 20px 0px 0px 0px;
|
||||
/*background:#3399ff;*/
|
||||
/*border-radius: 20px;*/
|
||||
/*
|
||||
font-family: "Helvetica Neue", Helvetica, Geneva, Arial,
|
||||
SunSans-Regular, sans-serif;
|
||||
padding: 0px;
|
||||
font-weight: normal;
|
||||
color: #2A4E68;
|
||||
border-top: 1px solid black;
|
||||
#border-bottom: 0.5px solid black;
|
||||
#background: #ff9933;
|
||||
#border-radius: 10px;
|
||||
width:750px;
|
||||
*/
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: "Helvetica Neue", Helvetica, Geneva, Arial,
|
||||
SunSans-Regular, sans-serif;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 5px;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
color: #ff9933;
|
||||
border-bottom: 0.5px solid black;
|
||||
width:750px; /*Change this to whatever value that you want*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
pre.pass {
|
||||
border-left: 2px solid #009900;
|
||||
}
|
||||
pre.fail {
|
||||
border-left: 2px solid #f00000;
|
||||
}
|
||||
|
||||
font.pass {color:#00cc00; text-decoration:none;}
|
||||
font.fail {color:#f00000; font-weight:bold; text-decoration:none;}
|
||||
|
||||
.collapsibleList li{
|
||||
list-style-image:url('button.png');
|
||||
cursor:auto;
|
||||
margin:0 0 5px 0;
|
||||
}
|
||||
|
||||
li.collapsibleListOpen{
|
||||
list-style-image:url('button-open.png');
|
||||
cursor:pointer;
|
||||
margin:0 0 5px 0;
|
||||
}
|
||||
|
||||
li.collapsibleListClosed{
|
||||
list-style-image:url('button-closed.png');
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.message {
|
||||
position: absolute;
|
||||
display: none;
|
||||
border: 0px solid red;
|
||||
width:80px;
|
||||
height:80px;
|
||||
padding: 0px;
|
||||
float: top;
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
#main {
|
||||
width:1000px;
|
||||
float:left;
|
||||
border: 0px solid red;
|
||||
}
|
||||
|
||||
#internal {
|
||||
width:1800px;
|
||||
float:left;
|
||||
border: 0px solid red;
|
||||
}
|
||||
|
||||
|
||||
|
||||
table
|
||||
{
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
border: 0px solid blue;
|
||||
padding: 0px;
|
||||
border-spacing:0px;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
font-family: Georgia, Helvetica,san-Serif;
|
||||
font-weight: bold;
|
||||
font-size: 20pt;
|
||||
/*color:#fffff0;*/
|
||||
color: #2A4E68;
|
||||
padding: 5px;
|
||||
/*background:#3399ff;*/
|
||||
/*border-radius: 20px;*/
|
||||
}
|
||||
|
||||
tr {
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
padding: 0px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
td {
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
vertical-align: middle;
|
||||
padding: 5px;
|
||||
|
||||
border-style: solid;
|
||||
border-width: 0px;
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
td.clickme {
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
vertical-align: bottom;
|
||||
padding: 20px;
|
||||
/*background:#e5e5e5;*/
|
||||
background:#ffffff;
|
||||
border-radius: 15px;
|
||||
border-style: solid;
|
||||
border-width: 0px;
|
||||
border-color: black;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.myButton {
|
||||
-moz-box-shadow: 0px 10px 14px -7px #3e7327;
|
||||
-webkit-box-shadow: 0px 10px 14px -7px #3e7327;
|
||||
box-shadow: 0px 10px 14px -7px #3e7327;
|
||||
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #77b55a), color-stop(1, #72b352));
|
||||
background:-moz-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:-webkit-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:-o-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:-ms-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:linear-gradient(to bottom, #77b55a 5%, #72b352 100%);
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#77b55a', endColorstr='#72b352',GradientType=0);
|
||||
background-color:#77b55a;
|
||||
-moz-border-radius:4px;
|
||||
-webkit-border-radius:4px;
|
||||
border-radius:4px;
|
||||
border:1px solid #4b8f29;
|
||||
display:inline-block;
|
||||
cursor:pointer;
|
||||
color:#ffffff;
|
||||
font-family:Arial;
|
||||
font-size:20px;
|
||||
font-weight:bold;
|
||||
padding:6px 12px;
|
||||
text-decoration:none;
|
||||
text-shadow:0px 1px 0px #5b8a3c;
|
||||
}
|
||||
.myButton:hover {
|
||||
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #72b352), color-stop(1, #77b55a));
|
||||
background:-moz-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:-webkit-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:-o-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:-ms-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:linear-gradient(to bottom, #72b352 5%, #77b55a 100%);
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#72b352', endColorstr='#77b55a',GradientType=0);
|
||||
background-color:#72b352;
|
||||
}
|
||||
.myButton:active {
|
||||
position:relative;
|
||||
top:1px;
|
||||
}
|
||||
|
||||
|
198
openstack_dashboard/don/ovs/static/don.dot
Normal file
@ -0,0 +1,198 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101003">10.10.0.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101004">10.10.0.4</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr8aa60600_7b">qbr8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr71ac5bef_7c">qbr71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb8aa60600_7b">qvb8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb71ac5bef_7c">qvb71ac5bef-7c</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7b">[6] qvo8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7c">[7] qvo71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7ctag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
LinuxBridge:qvb8aa60600_7b:s -> compute_br_int:qvo8aa60600_7b:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb71ac5bef_7c:s -> compute_br_int:qvo71ac5bef_7c:n [color = "#0066cc", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_757bf552_73">[2] qg-757bf552-73</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b">[8] qr-43b83157-3b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5">[5] tap59f90a3b-f5</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b10.10.0.1/24">10.10.0.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f510.10.0.2/24">10.10.0.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_757bf552_73:s -> network_br_int:qr_43b83157_3b:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
31
openstack_dashboard/don/ovs/static/don.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Diagnosing OpenStack Networking</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="main">
|
||||
<table width="100%" border-spacing="10px">
|
||||
<th class="title">
|
||||
DON: Diagnosing OpenStack Networking
|
||||
</th>
|
||||
<tr>
|
||||
<td align="center" class="clickme">
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/view'">
|
||||
Visualize</button>
|
||||
</td>
|
||||
</tr>
|
||||
<!--
|
||||
<tr>
|
||||
<td align="center">
|
||||
<img src="openstack-cloud-software-vertical-web.png"
|
||||
alt="OpenStack Logo">
|
||||
</td>
|
||||
</tr>
|
||||
-->
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
144
openstack_dashboard/don/ovs/static/don.report.html
Normal file
@ -0,0 +1,144 @@
|
||||
<html>
|
||||
<head>
|
||||
<script type="text/javascript" src="CollapsibleLists.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
<title>DON: Analysis Results</title>
|
||||
</head>
|
||||
<body onload=CollapsibleLists.apply()>
|
||||
<h2>OVS Test Results</h2>
|
||||
<h3>OVS test between all pairs of ports using the same tag in br-int</h3>
|
||||
<ul class="collapsibleList">
|
||||
<li>OVS bridge br-int
|
||||
<ul class="collapsibleList">
|
||||
<li>tag 2
|
||||
<ul class="collapsibleList">
|
||||
<li> 6 → 7 <font class="fail">✘</font>
|
||||
<ul class="collapsibleList">
|
||||
<pre class="fail">
|
||||
'sudo ovs-appctl fdb/flush br-int'
|
||||
'sudo ovs-appctl ofproto/trace br-int in_port=6,dl_src=AA:BB:CC:DD:EE:11,dl_dst=AA:BB:CC:DD:EE:22 -generate'
|
||||
'sudo ovs-appctl fdb/show br-int'
|
||||
'sudo ovs-appctl ofproto/trace br-int in_port=7,dl_src=AA:BB:CC:DD:EE:22,dl_dst=AA:BB:CC:DD:EE:11 -generate'
|
||||
{
|
||||
"command_list": [
|
||||
{
|
||||
"cmd": "sudo ovs-appctl fdb/flush br-int",
|
||||
"output": [
|
||||
"table successfully flushed",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl ofproto/trace br-int in_port=6,dl_src=AA:BB:CC:DD:EE:11,dl_dst=AA:BB:CC:DD:EE:22 -generate",
|
||||
"output": [
|
||||
"Flow: metadata=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
"Rule: table=0 cookie=0x9ecb964f4eaf403e priority=0",
|
||||
"OpenFlow actions=NORMAL",
|
||||
"no learned MAC for destination, flooding",
|
||||
"",
|
||||
" Resubmitted flow: metadata=0,in_port=1,dl_vlan=2,dl_vlan_pcp=0,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),5,6,pop_vlan,7,9",
|
||||
" Rule: table=0 cookie=0x9ecb964f4eaf403e priority=1,in_port=1",
|
||||
" OpenFlow actions=resubmit(,2)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),5,6,pop_vlan,7,9",
|
||||
" Rule: table=2 cookie=0x9ecb964f4eaf403e priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00",
|
||||
" OpenFlow actions=resubmit(,20)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),5,6,pop_vlan,7,9",
|
||||
" Rule: table=20 cookie=0x9ecb964f4eaf403e priority=0",
|
||||
" OpenFlow actions=resubmit(,22)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),5,6,pop_vlan,7,9",
|
||||
" Rule: table=22 cookie=0x9ecb964f4eaf403e priority=0",
|
||||
" OpenFlow actions=drop",
|
||||
"",
|
||||
"Final flow: metadata=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
"Relevant fields: skb_priority=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000,nw_proto=0,nw_frag=no,tp_src=0",
|
||||
"Datapath actions: push_vlan(vid=2,pcp=0),5,6,pop_vlan,7,9,12",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl fdb/show br-int",
|
||||
"output": [
|
||||
" port VLAN MAC Age",
|
||||
" 6 2 aa:bb:cc:dd:ee:11 0",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl ofproto/trace br-int in_port=7,dl_src=AA:BB:CC:DD:EE:22,dl_dst=AA:BB:CC:DD:EE:11 -generate",
|
||||
"output": [
|
||||
"Flow: metadata=0,in_port=7,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:22,dl_dst=aa:bb:cc:dd:ee:11,dl_type=0x0000",
|
||||
"Rule: table=0 cookie=0x9ecb964f4eaf403e priority=0",
|
||||
"OpenFlow actions=NORMAL",
|
||||
"forwarding to learned port",
|
||||
"",
|
||||
"Final flow: unchanged",
|
||||
"Relevant fields: skb_priority=0,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=aa:bb:cc:dd:ee:22,dl_dst=aa:bb:cc:dd:ee:11,dl_type=0x0000,nw_proto=0,nw_frag=no,tp_src=0",
|
||||
"Datapath actions: 11",
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
"comment": "ovs br-int port 6 --> 7",
|
||||
"debugs": [
|
||||
"AA:BB:CC:DD:EE:11 learnt on expected vlan 2 on port 6",
|
||||
"Packet for learnt mac forwarded properly"
|
||||
],
|
||||
"errors": [
|
||||
"Packet forwarded to incorrect port 11, expected 6"
|
||||
],
|
||||
"pass": false
|
||||
}
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
OVERALL RESULT: <font class="fail">✘</font>
|
||||
<h2>Ping Test Results</h2>
|
||||
<h3>Ping test between all pairs of VMs</h3>
|
||||
<ul class="collapsibleList">
|
||||
<li>router1 (Namespace [qrouter-90111551-6cfc-4be0-b1c2-ce8bffb7edf6])
|
||||
<ul class="collapsibleList">
|
||||
<li>vm1 → vm2
|
||||
<ul class="collapsibleList">
|
||||
<li> 10.10.0.3 → 10.10.0.4 <font class="fail">✘</font>
|
||||
<ul class="collapsibleList">
|
||||
<pre class="fail">
|
||||
{
|
||||
"command_list": [
|
||||
{
|
||||
"cmd": "ssh 10.10.0.3 with provided username and passwd",
|
||||
"output": "Could not ssh to 10.10.0.3",
|
||||
"pass": false
|
||||
}
|
||||
],
|
||||
"comment": "PING 10.10.0.3 to 10.10.0.4",
|
||||
"errors": [],
|
||||
"pass": false
|
||||
}
|
||||
|
||||
</pre>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
OVERALL RESULT: <font class="fail">✘</font>
|
||||
</body>
|
||||
</html>
|
204
openstack_dashboard/don/ovs/static/don.svg
Normal file
@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="576pt" height="720pt"
|
||||
viewBox="0.00 0.00 576.00 720.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 716)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-716 572,-716 572,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-704 286,-704 286,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="133,-640 133,-696 253,-696 253,-640 133,-640"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-436 16,-592 278,-592 278,-436 16,-436"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="116,-444 116,-584 270,-584 270,-444 116,-444"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-488 24,-540 108,-540 108,-488 24,-488"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-354 274,-354 274,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-206 24,-346 266,-346 266,-206 24,-206"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="89,-24 89,-108 201,-108 201,-24 89,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="294,-8 294,-704 560,-704 560,-8 294,-8"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="302,-16 302,-592 552,-592 552,-16 302,-16"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="310,-444 310,-584 448,-584 448,-444 310,-444"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="310,-164 310,-388 544,-388 544,-164 310,-164"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="372,-24 372,-108 484,-108 484,-24 372,-24"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="320,-640 320,-696 438,-696 438,-640 320,-640"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="149,-652 149,-684 237,-684 237,-652 149,-652"/>
|
||||
<polygon fill="yellow" stroke="none" points="154,-657 154,-679 232,-679 232,-657 154,-657"/>
|
||||
<text text-anchor="start" x="159.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="132,-456 132,-572 254,-572 254,-456 132,-456"/>
|
||||
<polygon fill="white" stroke="none" points="137,-545 137,-567 249,-567 249,-545 137,-545"/>
|
||||
<text text-anchor="start" x="182.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="137,-517 137,-540 191,-540 191,-517 137,-517"/>
|
||||
<polygon fill="none" stroke="black" points="137,-517 137,-540 191,-540 191,-517 137,-517"/>
|
||||
<text text-anchor="start" x="154.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="196,-517 196,-540 249,-540 249,-517 196,-517"/>
|
||||
<polygon fill="none" stroke="black" points="196,-517 196,-540 249,-540 249,-517 196,-517"/>
|
||||
<text text-anchor="start" x="213" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="137,-489 137,-512 191,-512 191,-489 137,-489"/>
|
||||
<polygon fill="none" stroke="black" points="137,-489 137,-512 191,-512 191,-489 137,-489"/>
|
||||
<text text-anchor="start" x="146.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="196,-489 196,-512 249,-512 249,-489 196,-489"/>
|
||||
<polygon fill="none" stroke="black" points="196,-489 196,-512 249,-512 249,-489 196,-489"/>
|
||||
<text text-anchor="start" x="205" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="137,-461 137,-484 191,-484 191,-461 137,-461"/>
|
||||
<polygon fill="none" stroke="black" points="137,-461 137,-484 191,-484 191,-461 137,-461"/>
|
||||
<text text-anchor="start" x="143.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="196,-461 196,-484 249,-484 249,-461 196,-461"/>
|
||||
<polygon fill="none" stroke="black" points="196,-461 196,-484 249,-484 249,-461 196,-461"/>
|
||||
<text text-anchor="start" x="202" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<text text-anchor="middle" x="66" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">LinuxBridge</text>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40,-218 40,-334 250,-334 250,-218 40,-218"/>
|
||||
<polygon fill="white" stroke="none" points="45,-307 45,-329 245,-329 245,-307 45,-307"/>
|
||||
<text text-anchor="start" x="120.5" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-279 45,-302 144,-302 144,-279 45,-279"/>
|
||||
<polygon fill="none" stroke="black" points="45,-279 45,-302 144,-302 144,-279 45,-279"/>
|
||||
<text text-anchor="start" x="51.5" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-279 149,-302 245,-302 245,-279 149,-279"/>
|
||||
<polygon fill="none" stroke="black" points="149,-279 149,-302 245,-302 245,-279 149,-279"/>
|
||||
<text text-anchor="start" x="155" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-251 45,-274 144,-274 144,-251 45,-251"/>
|
||||
<polygon fill="none" stroke="black" points="45,-251 45,-274 144,-274 144,-251 45,-251"/>
|
||||
<text text-anchor="start" x="68.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-251 149,-274 245,-274 245,-251 149,-251"/>
|
||||
<polygon fill="none" stroke="black" points="149,-251 149,-274 245,-274 245,-251 149,-251"/>
|
||||
<text text-anchor="start" x="171" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="45,-223 45,-246 245,-246 245,-223 45,-223"/>
|
||||
<polygon fill="none" stroke="black" points="45,-223 45,-246 245,-246 245,-223 45,-223"/>
|
||||
<text text-anchor="start" x="117.5" y="-232" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge2" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M69.8346,-495.954C77.5031,-460.323 94,-375.275 94,-303"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M76.0841,-495.784C85.3069,-480.12 99.3923,-456.399 112,-436 148.882,-376.326 197,-373.152 197,-303"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="105,-36 105,-96 185,-96 185,-36 105,-36"/>
|
||||
<polygon fill="white" stroke="none" points="110,-69 110,-91 180,-91 180,-69 110,-69"/>
|
||||
<text text-anchor="start" x="119" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<polygon fill="none" stroke="black" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<text text-anchor="start" x="119" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge4" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M145,-222C145,-152.222 145,-134.778 145,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="336.5,-652 336.5,-684 421.5,-684 421.5,-652 336.5,-652"/>
|
||||
<polygon fill="yellow" stroke="none" points="342,-657 342,-679 417,-679 417,-657 342,-657"/>
|
||||
<text text-anchor="start" x="347.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="326.5,-456 326.5,-572 431.5,-572 431.5,-456 326.5,-456"/>
|
||||
<polygon fill="white" stroke="none" points="332,-545 332,-567 427,-567 427,-545 332,-545"/>
|
||||
<text text-anchor="start" x="355" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-517 332,-540 427,-540 427,-517 332,-517"/>
|
||||
<polygon fill="none" stroke="black" points="332,-517 332,-540 427,-540 427,-517 332,-517"/>
|
||||
<text text-anchor="start" x="364" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-489 332,-512 427,-512 427,-489 332,-489"/>
|
||||
<polygon fill="none" stroke="black" points="332,-489 332,-512 427,-512 427,-489 332,-489"/>
|
||||
<text text-anchor="start" x="349.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-461 332,-484 427,-484 427,-461 332,-461"/>
|
||||
<polygon fill="none" stroke="black" points="332,-461 332,-484 427,-484 427,-461 332,-461"/>
|
||||
<text text-anchor="start" x="338.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="326.5,-176 326.5,-376 527.5,-376 527.5,-176 326.5,-176"/>
|
||||
<polygon fill="white" stroke="none" points="332,-349 332,-371 523,-371 523,-349 332,-349"/>
|
||||
<text text-anchor="start" x="403" y="-357.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-321 332,-344 427,-344 427,-321 332,-321"/>
|
||||
<polygon fill="none" stroke="black" points="332,-321 332,-344 427,-344 427,-321 332,-321"/>
|
||||
<text text-anchor="start" x="338.5" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-321 432,-344 523,-344 523,-321 432,-321"/>
|
||||
<polygon fill="none" stroke="black" points="432,-321 432,-344 523,-344 523,-321 432,-321"/>
|
||||
<text text-anchor="start" x="438" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tap59f90a3b-f5</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-293 332,-316 427,-316 427,-293 332,-293"/>
|
||||
<polygon fill="none" stroke="black" points="332,-293 332,-316 427,-316 427,-293 332,-293"/>
|
||||
<text text-anchor="start" x="353.5" y="-302" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-293 432,-316 523,-316 523,-293 432,-293"/>
|
||||
<polygon fill="none" stroke="black" points="432,-293 432,-316 523,-316 523,-293 432,-293"/>
|
||||
<text text-anchor="start" x="451.5" y="-302" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-265 332,-288 427,-288 427,-265 332,-265"/>
|
||||
<polygon fill="none" stroke="black" points="332,-265 332,-288 427,-288 427,-265 332,-265"/>
|
||||
<text text-anchor="start" x="352" y="-274" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-265 432,-288 523,-288 523,-265 432,-265"/>
|
||||
<polygon fill="none" stroke="black" points="432,-265 432,-288 523,-288 523,-265 432,-265"/>
|
||||
<text text-anchor="start" x="450" y="-274" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-237 332,-260 523,-260 523,-237 332,-237"/>
|
||||
<polygon fill="none" stroke="black" points="332,-237 332,-260 523,-260 523,-237 332,-237"/>
|
||||
<text text-anchor="start" x="410" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-209 332,-232 523,-232 523,-209 332,-209"/>
|
||||
<polygon fill="none" stroke="black" points="332,-209 332,-232 523,-232 523,-209 332,-209"/>
|
||||
<text text-anchor="start" x="412" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="332,-181 332,-204 523,-204 523,-181 332,-181"/>
|
||||
<polygon fill="none" stroke="black" points="332,-181 332,-204 523,-204 523,-181 332,-181"/>
|
||||
<text text-anchor="start" x="400" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge7" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M380,-460C380,-408.887 379,-396.113 379,-345"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="388,-36 388,-96 468,-96 468,-36 388,-36"/>
|
||||
<polygon fill="white" stroke="none" points="393,-69 393,-91 463,-91 463,-69 393,-69"/>
|
||||
<text text-anchor="start" x="402" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="393,-41 393,-64 463,-64 463,-41 393,-41"/>
|
||||
<polygon fill="none" stroke="black" points="393,-41 393,-64 463,-64 463,-41 393,-41"/>
|
||||
<text text-anchor="start" x="402" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge6" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M428,-180C428,-128.889 428,-116.111 428,-65"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
BIN
openstack_dashboard/don/ovs/static/don_analysis.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
openstack_dashboard/don/ovs/static/don_internal.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
openstack_dashboard/don/ovs/static/don_ping_notworking.png
Normal file
After Width: | Height: | Size: 94 KiB |
278
openstack_dashboard/don/ovs/static/don_test.dot
Normal file
@ -0,0 +1,278 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">VM1-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">VM1-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">VM3-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">VM3-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="3" BGCOLOR="#ff9933">VM4</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef">public</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="10023">10.0.2.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="10024">10.0.2.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10033">10.0.3.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10034">10.0.3.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10036">10.0.3.6</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef" PORT="1722445">172.24.4.5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="10026">10.0.2.6</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapba7460ea_c9">tapba7460ea-c9</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapa1eba09e_99">tapa1eba09e-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tap95772001_99">tap95772001-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapb0cb94f0_97">tapb0cb94f0-97</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tap58b49f9d_1d">tap58b49f9d-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef" PORT="tap68484e46_cf">tap68484e46-cf</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap8f35a39f_2a">tap8f35a39f-2a</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbrba7460ea_c9">qbrba7460ea-c9</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbra1eba09e_99">qbra1eba09e-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbr95772001_99">qbr95772001-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbrb0cb94f0_97">qbrb0cb94f0-97</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbr58b49f9d_1d">qbr58b49f9d-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef" PORT="qbr68484e46_cf">qbr68484e46-cf</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr8f35a39f_2a">qbr8f35a39f-2a</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvbba7460ea_c9">qvbba7460ea-c9</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvba1eba09e_99">qvba1eba09e-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvb95772001_99">qvb95772001-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbb0cb94f0_97">qvbb0cb94f0-97</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvb58b49f9d_1d">qvb58b49f9d-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef" PORT="qvb68484e46_cf">qvb68484e46-cf</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb8f35a39f_2a">qvb8f35a39f-2a</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvoba7460ea_c9">[28] qvoba7460ea-c9</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvoa1eba09e_99">[29] qvoa1eba09e-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvo95772001_99">[30] qvo95772001-99</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvob0cb94f0_97">[31] qvob0cb94f0-97</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvo58b49f9d_1d">[33] qvo58b49f9d-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef" PORT="qvo68484e46_cf">[34] qvo68484e46-cf</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8f35a39f_2a">[32] qvo8f35a39f-2a</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvoba7460ea_c9tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvoa1eba09e_99tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvo95772001_99tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvob0cb94f0_97tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvo58b49f9d_1dtag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#79f3ef" PORT="qvo68484e46_cftag_4">VLAN tag:4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8f35a39f_2atag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#ffcc00" PORT="patch_tun">[19] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
VMs:10023:s -> LinuxBridge:tapba7460ea_c9:n [color = "#0066cc", penwidth = "4"]
|
||||
VMs:10024:s -> LinuxBridge:tapa1eba09e_99:n [color = "#0066cc", penwidth = "4"]
|
||||
VMs:10033:s -> LinuxBridge:tap95772001_99:n [color = "#0066cc", penwidth = "4"]
|
||||
VMs:10034:s -> LinuxBridge:tapb0cb94f0_97:n [color = "#0066cc", penwidth = "4"]
|
||||
VMs:10036:s -> LinuxBridge:tap58b49f9d_1d:n [color = "#0066cc", penwidth = "4"]
|
||||
VMs:1722445:s -> LinuxBridge:tap68484e46_cf:n [color = "#0066cc", penwidth = "4"]
|
||||
VMs:10026:s -> LinuxBridge:tap8f35a39f_2a:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvbba7460ea_c9:s -> compute_br_int:qvoba7460ea_c9:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvba1eba09e_99:s -> compute_br_int:qvoa1eba09e_99:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb95772001_99:s -> compute_br_int:qvo95772001_99:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvbb0cb94f0_97:s -> compute_br_int:qvob0cb94f0_97:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb58b49f9d_1d:s -> compute_br_int:qvo58b49f9d_1d:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb68484e46_cf:s -> compute_br_int:qvo68484e46_cf:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb8f35a39f_2a:s -> compute_br_int:qvo8f35a39f_2a:n [color = "#0066cc", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.4/24">172.24.4.4/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_e6c19c2c_8c">[6] qg-e6c19c2c-8c</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_718e237a_3a">[7] qg-718e237a-3a</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="8" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_04542d8f_13">[25] qr-04542d8f-13</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapfd625661_7e">[23] tapfd625661-7e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_e503ba9c_89">[24] qr-e503ba9c-89</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapb9083cd7_6f">[22] tapb9083cd7-6f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_fb2585a7_bd">[27] qr-fb2585a7-bd</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapfd625661_7e">[23] tapfd625661-7e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_5de9034a_db">[26] qr-5de9034a-db</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapb9083cd7_6f">[22] tapb9083cd7-6f</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_04542d8f_13tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapfd625661_7etag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_e503ba9c_89tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapb9083cd7_6ftag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_fb2585a7_bdtag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapfd625661_7etag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_5de9034a_dbtag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapb9083cd7_6ftag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_04542d8f_1310.0.3.1/24">10.0.3.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapfd625661_7e10.0.3.2/24">10.0.3.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_e503ba9c_8910.0.2.1/24">10.0.2.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapb9083cd7_6f10.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_fb2585a7_bd10.0.3.5/24">10.0.3.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapfd625661_7e10.0.3.2/24">10.0.3.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_5de9034a_db10.0.2.5/24">10.0.2.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tapb9083cd7_6f10.0.2.2/24">10.0.2.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#b2f379" PORT="private2">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#b2f379" PORT="private2">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#ff9933" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="8" BGCOLOR="#ffcc00" PORT="patch_tun">[19] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_e6c19c2c_8c:s -> network_br_int:qr_04542d8f_13:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_e6c19c2c_8c:s -> network_br_int:qr_e503ba9c_89:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_718e237a_3a:s -> network_br_int:qr_fb2585a7_bd:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_718e237a_3a:s -> network_br_int:qr_5de9034a_db:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
473
openstack_dashboard/don/ovs/static/don_test.svg
Normal file
@ -0,0 +1,473 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="1746pt" height="916pt"
|
||||
viewBox="0.00 0.00 1746.00 916.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 912)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-912 1742,-912 1742,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-900 824,-900 824,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="365,-836 365,-892 485,-892 485,-836 365,-836"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="83,-394 83,-788 749,-788 749,-394 83,-394"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="215,-640 215,-780 635,-780 635,-640 215,-640"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="91,-402 91,-542 741,-542 741,-402 91,-402"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-312 816,-312 816,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-164 24,-304 808,-304 808,-164 24,-164"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="346,-24 346,-108 484,-108 484,-24 346,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="832,-176 832,-900 1730,-900 1730,-176 832,-176"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="840,-184 840,-788 1722,-788 1722,-184 840,-184"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1109,-640 1109,-780 1349,-780 1349,-640 1109,-640"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="848,-360 848,-584 1714,-584 1714,-360 848,-360"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1211,-192 1211,-276 1349,-276 1349,-192 1211,-192"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1170,-836 1170,-892 1288,-892 1288,-836 1170,-836"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="381,-848 381,-880 469,-880 469,-848 381,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="386,-853 386,-875 464,-875 464,-853 386,-853"/>
|
||||
<text text-anchor="start" x="391.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="231.5,-652 231.5,-768 618.5,-768 618.5,-652 231.5,-652"/>
|
||||
<polygon fill="white" stroke="none" points="237,-741 237,-763 614,-763 614,-741 237,-741"/>
|
||||
<text text-anchor="start" x="415" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="237,-713 237,-736 286,-736 286,-713 237,-713"/>
|
||||
<polygon fill="none" stroke="black" points="237,-713 237,-736 286,-736 286,-713 237,-713"/>
|
||||
<text text-anchor="start" x="247" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="291,-713 291,-736 339,-736 339,-713 291,-713"/>
|
||||
<polygon fill="none" stroke="black" points="291,-713 291,-736 339,-736 339,-713 291,-713"/>
|
||||
<text text-anchor="start" x="300.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-2</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="344,-713 344,-736 392,-736 392,-713 344,-713"/>
|
||||
<polygon fill="none" stroke="black" points="344,-713 344,-736 392,-736 392,-713 344,-713"/>
|
||||
<text text-anchor="start" x="353.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="397,-713 397,-736 445,-736 445,-713 397,-713"/>
|
||||
<polygon fill="none" stroke="black" points="397,-713 397,-736 445,-736 445,-713 397,-713"/>
|
||||
<text text-anchor="start" x="406.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-2</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="450,-713 450,-736 614,-736 614,-713 450,-713"/>
|
||||
<polygon fill="none" stroke="black" points="450,-713 450,-736 614,-736 614,-713 450,-713"/>
|
||||
<text text-anchor="start" x="521.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM4</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="237,-685 237,-708 286,-708 286,-685 237,-685"/>
|
||||
<polygon fill="none" stroke="black" points="237,-685 237,-708 286,-708 286,-685 237,-685"/>
|
||||
<text text-anchor="start" x="244" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="291,-685 291,-708 339,-708 339,-685 291,-685"/>
|
||||
<polygon fill="none" stroke="black" points="291,-685 291,-708 339,-708 339,-685 291,-685"/>
|
||||
<text text-anchor="start" x="297.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="344,-685 344,-708 392,-708 392,-685 344,-685"/>
|
||||
<polygon fill="none" stroke="black" points="344,-685 344,-708 392,-708 392,-685 344,-685"/>
|
||||
<text text-anchor="start" x="350.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="397,-685 397,-708 445,-708 445,-685 397,-685"/>
|
||||
<polygon fill="none" stroke="black" points="397,-685 397,-708 445,-708 445,-685 397,-685"/>
|
||||
<text text-anchor="start" x="403.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="450,-685 450,-708 498,-708 498,-685 450,-685"/>
|
||||
<polygon fill="none" stroke="black" points="450,-685 450,-708 498,-708 498,-685 450,-685"/>
|
||||
<text text-anchor="start" x="456.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="503,-685 503,-708 561,-708 561,-685 503,-685"/>
|
||||
<polygon fill="none" stroke="black" points="503,-685 503,-708 561,-708 561,-685 503,-685"/>
|
||||
<text text-anchor="start" x="519" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">public</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="566,-685 566,-708 614,-708 614,-685 566,-685"/>
|
||||
<polygon fill="none" stroke="black" points="566,-685 566,-708 614,-708 614,-685 566,-685"/>
|
||||
<text text-anchor="start" x="572.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="237,-657 237,-680 286,-680 286,-657 237,-657"/>
|
||||
<polygon fill="none" stroke="black" points="237,-657 237,-680 286,-680 286,-657 237,-657"/>
|
||||
<text text-anchor="start" x="243.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="291,-657 291,-680 339,-680 339,-657 291,-657"/>
|
||||
<polygon fill="none" stroke="black" points="291,-657 291,-680 339,-680 339,-657 291,-657"/>
|
||||
<text text-anchor="start" x="297" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.4</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="344,-657 344,-680 392,-680 392,-657 344,-657"/>
|
||||
<polygon fill="none" stroke="black" points="344,-657 344,-680 392,-680 392,-657 344,-657"/>
|
||||
<text text-anchor="start" x="350" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.3</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="397,-657 397,-680 445,-680 445,-657 397,-657"/>
|
||||
<polygon fill="none" stroke="black" points="397,-657 397,-680 445,-680 445,-657 397,-657"/>
|
||||
<text text-anchor="start" x="403" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.4</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="450,-657 450,-680 498,-680 498,-657 450,-657"/>
|
||||
<polygon fill="none" stroke="black" points="450,-657 450,-680 498,-680 498,-657 450,-657"/>
|
||||
<text text-anchor="start" x="456" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.6</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="503,-657 503,-680 561,-680 561,-657 503,-657"/>
|
||||
<polygon fill="none" stroke="black" points="503,-657 503,-680 561,-680 561,-657 503,-657"/>
|
||||
<text text-anchor="start" x="509" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.5</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="566,-657 566,-680 614,-680 614,-657 566,-657"/>
|
||||
<polygon fill="none" stroke="black" points="566,-657 566,-680 614,-680 614,-657 566,-657"/>
|
||||
<text text-anchor="start" x="572" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.6</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<polygon fill="white" stroke="none" points="107,-414 107,-530 725,-530 725,-414 107,-414"/>
|
||||
<polygon fill="white" stroke="none" points="112,-503 112,-525 720,-525 720,-503 112,-503"/>
|
||||
<text text-anchor="start" x="388.5" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">Linux Bridge</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="112,-475 112,-498 197,-498 197,-475 112,-475"/>
|
||||
<polygon fill="none" stroke="black" points="112,-475 112,-498 197,-498 197,-475 112,-475"/>
|
||||
<text text-anchor="start" x="119.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapba7460ea-c9</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="202,-475 202,-498 286,-498 286,-475 202,-475"/>
|
||||
<polygon fill="none" stroke="black" points="202,-475 202,-498 286,-498 286,-475 202,-475"/>
|
||||
<text text-anchor="start" x="209" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapa1eba09e-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="291,-475 291,-498 375,-498 375,-475 291,-475"/>
|
||||
<polygon fill="none" stroke="black" points="291,-475 291,-498 375,-498 375,-475 291,-475"/>
|
||||
<text text-anchor="start" x="298" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap95772001-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="380,-475 380,-498 462,-498 462,-475 380,-475"/>
|
||||
<polygon fill="none" stroke="black" points="380,-475 380,-498 462,-498 462,-475 380,-475"/>
|
||||
<text text-anchor="start" x="387.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapb0cb94f0-97</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="467,-475 467,-498 549,-498 549,-475 467,-475"/>
|
||||
<polygon fill="none" stroke="black" points="467,-475 467,-498 549,-498 549,-475 467,-475"/>
|
||||
<text text-anchor="start" x="474.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap58b49f9d-1d</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="554,-475 554,-498 636,-498 636,-475 554,-475"/>
|
||||
<polygon fill="none" stroke="black" points="554,-475 554,-498 636,-498 636,-475 554,-475"/>
|
||||
<text text-anchor="start" x="561.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap68484e46-cf</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="641,-475 641,-498 720,-498 720,-475 641,-475"/>
|
||||
<polygon fill="none" stroke="black" points="641,-475 641,-498 720,-498 720,-475 641,-475"/>
|
||||
<text text-anchor="start" x="648" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap8f35a39f-2a</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="112,-447 112,-470 197,-470 197,-447 112,-447"/>
|
||||
<polygon fill="none" stroke="black" points="112,-447 112,-470 197,-470 197,-447 112,-447"/>
|
||||
<text text-anchor="start" x="119.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrba7460ea-c9</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="202,-447 202,-470 286,-470 286,-447 202,-447"/>
|
||||
<polygon fill="none" stroke="black" points="202,-447 202,-470 286,-470 286,-447 202,-447"/>
|
||||
<text text-anchor="start" x="209" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbra1eba09e-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="291,-447 291,-470 375,-470 375,-447 291,-447"/>
|
||||
<polygon fill="none" stroke="black" points="291,-447 291,-470 375,-470 375,-447 291,-447"/>
|
||||
<text text-anchor="start" x="298" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr95772001-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="380,-447 380,-470 462,-470 462,-447 380,-447"/>
|
||||
<polygon fill="none" stroke="black" points="380,-447 380,-470 462,-470 462,-447 380,-447"/>
|
||||
<text text-anchor="start" x="387.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrb0cb94f0-97</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="467,-447 467,-470 549,-470 549,-447 467,-447"/>
|
||||
<polygon fill="none" stroke="black" points="467,-447 467,-470 549,-470 549,-447 467,-447"/>
|
||||
<text text-anchor="start" x="474.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr58b49f9d-1d</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="554,-447 554,-470 636,-470 636,-447 554,-447"/>
|
||||
<polygon fill="none" stroke="black" points="554,-447 554,-470 636,-470 636,-447 554,-447"/>
|
||||
<text text-anchor="start" x="561.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr68484e46-cf</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="641,-447 641,-470 720,-470 720,-447 641,-447"/>
|
||||
<polygon fill="none" stroke="black" points="641,-447 641,-470 720,-470 720,-447 641,-447"/>
|
||||
<text text-anchor="start" x="648" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr8f35a39f-2a</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="112,-419 112,-442 197,-442 197,-419 112,-419"/>
|
||||
<polygon fill="none" stroke="black" points="112,-419 112,-442 197,-442 197,-419 112,-419"/>
|
||||
<text text-anchor="start" x="118.5" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbba7460ea-c9</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="202,-419 202,-442 286,-442 286,-419 202,-419"/>
|
||||
<polygon fill="none" stroke="black" points="202,-419 202,-442 286,-442 286,-419 202,-419"/>
|
||||
<text text-anchor="start" x="208" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvba1eba09e-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="291,-419 291,-442 375,-442 375,-419 291,-419"/>
|
||||
<polygon fill="none" stroke="black" points="291,-419 291,-442 375,-442 375,-419 291,-419"/>
|
||||
<text text-anchor="start" x="297" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb95772001-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="380,-419 380,-442 462,-442 462,-419 380,-419"/>
|
||||
<polygon fill="none" stroke="black" points="380,-419 380,-442 462,-442 462,-419 380,-419"/>
|
||||
<text text-anchor="start" x="386" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbb0cb94f0-97</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="467,-419 467,-442 549,-442 549,-419 467,-419"/>
|
||||
<polygon fill="none" stroke="black" points="467,-419 467,-442 549,-442 549,-419 467,-419"/>
|
||||
<text text-anchor="start" x="473" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb58b49f9d-1d</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="554,-419 554,-442 636,-442 636,-419 554,-419"/>
|
||||
<polygon fill="none" stroke="black" points="554,-419 554,-442 636,-442 636,-419 554,-419"/>
|
||||
<text text-anchor="start" x="560" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb68484e46-cf</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="641,-419 641,-442 720,-442 720,-419 641,-419"/>
|
||||
<polygon fill="none" stroke="black" points="641,-419 641,-442 720,-442 720,-419 641,-419"/>
|
||||
<text text-anchor="start" x="647" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb8f35a39f-2a</text>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge2" class="edge"><title>VMs:10023:s->LinuxBridge:tapba7460ea_c9:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M261,-656C261,-571.558 154,-583.442 154,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge3" class="edge"><title>VMs:10024:s->LinuxBridge:tapa1eba09e_99:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M315,-656C315,-579.419 244,-575.581 244,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge4" class="edge"><title>VMs:10033:s->LinuxBridge:tap95772001_99:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M368,-656C368,-584.509 333,-570.491 333,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge5" class="edge"><title>VMs:10034:s->LinuxBridge:tapb0cb94f0_97:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M421,-656C421,-586.222 421,-568.778 421,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge6" class="edge"><title>VMs:10036:s->LinuxBridge:tap58b49f9d_1d:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M474,-656C474,-584.605 508,-570.395 508,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge7" class="edge"><title>VMs:1722445:s->LinuxBridge:tap68484e46_cf:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M532,-656C532,-580.814 595,-574.186 595,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge8" class="edge"><title>VMs:10026:s->LinuxBridge:tap8f35a39f_2a:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M590,-656C590,-575.348 681,-579.652 681,-499"/>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40,-176 40,-292 792,-292 792,-176 40,-176"/>
|
||||
<polygon fill="white" stroke="none" points="45,-265 45,-287 787,-287 787,-265 45,-265"/>
|
||||
<text text-anchor="start" x="391.5" y="-273.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-237 45,-260 149,-260 149,-237 45,-237"/>
|
||||
<polygon fill="none" stroke="black" points="45,-237 45,-260 149,-260 149,-237 45,-237"/>
|
||||
<text text-anchor="start" x="51.5" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[28] qvoba7460ea-c9</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="154,-237 154,-260 257,-260 257,-237 154,-237"/>
|
||||
<polygon fill="none" stroke="black" points="154,-237 154,-260 257,-260 257,-237 154,-237"/>
|
||||
<text text-anchor="start" x="160" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[29] qvoa1eba09e-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="262,-237 262,-260 365,-260 365,-237 262,-237"/>
|
||||
<polygon fill="none" stroke="black" points="262,-237 262,-260 365,-260 365,-237 262,-237"/>
|
||||
<text text-anchor="start" x="268" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[30] qvo95772001-99</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="370,-237 370,-260 471,-260 471,-237 370,-237"/>
|
||||
<polygon fill="none" stroke="black" points="370,-237 370,-260 471,-260 471,-237 370,-237"/>
|
||||
<text text-anchor="start" x="376" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[31] qvob0cb94f0-97</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="476,-237 476,-260 577,-260 577,-237 476,-237"/>
|
||||
<polygon fill="none" stroke="black" points="476,-237 476,-260 577,-260 577,-237 476,-237"/>
|
||||
<text text-anchor="start" x="482" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[33] qvo58b49f9d-1d</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="582,-237 582,-260 683,-260 683,-237 582,-237"/>
|
||||
<polygon fill="none" stroke="black" points="582,-237 582,-260 683,-260 683,-237 582,-237"/>
|
||||
<text text-anchor="start" x="588" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[34] qvo68484e46-cf</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="688,-237 688,-260 787,-260 787,-237 688,-237"/>
|
||||
<polygon fill="none" stroke="black" points="688,-237 688,-260 787,-260 787,-237 688,-237"/>
|
||||
<text text-anchor="start" x="694" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[32] qvo8f35a39f-2a</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-209 45,-232 149,-232 149,-209 45,-209"/>
|
||||
<polygon fill="none" stroke="black" points="45,-209 45,-232 149,-232 149,-209 45,-209"/>
|
||||
<text text-anchor="start" x="71" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="154,-209 154,-232 257,-232 257,-209 154,-209"/>
|
||||
<polygon fill="none" stroke="black" points="154,-209 154,-232 257,-232 257,-209 154,-209"/>
|
||||
<text text-anchor="start" x="179.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="262,-209 262,-232 365,-232 365,-209 262,-209"/>
|
||||
<polygon fill="none" stroke="black" points="262,-209 262,-232 365,-232 365,-209 262,-209"/>
|
||||
<text text-anchor="start" x="287.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="370,-209 370,-232 471,-232 471,-209 370,-209"/>
|
||||
<polygon fill="none" stroke="black" points="370,-209 370,-232 471,-232 471,-209 370,-209"/>
|
||||
<text text-anchor="start" x="394.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="476,-209 476,-232 577,-232 577,-209 476,-209"/>
|
||||
<polygon fill="none" stroke="black" points="476,-209 476,-232 577,-232 577,-209 476,-209"/>
|
||||
<text text-anchor="start" x="500.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#79f3ef" stroke="none" points="582,-209 582,-232 683,-232 683,-209 582,-209"/>
|
||||
<polygon fill="none" stroke="black" points="582,-209 582,-232 683,-232 683,-209 582,-209"/>
|
||||
<text text-anchor="start" x="606.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:4</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="688,-209 688,-232 787,-232 787,-209 688,-209"/>
|
||||
<polygon fill="none" stroke="black" points="688,-209 688,-232 787,-232 787,-209 688,-209"/>
|
||||
<text text-anchor="start" x="711.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="45,-181 45,-204 787,-204 787,-181 45,-181"/>
|
||||
<polygon fill="none" stroke="black" points="45,-181 45,-204 787,-204 787,-181 45,-181"/>
|
||||
<text text-anchor="start" x="385.5" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[19] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge9" class="edge"><title>LinuxBridge:qvbba7460ea_c9:s->compute_br_int:qvoba7460ea_c9:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M154,-418C154,-343.766 97,-335.234 97,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge10" class="edge"><title>LinuxBridge:qvba1eba09e_99:s->compute_br_int:qvoa1eba09e_99:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M244,-418C244,-346.102 205,-332.898 205,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge11" class="edge"><title>LinuxBridge:qvb95772001_99:s->compute_br_int:qvo95772001_99:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M333,-418C333,-347.658 313,-331.342 313,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge12" class="edge"><title>LinuxBridge:qvbb0cb94f0_97:s->compute_br_int:qvob0cb94f0_97:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M421,-418C421,-348.222 421,-330.778 421,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge13" class="edge"><title>LinuxBridge:qvb58b49f9d_1d:s->compute_br_int:qvo58b49f9d_1d:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M508,-418C508,-347.713 527,-331.287 527,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge14" class="edge"><title>LinuxBridge:qvb68484e46_cf:s->compute_br_int:qvo68484e46_cf:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M595,-418C595,-346.207 633,-332.793 633,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge15" class="edge"><title>LinuxBridge:qvb8f35a39f_2a:s->compute_br_int:qvo8f35a39f_2a:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M681,-418C681,-343.766 738,-335.234 738,-261"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="362.5,-36 362.5,-96 467.5,-96 467.5,-36 362.5,-36"/>
|
||||
<polygon fill="white" stroke="none" points="368,-69 368,-91 463,-91 463,-69 368,-69"/>
|
||||
<text text-anchor="start" x="389.5" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="368,-41 368,-64 463,-64 463,-41 368,-41"/>
|
||||
<polygon fill="none" stroke="black" points="368,-41 368,-64 463,-64 463,-41 368,-41"/>
|
||||
<text text-anchor="start" x="389.5" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge16" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M416,-180C416,-128.889 416,-116.111 416,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="1186.5,-848 1186.5,-880 1271.5,-880 1271.5,-848 1186.5,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="1192,-853 1192,-875 1267,-875 1267,-853 1192,-853"/>
|
||||
<text text-anchor="start" x="1197.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="1125,-652 1125,-768 1333,-768 1333,-652 1125,-652"/>
|
||||
<polygon fill="white" stroke="none" points="1130,-741 1130,-763 1328,-763 1328,-741 1130,-741"/>
|
||||
<text text-anchor="start" x="1204.5" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1130,-713 1130,-736 1227,-736 1227,-713 1130,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1130,-713 1130,-736 1227,-736 1227,-713 1130,-713"/>
|
||||
<text text-anchor="start" x="1163" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1232,-713 1232,-736 1328,-736 1328,-713 1232,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1232,-713 1232,-736 1328,-736 1328,-713 1232,-713"/>
|
||||
<text text-anchor="start" x="1264.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1130,-685 1130,-708 1227,-708 1227,-685 1130,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1130,-685 1130,-708 1227,-708 1227,-685 1130,-685"/>
|
||||
<text text-anchor="start" x="1148.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1232,-685 1232,-708 1328,-708 1328,-685 1232,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1232,-685 1232,-708 1328,-708 1328,-685 1232,-685"/>
|
||||
<text text-anchor="start" x="1250" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.4/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1130,-657 1130,-680 1227,-680 1227,-657 1130,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1130,-657 1130,-680 1227,-680 1227,-657 1130,-657"/>
|
||||
<text text-anchor="start" x="1136.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qg-e6c19c2c-8c</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1232,-657 1232,-680 1328,-680 1328,-657 1232,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1232,-657 1232,-680 1328,-680 1328,-657 1232,-657"/>
|
||||
<text text-anchor="start" x="1238" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qg-718e237a-3a</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="864,-372 864,-572 1698,-572 1698,-372 864,-372"/>
|
||||
<polygon fill="white" stroke="none" points="869,-545 869,-567 1693,-567 1693,-545 869,-545"/>
|
||||
<text text-anchor="start" x="1256.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="869,-517 869,-540 967,-540 967,-517 869,-517"/>
|
||||
<polygon fill="none" stroke="black" points="869,-517 869,-540 967,-540 967,-517 869,-517"/>
|
||||
<text text-anchor="start" x="875.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[25] qr-04542d8f-13</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="972,-517 972,-540 1071,-540 1071,-517 972,-517"/>
|
||||
<polygon fill="none" stroke="black" points="972,-517 972,-540 1071,-540 1071,-517 972,-517"/>
|
||||
<text text-anchor="start" x="978" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[23] tapfd625661-7e</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1076,-517 1076,-540 1175,-540 1175,-517 1076,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1076,-517 1076,-540 1175,-540 1175,-517 1076,-517"/>
|
||||
<text text-anchor="start" x="1082" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[24] qr-e503ba9c-89</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1180,-517 1180,-540 1279,-540 1279,-517 1180,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1180,-517 1180,-540 1279,-540 1279,-517 1180,-517"/>
|
||||
<text text-anchor="start" x="1186" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[22] tapb9083cd7-6f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1284,-517 1284,-540 1381,-540 1381,-517 1284,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1284,-517 1284,-540 1381,-540 1381,-517 1284,-517"/>
|
||||
<text text-anchor="start" x="1290" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[27] qr-fb2585a7-bd</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1386,-517 1386,-540 1485,-540 1485,-517 1386,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1386,-517 1386,-540 1485,-540 1485,-517 1386,-517"/>
|
||||
<text text-anchor="start" x="1392" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[23] tapfd625661-7e</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1490,-517 1490,-540 1589,-540 1589,-517 1490,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1490,-517 1490,-540 1589,-540 1589,-517 1490,-517"/>
|
||||
<text text-anchor="start" x="1496" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[26] qr-5de9034a-db</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1594,-517 1594,-540 1693,-540 1693,-517 1594,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1594,-517 1594,-540 1693,-540 1693,-517 1594,-517"/>
|
||||
<text text-anchor="start" x="1600" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[22] tapb9083cd7-6f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="869,-489 869,-512 967,-512 967,-489 869,-489"/>
|
||||
<polygon fill="none" stroke="black" points="869,-489 869,-512 967,-512 967,-489 869,-489"/>
|
||||
<text text-anchor="start" x="892" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="972,-489 972,-512 1071,-512 1071,-489 972,-489"/>
|
||||
<polygon fill="none" stroke="black" points="972,-489 972,-512 1071,-512 1071,-489 972,-489"/>
|
||||
<text text-anchor="start" x="995.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1076,-489 1076,-512 1175,-512 1175,-489 1076,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1076,-489 1076,-512 1175,-512 1175,-489 1076,-489"/>
|
||||
<text text-anchor="start" x="1099.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1180,-489 1180,-512 1279,-512 1279,-489 1180,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1180,-489 1180,-512 1279,-512 1279,-489 1180,-489"/>
|
||||
<text text-anchor="start" x="1203.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1284,-489 1284,-512 1381,-512 1381,-489 1284,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1284,-489 1284,-512 1381,-512 1381,-489 1284,-489"/>
|
||||
<text text-anchor="start" x="1306.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1386,-489 1386,-512 1485,-512 1485,-489 1386,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1386,-489 1386,-512 1485,-512 1485,-489 1386,-489"/>
|
||||
<text text-anchor="start" x="1409.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1490,-489 1490,-512 1589,-512 1589,-489 1490,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1490,-489 1490,-512 1589,-512 1589,-489 1490,-489"/>
|
||||
<text text-anchor="start" x="1513.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1594,-489 1594,-512 1693,-512 1693,-489 1594,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1594,-489 1594,-512 1693,-512 1693,-489 1594,-489"/>
|
||||
<text text-anchor="start" x="1617.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="869,-461 869,-484 967,-484 967,-461 869,-461"/>
|
||||
<polygon fill="none" stroke="black" points="869,-461 869,-484 967,-484 967,-461 869,-461"/>
|
||||
<text text-anchor="start" x="893.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.1/24</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="972,-461 972,-484 1071,-484 1071,-461 972,-461"/>
|
||||
<polygon fill="none" stroke="black" points="972,-461 972,-484 1071,-484 1071,-461 972,-461"/>
|
||||
<text text-anchor="start" x="997" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1076,-461 1076,-484 1175,-484 1175,-461 1076,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1076,-461 1076,-484 1175,-484 1175,-461 1076,-461"/>
|
||||
<text text-anchor="start" x="1101" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1180,-461 1180,-484 1279,-484 1279,-461 1180,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1180,-461 1180,-484 1279,-484 1279,-461 1180,-461"/>
|
||||
<text text-anchor="start" x="1205" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1284,-461 1284,-484 1381,-484 1381,-461 1284,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1284,-461 1284,-484 1381,-484 1381,-461 1284,-461"/>
|
||||
<text text-anchor="start" x="1308" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.5/24</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1386,-461 1386,-484 1485,-484 1485,-461 1386,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1386,-461 1386,-484 1485,-484 1485,-461 1386,-461"/>
|
||||
<text text-anchor="start" x="1411" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1490,-461 1490,-484 1589,-484 1589,-461 1490,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1490,-461 1490,-484 1589,-484 1589,-461 1490,-461"/>
|
||||
<text text-anchor="start" x="1515" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.5/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1594,-461 1594,-484 1693,-484 1693,-461 1594,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1594,-461 1594,-484 1693,-484 1693,-461 1594,-461"/>
|
||||
<text text-anchor="start" x="1619" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="869,-433 869,-456 1071,-456 1071,-433 869,-433"/>
|
||||
<polygon fill="none" stroke="black" points="869,-433 869,-456 1071,-456 1071,-433 869,-433"/>
|
||||
<text text-anchor="start" x="952.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1076,-433 1076,-456 1279,-456 1279,-433 1076,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1076,-433 1076,-456 1279,-456 1279,-433 1076,-433"/>
|
||||
<text text-anchor="start" x="1160" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1284,-433 1284,-456 1485,-456 1485,-433 1284,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1284,-433 1284,-456 1485,-456 1485,-433 1284,-433"/>
|
||||
<text text-anchor="start" x="1367" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="1490,-433 1490,-456 1693,-456 1693,-433 1490,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1490,-433 1490,-456 1693,-456 1693,-433 1490,-433"/>
|
||||
<text text-anchor="start" x="1574" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="869,-405 869,-428 1279,-428 1279,-405 869,-405"/>
|
||||
<polygon fill="none" stroke="black" points="869,-405 869,-428 1279,-428 1279,-405 869,-405"/>
|
||||
<text text-anchor="start" x="1058.5" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="1284,-405 1284,-428 1693,-428 1693,-405 1284,-405"/>
|
||||
<polygon fill="none" stroke="black" points="1284,-405 1284,-428 1693,-428 1693,-405 1284,-405"/>
|
||||
<text text-anchor="start" x="1473" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="869,-377 869,-400 1693,-400 1693,-377 869,-377"/>
|
||||
<polygon fill="none" stroke="black" points="869,-377 869,-400 1693,-400 1693,-377 869,-377"/>
|
||||
<text text-anchor="start" x="1250.5" y="-386" font-family="Helvetica,sans-Serif" font-size="10.00">[19] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge19" class="edge"><title>br_ex:qg_e6c19c2c_8c:s->network_br_int:qr_04542d8f_13:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M1178,-656C1178,-529.646 918,-667.354 918,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge20" class="edge"><title>br_ex:qg_e6c19c2c_8c:s->network_br_int:qr_e503ba9c_89:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M1178,-656C1178,-599.722 1125,-597.278 1125,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge21" class="edge"><title>br_ex:qg_718e237a_3a:s->network_br_int:qr_fb2585a7_bd:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M1280,-656C1280,-599.722 1333,-597.278 1333,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge22" class="edge"><title>br_ex:qg_718e237a_3a:s->network_br_int:qr_5de9034a_db:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M1280,-656C1280,-529.646 1540,-667.354 1540,-541"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="1227.5,-204 1227.5,-264 1332.5,-264 1332.5,-204 1227.5,-204"/>
|
||||
<polygon fill="white" stroke="none" points="1233,-237 1233,-259 1328,-259 1328,-237 1233,-237"/>
|
||||
<text text-anchor="start" x="1254.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="1233,-209 1233,-232 1328,-232 1328,-209 1233,-209"/>
|
||||
<polygon fill="none" stroke="black" points="1233,-209 1233,-232 1328,-232 1328,-209 1233,-209"/>
|
||||
<text text-anchor="start" x="1254.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge18" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M1281,-376C1281,-312.444 1281,-296.556 1281,-233"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 40 KiB |
BIN
openstack_dashboard/don/ovs/static/net_topology.png
Normal file
After Width: | Height: | Size: 78 KiB |
92
openstack_dashboard/don/ovs/static/network.dot
Normal file
@ -0,0 +1,92 @@
|
||||
digraph DON_network {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_757bf552_73">[2] qg-757bf552-73</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b">[8] qr-43b83157-3b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5">[5] tap59f90a3b-f5</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b10.10.0.1/24">10.10.0.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f510.10.0.2/24">10.10.0.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_757bf552_73:s -> network_br_int:qr_43b83157_3b:n [color = "#0066cc", penwidth = "4"]
|
||||
|
||||
}
|
||||
|
100
openstack_dashboard/don/ovs/static/network.svg
Normal file
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_network Pages: 1 -->
|
||||
<svg width="274pt" height="704pt"
|
||||
viewBox="0.00 0.00 274.00 704.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 700)">
|
||||
<title>DON_network</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-700 270,-700 270,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="none" stroke="black" points="26,-632 26,-688 144,-688 144,-632 26,-632"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-584 258,-584 258,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-436 16,-576 154,-576 154,-436 16,-436"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-156 16,-380 250,-380 250,-156 16,-156"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="78,-16 78,-100 190,-100 190,-16 78,-16"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node1" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="42.5,-644 42.5,-676 127.5,-676 127.5,-644 42.5,-644"/>
|
||||
<polygon fill="yellow" stroke="none" points="48,-649 48,-671 123,-671 123,-649 48,-649"/>
|
||||
<text text-anchor="start" x="53.5" y="-657.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node2" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="32.5,-448 32.5,-564 137.5,-564 137.5,-448 32.5,-448"/>
|
||||
<polygon fill="white" stroke="none" points="38,-537 38,-559 133,-559 133,-537 38,-537"/>
|
||||
<text text-anchor="start" x="61" y="-545.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-509 38,-532 133,-532 133,-509 38,-509"/>
|
||||
<polygon fill="none" stroke="black" points="38,-509 38,-532 133,-532 133,-509 38,-509"/>
|
||||
<text text-anchor="start" x="70" y="-518" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-481 38,-504 133,-504 133,-481 38,-481"/>
|
||||
<polygon fill="none" stroke="black" points="38,-481 38,-504 133,-504 133,-481 38,-481"/>
|
||||
<text text-anchor="start" x="55.5" y="-490" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-453 38,-476 133,-476 133,-453 38,-453"/>
|
||||
<polygon fill="none" stroke="black" points="38,-453 38,-476 133,-476 133,-453 38,-453"/>
|
||||
<text text-anchor="start" x="44.5" y="-462" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node3" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="32.5,-168 32.5,-368 233.5,-368 233.5,-168 32.5,-168"/>
|
||||
<polygon fill="white" stroke="none" points="38,-341 38,-363 229,-363 229,-341 38,-341"/>
|
||||
<text text-anchor="start" x="109" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-313 38,-336 133,-336 133,-313 38,-313"/>
|
||||
<polygon fill="none" stroke="black" points="38,-313 38,-336 133,-336 133,-313 38,-313"/>
|
||||
<text text-anchor="start" x="44.5" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-313 138,-336 229,-336 229,-313 138,-313"/>
|
||||
<polygon fill="none" stroke="black" points="138,-313 138,-336 229,-336 229,-313 138,-313"/>
|
||||
<text text-anchor="start" x="144" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tap59f90a3b-f5</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-285 38,-308 133,-308 133,-285 38,-285"/>
|
||||
<polygon fill="none" stroke="black" points="38,-285 38,-308 133,-308 133,-285 38,-285"/>
|
||||
<text text-anchor="start" x="59.5" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-285 138,-308 229,-308 229,-285 138,-285"/>
|
||||
<polygon fill="none" stroke="black" points="138,-285 138,-308 229,-308 229,-285 138,-285"/>
|
||||
<text text-anchor="start" x="157.5" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-257 38,-280 133,-280 133,-257 38,-257"/>
|
||||
<polygon fill="none" stroke="black" points="38,-257 38,-280 133,-280 133,-257 38,-257"/>
|
||||
<text text-anchor="start" x="58" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-257 138,-280 229,-280 229,-257 138,-257"/>
|
||||
<polygon fill="none" stroke="black" points="138,-257 138,-280 229,-280 229,-257 138,-257"/>
|
||||
<text text-anchor="start" x="156" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-229 38,-252 229,-252 229,-229 38,-229"/>
|
||||
<polygon fill="none" stroke="black" points="38,-229 38,-252 229,-252 229,-229 38,-229"/>
|
||||
<text text-anchor="start" x="116" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-201 38,-224 229,-224 229,-201 38,-201"/>
|
||||
<polygon fill="none" stroke="black" points="38,-201 38,-224 229,-224 229,-201 38,-201"/>
|
||||
<text text-anchor="start" x="118" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="38,-173 38,-196 229,-196 229,-173 38,-173"/>
|
||||
<polygon fill="none" stroke="black" points="38,-173 38,-196 229,-196 229,-173 38,-173"/>
|
||||
<text text-anchor="start" x="106" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge3" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M86,-452C86,-400.887 85,-388.113 85,-337"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node4" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="94,-28 94,-88 174,-88 174,-28 94,-28"/>
|
||||
<polygon fill="white" stroke="none" points="99,-61 99,-83 169,-83 169,-61 99,-61"/>
|
||||
<text text-anchor="start" x="108" y="-69.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="99,-33 99,-56 169,-56 169,-33 99,-33"/>
|
||||
<polygon fill="none" stroke="black" points="99,-33 99,-56 169,-56 169,-33 99,-33"/>
|
||||
<text text-anchor="start" x="108" y="-42" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge2" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M134,-172C134,-120.889 134,-108.111 134,-57"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 9.6 KiB |
27
openstack_dashboard/don/ovs/static/path.html
Normal file
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Ping Tracer</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Ping Tracer
|
||||
</th>
|
||||
<tr>
|
||||
<td align="center" class="clickme">
|
||||
<button class="myButton"
|
||||
onClick="history.go(-1)">
|
||||
Back</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="ping.svg" width="100%" height="850" type="image/svg+xml" id="ping_svg"></object></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
278
openstack_dashboard/don/ovs/static/ping.dot
Normal file
@ -0,0 +1,278 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM1-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM1-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM3-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM3-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="3" BGCOLOR="#909090">VM4</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">public</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10023">10.0.2.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10024">10.0.2.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10033">10.0.3.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10034">10.0.3.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="1722445">172.24.4.5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10036">10.0.3.6</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10026">10.0.2.6</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tape0d697f2_cb">tape0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapbd4f1f72_5f">tapbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapbd96ca7d_5e">tapbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tap4441e3a6_f2">tap4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapce3d7b20_1d">tapce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapf0841d56_02">tapf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapfbb76083_60">tapfbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbre0d697f2_cb">qbre0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrbd4f1f72_5f">qbrbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbrbd96ca7d_5e">qbrbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbr4441e3a6_f2">qbr4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrce3d7b20_1d">qbrce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrf0841d56_02">qbrf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrfbb76083_60">qbrfbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbe0d697f2_cb">qvbe0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbbd4f1f72_5f">qvbbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbbd96ca7d_5e">qvbbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvb4441e3a6_f2">qvb4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbce3d7b20_1d">qvbce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbf0841d56_02">qvbf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbfbb76083_60">qvbfbb76083-60</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvoe0d697f2_cb">[9] qvoe0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd4f1f72_5f">[10] qvobd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvobd96ca7d_5e">[11] qvobd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvo4441e3a6_f2">[12] qvo4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoce3d7b20_1d">[17] qvoce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvof0841d56_02">[16] qvof0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvofbb76083_60">[15] qvofbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoe0d697f2_cbtag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd4f1f72_5ftag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd96ca7d_5etag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvo4441e3a6_f2tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoce3d7b20_1dtag_4">VLAN tag:4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvof0841d56_02tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvofbb76083_60tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#909090", penwidth = "4", style="invis"]
|
||||
VMs:10023:s -> LinuxBridge:tape0d697f2_cb:n [color = "#009900", penwidth = "4"]
|
||||
VMs:10024:s -> LinuxBridge:tapbd4f1f72_5f:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10033:s -> LinuxBridge:tapbd96ca7d_5e:n [color = "#009900", penwidth = "4"]
|
||||
VMs:10034:s -> LinuxBridge:tap4441e3a6_f2:n [color = "#909090", penwidth = "4"]
|
||||
VMs:1722445:s -> LinuxBridge:tapce3d7b20_1d:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10036:s -> LinuxBridge:tapf0841d56_02:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10026:s -> LinuxBridge:tapfbb76083_60:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbe0d697f2_cb:s -> compute_br_int:qvoe0d697f2_cb:n [color = "#009900", penwidth = "4"]
|
||||
LinuxBridge:qvbbd4f1f72_5f:s -> compute_br_int:qvobd4f1f72_5f:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbbd96ca7d_5e:s -> compute_br_int:qvobd96ca7d_5e:n [color = "#009900", penwidth = "4"]
|
||||
LinuxBridge:qvb4441e3a6_f2:s -> compute_br_int:qvo4441e3a6_f2:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbce3d7b20_1d:s -> compute_br_int:qvoce3d7b20_1d:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbf0841d56_02:s -> compute_br_int:qvof0841d56_02:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbfbb76083_60:s -> compute_br_int:qvofbb76083_60:n [color = "#909090", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#909090", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="172.24.4.4/24">172.24.4.4/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qg_eb8796fb_83">[2] qg-eb8796fb-83</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qg_e2b1b0d3_a8">[3] qg-e2b1b0d3-a8</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="8" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_09a15e37_ca">[8] qr-09a15e37-ca</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb">[6] tapd0828ef0-eb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_622abba5_e2">[7] qr-622abba5-e2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0">[5] tapd6f091a2-c0</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e5">[13] qr-361be2af-e5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0">[5] tapd6f091a2-c0</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_36">[14] qr-b66b902a-36</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb">[6] tapd0828ef0-eb</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_09a15e37_catag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_ebtag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_622abba5_e2tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e5tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_36tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_ebtag_3">VLAN tag:3</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_09a15e37_ca10.0.3.1/24">10.0.3.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb10.0.3.2/24">10.0.3.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_622abba5_e210.0.2.1/24">10.0.2.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c010.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e510.0.2.5/24">10.0.2.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c010.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_3610.0.3.5/24">10.0.3.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb10.0.3.2/24">10.0.3.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private2">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private2">private2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#909090" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#909090" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="8" BGCOLOR="#909090" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#909090", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_e2b1b0d3_a8:s -> network_br_int:qr_361be2af_e5:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_e2b1b0d3_a8:s -> network_br_int:qr_b66b902a_36:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_eb8796fb_83:s -> network_br_int:qr_09a15e37_ca:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_eb8796fb_83:s -> network_br_int:qr_622abba5_e2:n [color = "#909090", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
1
openstack_dashboard/don/ovs/static/ping.html
Normal file
@ -0,0 +1 @@
|
||||
{"src": "10.0.2.3", "dst_info": {"ip": "10.0.3.3", "ports": {"brctl": "qbrbd96ca7d-5e", "qvo": "qvobd96ca7d-5e", "tap": "tapbd96ca7d-5e", "qvb": "qvbbd96ca7d-5e"}, "tag": "3", "pass": ["qbrbd96ca7d-5e", "qvobd96ca7d-5e", "tapbd96ca7d-5e", "qvbbd96ca7d-5e"], "fail": ["qbrbd96ca7d-5e", "qvobd96ca7d-5e", "tapbd96ca7d-5e", "qvbbd96ca7d-5e"], "counts": {"brctl": 2, "qvo": 2, "tap": 2, "qvb": 2}, "pids": [19059, 19060, 19064, 19068]}, "dst": "10.0.3.3", "ping_pass": true, "error": "", "net_info": {"hops": [{"ip": "10.0.2.1", "nms": "qrouter-dc5f8d60-ae94-4879-b8ff-ec5daa33a66a", "dev": "qr-622abba5-e2"}, {"nms": "qrouter-dc5f8d60-ae94-4879-b8ff-ec5daa33a66a", "dev": "qr-09a15e37-ca"}], "fail": ["qr-622abba5-e2", "qr-09a15e37-ca"], "pids": [19072, 19075], "counts": {"qr-09a15e37-ca": 2, "qr-622abba5-e2": 2}, "pass": ["qr-622abba5-e2", "qr-09a15e37-ca"]}, "src_info": {"ip": "10.0.2.3", "ports": {"brctl": "qbre0d697f2-cb", "qvo": "qvoe0d697f2-cb", "tap": "tape0d697f2-cb", "qvb": "qvbe0d697f2-cb"}, "tag": "2", "pass": ["qbre0d697f2-cb", "qvoe0d697f2-cb", "tape0d697f2-cb", "qvbe0d697f2-cb"], "fail": ["qbre0d697f2-cb", "qvoe0d697f2-cb", "tape0d697f2-cb", "qvbe0d697f2-cb"], "counts": {"brctl": 2, "qvo": 2, "tap": 2, "qvb": 2}, "pids": [19049, 19051, 19053, 19054]}}
|
473
openstack_dashboard/don/ovs/static/ping.svg
Normal file
@ -0,0 +1,473 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="1710pt" height="916pt"
|
||||
viewBox="0.00 0.00 1710.00 916.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 912)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-912 1706,-912 1706,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-900 816,-900 816,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="352,-836 352,-892 472,-892 472,-836 352,-836"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="79,-394 79,-788 741,-788 741,-394 79,-394"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="202,-640 202,-780 622,-780 622,-640 202,-640"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="87,-402 87,-542 733,-542 733,-402 87,-402"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-312 808,-312 808,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-164 24,-304 800,-304 800,-164 24,-164"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="343,-24 343,-108 481,-108 481,-24 343,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="824,-176 824,-900 1694,-900 1694,-176 824,-176"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="832,-184 832,-788 1686,-788 1686,-184 832,-184"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1088,-640 1088,-780 1326,-780 1326,-640 1088,-640"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="840,-360 840,-584 1678,-584 1678,-360 840,-360"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1189,-192 1189,-276 1327,-276 1327,-192 1189,-192"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1148,-836 1148,-892 1266,-892 1266,-836 1148,-836"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="368,-848 368,-880 456,-880 456,-848 368,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="373,-853 373,-875 451,-875 451,-853 373,-853"/>
|
||||
<text text-anchor="start" x="378.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="218.5,-652 218.5,-768 605.5,-768 605.5,-652 218.5,-652"/>
|
||||
<polygon fill="white" stroke="none" points="224,-741 224,-763 601,-763 601,-741 224,-741"/>
|
||||
<text text-anchor="start" x="402" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#909090" stroke="none" points="224,-713 224,-736 273,-736 273,-713 224,-713"/>
|
||||
<polygon fill="none" stroke="black" points="224,-713 224,-736 273,-736 273,-713 224,-713"/>
|
||||
<text text-anchor="start" x="234" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-1</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-713 278,-736 326,-736 326,-713 278,-713"/>
|
||||
<polygon fill="none" stroke="black" points="278,-713 278,-736 326,-736 326,-713 278,-713"/>
|
||||
<text text-anchor="start" x="287.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-2</text>
|
||||
<polygon fill="#909090" stroke="none" points="331,-713 331,-736 379,-736 379,-713 331,-713"/>
|
||||
<polygon fill="none" stroke="black" points="331,-713 331,-736 379,-736 379,-713 331,-713"/>
|
||||
<text text-anchor="start" x="340.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-1</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-713 384,-736 432,-736 432,-713 384,-713"/>
|
||||
<polygon fill="none" stroke="black" points="384,-713 384,-736 432,-736 432,-713 384,-713"/>
|
||||
<text text-anchor="start" x="393.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-2</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-713 437,-736 601,-736 601,-713 437,-713"/>
|
||||
<polygon fill="none" stroke="black" points="437,-713 437,-736 601,-736 601,-713 437,-713"/>
|
||||
<text text-anchor="start" x="508.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM4</text>
|
||||
<polygon fill="#909090" stroke="none" points="224,-685 224,-708 273,-708 273,-685 224,-685"/>
|
||||
<polygon fill="none" stroke="black" points="224,-685 224,-708 273,-708 273,-685 224,-685"/>
|
||||
<text text-anchor="start" x="231" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-685 278,-708 326,-708 326,-685 278,-685"/>
|
||||
<polygon fill="none" stroke="black" points="278,-685 278,-708 326,-708 326,-685 278,-685"/>
|
||||
<text text-anchor="start" x="284.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="331,-685 331,-708 379,-708 379,-685 331,-685"/>
|
||||
<polygon fill="none" stroke="black" points="331,-685 331,-708 379,-708 379,-685 331,-685"/>
|
||||
<text text-anchor="start" x="337.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-685 384,-708 432,-708 432,-685 384,-685"/>
|
||||
<polygon fill="none" stroke="black" points="384,-685 384,-708 432,-708 432,-685 384,-685"/>
|
||||
<text text-anchor="start" x="390.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-685 437,-708 495,-708 495,-685 437,-685"/>
|
||||
<polygon fill="none" stroke="black" points="437,-685 437,-708 495,-708 495,-685 437,-685"/>
|
||||
<text text-anchor="start" x="453" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">public</text>
|
||||
<polygon fill="#909090" stroke="none" points="500,-685 500,-708 548,-708 548,-685 500,-685"/>
|
||||
<polygon fill="none" stroke="black" points="500,-685 500,-708 548,-708 548,-685 500,-685"/>
|
||||
<text text-anchor="start" x="506.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="553,-685 553,-708 601,-708 601,-685 553,-685"/>
|
||||
<polygon fill="none" stroke="black" points="553,-685 553,-708 601,-708 601,-685 553,-685"/>
|
||||
<text text-anchor="start" x="559.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="224,-657 224,-680 273,-680 273,-657 224,-657"/>
|
||||
<polygon fill="none" stroke="black" points="224,-657 224,-680 273,-680 273,-657 224,-657"/>
|
||||
<text text-anchor="start" x="230.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.3</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-657 278,-680 326,-680 326,-657 278,-657"/>
|
||||
<polygon fill="none" stroke="black" points="278,-657 278,-680 326,-680 326,-657 278,-657"/>
|
||||
<text text-anchor="start" x="284" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.4</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="331,-657 331,-680 379,-680 379,-657 331,-657"/>
|
||||
<polygon fill="none" stroke="black" points="331,-657 331,-680 379,-680 379,-657 331,-657"/>
|
||||
<text text-anchor="start" x="337" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.3</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-657 384,-680 432,-680 432,-657 384,-657"/>
|
||||
<polygon fill="none" stroke="black" points="384,-657 384,-680 432,-680 432,-657 384,-657"/>
|
||||
<text text-anchor="start" x="390" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.4</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-657 437,-680 495,-680 495,-657 437,-657"/>
|
||||
<polygon fill="none" stroke="black" points="437,-657 437,-680 495,-680 495,-657 437,-657"/>
|
||||
<text text-anchor="start" x="443" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.5</text>
|
||||
<polygon fill="#909090" stroke="none" points="500,-657 500,-680 548,-680 548,-657 500,-657"/>
|
||||
<polygon fill="none" stroke="black" points="500,-657 500,-680 548,-680 548,-657 500,-657"/>
|
||||
<text text-anchor="start" x="506" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.6</text>
|
||||
<polygon fill="#909090" stroke="none" points="553,-657 553,-680 601,-680 601,-657 553,-657"/>
|
||||
<polygon fill="none" stroke="black" points="553,-657 553,-680 601,-680 601,-657 553,-657"/>
|
||||
<text text-anchor="start" x="559" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.6</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<polygon fill="white" stroke="none" points="103,-414 103,-530 717,-530 717,-414 103,-414"/>
|
||||
<polygon fill="white" stroke="none" points="108,-503 108,-525 712,-525 712,-503 108,-503"/>
|
||||
<text text-anchor="start" x="382.5" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">Linux Bridge</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-475 108,-498 191,-498 191,-475 108,-475"/>
|
||||
<polygon fill="none" stroke="black" points="108,-475 108,-498 191,-498 191,-475 108,-475"/>
|
||||
<text text-anchor="start" x="116" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tape0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-475 196,-498 273,-498 273,-475 196,-475"/>
|
||||
<polygon fill="none" stroke="black" points="196,-475 196,-498 273,-498 273,-475 196,-475"/>
|
||||
<text text-anchor="start" x="203" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-475 278,-498 362,-498 362,-475 278,-475"/>
|
||||
<polygon fill="none" stroke="black" points="278,-475 278,-498 362,-498 362,-475 278,-475"/>
|
||||
<text text-anchor="start" x="285" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-475 367,-498 449,-498 449,-475 367,-475"/>
|
||||
<polygon fill="none" stroke="black" points="367,-475 367,-498 449,-498 449,-475 367,-475"/>
|
||||
<text text-anchor="start" x="374.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-475 454,-498 538,-498 538,-475 454,-475"/>
|
||||
<polygon fill="none" stroke="black" points="454,-475 454,-498 538,-498 538,-475 454,-475"/>
|
||||
<text text-anchor="start" x="461" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-475 543,-498 625,-498 625,-475 543,-475"/>
|
||||
<polygon fill="none" stroke="black" points="543,-475 543,-498 625,-498 625,-475 543,-475"/>
|
||||
<text text-anchor="start" x="550.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-475 630,-498 712,-498 712,-475 630,-475"/>
|
||||
<polygon fill="none" stroke="black" points="630,-475 630,-498 712,-498 712,-475 630,-475"/>
|
||||
<text text-anchor="start" x="637.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapfbb76083-60</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-447 108,-470 191,-470 191,-447 108,-447"/>
|
||||
<polygon fill="none" stroke="black" points="108,-447 108,-470 191,-470 191,-447 108,-447"/>
|
||||
<text text-anchor="start" x="116" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbre0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-447 196,-470 273,-470 273,-447 196,-447"/>
|
||||
<polygon fill="none" stroke="black" points="196,-447 196,-470 273,-470 273,-447 196,-447"/>
|
||||
<text text-anchor="start" x="203" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-447 278,-470 362,-470 362,-447 278,-447"/>
|
||||
<polygon fill="none" stroke="black" points="278,-447 278,-470 362,-470 362,-447 278,-447"/>
|
||||
<text text-anchor="start" x="285" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-447 367,-470 449,-470 449,-447 367,-447"/>
|
||||
<polygon fill="none" stroke="black" points="367,-447 367,-470 449,-470 449,-447 367,-447"/>
|
||||
<text text-anchor="start" x="374.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-447 454,-470 538,-470 538,-447 454,-447"/>
|
||||
<polygon fill="none" stroke="black" points="454,-447 454,-470 538,-470 538,-447 454,-447"/>
|
||||
<text text-anchor="start" x="461" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-447 543,-470 625,-470 625,-447 543,-447"/>
|
||||
<polygon fill="none" stroke="black" points="543,-447 543,-470 625,-470 625,-447 543,-447"/>
|
||||
<text text-anchor="start" x="550.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-447 630,-470 712,-470 712,-447 630,-447"/>
|
||||
<polygon fill="none" stroke="black" points="630,-447 630,-470 712,-470 712,-447 630,-447"/>
|
||||
<text text-anchor="start" x="637.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrfbb76083-60</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-419 108,-442 191,-442 191,-419 108,-419"/>
|
||||
<polygon fill="none" stroke="black" points="108,-419 108,-442 191,-442 191,-419 108,-419"/>
|
||||
<text text-anchor="start" x="114.5" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbe0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-419 196,-442 273,-442 273,-419 196,-419"/>
|
||||
<polygon fill="none" stroke="black" points="196,-419 196,-442 273,-442 273,-419 196,-419"/>
|
||||
<text text-anchor="start" x="202" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-419 278,-442 362,-442 362,-419 278,-419"/>
|
||||
<polygon fill="none" stroke="black" points="278,-419 278,-442 362,-442 362,-419 278,-419"/>
|
||||
<text text-anchor="start" x="284" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-419 367,-442 449,-442 449,-419 367,-419"/>
|
||||
<polygon fill="none" stroke="black" points="367,-419 367,-442 449,-442 449,-419 367,-419"/>
|
||||
<text text-anchor="start" x="373" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-419 454,-442 538,-442 538,-419 454,-419"/>
|
||||
<polygon fill="none" stroke="black" points="454,-419 454,-442 538,-442 538,-419 454,-419"/>
|
||||
<text text-anchor="start" x="460" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-419 543,-442 625,-442 625,-419 543,-419"/>
|
||||
<polygon fill="none" stroke="black" points="543,-419 543,-442 625,-442 625,-419 543,-419"/>
|
||||
<text text-anchor="start" x="549" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-419 630,-442 712,-442 712,-419 630,-419"/>
|
||||
<polygon fill="none" stroke="black" points="630,-419 630,-442 712,-442 712,-419 630,-419"/>
|
||||
<text text-anchor="start" x="636" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbfbb76083-60</text>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge2" class="edge"><title>VMs:10023:s->LinuxBridge:tape0d697f2_cb:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M248,-656C248,-573.508 149,-581.492 149,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge3" class="edge"><title>VMs:10024:s->LinuxBridge:tapbd4f1f72_5f:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M302,-656C302,-579.958 234,-575.042 234,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge4" class="edge"><title>VMs:10033:s->LinuxBridge:tapbd96ca7d_5e:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M355,-656C355,-584.509 320,-570.491 320,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge5" class="edge"><title>VMs:10034:s->LinuxBridge:tap4441e3a6_f2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M408,-656C408,-586.222 408,-568.778 408,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge6" class="edge"><title>VMs:1722445:s->LinuxBridge:tapce3d7b20_1d:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M466,-656C466,-584.96 496,-570.04 496,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge7" class="edge"><title>VMs:10036:s->LinuxBridge:tapf0841d56_02:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M524,-656C524,-581.3 584,-573.7 584,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge8" class="edge"><title>VMs:10026:s->LinuxBridge:tapfbb76083_60:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M577,-656C577,-574.672 671,-580.328 671,-499"/>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40.5,-176 40.5,-292 783.5,-292 783.5,-176 40.5,-176"/>
|
||||
<polygon fill="white" stroke="none" points="46,-265 46,-287 779,-287 779,-265 46,-265"/>
|
||||
<text text-anchor="start" x="388" y="-273.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="46,-237 46,-260 143,-260 143,-237 46,-237"/>
|
||||
<polygon fill="none" stroke="black" points="46,-237 46,-260 143,-260 143,-237 46,-237"/>
|
||||
<text text-anchor="start" x="52.5" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[9] qvoe0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="148,-237 148,-260 245,-260 245,-237 148,-237"/>
|
||||
<polygon fill="none" stroke="black" points="148,-237 148,-260 245,-260 245,-237 148,-237"/>
|
||||
<text text-anchor="start" x="154" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[10] qvobd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="250,-237 250,-260 353,-260 353,-237 250,-237"/>
|
||||
<polygon fill="none" stroke="black" points="250,-237 250,-260 353,-260 353,-237 250,-237"/>
|
||||
<text text-anchor="start" x="256" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[11] qvobd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="358,-237 358,-260 459,-260 459,-237 358,-237"/>
|
||||
<polygon fill="none" stroke="black" points="358,-237 358,-260 459,-260 459,-237 358,-237"/>
|
||||
<text text-anchor="start" x="364" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[12] qvo4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="464,-237 464,-260 567,-260 567,-237 464,-237"/>
|
||||
<polygon fill="none" stroke="black" points="464,-237 464,-260 567,-260 567,-237 464,-237"/>
|
||||
<text text-anchor="start" x="470" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[17] qvoce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="572,-237 572,-260 673,-260 673,-237 572,-237"/>
|
||||
<polygon fill="none" stroke="black" points="572,-237 572,-260 673,-260 673,-237 572,-237"/>
|
||||
<text text-anchor="start" x="578" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[16] qvof0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="678,-237 678,-260 779,-260 779,-237 678,-237"/>
|
||||
<polygon fill="none" stroke="black" points="678,-237 678,-260 779,-260 779,-237 678,-237"/>
|
||||
<text text-anchor="start" x="684" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[15] qvofbb76083-60</text>
|
||||
<polygon fill="#909090" stroke="none" points="46,-209 46,-232 143,-232 143,-209 46,-209"/>
|
||||
<polygon fill="none" stroke="black" points="46,-209 46,-232 143,-232 143,-209 46,-209"/>
|
||||
<text text-anchor="start" x="68.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="148,-209 148,-232 245,-232 245,-209 148,-209"/>
|
||||
<polygon fill="none" stroke="black" points="148,-209 148,-232 245,-232 245,-209 148,-209"/>
|
||||
<text text-anchor="start" x="170.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="250,-209 250,-232 353,-232 353,-209 250,-209"/>
|
||||
<polygon fill="none" stroke="black" points="250,-209 250,-232 353,-232 353,-209 250,-209"/>
|
||||
<text text-anchor="start" x="275.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="358,-209 358,-232 459,-232 459,-209 358,-209"/>
|
||||
<polygon fill="none" stroke="black" points="358,-209 358,-232 459,-232 459,-209 358,-209"/>
|
||||
<text text-anchor="start" x="382.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="464,-209 464,-232 567,-232 567,-209 464,-209"/>
|
||||
<polygon fill="none" stroke="black" points="464,-209 464,-232 567,-232 567,-209 464,-209"/>
|
||||
<text text-anchor="start" x="489.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:4</text>
|
||||
<polygon fill="#909090" stroke="none" points="572,-209 572,-232 673,-232 673,-209 572,-209"/>
|
||||
<polygon fill="none" stroke="black" points="572,-209 572,-232 673,-232 673,-209 572,-209"/>
|
||||
<text text-anchor="start" x="596.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="678,-209 678,-232 779,-232 779,-209 678,-209"/>
|
||||
<polygon fill="none" stroke="black" points="678,-209 678,-232 779,-232 779,-209 678,-209"/>
|
||||
<text text-anchor="start" x="702.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="46,-181 46,-204 779,-204 779,-181 46,-181"/>
|
||||
<polygon fill="none" stroke="black" points="46,-181 46,-204 779,-204 779,-181 46,-181"/>
|
||||
<text text-anchor="start" x="385" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge9" class="edge"><title>LinuxBridge:qvbe0d697f2_cb:s->compute_br_int:qvoe0d697f2_cb:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M149,-418C149,-344.064 94,-334.936 94,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge10" class="edge"><title>LinuxBridge:qvbbd4f1f72_5f:s->compute_br_int:qvobd4f1f72_5f:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M234,-418C234,-346.207 196,-332.793 196,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge11" class="edge"><title>LinuxBridge:qvbbd96ca7d_5e:s->compute_br_int:qvobd96ca7d_5e:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M320,-418C320,-347.713 301,-331.287 301,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge12" class="edge"><title>LinuxBridge:qvb4441e3a6_f2:s->compute_br_int:qvo4441e3a6_f2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M408,-418C408,-348.222 408,-330.778 408,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge13" class="edge"><title>LinuxBridge:qvbce3d7b20_1d:s->compute_br_int:qvoce3d7b20_1d:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M496,-418C496,-347.658 516,-331.342 516,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge14" class="edge"><title>LinuxBridge:qvbf0841d56_02:s->compute_br_int:qvof0841d56_02:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M584,-418C584,-346.102 623,-332.898 623,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge15" class="edge"><title>LinuxBridge:qvbfbb76083_60:s->compute_br_int:qvofbb76083_60:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M671,-418C671,-343.613 729,-335.387 729,-261"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="359.5,-36 359.5,-96 464.5,-96 464.5,-36 359.5,-36"/>
|
||||
<polygon fill="white" stroke="none" points="365,-69 365,-91 460,-91 460,-69 365,-69"/>
|
||||
<text text-anchor="start" x="386.5" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#909090" stroke="none" points="365,-41 365,-64 460,-64 460,-41 365,-41"/>
|
||||
<polygon fill="none" stroke="black" points="365,-41 365,-64 460,-64 460,-41 365,-41"/>
|
||||
<text text-anchor="start" x="386.5" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge16" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M413,-180C413,-128.889 413,-116.111 413,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="1164.5,-848 1164.5,-880 1249.5,-880 1249.5,-848 1164.5,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="1170,-853 1170,-875 1245,-875 1245,-853 1170,-853"/>
|
||||
<text text-anchor="start" x="1175.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="1104,-652 1104,-768 1310,-768 1310,-652 1104,-652"/>
|
||||
<polygon fill="white" stroke="none" points="1109,-741 1109,-763 1305,-763 1305,-741 1109,-741"/>
|
||||
<text text-anchor="start" x="1182.5" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-713 1109,-736 1204,-736 1204,-713 1109,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-713 1109,-736 1204,-736 1204,-713 1109,-713"/>
|
||||
<text text-anchor="start" x="1141" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-713 1209,-736 1305,-736 1305,-713 1209,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-713 1209,-736 1305,-736 1305,-713 1209,-713"/>
|
||||
<text text-anchor="start" x="1241.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-685 1109,-708 1204,-708 1204,-685 1109,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-685 1109,-708 1204,-708 1204,-685 1109,-685"/>
|
||||
<text text-anchor="start" x="1126.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-685 1209,-708 1305,-708 1305,-685 1209,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-685 1209,-708 1305,-708 1305,-685 1209,-685"/>
|
||||
<text text-anchor="start" x="1227" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.4/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-657 1109,-680 1204,-680 1204,-657 1109,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-657 1109,-680 1204,-680 1204,-657 1109,-657"/>
|
||||
<text text-anchor="start" x="1115.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-eb8796fb-83</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-657 1209,-680 1305,-680 1305,-657 1209,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-657 1209,-680 1305,-680 1305,-657 1209,-657"/>
|
||||
<text text-anchor="start" x="1215" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[3] qg-e2b1b0d3-a8</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="856,-372 856,-572 1662,-572 1662,-372 856,-372"/>
|
||||
<polygon fill="white" stroke="none" points="861,-545 861,-567 1657,-567 1657,-545 861,-545"/>
|
||||
<text text-anchor="start" x="1234.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="861,-517 861,-540 956,-540 956,-517 861,-517"/>
|
||||
<polygon fill="none" stroke="black" points="861,-517 861,-540 956,-540 956,-517 861,-517"/>
|
||||
<text text-anchor="start" x="867.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-09a15e37-ca</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-517 961,-540 1055,-540 1055,-517 961,-517"/>
|
||||
<polygon fill="none" stroke="black" points="961,-517 961,-540 1055,-540 1055,-517 961,-517"/>
|
||||
<text text-anchor="start" x="967" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[6] tapd0828ef0-eb</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1060,-517 1060,-540 1154,-540 1154,-517 1060,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-517 1060,-540 1154,-540 1154,-517 1060,-517"/>
|
||||
<text text-anchor="start" x="1066" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qr-622abba5-e2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-517 1159,-540 1253,-540 1253,-517 1159,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-517 1159,-540 1253,-540 1253,-517 1159,-517"/>
|
||||
<text text-anchor="start" x="1165" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tapd6f091a2-c0</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-517 1258,-540 1355,-540 1355,-517 1258,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-517 1258,-540 1355,-540 1355,-517 1258,-517"/>
|
||||
<text text-anchor="start" x="1264" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[13] qr-361be2af-e5</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-517 1360,-540 1454,-540 1454,-517 1360,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-517 1360,-540 1454,-540 1454,-517 1360,-517"/>
|
||||
<text text-anchor="start" x="1366" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tapd6f091a2-c0</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-517 1459,-540 1558,-540 1558,-517 1459,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-517 1459,-540 1558,-540 1558,-517 1459,-517"/>
|
||||
<text text-anchor="start" x="1465" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[14] qr-b66b902a-36</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-517 1563,-540 1657,-540 1657,-517 1563,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-517 1563,-540 1657,-540 1657,-517 1563,-517"/>
|
||||
<text text-anchor="start" x="1569" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[6] tapd0828ef0-eb</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-489 861,-512 956,-512 956,-489 861,-489"/>
|
||||
<polygon fill="none" stroke="black" points="861,-489 861,-512 956,-512 956,-489 861,-489"/>
|
||||
<text text-anchor="start" x="882.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-489 961,-512 1055,-512 1055,-489 961,-489"/>
|
||||
<polygon fill="none" stroke="black" points="961,-489 961,-512 1055,-512 1055,-489 961,-489"/>
|
||||
<text text-anchor="start" x="982" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-489 1060,-512 1154,-512 1154,-489 1060,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-489 1060,-512 1154,-512 1154,-489 1060,-489"/>
|
||||
<text text-anchor="start" x="1081" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-489 1159,-512 1253,-512 1253,-489 1159,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-489 1159,-512 1253,-512 1253,-489 1159,-489"/>
|
||||
<text text-anchor="start" x="1180" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-489 1258,-512 1355,-512 1355,-489 1258,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-489 1258,-512 1355,-512 1355,-489 1258,-489"/>
|
||||
<text text-anchor="start" x="1280.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-489 1360,-512 1454,-512 1454,-489 1360,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-489 1360,-512 1454,-512 1454,-489 1360,-489"/>
|
||||
<text text-anchor="start" x="1381" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-489 1459,-512 1558,-512 1558,-489 1459,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-489 1459,-512 1558,-512 1558,-489 1459,-489"/>
|
||||
<text text-anchor="start" x="1482.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-489 1563,-512 1657,-512 1657,-489 1563,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-489 1563,-512 1657,-512 1657,-489 1563,-489"/>
|
||||
<text text-anchor="start" x="1584" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-461 861,-484 956,-484 956,-461 861,-461"/>
|
||||
<polygon fill="none" stroke="black" points="861,-461 861,-484 956,-484 956,-461 861,-461"/>
|
||||
<text text-anchor="start" x="884" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.1/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-461 961,-484 1055,-484 1055,-461 961,-461"/>
|
||||
<polygon fill="none" stroke="black" points="961,-461 961,-484 1055,-484 1055,-461 961,-461"/>
|
||||
<text text-anchor="start" x="983.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-461 1060,-484 1154,-484 1154,-461 1060,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-461 1060,-484 1154,-484 1154,-461 1060,-461"/>
|
||||
<text text-anchor="start" x="1082.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.1/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-461 1159,-484 1253,-484 1253,-461 1159,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-461 1159,-484 1253,-484 1253,-461 1159,-461"/>
|
||||
<text text-anchor="start" x="1181.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-461 1258,-484 1355,-484 1355,-461 1258,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-461 1258,-484 1355,-484 1355,-461 1258,-461"/>
|
||||
<text text-anchor="start" x="1282" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.5/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-461 1360,-484 1454,-484 1454,-461 1360,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-461 1360,-484 1454,-484 1454,-461 1360,-461"/>
|
||||
<text text-anchor="start" x="1382.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-461 1459,-484 1558,-484 1558,-461 1459,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-461 1459,-484 1558,-484 1558,-461 1459,-461"/>
|
||||
<text text-anchor="start" x="1484" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.5/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-461 1563,-484 1657,-484 1657,-461 1563,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-461 1563,-484 1657,-484 1657,-461 1563,-461"/>
|
||||
<text text-anchor="start" x="1585.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-433 861,-456 1055,-456 1055,-433 861,-433"/>
|
||||
<polygon fill="none" stroke="black" points="861,-433 861,-456 1055,-456 1055,-433 861,-433"/>
|
||||
<text text-anchor="start" x="940.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-433 1060,-456 1253,-456 1253,-433 1060,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-433 1060,-456 1253,-456 1253,-433 1060,-433"/>
|
||||
<text text-anchor="start" x="1139" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-433 1258,-456 1454,-456 1454,-433 1258,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-433 1258,-456 1454,-456 1454,-433 1258,-433"/>
|
||||
<text text-anchor="start" x="1338.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-433 1459,-456 1657,-456 1657,-433 1459,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-433 1459,-456 1657,-456 1657,-433 1459,-433"/>
|
||||
<text text-anchor="start" x="1540.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-405 861,-428 1253,-428 1253,-405 861,-405"/>
|
||||
<polygon fill="none" stroke="black" points="861,-405 861,-428 1253,-428 1253,-405 861,-405"/>
|
||||
<text text-anchor="start" x="1041.5" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-405 1258,-428 1657,-428 1657,-405 1258,-405"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-405 1258,-428 1657,-428 1657,-405 1258,-405"/>
|
||||
<text text-anchor="start" x="1442" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-377 861,-400 1657,-400 1657,-377 861,-377"/>
|
||||
<polygon fill="none" stroke="black" points="861,-377 861,-400 1657,-400 1657,-377 861,-377"/>
|
||||
<text text-anchor="start" x="1231.5" y="-386" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge19" class="edge"><title>br_ex:qg_e2b1b0d3_a8:s->network_br_int:qr_361be2af_e5:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1257,-656C1257,-600.267 1307,-596.733 1307,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge20" class="edge"><title>br_ex:qg_e2b1b0d3_a8:s->network_br_int:qr_b66b902a_36:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1257,-656C1257,-532.889 1509,-664.111 1509,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge21" class="edge"><title>br_ex:qg_eb8796fb_83:s->network_br_int:qr_09a15e37_ca:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1156,-656C1156,-534.504 908,-662.496 908,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge22" class="edge"><title>br_ex:qg_eb8796fb_83:s->network_br_int:qr_622abba5_e2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1156,-656C1156,-600.443 1107,-596.557 1107,-541"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="1205.5,-204 1205.5,-264 1310.5,-264 1310.5,-204 1205.5,-204"/>
|
||||
<polygon fill="white" stroke="none" points="1211,-237 1211,-259 1306,-259 1306,-237 1211,-237"/>
|
||||
<text text-anchor="start" x="1232.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#909090" stroke="none" points="1211,-209 1211,-232 1306,-232 1306,-209 1211,-209"/>
|
||||
<polygon fill="none" stroke="black" points="1211,-209 1211,-232 1306,-232 1306,-209 1211,-209"/>
|
||||
<text text-anchor="start" x="1232.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge18" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1259,-376C1259,-312.444 1259,-296.556 1259,-233"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 40 KiB |
31
openstack_dashboard/don/ovs/static/view.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Internal View</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Internal View
|
||||
</th>
|
||||
<tr>
|
||||
<td align="center" class="clickme">
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/analyze'">
|
||||
Analyze</button>
|
||||
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/ping'">
|
||||
Ping Tracer</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="don.svg" width="100%" height="850" type="image/svg+xml" id="don_svg"></object></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
15
openstack_dashboard/don/ovs/templates/ovs/analyze.html
Normal file
@ -0,0 +1,15 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("Diagnosing OpenVswitch") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<!-- <ng-include src="'{{ STATIC_URL }}dashboard/don/ovs/view.html'"></ng-include> -->
|
||||
{% include "don/don.report.html" %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
15
openstack_dashboard/don/ovs/templates/ovs/index.html
Normal file
@ -0,0 +1,15 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("Diagnosing OpenVswitch") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<!-- <ng-include src="'{{ STATIC_URL }}dashboard/mydashboard/mypanel/mypanel.html'"></ng-include> -->
|
||||
{% include "don/don.html" %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
15
openstack_dashboard/don/ovs/templates/ovs/path.html
Normal file
@ -0,0 +1,15 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("Diagnosing OpenVswitch") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<!-- <ng-include src="'{{ STATIC_URL }}dashboard/don/ovs/view.html'"></ng-include> -->
|
||||
{% include "don/path.html" %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
15
openstack_dashboard/don/ovs/templates/ovs/ping.html
Normal file
@ -0,0 +1,15 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("Diagnosing OpenVswitch") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<!-- <ng-include src="'{{ STATIC_URL }}dashboard/don/ovs/view.html'"></ng-include> -->
|
||||
{% include "don/ping.html" %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
15
openstack_dashboard/don/ovs/templates/ovs/views.html
Normal file
@ -0,0 +1,15 @@
|
||||
{% extends 'base.html' %}
|
||||
{% load i18n %}
|
||||
{% block title %}{% trans "DON" %}{% endblock %}
|
||||
|
||||
{% block page_header %}
|
||||
{% include "horizon/common/_page_header.html" with title=_("Diagnosing OpenVswitch") %}
|
||||
{% endblock page_header %}
|
||||
|
||||
{% block main %}
|
||||
<!-- <ng-include src="'{{ STATIC_URL }}dashboard/don/ovs/view.html'"></ng-include> -->
|
||||
{% include "don/view.html" %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
18
openstack_dashboard/don/ovs/urls.py
Normal file
@ -0,0 +1,18 @@
|
||||
from django.conf.urls import patterns
|
||||
from django.conf.urls import url
|
||||
|
||||
from don.ovs.views \
|
||||
import IndexView
|
||||
|
||||
from . import views
|
||||
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^view/', views.view, name='view'),
|
||||
url(r'^collect/', views.collect, name='collect'),
|
||||
url(r'^ping/', views.ping, name='ping'),
|
||||
url(r'^analyze/', views.analyze, name='analyze'),
|
||||
url(r'^status/', views.get_status, name='get_status'),
|
||||
url(r'^$', IndexView.as_view(), name='index'),
|
||||
)
|
233
openstack_dashboard/don/ovs/views.py
Normal file
@ -0,0 +1,233 @@
|
||||
from horizon import views
|
||||
from django.http import HttpResponse
|
||||
from django.conf import settings
|
||||
from plot import DotGenerator
|
||||
import os
|
||||
import subprocess
|
||||
from .forms import PingForm
|
||||
# from django.shortcuts import render_to_response
|
||||
from horizon import messages
|
||||
import analyzer
|
||||
import path
|
||||
from common import execute_cmd, get_instance_ips, get_env, get_router_names
|
||||
import json
|
||||
import shlex
|
||||
|
||||
|
||||
from django.shortcuts import render
|
||||
|
||||
|
||||
class IndexView(views.APIView):
|
||||
# A very simple class-based view...
|
||||
template_name = 'don/ovs/index.html'
|
||||
|
||||
def get_data(self, request, context, *args, **kwargs):
|
||||
# Add data to the context here...
|
||||
return context
|
||||
|
||||
|
||||
def index(request):
|
||||
return HttpResponse('I am DON')
|
||||
|
||||
|
||||
def view(request):
|
||||
# import pdb
|
||||
# pdb.set_trace()
|
||||
pwd = settings.ROOT_PATH # +'/openstack_dashboard/dashboards/admin/don/'
|
||||
|
||||
JSON_FILE = pwd + '/don/ovs/don.json'
|
||||
static_path = settings.STATIC_ROOT
|
||||
'''
|
||||
COMPUTE_DOT_FILE = pwd + '/don/ovs/static/compute.dot'
|
||||
COMPUTE_SVG_FILE = pwd + '/don/ovs/static/compute.svg'
|
||||
NETWORK_DOT_FILE = pwd + '/don/ovs/static/network.dot'
|
||||
NETWORK_SVG_FILE = pwd + '/don/ovs/static/network.svg'
|
||||
COMBINED_DOT_FILE = pwd + '/don/ovs/static/don.dot'
|
||||
COMBINED_SVG_FILE = pwd + '/don/ovs/static/don.svg'
|
||||
'''
|
||||
COMPUTE_DOT_FILE = static_path + '/don/compute.dot'
|
||||
COMPUTE_SVG_FILE = static_path + '/don/compute.svg'
|
||||
NETWORK_DOT_FILE = static_path + '/don/network.dot'
|
||||
NETWORK_SVG_FILE = static_path + '/don/network.svg'
|
||||
COMBINED_DOT_FILE = static_path + '/don/don.dot'
|
||||
COMBINED_SVG_FILE = static_path + '/don/don.svg'
|
||||
|
||||
macro = {}
|
||||
# return HttpResponseRedirect('static/view.html')
|
||||
|
||||
plotter = DotGenerator(JSON_FILE,
|
||||
COMPUTE_DOT_FILE,
|
||||
COMPUTE_SVG_FILE,
|
||||
NETWORK_DOT_FILE,
|
||||
NETWORK_SVG_FILE,
|
||||
COMBINED_DOT_FILE,
|
||||
COMBINED_SVG_FILE,
|
||||
None
|
||||
)
|
||||
plotter.plot_compute_node()
|
||||
plotter.generate_compute_svg()
|
||||
|
||||
plotter.plot_network_node()
|
||||
plotter.generate_network_svg()
|
||||
|
||||
plotter.plot_combined()
|
||||
plotter.generate_combined_svg()
|
||||
# return HttpResponseRedirect('static/view.html')
|
||||
return render(request, "don/ovs/views.html", macro)
|
||||
|
||||
|
||||
def analyze(request):
|
||||
# pwd = settings.BASE_DIR
|
||||
pwd = settings.ROOT_PATH
|
||||
JSON_FILE = pwd + '/don/ovs/don.json'
|
||||
|
||||
params = {
|
||||
'error_file': pwd + '/don/templates/don/don.error.txt',
|
||||
'test:all': True,
|
||||
'test:ping': False,
|
||||
'test:ping_count': 1,
|
||||
'test:ovs': True,
|
||||
'test:report_file': pwd + '/don/templates/don/don.report.html',
|
||||
}
|
||||
print "params ====> ", params
|
||||
analyzer.analyze(JSON_FILE, params)
|
||||
# output = analyzer.analyze(JSON_FILE, params)
|
||||
# html = '<html><body>Output: %s</body></html>' % output
|
||||
# return HttpResponse(html)
|
||||
# return HttpResponseRedirect('/static/don.report.html')
|
||||
return render(request, "don/ovs/analyze.html")
|
||||
# return render_to_response('don/ovs/analyze.html')
|
||||
|
||||
|
||||
def test(request):
|
||||
return HttpResponse('Testing the setup')
|
||||
|
||||
|
||||
def ping(request):
|
||||
# if this is a POST request we need to process the form data
|
||||
if request.method == 'POST':
|
||||
# create a form instance and populate it with data from the request:
|
||||
form = PingForm(request.POST)
|
||||
# check whether it's valid:
|
||||
if form.is_valid():
|
||||
# process the data in form.cleaned_data as required
|
||||
# ...
|
||||
# redirect to a new URL:
|
||||
src_ip = form.cleaned_data['src_ip']
|
||||
dst_ip = form.cleaned_data['dst_ip']
|
||||
router = form.cleaned_data['router']
|
||||
# html = '<html><body>SIP: %s DIP: %s router: %s</body></html>' % (src_ip, dst_ip, router)
|
||||
# return HttpResponse(html)
|
||||
static_path = settings.STATIC_ROOT
|
||||
pwd = settings.ROOT_PATH
|
||||
JSON_FILE = pwd + '/don/ovs/don.json'
|
||||
|
||||
params = {
|
||||
'json_file': pwd + '/don/ovs/don.json',
|
||||
'src_ip': src_ip,
|
||||
'dst_ip': dst_ip,
|
||||
'router': router,
|
||||
'path_file': static_path + '/don/ping.html',
|
||||
'username': 'cirros',
|
||||
'passwd': 'cubswin:)',
|
||||
'count': 2,
|
||||
'timeout': 2,
|
||||
'debug': True,
|
||||
'plot': False,
|
||||
}
|
||||
response = path.path(params)
|
||||
if response:
|
||||
error_text = response
|
||||
messages.error(request, error_text)
|
||||
return render(request, 'don/ovs/ping.html', {'form': form})
|
||||
|
||||
JSON_FILE = pwd + '/don/ovs/don.json'
|
||||
COMPUTE_DOT_FILE = None
|
||||
COMPUTE_SVG_FILE = None
|
||||
NETWORK_DOT_FILE = None
|
||||
NETWORK_SVG_FILE = None
|
||||
COMBINED_DOT_FILE = static_path + '/don/ping.dot'
|
||||
COMBINED_SVG_FILE = static_path + '/don/ping.svg'
|
||||
# HIGHLIGHT_FILE = pwd + '/don/ovs/static/ping.html'
|
||||
HIGHLIGHT_FILE = static_path + '/don/ping.html'
|
||||
|
||||
plotter = DotGenerator(JSON_FILE,
|
||||
COMPUTE_DOT_FILE,
|
||||
COMPUTE_SVG_FILE,
|
||||
NETWORK_DOT_FILE,
|
||||
NETWORK_SVG_FILE,
|
||||
COMBINED_DOT_FILE,
|
||||
COMBINED_SVG_FILE,
|
||||
HIGHLIGHT_FILE,
|
||||
)
|
||||
plotter.plot_combined()
|
||||
plotter.generate_combined_svg()
|
||||
|
||||
# return HttpResponseRedirect('/static/path.html')
|
||||
return render(request, 'don/ovs/path.html')
|
||||
|
||||
# if a GET (or any other method) we'll create a blank form
|
||||
else:
|
||||
form = PingForm()
|
||||
BASE_DIR = settings.ROOT_PATH + '/don/ovs/'
|
||||
myenv = os.environ.copy()
|
||||
myenv.update(get_env(BASE_DIR + 'admin-openrc.sh'))
|
||||
output = execute_cmd(['nova', 'list'], sudo=False,
|
||||
shell=False, env=myenv).split('\n')
|
||||
ip_list = get_instance_ips(output)
|
||||
ip_list.sort()
|
||||
router_op = execute_cmd(
|
||||
['neutron', 'router-list'], sudo=False, shell=False, env=myenv).split('\n')
|
||||
router_list = get_router_names(router_op)
|
||||
router_list.sort()
|
||||
# insert first value of select menu
|
||||
ip_opt = zip(ip_list, ip_list)
|
||||
router_opt = zip(router_list, router_list)
|
||||
# ip_opt.insert(0,('','Select IP address'))
|
||||
# router_opt.insert(0,('','Select Router'))
|
||||
form.fields['src_ip'].widget.choices = ip_opt
|
||||
form.fields['dst_ip'].widget.choices = ip_opt
|
||||
form.fields['router'].widget.choices = router_opt
|
||||
|
||||
return render(request, 'don/ovs/ping.html', {'form': form})
|
||||
|
||||
|
||||
def collect(request):
|
||||
macro = {'collect_status': 'Collection failed'}
|
||||
status = 0
|
||||
|
||||
BASE_DIR = settings.ROOT_PATH
|
||||
# CUR_DIR = os.getcwd()
|
||||
os.chdir(BASE_DIR + '/don/ovs')
|
||||
cmd = 'sudo python collector.py'
|
||||
for line in run_command(cmd):
|
||||
if line.startswith('STATUS:') and line.find('Writing collected info') != -1:
|
||||
status = 1
|
||||
macro['collect_status'] = \
|
||||
"Collecton successful. Click visualize to display"
|
||||
# res = collector.main()
|
||||
os.chdir(BASE_DIR)
|
||||
if status:
|
||||
messages.success(request, macro['collect_status'])
|
||||
else:
|
||||
messages.error(request, macro['collect_status'])
|
||||
resp = HttpResponse(json.dumps(macro), content_type="application/json")
|
||||
return resp
|
||||
|
||||
|
||||
def run_command(cmd):
|
||||
ps = subprocess.Popen(shlex.split(
|
||||
cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
while(True):
|
||||
ret = ps.poll() # returns None while subprocess is running
|
||||
line = ps.stdout.readline()
|
||||
yield line
|
||||
if(ret is not None):
|
||||
break
|
||||
|
||||
|
||||
def get_status(request):
|
||||
BASE_DIR = settings.ROOT_PATH + '/don/ovs/'
|
||||
status = open(BASE_DIR + 'collector_log.txt', 'r').readline()
|
||||
if status != " " and status != '\n':
|
||||
return HttpResponse(json.dumps({'status': status}), content_type="application/json")
|
31
openstack_dashboard/don/static/dashboard/don/ovs/view.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Internal View</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Internal View
|
||||
</th>
|
||||
<tr>
|
||||
<td align="center" class="clickme">
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/analyze'">
|
||||
Analyze</button>
|
||||
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/ping'">
|
||||
Ping Tracer</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="don.svg" width="100%" height="850" type="image/svg+xml" id="don_svg"></object></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
21
openstack_dashboard/don/static/don/ovs/compute.dot
Normal file
@ -0,0 +1,21 @@
|
||||
digraph DON_compute {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
111
openstack_dashboard/don/static/don/ovs/compute.svg
Normal file
@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_compute Pages: 1 -->
|
||||
<svg width="365pt" height="620pt"
|
||||
viewBox="0.00 0.00 365.00 620.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 616)">
|
||||
<title>DON_compute</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-616 361,-616 361,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="none" stroke="black" points="204,-548 204,-604 324,-604 324,-548 204,-548"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="87,-344 87,-500 349,-500 349,-344 87,-344"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="187,-352 187,-492 341,-492 341,-352 187,-352"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="95,-396 95,-448 179,-448 179,-396 95,-396"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-304 266,-304 266,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-156 16,-296 258,-296 258,-156 16,-156"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="81,-16 81,-100 193,-100 193,-16 81,-16"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="220,-560 220,-592 308,-592 308,-560 220,-560"/>
|
||||
<polygon fill="yellow" stroke="none" points="225,-565 225,-587 303,-587 303,-565 225,-565"/>
|
||||
<text text-anchor="start" x="230.5" y="-573.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="203,-364 203,-480 325,-480 325,-364 203,-364"/>
|
||||
<polygon fill="white" stroke="none" points="208,-453 208,-475 320,-475 320,-453 208,-453"/>
|
||||
<text text-anchor="start" x="253.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="208,-425 208,-448 262,-448 262,-425 208,-425"/>
|
||||
<polygon fill="none" stroke="black" points="208,-425 208,-448 262,-448 262,-425 208,-425"/>
|
||||
<text text-anchor="start" x="225.5" y="-434" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="267,-425 267,-448 320,-448 320,-425 267,-425"/>
|
||||
<polygon fill="none" stroke="black" points="267,-425 267,-448 320,-448 320,-425 267,-425"/>
|
||||
<text text-anchor="start" x="284" y="-434" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="208,-397 208,-420 262,-420 262,-397 208,-397"/>
|
||||
<polygon fill="none" stroke="black" points="208,-397 208,-420 262,-420 262,-397 208,-397"/>
|
||||
<text text-anchor="start" x="217.5" y="-406" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="267,-397 267,-420 320,-420 320,-397 267,-397"/>
|
||||
<polygon fill="none" stroke="black" points="267,-397 267,-420 320,-420 320,-397 267,-397"/>
|
||||
<text text-anchor="start" x="276" y="-406" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="208,-369 208,-392 262,-392 262,-369 208,-369"/>
|
||||
<polygon fill="none" stroke="black" points="208,-369 208,-392 262,-392 262,-369 208,-369"/>
|
||||
<text text-anchor="start" x="214.5" y="-378" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="267,-369 267,-392 320,-392 320,-369 267,-369"/>
|
||||
<polygon fill="none" stroke="black" points="267,-369 267,-392 320,-392 320,-369 267,-369"/>
|
||||
<text text-anchor="start" x="273" y="-378" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<text text-anchor="middle" x="137" y="-419.5" font-family="Helvetica,sans-Serif" font-size="10.00">LinuxBridge</text>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="32,-168 32,-284 242,-284 242,-168 32,-168"/>
|
||||
<polygon fill="white" stroke="none" points="37,-257 37,-279 237,-279 237,-257 37,-257"/>
|
||||
<text text-anchor="start" x="112.5" y="-265.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="37,-229 37,-252 136,-252 136,-229 37,-229"/>
|
||||
<polygon fill="none" stroke="black" points="37,-229 37,-252 136,-252 136,-229 37,-229"/>
|
||||
<text text-anchor="start" x="43.5" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-229 141,-252 237,-252 237,-229 141,-229"/>
|
||||
<polygon fill="none" stroke="black" points="141,-229 141,-252 237,-252 237,-229 141,-229"/>
|
||||
<text text-anchor="start" x="147" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="37,-201 37,-224 136,-224 136,-201 37,-201"/>
|
||||
<polygon fill="none" stroke="black" points="37,-201 37,-224 136,-224 136,-201 37,-201"/>
|
||||
<text text-anchor="start" x="60.5" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-201 141,-224 237,-224 237,-201 141,-201"/>
|
||||
<polygon fill="none" stroke="black" points="141,-201 141,-224 237,-224 237,-201 141,-201"/>
|
||||
<text text-anchor="start" x="163" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="37,-173 37,-196 237,-196 237,-173 37,-173"/>
|
||||
<polygon fill="none" stroke="black" points="37,-173 37,-196 237,-196 237,-173 37,-173"/>
|
||||
<text text-anchor="start" x="109.5" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge2" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M128.116,-403.866C113.505,-374.046 86,-310.304 86,-253"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M146.058,-403.886C160.956,-374.097 189,-310.4 189,-253"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="97,-28 97,-88 177,-88 177,-28 97,-28"/>
|
||||
<polygon fill="white" stroke="none" points="102,-61 102,-83 172,-83 172,-61 102,-61"/>
|
||||
<text text-anchor="start" x="111" y="-69.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="102,-33 102,-56 172,-56 172,-33 102,-33"/>
|
||||
<polygon fill="none" stroke="black" points="102,-33 102,-56 172,-56 172,-33 102,-33"/>
|
||||
<text text-anchor="start" x="111" y="-42" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge4" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M137,-172C137,-120.889 137,-108.111 137,-57"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
198
openstack_dashboard/don/static/don/ovs/don.dot
Normal file
@ -0,0 +1,198 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101003">10.10.0.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101004">10.10.0.4</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr8aa60600_7b">qbr8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr71ac5bef_7c">qbr71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb8aa60600_7b">qvb8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb71ac5bef_7c">qvb71ac5bef-7c</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7b">[6] qvo8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7c">[7] qvo71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7ctag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
LinuxBridge:qvb8aa60600_7b:s -> compute_br_int:qvo8aa60600_7b:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb71ac5bef_7c:s -> compute_br_int:qvo71ac5bef_7c:n [color = "#0066cc", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_757bf552_73">[2] qg-757bf552-73</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b">[8] qr-43b83157-3b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5">[5] tap59f90a3b-f5</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b10.10.0.1/24">10.10.0.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f510.10.0.2/24">10.10.0.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_757bf552_73:s -> network_br_int:qr_43b83157_3b:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
204
openstack_dashboard/don/static/don/ovs/don.svg
Normal file
@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="576pt" height="720pt"
|
||||
viewBox="0.00 0.00 576.00 720.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 716)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-716 572,-716 572,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-704 286,-704 286,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="133,-640 133,-696 253,-696 253,-640 133,-640"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-436 16,-592 278,-592 278,-436 16,-436"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="116,-444 116,-584 270,-584 270,-444 116,-444"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-488 24,-540 108,-540 108,-488 24,-488"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-354 274,-354 274,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-206 24,-346 266,-346 266,-206 24,-206"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="89,-24 89,-108 201,-108 201,-24 89,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="294,-8 294,-704 560,-704 560,-8 294,-8"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="302,-16 302,-592 552,-592 552,-16 302,-16"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="310,-444 310,-584 448,-584 448,-444 310,-444"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="310,-164 310,-388 544,-388 544,-164 310,-164"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="372,-24 372,-108 484,-108 484,-24 372,-24"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="320,-640 320,-696 438,-696 438,-640 320,-640"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="149,-652 149,-684 237,-684 237,-652 149,-652"/>
|
||||
<polygon fill="yellow" stroke="none" points="154,-657 154,-679 232,-679 232,-657 154,-657"/>
|
||||
<text text-anchor="start" x="159.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="132,-456 132,-572 254,-572 254,-456 132,-456"/>
|
||||
<polygon fill="white" stroke="none" points="137,-545 137,-567 249,-567 249,-545 137,-545"/>
|
||||
<text text-anchor="start" x="182.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="137,-517 137,-540 191,-540 191,-517 137,-517"/>
|
||||
<polygon fill="none" stroke="black" points="137,-517 137,-540 191,-540 191,-517 137,-517"/>
|
||||
<text text-anchor="start" x="154.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="196,-517 196,-540 249,-540 249,-517 196,-517"/>
|
||||
<polygon fill="none" stroke="black" points="196,-517 196,-540 249,-540 249,-517 196,-517"/>
|
||||
<text text-anchor="start" x="213" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="137,-489 137,-512 191,-512 191,-489 137,-489"/>
|
||||
<polygon fill="none" stroke="black" points="137,-489 137,-512 191,-512 191,-489 137,-489"/>
|
||||
<text text-anchor="start" x="146.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="196,-489 196,-512 249,-512 249,-489 196,-489"/>
|
||||
<polygon fill="none" stroke="black" points="196,-489 196,-512 249,-512 249,-489 196,-489"/>
|
||||
<text text-anchor="start" x="205" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="137,-461 137,-484 191,-484 191,-461 137,-461"/>
|
||||
<polygon fill="none" stroke="black" points="137,-461 137,-484 191,-484 191,-461 137,-461"/>
|
||||
<text text-anchor="start" x="143.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="196,-461 196,-484 249,-484 249,-461 196,-461"/>
|
||||
<polygon fill="none" stroke="black" points="196,-461 196,-484 249,-484 249,-461 196,-461"/>
|
||||
<text text-anchor="start" x="202" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<text text-anchor="middle" x="66" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">LinuxBridge</text>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40,-218 40,-334 250,-334 250,-218 40,-218"/>
|
||||
<polygon fill="white" stroke="none" points="45,-307 45,-329 245,-329 245,-307 45,-307"/>
|
||||
<text text-anchor="start" x="120.5" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-279 45,-302 144,-302 144,-279 45,-279"/>
|
||||
<polygon fill="none" stroke="black" points="45,-279 45,-302 144,-302 144,-279 45,-279"/>
|
||||
<text text-anchor="start" x="51.5" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-279 149,-302 245,-302 245,-279 149,-279"/>
|
||||
<polygon fill="none" stroke="black" points="149,-279 149,-302 245,-302 245,-279 149,-279"/>
|
||||
<text text-anchor="start" x="155" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-251 45,-274 144,-274 144,-251 45,-251"/>
|
||||
<polygon fill="none" stroke="black" points="45,-251 45,-274 144,-274 144,-251 45,-251"/>
|
||||
<text text-anchor="start" x="68.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-251 149,-274 245,-274 245,-251 149,-251"/>
|
||||
<polygon fill="none" stroke="black" points="149,-251 149,-274 245,-274 245,-251 149,-251"/>
|
||||
<text text-anchor="start" x="171" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="45,-223 45,-246 245,-246 245,-223 45,-223"/>
|
||||
<polygon fill="none" stroke="black" points="45,-223 45,-246 245,-246 245,-223 45,-223"/>
|
||||
<text text-anchor="start" x="117.5" y="-232" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge2" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M69.8346,-495.954C77.5031,-460.323 94,-375.275 94,-303"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M76.0841,-495.784C85.3069,-480.12 99.3923,-456.399 112,-436 148.882,-376.326 197,-373.152 197,-303"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="105,-36 105,-96 185,-96 185,-36 105,-36"/>
|
||||
<polygon fill="white" stroke="none" points="110,-69 110,-91 180,-91 180,-69 110,-69"/>
|
||||
<text text-anchor="start" x="119" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<polygon fill="none" stroke="black" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<text text-anchor="start" x="119" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge4" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M145,-222C145,-152.222 145,-134.778 145,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="336.5,-652 336.5,-684 421.5,-684 421.5,-652 336.5,-652"/>
|
||||
<polygon fill="yellow" stroke="none" points="342,-657 342,-679 417,-679 417,-657 342,-657"/>
|
||||
<text text-anchor="start" x="347.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="326.5,-456 326.5,-572 431.5,-572 431.5,-456 326.5,-456"/>
|
||||
<polygon fill="white" stroke="none" points="332,-545 332,-567 427,-567 427,-545 332,-545"/>
|
||||
<text text-anchor="start" x="355" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-517 332,-540 427,-540 427,-517 332,-517"/>
|
||||
<polygon fill="none" stroke="black" points="332,-517 332,-540 427,-540 427,-517 332,-517"/>
|
||||
<text text-anchor="start" x="364" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-489 332,-512 427,-512 427,-489 332,-489"/>
|
||||
<polygon fill="none" stroke="black" points="332,-489 332,-512 427,-512 427,-489 332,-489"/>
|
||||
<text text-anchor="start" x="349.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-461 332,-484 427,-484 427,-461 332,-461"/>
|
||||
<polygon fill="none" stroke="black" points="332,-461 332,-484 427,-484 427,-461 332,-461"/>
|
||||
<text text-anchor="start" x="338.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="326.5,-176 326.5,-376 527.5,-376 527.5,-176 326.5,-176"/>
|
||||
<polygon fill="white" stroke="none" points="332,-349 332,-371 523,-371 523,-349 332,-349"/>
|
||||
<text text-anchor="start" x="403" y="-357.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-321 332,-344 427,-344 427,-321 332,-321"/>
|
||||
<polygon fill="none" stroke="black" points="332,-321 332,-344 427,-344 427,-321 332,-321"/>
|
||||
<text text-anchor="start" x="338.5" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-321 432,-344 523,-344 523,-321 432,-321"/>
|
||||
<polygon fill="none" stroke="black" points="432,-321 432,-344 523,-344 523,-321 432,-321"/>
|
||||
<text text-anchor="start" x="438" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tap59f90a3b-f5</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-293 332,-316 427,-316 427,-293 332,-293"/>
|
||||
<polygon fill="none" stroke="black" points="332,-293 332,-316 427,-316 427,-293 332,-293"/>
|
||||
<text text-anchor="start" x="353.5" y="-302" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-293 432,-316 523,-316 523,-293 432,-293"/>
|
||||
<polygon fill="none" stroke="black" points="432,-293 432,-316 523,-316 523,-293 432,-293"/>
|
||||
<text text-anchor="start" x="451.5" y="-302" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-265 332,-288 427,-288 427,-265 332,-265"/>
|
||||
<polygon fill="none" stroke="black" points="332,-265 332,-288 427,-288 427,-265 332,-265"/>
|
||||
<text text-anchor="start" x="352" y="-274" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-265 432,-288 523,-288 523,-265 432,-265"/>
|
||||
<polygon fill="none" stroke="black" points="432,-265 432,-288 523,-288 523,-265 432,-265"/>
|
||||
<text text-anchor="start" x="450" y="-274" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-237 332,-260 523,-260 523,-237 332,-237"/>
|
||||
<polygon fill="none" stroke="black" points="332,-237 332,-260 523,-260 523,-237 332,-237"/>
|
||||
<text text-anchor="start" x="410" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-209 332,-232 523,-232 523,-209 332,-209"/>
|
||||
<polygon fill="none" stroke="black" points="332,-209 332,-232 523,-232 523,-209 332,-209"/>
|
||||
<text text-anchor="start" x="412" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="332,-181 332,-204 523,-204 523,-181 332,-181"/>
|
||||
<polygon fill="none" stroke="black" points="332,-181 332,-204 523,-204 523,-181 332,-181"/>
|
||||
<text text-anchor="start" x="400" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge7" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M380,-460C380,-408.887 379,-396.113 379,-345"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="388,-36 388,-96 468,-96 468,-36 388,-36"/>
|
||||
<polygon fill="white" stroke="none" points="393,-69 393,-91 463,-91 463,-69 393,-69"/>
|
||||
<text text-anchor="start" x="402" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="393,-41 393,-64 463,-64 463,-41 393,-41"/>
|
||||
<polygon fill="none" stroke="black" points="393,-41 393,-64 463,-64 463,-41 393,-41"/>
|
||||
<text text-anchor="start" x="402" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge6" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M428,-180C428,-128.889 428,-116.111 428,-65"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
92
openstack_dashboard/don/static/don/ovs/network.dot
Normal file
@ -0,0 +1,92 @@
|
||||
digraph DON_network {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_757bf552_73">[2] qg-757bf552-73</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b">[8] qr-43b83157-3b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5">[5] tap59f90a3b-f5</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f5tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b10.10.0.1/24">10.10.0.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap59f90a3b_f510.10.0.2/24">10.10.0.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_757bf552_73:s -> network_br_int:qr_43b83157_3b:n [color = "#0066cc", penwidth = "4"]
|
||||
|
||||
}
|
||||
|
100
openstack_dashboard/don/static/don/ovs/network.svg
Normal file
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_network Pages: 1 -->
|
||||
<svg width="274pt" height="704pt"
|
||||
viewBox="0.00 0.00 274.00 704.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 700)">
|
||||
<title>DON_network</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-700 270,-700 270,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="none" stroke="black" points="26,-632 26,-688 144,-688 144,-632 26,-632"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-584 258,-584 258,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-436 16,-576 154,-576 154,-436 16,-436"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-156 16,-380 250,-380 250,-156 16,-156"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="78,-16 78,-100 190,-100 190,-16 78,-16"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node1" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="42.5,-644 42.5,-676 127.5,-676 127.5,-644 42.5,-644"/>
|
||||
<polygon fill="yellow" stroke="none" points="48,-649 48,-671 123,-671 123,-649 48,-649"/>
|
||||
<text text-anchor="start" x="53.5" y="-657.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node2" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="32.5,-448 32.5,-564 137.5,-564 137.5,-448 32.5,-448"/>
|
||||
<polygon fill="white" stroke="none" points="38,-537 38,-559 133,-559 133,-537 38,-537"/>
|
||||
<text text-anchor="start" x="61" y="-545.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-509 38,-532 133,-532 133,-509 38,-509"/>
|
||||
<polygon fill="none" stroke="black" points="38,-509 38,-532 133,-532 133,-509 38,-509"/>
|
||||
<text text-anchor="start" x="70" y="-518" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-481 38,-504 133,-504 133,-481 38,-481"/>
|
||||
<polygon fill="none" stroke="black" points="38,-481 38,-504 133,-504 133,-481 38,-481"/>
|
||||
<text text-anchor="start" x="55.5" y="-490" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-453 38,-476 133,-476 133,-453 38,-453"/>
|
||||
<polygon fill="none" stroke="black" points="38,-453 38,-476 133,-476 133,-453 38,-453"/>
|
||||
<text text-anchor="start" x="44.5" y="-462" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node3" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="32.5,-168 32.5,-368 233.5,-368 233.5,-168 32.5,-168"/>
|
||||
<polygon fill="white" stroke="none" points="38,-341 38,-363 229,-363 229,-341 38,-341"/>
|
||||
<text text-anchor="start" x="109" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-313 38,-336 133,-336 133,-313 38,-313"/>
|
||||
<polygon fill="none" stroke="black" points="38,-313 38,-336 133,-336 133,-313 38,-313"/>
|
||||
<text text-anchor="start" x="44.5" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-313 138,-336 229,-336 229,-313 138,-313"/>
|
||||
<polygon fill="none" stroke="black" points="138,-313 138,-336 229,-336 229,-313 138,-313"/>
|
||||
<text text-anchor="start" x="144" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tap59f90a3b-f5</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-285 38,-308 133,-308 133,-285 38,-285"/>
|
||||
<polygon fill="none" stroke="black" points="38,-285 38,-308 133,-308 133,-285 38,-285"/>
|
||||
<text text-anchor="start" x="59.5" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-285 138,-308 229,-308 229,-285 138,-285"/>
|
||||
<polygon fill="none" stroke="black" points="138,-285 138,-308 229,-308 229,-285 138,-285"/>
|
||||
<text text-anchor="start" x="157.5" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-257 38,-280 133,-280 133,-257 38,-257"/>
|
||||
<polygon fill="none" stroke="black" points="38,-257 38,-280 133,-280 133,-257 38,-257"/>
|
||||
<text text-anchor="start" x="58" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-257 138,-280 229,-280 229,-257 138,-257"/>
|
||||
<polygon fill="none" stroke="black" points="138,-257 138,-280 229,-280 229,-257 138,-257"/>
|
||||
<text text-anchor="start" x="156" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-229 38,-252 229,-252 229,-229 38,-229"/>
|
||||
<polygon fill="none" stroke="black" points="38,-229 38,-252 229,-252 229,-229 38,-229"/>
|
||||
<text text-anchor="start" x="116" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-201 38,-224 229,-224 229,-201 38,-201"/>
|
||||
<polygon fill="none" stroke="black" points="38,-201 38,-224 229,-224 229,-201 38,-201"/>
|
||||
<text text-anchor="start" x="118" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="38,-173 38,-196 229,-196 229,-173 38,-173"/>
|
||||
<polygon fill="none" stroke="black" points="38,-173 38,-196 229,-196 229,-173 38,-173"/>
|
||||
<text text-anchor="start" x="106" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge3" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M86,-452C86,-400.887 85,-388.113 85,-337"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node4" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="94,-28 94,-88 174,-88 174,-28 94,-28"/>
|
||||
<polygon fill="white" stroke="none" points="99,-61 99,-83 169,-83 169,-61 99,-61"/>
|
||||
<text text-anchor="start" x="108" y="-69.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="99,-33 99,-56 169,-56 169,-33 99,-33"/>
|
||||
<polygon fill="none" stroke="black" points="99,-33 99,-56 169,-56 169,-33 99,-33"/>
|
||||
<text text-anchor="start" x="108" y="-42" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge2" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M134,-172C134,-120.889 134,-108.111 134,-57"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
278
openstack_dashboard/don/static/don/ovs/ping.dot
Normal file
@ -0,0 +1,278 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM1-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM1-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM3-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM3-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="3" BGCOLOR="#909090">VM4</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">public</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10023">10.0.2.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10024">10.0.2.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10033">10.0.3.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10034">10.0.3.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="1722445">172.24.4.5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10036">10.0.3.6</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10026">10.0.2.6</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tape0d697f2_cb">tape0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapbd4f1f72_5f">tapbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapbd96ca7d_5e">tapbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tap4441e3a6_f2">tap4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapce3d7b20_1d">tapce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapf0841d56_02">tapf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapfbb76083_60">tapfbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbre0d697f2_cb">qbre0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrbd4f1f72_5f">qbrbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbrbd96ca7d_5e">qbrbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbr4441e3a6_f2">qbr4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrce3d7b20_1d">qbrce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrf0841d56_02">qbrf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrfbb76083_60">qbrfbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbe0d697f2_cb">qvbe0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbbd4f1f72_5f">qvbbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbbd96ca7d_5e">qvbbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvb4441e3a6_f2">qvb4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbce3d7b20_1d">qvbce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbf0841d56_02">qvbf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbfbb76083_60">qvbfbb76083-60</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvoe0d697f2_cb">[9] qvoe0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd4f1f72_5f">[10] qvobd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvobd96ca7d_5e">[11] qvobd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvo4441e3a6_f2">[12] qvo4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoce3d7b20_1d">[17] qvoce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvof0841d56_02">[16] qvof0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvofbb76083_60">[15] qvofbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoe0d697f2_cbtag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd4f1f72_5ftag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd96ca7d_5etag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvo4441e3a6_f2tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoce3d7b20_1dtag_4">VLAN tag:4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvof0841d56_02tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvofbb76083_60tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#909090", penwidth = "4", style="invis"]
|
||||
VMs:10023:s -> LinuxBridge:tape0d697f2_cb:n [color = "#009900", penwidth = "4"]
|
||||
VMs:10024:s -> LinuxBridge:tapbd4f1f72_5f:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10033:s -> LinuxBridge:tapbd96ca7d_5e:n [color = "#009900", penwidth = "4"]
|
||||
VMs:10034:s -> LinuxBridge:tap4441e3a6_f2:n [color = "#909090", penwidth = "4"]
|
||||
VMs:1722445:s -> LinuxBridge:tapce3d7b20_1d:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10036:s -> LinuxBridge:tapf0841d56_02:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10026:s -> LinuxBridge:tapfbb76083_60:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbe0d697f2_cb:s -> compute_br_int:qvoe0d697f2_cb:n [color = "#009900", penwidth = "4"]
|
||||
LinuxBridge:qvbbd4f1f72_5f:s -> compute_br_int:qvobd4f1f72_5f:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbbd96ca7d_5e:s -> compute_br_int:qvobd96ca7d_5e:n [color = "#009900", penwidth = "4"]
|
||||
LinuxBridge:qvb4441e3a6_f2:s -> compute_br_int:qvo4441e3a6_f2:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbce3d7b20_1d:s -> compute_br_int:qvoce3d7b20_1d:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbf0841d56_02:s -> compute_br_int:qvof0841d56_02:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbfbb76083_60:s -> compute_br_int:qvofbb76083_60:n [color = "#909090", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#909090", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="172.24.4.4/24">172.24.4.4/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qg_eb8796fb_83">[2] qg-eb8796fb-83</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qg_e2b1b0d3_a8">[3] qg-e2b1b0d3-a8</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="8" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_09a15e37_ca">[8] qr-09a15e37-ca</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb">[6] tapd0828ef0-eb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_622abba5_e2">[7] qr-622abba5-e2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0">[5] tapd6f091a2-c0</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e5">[13] qr-361be2af-e5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0">[5] tapd6f091a2-c0</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_36">[14] qr-b66b902a-36</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb">[6] tapd0828ef0-eb</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_09a15e37_catag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_ebtag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_622abba5_e2tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e5tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_36tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_ebtag_3">VLAN tag:3</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_09a15e37_ca10.0.3.1/24">10.0.3.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb10.0.3.2/24">10.0.3.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_622abba5_e210.0.2.1/24">10.0.2.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c010.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e510.0.2.5/24">10.0.2.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c010.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_3610.0.3.5/24">10.0.3.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb10.0.3.2/24">10.0.3.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private2">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private2">private2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#909090" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#909090" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="8" BGCOLOR="#909090" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#909090", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_e2b1b0d3_a8:s -> network_br_int:qr_361be2af_e5:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_e2b1b0d3_a8:s -> network_br_int:qr_b66b902a_36:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_eb8796fb_83:s -> network_br_int:qr_09a15e37_ca:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_eb8796fb_83:s -> network_br_int:qr_622abba5_e2:n [color = "#909090", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
473
openstack_dashboard/don/static/don/ovs/ping.svg
Normal file
@ -0,0 +1,473 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="1710pt" height="916pt"
|
||||
viewBox="0.00 0.00 1710.00 916.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 912)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-912 1706,-912 1706,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-900 816,-900 816,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="352,-836 352,-892 472,-892 472,-836 352,-836"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="79,-394 79,-788 741,-788 741,-394 79,-394"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="202,-640 202,-780 622,-780 622,-640 202,-640"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="87,-402 87,-542 733,-542 733,-402 87,-402"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-312 808,-312 808,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-164 24,-304 800,-304 800,-164 24,-164"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="343,-24 343,-108 481,-108 481,-24 343,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="824,-176 824,-900 1694,-900 1694,-176 824,-176"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="832,-184 832,-788 1686,-788 1686,-184 832,-184"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1088,-640 1088,-780 1326,-780 1326,-640 1088,-640"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="840,-360 840,-584 1678,-584 1678,-360 840,-360"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1189,-192 1189,-276 1327,-276 1327,-192 1189,-192"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1148,-836 1148,-892 1266,-892 1266,-836 1148,-836"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="368,-848 368,-880 456,-880 456,-848 368,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="373,-853 373,-875 451,-875 451,-853 373,-853"/>
|
||||
<text text-anchor="start" x="378.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="218.5,-652 218.5,-768 605.5,-768 605.5,-652 218.5,-652"/>
|
||||
<polygon fill="white" stroke="none" points="224,-741 224,-763 601,-763 601,-741 224,-741"/>
|
||||
<text text-anchor="start" x="402" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#909090" stroke="none" points="224,-713 224,-736 273,-736 273,-713 224,-713"/>
|
||||
<polygon fill="none" stroke="black" points="224,-713 224,-736 273,-736 273,-713 224,-713"/>
|
||||
<text text-anchor="start" x="234" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-1</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-713 278,-736 326,-736 326,-713 278,-713"/>
|
||||
<polygon fill="none" stroke="black" points="278,-713 278,-736 326,-736 326,-713 278,-713"/>
|
||||
<text text-anchor="start" x="287.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-2</text>
|
||||
<polygon fill="#909090" stroke="none" points="331,-713 331,-736 379,-736 379,-713 331,-713"/>
|
||||
<polygon fill="none" stroke="black" points="331,-713 331,-736 379,-736 379,-713 331,-713"/>
|
||||
<text text-anchor="start" x="340.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-1</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-713 384,-736 432,-736 432,-713 384,-713"/>
|
||||
<polygon fill="none" stroke="black" points="384,-713 384,-736 432,-736 432,-713 384,-713"/>
|
||||
<text text-anchor="start" x="393.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-2</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-713 437,-736 601,-736 601,-713 437,-713"/>
|
||||
<polygon fill="none" stroke="black" points="437,-713 437,-736 601,-736 601,-713 437,-713"/>
|
||||
<text text-anchor="start" x="508.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM4</text>
|
||||
<polygon fill="#909090" stroke="none" points="224,-685 224,-708 273,-708 273,-685 224,-685"/>
|
||||
<polygon fill="none" stroke="black" points="224,-685 224,-708 273,-708 273,-685 224,-685"/>
|
||||
<text text-anchor="start" x="231" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-685 278,-708 326,-708 326,-685 278,-685"/>
|
||||
<polygon fill="none" stroke="black" points="278,-685 278,-708 326,-708 326,-685 278,-685"/>
|
||||
<text text-anchor="start" x="284.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="331,-685 331,-708 379,-708 379,-685 331,-685"/>
|
||||
<polygon fill="none" stroke="black" points="331,-685 331,-708 379,-708 379,-685 331,-685"/>
|
||||
<text text-anchor="start" x="337.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-685 384,-708 432,-708 432,-685 384,-685"/>
|
||||
<polygon fill="none" stroke="black" points="384,-685 384,-708 432,-708 432,-685 384,-685"/>
|
||||
<text text-anchor="start" x="390.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-685 437,-708 495,-708 495,-685 437,-685"/>
|
||||
<polygon fill="none" stroke="black" points="437,-685 437,-708 495,-708 495,-685 437,-685"/>
|
||||
<text text-anchor="start" x="453" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">public</text>
|
||||
<polygon fill="#909090" stroke="none" points="500,-685 500,-708 548,-708 548,-685 500,-685"/>
|
||||
<polygon fill="none" stroke="black" points="500,-685 500,-708 548,-708 548,-685 500,-685"/>
|
||||
<text text-anchor="start" x="506.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="553,-685 553,-708 601,-708 601,-685 553,-685"/>
|
||||
<polygon fill="none" stroke="black" points="553,-685 553,-708 601,-708 601,-685 553,-685"/>
|
||||
<text text-anchor="start" x="559.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="224,-657 224,-680 273,-680 273,-657 224,-657"/>
|
||||
<polygon fill="none" stroke="black" points="224,-657 224,-680 273,-680 273,-657 224,-657"/>
|
||||
<text text-anchor="start" x="230.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.3</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-657 278,-680 326,-680 326,-657 278,-657"/>
|
||||
<polygon fill="none" stroke="black" points="278,-657 278,-680 326,-680 326,-657 278,-657"/>
|
||||
<text text-anchor="start" x="284" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.4</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="331,-657 331,-680 379,-680 379,-657 331,-657"/>
|
||||
<polygon fill="none" stroke="black" points="331,-657 331,-680 379,-680 379,-657 331,-657"/>
|
||||
<text text-anchor="start" x="337" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.3</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-657 384,-680 432,-680 432,-657 384,-657"/>
|
||||
<polygon fill="none" stroke="black" points="384,-657 384,-680 432,-680 432,-657 384,-657"/>
|
||||
<text text-anchor="start" x="390" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.4</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-657 437,-680 495,-680 495,-657 437,-657"/>
|
||||
<polygon fill="none" stroke="black" points="437,-657 437,-680 495,-680 495,-657 437,-657"/>
|
||||
<text text-anchor="start" x="443" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.5</text>
|
||||
<polygon fill="#909090" stroke="none" points="500,-657 500,-680 548,-680 548,-657 500,-657"/>
|
||||
<polygon fill="none" stroke="black" points="500,-657 500,-680 548,-680 548,-657 500,-657"/>
|
||||
<text text-anchor="start" x="506" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.6</text>
|
||||
<polygon fill="#909090" stroke="none" points="553,-657 553,-680 601,-680 601,-657 553,-657"/>
|
||||
<polygon fill="none" stroke="black" points="553,-657 553,-680 601,-680 601,-657 553,-657"/>
|
||||
<text text-anchor="start" x="559" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.6</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<polygon fill="white" stroke="none" points="103,-414 103,-530 717,-530 717,-414 103,-414"/>
|
||||
<polygon fill="white" stroke="none" points="108,-503 108,-525 712,-525 712,-503 108,-503"/>
|
||||
<text text-anchor="start" x="382.5" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">Linux Bridge</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-475 108,-498 191,-498 191,-475 108,-475"/>
|
||||
<polygon fill="none" stroke="black" points="108,-475 108,-498 191,-498 191,-475 108,-475"/>
|
||||
<text text-anchor="start" x="116" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tape0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-475 196,-498 273,-498 273,-475 196,-475"/>
|
||||
<polygon fill="none" stroke="black" points="196,-475 196,-498 273,-498 273,-475 196,-475"/>
|
||||
<text text-anchor="start" x="203" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-475 278,-498 362,-498 362,-475 278,-475"/>
|
||||
<polygon fill="none" stroke="black" points="278,-475 278,-498 362,-498 362,-475 278,-475"/>
|
||||
<text text-anchor="start" x="285" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-475 367,-498 449,-498 449,-475 367,-475"/>
|
||||
<polygon fill="none" stroke="black" points="367,-475 367,-498 449,-498 449,-475 367,-475"/>
|
||||
<text text-anchor="start" x="374.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-475 454,-498 538,-498 538,-475 454,-475"/>
|
||||
<polygon fill="none" stroke="black" points="454,-475 454,-498 538,-498 538,-475 454,-475"/>
|
||||
<text text-anchor="start" x="461" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-475 543,-498 625,-498 625,-475 543,-475"/>
|
||||
<polygon fill="none" stroke="black" points="543,-475 543,-498 625,-498 625,-475 543,-475"/>
|
||||
<text text-anchor="start" x="550.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-475 630,-498 712,-498 712,-475 630,-475"/>
|
||||
<polygon fill="none" stroke="black" points="630,-475 630,-498 712,-498 712,-475 630,-475"/>
|
||||
<text text-anchor="start" x="637.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapfbb76083-60</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-447 108,-470 191,-470 191,-447 108,-447"/>
|
||||
<polygon fill="none" stroke="black" points="108,-447 108,-470 191,-470 191,-447 108,-447"/>
|
||||
<text text-anchor="start" x="116" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbre0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-447 196,-470 273,-470 273,-447 196,-447"/>
|
||||
<polygon fill="none" stroke="black" points="196,-447 196,-470 273,-470 273,-447 196,-447"/>
|
||||
<text text-anchor="start" x="203" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-447 278,-470 362,-470 362,-447 278,-447"/>
|
||||
<polygon fill="none" stroke="black" points="278,-447 278,-470 362,-470 362,-447 278,-447"/>
|
||||
<text text-anchor="start" x="285" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-447 367,-470 449,-470 449,-447 367,-447"/>
|
||||
<polygon fill="none" stroke="black" points="367,-447 367,-470 449,-470 449,-447 367,-447"/>
|
||||
<text text-anchor="start" x="374.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-447 454,-470 538,-470 538,-447 454,-447"/>
|
||||
<polygon fill="none" stroke="black" points="454,-447 454,-470 538,-470 538,-447 454,-447"/>
|
||||
<text text-anchor="start" x="461" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-447 543,-470 625,-470 625,-447 543,-447"/>
|
||||
<polygon fill="none" stroke="black" points="543,-447 543,-470 625,-470 625,-447 543,-447"/>
|
||||
<text text-anchor="start" x="550.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-447 630,-470 712,-470 712,-447 630,-447"/>
|
||||
<polygon fill="none" stroke="black" points="630,-447 630,-470 712,-470 712,-447 630,-447"/>
|
||||
<text text-anchor="start" x="637.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrfbb76083-60</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-419 108,-442 191,-442 191,-419 108,-419"/>
|
||||
<polygon fill="none" stroke="black" points="108,-419 108,-442 191,-442 191,-419 108,-419"/>
|
||||
<text text-anchor="start" x="114.5" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbe0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-419 196,-442 273,-442 273,-419 196,-419"/>
|
||||
<polygon fill="none" stroke="black" points="196,-419 196,-442 273,-442 273,-419 196,-419"/>
|
||||
<text text-anchor="start" x="202" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-419 278,-442 362,-442 362,-419 278,-419"/>
|
||||
<polygon fill="none" stroke="black" points="278,-419 278,-442 362,-442 362,-419 278,-419"/>
|
||||
<text text-anchor="start" x="284" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-419 367,-442 449,-442 449,-419 367,-419"/>
|
||||
<polygon fill="none" stroke="black" points="367,-419 367,-442 449,-442 449,-419 367,-419"/>
|
||||
<text text-anchor="start" x="373" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-419 454,-442 538,-442 538,-419 454,-419"/>
|
||||
<polygon fill="none" stroke="black" points="454,-419 454,-442 538,-442 538,-419 454,-419"/>
|
||||
<text text-anchor="start" x="460" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-419 543,-442 625,-442 625,-419 543,-419"/>
|
||||
<polygon fill="none" stroke="black" points="543,-419 543,-442 625,-442 625,-419 543,-419"/>
|
||||
<text text-anchor="start" x="549" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-419 630,-442 712,-442 712,-419 630,-419"/>
|
||||
<polygon fill="none" stroke="black" points="630,-419 630,-442 712,-442 712,-419 630,-419"/>
|
||||
<text text-anchor="start" x="636" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbfbb76083-60</text>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge2" class="edge"><title>VMs:10023:s->LinuxBridge:tape0d697f2_cb:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M248,-656C248,-573.508 149,-581.492 149,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge3" class="edge"><title>VMs:10024:s->LinuxBridge:tapbd4f1f72_5f:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M302,-656C302,-579.958 234,-575.042 234,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge4" class="edge"><title>VMs:10033:s->LinuxBridge:tapbd96ca7d_5e:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M355,-656C355,-584.509 320,-570.491 320,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge5" class="edge"><title>VMs:10034:s->LinuxBridge:tap4441e3a6_f2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M408,-656C408,-586.222 408,-568.778 408,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge6" class="edge"><title>VMs:1722445:s->LinuxBridge:tapce3d7b20_1d:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M466,-656C466,-584.96 496,-570.04 496,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge7" class="edge"><title>VMs:10036:s->LinuxBridge:tapf0841d56_02:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M524,-656C524,-581.3 584,-573.7 584,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge8" class="edge"><title>VMs:10026:s->LinuxBridge:tapfbb76083_60:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M577,-656C577,-574.672 671,-580.328 671,-499"/>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40.5,-176 40.5,-292 783.5,-292 783.5,-176 40.5,-176"/>
|
||||
<polygon fill="white" stroke="none" points="46,-265 46,-287 779,-287 779,-265 46,-265"/>
|
||||
<text text-anchor="start" x="388" y="-273.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="46,-237 46,-260 143,-260 143,-237 46,-237"/>
|
||||
<polygon fill="none" stroke="black" points="46,-237 46,-260 143,-260 143,-237 46,-237"/>
|
||||
<text text-anchor="start" x="52.5" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[9] qvoe0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="148,-237 148,-260 245,-260 245,-237 148,-237"/>
|
||||
<polygon fill="none" stroke="black" points="148,-237 148,-260 245,-260 245,-237 148,-237"/>
|
||||
<text text-anchor="start" x="154" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[10] qvobd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="250,-237 250,-260 353,-260 353,-237 250,-237"/>
|
||||
<polygon fill="none" stroke="black" points="250,-237 250,-260 353,-260 353,-237 250,-237"/>
|
||||
<text text-anchor="start" x="256" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[11] qvobd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="358,-237 358,-260 459,-260 459,-237 358,-237"/>
|
||||
<polygon fill="none" stroke="black" points="358,-237 358,-260 459,-260 459,-237 358,-237"/>
|
||||
<text text-anchor="start" x="364" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[12] qvo4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="464,-237 464,-260 567,-260 567,-237 464,-237"/>
|
||||
<polygon fill="none" stroke="black" points="464,-237 464,-260 567,-260 567,-237 464,-237"/>
|
||||
<text text-anchor="start" x="470" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[17] qvoce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="572,-237 572,-260 673,-260 673,-237 572,-237"/>
|
||||
<polygon fill="none" stroke="black" points="572,-237 572,-260 673,-260 673,-237 572,-237"/>
|
||||
<text text-anchor="start" x="578" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[16] qvof0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="678,-237 678,-260 779,-260 779,-237 678,-237"/>
|
||||
<polygon fill="none" stroke="black" points="678,-237 678,-260 779,-260 779,-237 678,-237"/>
|
||||
<text text-anchor="start" x="684" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[15] qvofbb76083-60</text>
|
||||
<polygon fill="#909090" stroke="none" points="46,-209 46,-232 143,-232 143,-209 46,-209"/>
|
||||
<polygon fill="none" stroke="black" points="46,-209 46,-232 143,-232 143,-209 46,-209"/>
|
||||
<text text-anchor="start" x="68.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="148,-209 148,-232 245,-232 245,-209 148,-209"/>
|
||||
<polygon fill="none" stroke="black" points="148,-209 148,-232 245,-232 245,-209 148,-209"/>
|
||||
<text text-anchor="start" x="170.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="250,-209 250,-232 353,-232 353,-209 250,-209"/>
|
||||
<polygon fill="none" stroke="black" points="250,-209 250,-232 353,-232 353,-209 250,-209"/>
|
||||
<text text-anchor="start" x="275.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="358,-209 358,-232 459,-232 459,-209 358,-209"/>
|
||||
<polygon fill="none" stroke="black" points="358,-209 358,-232 459,-232 459,-209 358,-209"/>
|
||||
<text text-anchor="start" x="382.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="464,-209 464,-232 567,-232 567,-209 464,-209"/>
|
||||
<polygon fill="none" stroke="black" points="464,-209 464,-232 567,-232 567,-209 464,-209"/>
|
||||
<text text-anchor="start" x="489.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:4</text>
|
||||
<polygon fill="#909090" stroke="none" points="572,-209 572,-232 673,-232 673,-209 572,-209"/>
|
||||
<polygon fill="none" stroke="black" points="572,-209 572,-232 673,-232 673,-209 572,-209"/>
|
||||
<text text-anchor="start" x="596.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="678,-209 678,-232 779,-232 779,-209 678,-209"/>
|
||||
<polygon fill="none" stroke="black" points="678,-209 678,-232 779,-232 779,-209 678,-209"/>
|
||||
<text text-anchor="start" x="702.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="46,-181 46,-204 779,-204 779,-181 46,-181"/>
|
||||
<polygon fill="none" stroke="black" points="46,-181 46,-204 779,-204 779,-181 46,-181"/>
|
||||
<text text-anchor="start" x="385" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge9" class="edge"><title>LinuxBridge:qvbe0d697f2_cb:s->compute_br_int:qvoe0d697f2_cb:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M149,-418C149,-344.064 94,-334.936 94,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge10" class="edge"><title>LinuxBridge:qvbbd4f1f72_5f:s->compute_br_int:qvobd4f1f72_5f:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M234,-418C234,-346.207 196,-332.793 196,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge11" class="edge"><title>LinuxBridge:qvbbd96ca7d_5e:s->compute_br_int:qvobd96ca7d_5e:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M320,-418C320,-347.713 301,-331.287 301,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge12" class="edge"><title>LinuxBridge:qvb4441e3a6_f2:s->compute_br_int:qvo4441e3a6_f2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M408,-418C408,-348.222 408,-330.778 408,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge13" class="edge"><title>LinuxBridge:qvbce3d7b20_1d:s->compute_br_int:qvoce3d7b20_1d:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M496,-418C496,-347.658 516,-331.342 516,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge14" class="edge"><title>LinuxBridge:qvbf0841d56_02:s->compute_br_int:qvof0841d56_02:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M584,-418C584,-346.102 623,-332.898 623,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge15" class="edge"><title>LinuxBridge:qvbfbb76083_60:s->compute_br_int:qvofbb76083_60:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M671,-418C671,-343.613 729,-335.387 729,-261"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="359.5,-36 359.5,-96 464.5,-96 464.5,-36 359.5,-36"/>
|
||||
<polygon fill="white" stroke="none" points="365,-69 365,-91 460,-91 460,-69 365,-69"/>
|
||||
<text text-anchor="start" x="386.5" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#909090" stroke="none" points="365,-41 365,-64 460,-64 460,-41 365,-41"/>
|
||||
<polygon fill="none" stroke="black" points="365,-41 365,-64 460,-64 460,-41 365,-41"/>
|
||||
<text text-anchor="start" x="386.5" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge16" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M413,-180C413,-128.889 413,-116.111 413,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="1164.5,-848 1164.5,-880 1249.5,-880 1249.5,-848 1164.5,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="1170,-853 1170,-875 1245,-875 1245,-853 1170,-853"/>
|
||||
<text text-anchor="start" x="1175.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="1104,-652 1104,-768 1310,-768 1310,-652 1104,-652"/>
|
||||
<polygon fill="white" stroke="none" points="1109,-741 1109,-763 1305,-763 1305,-741 1109,-741"/>
|
||||
<text text-anchor="start" x="1182.5" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-713 1109,-736 1204,-736 1204,-713 1109,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-713 1109,-736 1204,-736 1204,-713 1109,-713"/>
|
||||
<text text-anchor="start" x="1141" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-713 1209,-736 1305,-736 1305,-713 1209,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-713 1209,-736 1305,-736 1305,-713 1209,-713"/>
|
||||
<text text-anchor="start" x="1241.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-685 1109,-708 1204,-708 1204,-685 1109,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-685 1109,-708 1204,-708 1204,-685 1109,-685"/>
|
||||
<text text-anchor="start" x="1126.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-685 1209,-708 1305,-708 1305,-685 1209,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-685 1209,-708 1305,-708 1305,-685 1209,-685"/>
|
||||
<text text-anchor="start" x="1227" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.4/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-657 1109,-680 1204,-680 1204,-657 1109,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-657 1109,-680 1204,-680 1204,-657 1109,-657"/>
|
||||
<text text-anchor="start" x="1115.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-eb8796fb-83</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-657 1209,-680 1305,-680 1305,-657 1209,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-657 1209,-680 1305,-680 1305,-657 1209,-657"/>
|
||||
<text text-anchor="start" x="1215" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[3] qg-e2b1b0d3-a8</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="856,-372 856,-572 1662,-572 1662,-372 856,-372"/>
|
||||
<polygon fill="white" stroke="none" points="861,-545 861,-567 1657,-567 1657,-545 861,-545"/>
|
||||
<text text-anchor="start" x="1234.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="861,-517 861,-540 956,-540 956,-517 861,-517"/>
|
||||
<polygon fill="none" stroke="black" points="861,-517 861,-540 956,-540 956,-517 861,-517"/>
|
||||
<text text-anchor="start" x="867.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-09a15e37-ca</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-517 961,-540 1055,-540 1055,-517 961,-517"/>
|
||||
<polygon fill="none" stroke="black" points="961,-517 961,-540 1055,-540 1055,-517 961,-517"/>
|
||||
<text text-anchor="start" x="967" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[6] tapd0828ef0-eb</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1060,-517 1060,-540 1154,-540 1154,-517 1060,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-517 1060,-540 1154,-540 1154,-517 1060,-517"/>
|
||||
<text text-anchor="start" x="1066" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qr-622abba5-e2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-517 1159,-540 1253,-540 1253,-517 1159,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-517 1159,-540 1253,-540 1253,-517 1159,-517"/>
|
||||
<text text-anchor="start" x="1165" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tapd6f091a2-c0</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-517 1258,-540 1355,-540 1355,-517 1258,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-517 1258,-540 1355,-540 1355,-517 1258,-517"/>
|
||||
<text text-anchor="start" x="1264" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[13] qr-361be2af-e5</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-517 1360,-540 1454,-540 1454,-517 1360,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-517 1360,-540 1454,-540 1454,-517 1360,-517"/>
|
||||
<text text-anchor="start" x="1366" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tapd6f091a2-c0</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-517 1459,-540 1558,-540 1558,-517 1459,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-517 1459,-540 1558,-540 1558,-517 1459,-517"/>
|
||||
<text text-anchor="start" x="1465" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[14] qr-b66b902a-36</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-517 1563,-540 1657,-540 1657,-517 1563,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-517 1563,-540 1657,-540 1657,-517 1563,-517"/>
|
||||
<text text-anchor="start" x="1569" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[6] tapd0828ef0-eb</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-489 861,-512 956,-512 956,-489 861,-489"/>
|
||||
<polygon fill="none" stroke="black" points="861,-489 861,-512 956,-512 956,-489 861,-489"/>
|
||||
<text text-anchor="start" x="882.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-489 961,-512 1055,-512 1055,-489 961,-489"/>
|
||||
<polygon fill="none" stroke="black" points="961,-489 961,-512 1055,-512 1055,-489 961,-489"/>
|
||||
<text text-anchor="start" x="982" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-489 1060,-512 1154,-512 1154,-489 1060,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-489 1060,-512 1154,-512 1154,-489 1060,-489"/>
|
||||
<text text-anchor="start" x="1081" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-489 1159,-512 1253,-512 1253,-489 1159,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-489 1159,-512 1253,-512 1253,-489 1159,-489"/>
|
||||
<text text-anchor="start" x="1180" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-489 1258,-512 1355,-512 1355,-489 1258,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-489 1258,-512 1355,-512 1355,-489 1258,-489"/>
|
||||
<text text-anchor="start" x="1280.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-489 1360,-512 1454,-512 1454,-489 1360,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-489 1360,-512 1454,-512 1454,-489 1360,-489"/>
|
||||
<text text-anchor="start" x="1381" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-489 1459,-512 1558,-512 1558,-489 1459,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-489 1459,-512 1558,-512 1558,-489 1459,-489"/>
|
||||
<text text-anchor="start" x="1482.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-489 1563,-512 1657,-512 1657,-489 1563,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-489 1563,-512 1657,-512 1657,-489 1563,-489"/>
|
||||
<text text-anchor="start" x="1584" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-461 861,-484 956,-484 956,-461 861,-461"/>
|
||||
<polygon fill="none" stroke="black" points="861,-461 861,-484 956,-484 956,-461 861,-461"/>
|
||||
<text text-anchor="start" x="884" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.1/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-461 961,-484 1055,-484 1055,-461 961,-461"/>
|
||||
<polygon fill="none" stroke="black" points="961,-461 961,-484 1055,-484 1055,-461 961,-461"/>
|
||||
<text text-anchor="start" x="983.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-461 1060,-484 1154,-484 1154,-461 1060,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-461 1060,-484 1154,-484 1154,-461 1060,-461"/>
|
||||
<text text-anchor="start" x="1082.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.1/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-461 1159,-484 1253,-484 1253,-461 1159,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-461 1159,-484 1253,-484 1253,-461 1159,-461"/>
|
||||
<text text-anchor="start" x="1181.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-461 1258,-484 1355,-484 1355,-461 1258,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-461 1258,-484 1355,-484 1355,-461 1258,-461"/>
|
||||
<text text-anchor="start" x="1282" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.5/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-461 1360,-484 1454,-484 1454,-461 1360,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-461 1360,-484 1454,-484 1454,-461 1360,-461"/>
|
||||
<text text-anchor="start" x="1382.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-461 1459,-484 1558,-484 1558,-461 1459,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-461 1459,-484 1558,-484 1558,-461 1459,-461"/>
|
||||
<text text-anchor="start" x="1484" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.5/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-461 1563,-484 1657,-484 1657,-461 1563,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-461 1563,-484 1657,-484 1657,-461 1563,-461"/>
|
||||
<text text-anchor="start" x="1585.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-433 861,-456 1055,-456 1055,-433 861,-433"/>
|
||||
<polygon fill="none" stroke="black" points="861,-433 861,-456 1055,-456 1055,-433 861,-433"/>
|
||||
<text text-anchor="start" x="940.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-433 1060,-456 1253,-456 1253,-433 1060,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-433 1060,-456 1253,-456 1253,-433 1060,-433"/>
|
||||
<text text-anchor="start" x="1139" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-433 1258,-456 1454,-456 1454,-433 1258,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-433 1258,-456 1454,-456 1454,-433 1258,-433"/>
|
||||
<text text-anchor="start" x="1338.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-433 1459,-456 1657,-456 1657,-433 1459,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-433 1459,-456 1657,-456 1657,-433 1459,-433"/>
|
||||
<text text-anchor="start" x="1540.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-405 861,-428 1253,-428 1253,-405 861,-405"/>
|
||||
<polygon fill="none" stroke="black" points="861,-405 861,-428 1253,-428 1253,-405 861,-405"/>
|
||||
<text text-anchor="start" x="1041.5" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-405 1258,-428 1657,-428 1657,-405 1258,-405"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-405 1258,-428 1657,-428 1657,-405 1258,-405"/>
|
||||
<text text-anchor="start" x="1442" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-377 861,-400 1657,-400 1657,-377 861,-377"/>
|
||||
<polygon fill="none" stroke="black" points="861,-377 861,-400 1657,-400 1657,-377 861,-377"/>
|
||||
<text text-anchor="start" x="1231.5" y="-386" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge19" class="edge"><title>br_ex:qg_e2b1b0d3_a8:s->network_br_int:qr_361be2af_e5:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1257,-656C1257,-600.267 1307,-596.733 1307,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge20" class="edge"><title>br_ex:qg_e2b1b0d3_a8:s->network_br_int:qr_b66b902a_36:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1257,-656C1257,-532.889 1509,-664.111 1509,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge21" class="edge"><title>br_ex:qg_eb8796fb_83:s->network_br_int:qr_09a15e37_ca:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1156,-656C1156,-534.504 908,-662.496 908,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge22" class="edge"><title>br_ex:qg_eb8796fb_83:s->network_br_int:qr_622abba5_e2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1156,-656C1156,-600.443 1107,-596.557 1107,-541"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="1205.5,-204 1205.5,-264 1310.5,-264 1310.5,-204 1205.5,-204"/>
|
||||
<polygon fill="white" stroke="none" points="1211,-237 1211,-259 1306,-259 1306,-237 1211,-237"/>
|
||||
<text text-anchor="start" x="1232.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#909090" stroke="none" points="1211,-209 1211,-232 1306,-232 1306,-209 1211,-209"/>
|
||||
<polygon fill="none" stroke="black" points="1211,-209 1211,-232 1306,-232 1306,-209 1211,-209"/>
|
||||
<text text-anchor="start" x="1232.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge18" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1259,-376C1259,-312.444 1259,-296.556 1259,-233"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 40 KiB |
31
openstack_dashboard/don/static/don/ovs/view.html
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Internal View</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Internal View
|
||||
</th>
|
||||
<tr>
|
||||
<td align="center" class="clickme">
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/analyze'">
|
||||
Analyze</button>
|
||||
|
||||
<button class="myButton"
|
||||
onClick="location.href='http://127.0.0.1:8000/don/ping'">
|
||||
Ping Tracer</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="don.svg" width="100%" height="850" type="image/svg+xml" id="don_svg"></object></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
36
openstack_dashboard/don/tables.py
Normal file
@ -0,0 +1,36 @@
|
||||
from horizon import tables
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.core.urlresolvers import reverse
|
||||
from don import api
|
||||
from django.utils.http import urlencode
|
||||
|
||||
|
||||
class ViewCollection(tables.LinkAction):
|
||||
name = 'view'
|
||||
verbose_name = _('View')
|
||||
|
||||
def get_link_url(self, datum):
|
||||
base_url = reverse('horizon:don:archive:dbview')
|
||||
params = urlencode({"id": self.table.get_object_id(datum)})
|
||||
return "?".join([base_url, params])
|
||||
|
||||
|
||||
class DeleteCollection(tables.DeleteAction):
|
||||
name = 'delete'
|
||||
verbose_name = _('Delete')
|
||||
data_type_singular = _('Collection')
|
||||
|
||||
def delete(self, request, obj_id):
|
||||
return api.remove_collection(request, obj_id)
|
||||
|
||||
|
||||
class CollectionTable(tables.DataTable):
|
||||
name = tables.Column('timestamp', verbose_name=_('Generated Time'))
|
||||
|
||||
def get_object_id(self, datum):
|
||||
return datum['id']
|
||||
|
||||
class Meta:
|
||||
# table_actions = (,)
|
||||
row_actions = (ViewCollection, DeleteCollection,)
|
||||
name = 'collection'
|
11
openstack_dashboard/don/templates/don/base.html
Normal file
@ -0,0 +1,11 @@
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% block sidebar %}
|
||||
{% include 'horizon/common/_sidebar.html' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
{% include "horizon/_messages.html" %}
|
||||
{% block mydashboard_main %}{% endblock %}
|
||||
{% endblock %}
|
||||
|
93
openstack_dashboard/don/templates/don/don.html
Normal file
@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Diagnosing OpenStack Networking</title>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
var $loading = $('#inprogress').hide();
|
||||
function get_status(){
|
||||
console.log('getting status')
|
||||
var status = $.ajax({
|
||||
type:"GET",
|
||||
url: '/dashboard/don/status',
|
||||
// async: false,
|
||||
success: function(data){
|
||||
console.log('success')
|
||||
$("#content .value").html(data.status);
|
||||
}
|
||||
});
|
||||
}
|
||||
$loading.hide();
|
||||
$('.collect').click(function(){
|
||||
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "/horizon/don/collect",
|
||||
beforeSend: function(){
|
||||
$loading.show();
|
||||
$("#content .value").html("");
|
||||
$loading.attr('style','block');
|
||||
poll = setInterval(function(){get_status();}, 1000);
|
||||
},
|
||||
success: function(data) {
|
||||
$loading.hide();
|
||||
console.log(data.collect_status)
|
||||
clearInterval(poll);
|
||||
$("#content .value").html(data.collect_status);
|
||||
},
|
||||
error: function(data){
|
||||
clearInterval(poll);
|
||||
$("#content .value").html("Error while collecting data..");
|
||||
$("#loading_img").hide();
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="main">
|
||||
<table width="100%" border-spacing="10px">
|
||||
<th class="title">
|
||||
DON: Diagnosing OpenStack Networking
|
||||
</th>
|
||||
<tr>
|
||||
<td><BR>
|
||||
<span class="label label-primary">Step 1</span> Collect <nbsp>
|
||||
<span class="label label-primary">Step 2</span> Visualize <nbsp>
|
||||
<span class="label label-primary">Step 3</span> Analyze or Ping Trace <nbsp></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right" class="table_header">
|
||||
<button class="btn btn-default collect"><span class="fa fa-download"></span> Collect</button>
|
||||
|
||||
<button class="btn btn-default btn-sm ajax-modal btn-launch ajax-update"
|
||||
onClick="location.href='/dashboard/don/view'"><span class="fa fa-pencil"></span>
|
||||
Visualize</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- Showing loading icon and collection status -->
|
||||
<td align="center">
|
||||
<BR><BR><BR>
|
||||
<div class="alert alert-dismissable alert-info" id="inprogress" style="display: none; width:30%;" >
|
||||
<!-- <h5>{{collect_status}}</h5> -->
|
||||
<img id='loading_img' src='{{STATIC_URL}}don/loading_dots.gif' /><BR>
|
||||
<p> Collecting Data </p>
|
||||
<div id='content'>
|
||||
<strong><p class='value'>{{collect_status}}</p></strong>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
144
openstack_dashboard/don/templates/don/don.report.html
Normal file
@ -0,0 +1,144 @@
|
||||
<html>
|
||||
<head>
|
||||
<script type="text/javascript" src="{{ STATIC_URL }}/don/CollapsibleLists.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/don/don.css">
|
||||
<title>DON: Analysis Results</title>
|
||||
</head>
|
||||
<body onload=CollapsibleLists.apply()>
|
||||
<h2>OVS Test Results</h2>
|
||||
<h3>OVS test between all pairs of ports using the same tag in br-int</h3>
|
||||
<ul class="collapsibleList">
|
||||
<li>OVS bridge br-int
|
||||
<ul class="collapsibleList">
|
||||
<li>tag 2
|
||||
<ul class="collapsibleList">
|
||||
<li> 6 → 7 <font class="fail">✘</font>
|
||||
<ul class="collapsibleList">
|
||||
<pre class="fail">
|
||||
'sudo ovs-appctl fdb/flush br-int'
|
||||
'sudo ovs-appctl ofproto/trace br-int in_port=6,dl_src=AA:BB:CC:DD:EE:11,dl_dst=AA:BB:CC:DD:EE:22 -generate'
|
||||
'sudo ovs-appctl fdb/show br-int'
|
||||
'sudo ovs-appctl ofproto/trace br-int in_port=7,dl_src=AA:BB:CC:DD:EE:22,dl_dst=AA:BB:CC:DD:EE:11 -generate'
|
||||
{
|
||||
"command_list": [
|
||||
{
|
||||
"cmd": "sudo ovs-appctl fdb/flush br-int",
|
||||
"output": [
|
||||
"table successfully flushed",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl ofproto/trace br-int in_port=6,dl_src=AA:BB:CC:DD:EE:11,dl_dst=AA:BB:CC:DD:EE:22 -generate",
|
||||
"output": [
|
||||
"Flow: metadata=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
"Rule: table=0 cookie=0x9ddbfd9c4f252cdc priority=0",
|
||||
"OpenFlow actions=NORMAL",
|
||||
"no learned MAC for destination, flooding",
|
||||
"",
|
||||
" Resubmitted flow: metadata=0,in_port=1,dl_vlan=2,dl_vlan_pcp=0,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,5,pop_vlan,8,9,push_vlan(vid=2,pcp=0),10",
|
||||
" Rule: table=0 cookie=0x9ddbfd9c4f252cdc priority=1,in_port=1",
|
||||
" OpenFlow actions=resubmit(,2)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,5,pop_vlan,8,9,push_vlan(vid=2,pcp=0),10",
|
||||
" Rule: table=2 cookie=0x9ddbfd9c4f252cdc priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00",
|
||||
" OpenFlow actions=resubmit(,20)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,5,pop_vlan,8,9,push_vlan(vid=2,pcp=0),10",
|
||||
" Rule: table=20 cookie=0x9ddbfd9c4f252cdc priority=0",
|
||||
" OpenFlow actions=resubmit(,22)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,5,pop_vlan,8,9,push_vlan(vid=2,pcp=0),10",
|
||||
" Rule: table=22 cookie=0x9ddbfd9c4f252cdc priority=0",
|
||||
" OpenFlow actions=drop",
|
||||
"",
|
||||
"Final flow: metadata=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
"Relevant fields: skb_priority=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000,nw_proto=0,nw_frag=no,tp_src=0",
|
||||
"Datapath actions: push_vlan(vid=2,pcp=0),6,5,pop_vlan,8,9,push_vlan(vid=2,pcp=0),10,pop_vlan,14",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl fdb/show br-int",
|
||||
"output": [
|
||||
" port VLAN MAC Age",
|
||||
" 6 2 aa:bb:cc:dd:ee:11 0",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl ofproto/trace br-int in_port=7,dl_src=AA:BB:CC:DD:EE:22,dl_dst=AA:BB:CC:DD:EE:11 -generate",
|
||||
"output": [
|
||||
"Flow: metadata=0,in_port=7,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:22,dl_dst=aa:bb:cc:dd:ee:11,dl_type=0x0000",
|
||||
"Rule: table=0 cookie=0x9ddbfd9c4f252cdc priority=0",
|
||||
"OpenFlow actions=NORMAL",
|
||||
"forwarding to learned port",
|
||||
"",
|
||||
"Final flow: unchanged",
|
||||
"Relevant fields: skb_priority=0,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=aa:bb:cc:dd:ee:22,dl_dst=aa:bb:cc:dd:ee:11,dl_type=0x0000,nw_proto=0,nw_frag=no,tp_src=0",
|
||||
"Datapath actions: 13",
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
"comment": "ovs br-int port 6 --> 7",
|
||||
"debugs": [
|
||||
"AA:BB:CC:DD:EE:11 learnt on expected vlan 2 on port 6",
|
||||
"Packet for learnt mac forwarded properly"
|
||||
],
|
||||
"errors": [
|
||||
"Packet forwarded to incorrect port 13, expected 6"
|
||||
],
|
||||
"pass": false
|
||||
}
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
OVERALL RESULT: <font class="fail">✘</font>
|
||||
<h2>Ping Test Results</h2>
|
||||
<h3>Ping test between all pairs of VMs</h3>
|
||||
<ul class="collapsibleList">
|
||||
<li>router1 (Namespace [qrouter-90111551-6cfc-4be0-b1c2-ce8bffb7edf6])
|
||||
<ul class="collapsibleList">
|
||||
<li>vm1 → vm2
|
||||
<ul class="collapsibleList">
|
||||
<li> 10.10.0.3 → 10.10.0.4 <font class="fail">✘</font>
|
||||
<ul class="collapsibleList">
|
||||
<pre class="fail">
|
||||
{
|
||||
"command_list": [
|
||||
{
|
||||
"cmd": "ssh 10.10.0.3 with provided username and passwd",
|
||||
"output": "Could not ssh to 10.10.0.3",
|
||||
"pass": false
|
||||
}
|
||||
],
|
||||
"comment": "PING 10.10.0.3 to 10.10.0.4",
|
||||
"errors": [],
|
||||
"pass": false
|
||||
}
|
||||
|
||||
</pre>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
OVERALL RESULT: <font class="fail">✘</font>
|
||||
</body>
|
||||
</html>
|
204
openstack_dashboard/don/templates/don/don.svg
Normal file
@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="576pt" height="720pt"
|
||||
viewBox="0.00 0.00 576.00 720.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 716)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-716 572,-716 572,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-704 286,-704 286,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="133,-640 133,-696 253,-696 253,-640 133,-640"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-436 16,-592 278,-592 278,-436 16,-436"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="116,-444 116,-584 270,-584 270,-444 116,-444"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-488 24,-540 108,-540 108,-488 24,-488"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-354 274,-354 274,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-206 24,-346 266,-346 266,-206 24,-206"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="89,-24 89,-108 201,-108 201,-24 89,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="294,-8 294,-704 560,-704 560,-8 294,-8"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="302,-16 302,-592 552,-592 552,-16 302,-16"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="310,-444 310,-584 448,-584 448,-444 310,-444"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="310,-164 310,-388 544,-388 544,-164 310,-164"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="372,-24 372,-108 484,-108 484,-24 372,-24"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="320,-640 320,-696 438,-696 438,-640 320,-640"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="149,-652 149,-684 237,-684 237,-652 149,-652"/>
|
||||
<polygon fill="yellow" stroke="none" points="154,-657 154,-679 232,-679 232,-657 154,-657"/>
|
||||
<text text-anchor="start" x="159.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="132,-456 132,-572 254,-572 254,-456 132,-456"/>
|
||||
<polygon fill="white" stroke="none" points="137,-545 137,-567 249,-567 249,-545 137,-545"/>
|
||||
<text text-anchor="start" x="182.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="137,-517 137,-540 191,-540 191,-517 137,-517"/>
|
||||
<polygon fill="none" stroke="black" points="137,-517 137,-540 191,-540 191,-517 137,-517"/>
|
||||
<text text-anchor="start" x="154.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="196,-517 196,-540 249,-540 249,-517 196,-517"/>
|
||||
<polygon fill="none" stroke="black" points="196,-517 196,-540 249,-540 249,-517 196,-517"/>
|
||||
<text text-anchor="start" x="213" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="137,-489 137,-512 191,-512 191,-489 137,-489"/>
|
||||
<polygon fill="none" stroke="black" points="137,-489 137,-512 191,-512 191,-489 137,-489"/>
|
||||
<text text-anchor="start" x="146.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="196,-489 196,-512 249,-512 249,-489 196,-489"/>
|
||||
<polygon fill="none" stroke="black" points="196,-489 196,-512 249,-512 249,-489 196,-489"/>
|
||||
<text text-anchor="start" x="205" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="137,-461 137,-484 191,-484 191,-461 137,-461"/>
|
||||
<polygon fill="none" stroke="black" points="137,-461 137,-484 191,-484 191,-461 137,-461"/>
|
||||
<text text-anchor="start" x="143.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="196,-461 196,-484 249,-484 249,-461 196,-461"/>
|
||||
<polygon fill="none" stroke="black" points="196,-461 196,-484 249,-484 249,-461 196,-461"/>
|
||||
<text text-anchor="start" x="202" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<text text-anchor="middle" x="66" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">LinuxBridge</text>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40,-218 40,-334 250,-334 250,-218 40,-218"/>
|
||||
<polygon fill="white" stroke="none" points="45,-307 45,-329 245,-329 245,-307 45,-307"/>
|
||||
<text text-anchor="start" x="120.5" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-279 45,-302 144,-302 144,-279 45,-279"/>
|
||||
<polygon fill="none" stroke="black" points="45,-279 45,-302 144,-302 144,-279 45,-279"/>
|
||||
<text text-anchor="start" x="51.5" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-279 149,-302 245,-302 245,-279 149,-279"/>
|
||||
<polygon fill="none" stroke="black" points="149,-279 149,-302 245,-302 245,-279 149,-279"/>
|
||||
<text text-anchor="start" x="155" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-251 45,-274 144,-274 144,-251 45,-251"/>
|
||||
<polygon fill="none" stroke="black" points="45,-251 45,-274 144,-274 144,-251 45,-251"/>
|
||||
<text text-anchor="start" x="68.5" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-251 149,-274 245,-274 245,-251 149,-251"/>
|
||||
<polygon fill="none" stroke="black" points="149,-251 149,-274 245,-274 245,-251 149,-251"/>
|
||||
<text text-anchor="start" x="171" y="-260" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="45,-223 45,-246 245,-246 245,-223 45,-223"/>
|
||||
<polygon fill="none" stroke="black" points="45,-223 45,-246 245,-246 245,-223 45,-223"/>
|
||||
<text text-anchor="start" x="117.5" y="-232" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge2" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M69.8346,-495.954C77.5031,-460.323 94,-375.275 94,-303"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M76.0841,-495.784C85.3069,-480.12 99.3923,-456.399 112,-436 148.882,-376.326 197,-373.152 197,-303"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="105,-36 105,-96 185,-96 185,-36 105,-36"/>
|
||||
<polygon fill="white" stroke="none" points="110,-69 110,-91 180,-91 180,-69 110,-69"/>
|
||||
<text text-anchor="start" x="119" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<polygon fill="none" stroke="black" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<text text-anchor="start" x="119" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge4" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M145,-222C145,-152.222 145,-134.778 145,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="336.5,-652 336.5,-684 421.5,-684 421.5,-652 336.5,-652"/>
|
||||
<polygon fill="yellow" stroke="none" points="342,-657 342,-679 417,-679 417,-657 342,-657"/>
|
||||
<text text-anchor="start" x="347.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="326.5,-456 326.5,-572 431.5,-572 431.5,-456 326.5,-456"/>
|
||||
<polygon fill="white" stroke="none" points="332,-545 332,-567 427,-567 427,-545 332,-545"/>
|
||||
<text text-anchor="start" x="355" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-517 332,-540 427,-540 427,-517 332,-517"/>
|
||||
<polygon fill="none" stroke="black" points="332,-517 332,-540 427,-540 427,-517 332,-517"/>
|
||||
<text text-anchor="start" x="364" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-489 332,-512 427,-512 427,-489 332,-489"/>
|
||||
<polygon fill="none" stroke="black" points="332,-489 332,-512 427,-512 427,-489 332,-489"/>
|
||||
<text text-anchor="start" x="349.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-461 332,-484 427,-484 427,-461 332,-461"/>
|
||||
<polygon fill="none" stroke="black" points="332,-461 332,-484 427,-484 427,-461 332,-461"/>
|
||||
<text text-anchor="start" x="338.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="326.5,-176 326.5,-376 527.5,-376 527.5,-176 326.5,-176"/>
|
||||
<polygon fill="white" stroke="none" points="332,-349 332,-371 523,-371 523,-349 332,-349"/>
|
||||
<text text-anchor="start" x="403" y="-357.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-321 332,-344 427,-344 427,-321 332,-321"/>
|
||||
<polygon fill="none" stroke="black" points="332,-321 332,-344 427,-344 427,-321 332,-321"/>
|
||||
<text text-anchor="start" x="338.5" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-321 432,-344 523,-344 523,-321 432,-321"/>
|
||||
<polygon fill="none" stroke="black" points="432,-321 432,-344 523,-344 523,-321 432,-321"/>
|
||||
<text text-anchor="start" x="438" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tap59f90a3b-f5</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-293 332,-316 427,-316 427,-293 332,-293"/>
|
||||
<polygon fill="none" stroke="black" points="332,-293 332,-316 427,-316 427,-293 332,-293"/>
|
||||
<text text-anchor="start" x="353.5" y="-302" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-293 432,-316 523,-316 523,-293 432,-293"/>
|
||||
<polygon fill="none" stroke="black" points="432,-293 432,-316 523,-316 523,-293 432,-293"/>
|
||||
<text text-anchor="start" x="451.5" y="-302" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-265 332,-288 427,-288 427,-265 332,-265"/>
|
||||
<polygon fill="none" stroke="black" points="332,-265 332,-288 427,-288 427,-265 332,-265"/>
|
||||
<text text-anchor="start" x="352" y="-274" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="432,-265 432,-288 523,-288 523,-265 432,-265"/>
|
||||
<polygon fill="none" stroke="black" points="432,-265 432,-288 523,-288 523,-265 432,-265"/>
|
||||
<text text-anchor="start" x="450" y="-274" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.2/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="332,-237 332,-260 523,-260 523,-237 332,-237"/>
|
||||
<polygon fill="none" stroke="black" points="332,-237 332,-260 523,-260 523,-237 332,-237"/>
|
||||
<text text-anchor="start" x="410" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="332,-209 332,-232 523,-232 523,-209 332,-209"/>
|
||||
<polygon fill="none" stroke="black" points="332,-209 332,-232 523,-232 523,-209 332,-209"/>
|
||||
<text text-anchor="start" x="412" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="332,-181 332,-204 523,-204 523,-181 332,-181"/>
|
||||
<polygon fill="none" stroke="black" points="332,-181 332,-204 523,-204 523,-181 332,-181"/>
|
||||
<text text-anchor="start" x="400" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge7" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M380,-460C380,-408.887 379,-396.113 379,-345"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="388,-36 388,-96 468,-96 468,-36 388,-36"/>
|
||||
<polygon fill="white" stroke="none" points="393,-69 393,-91 463,-91 463,-69 393,-69"/>
|
||||
<text text-anchor="start" x="402" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="393,-41 393,-64 463,-64 463,-41 393,-41"/>
|
||||
<polygon fill="none" stroke="black" points="393,-41 393,-64 463,-64 463,-41 393,-41"/>
|
||||
<text text-anchor="start" x="402" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge6" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M428,-180C428,-128.889 428,-116.111 428,-65"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
27
openstack_dashboard/don/templates/don/path.html
Normal file
@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Ping Tracer</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Ping Tracer
|
||||
</th>
|
||||
<tr>
|
||||
<td align="right" class="clickme">
|
||||
<button class="btn btn-default btn-sm ajax-modal btn-launch ajax-update"
|
||||
onClick="history.go(-1)">
|
||||
Back</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="{{STATIC_URL}}don/ping.svg" width="100%" height="850" type="image/svg+xml" id="ping_svg"></object></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
14
openstack_dashboard/don/templates/don/ping.html
Normal file
@ -0,0 +1,14 @@
|
||||
<div class="col-lg-4">
|
||||
<div class="well bs-component">
|
||||
<form action="/dashboard/don/ping/" method="post">
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
<legend>DON: Ping Tracer</legend>
|
||||
<div class="form-group required">
|
||||
{{ form }}
|
||||
</div>
|
||||
<input class="btn btn-primary ajax-update" type="submit" value="Submit" />
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
BIN
openstack_dashboard/don/templates/don/test.png
Normal file
After Width: | Height: | Size: 101 KiB |
47
openstack_dashboard/don/templates/don/view.html
Normal file
@ -0,0 +1,47 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DON: Internal View</title>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
<script type="text/javascript">
|
||||
function download(){
|
||||
var a = document.createElement("a");
|
||||
var now = new Date();
|
||||
var timestamp = now.toISOString()
|
||||
a.href = "{{STATIC_URL}}don/don.svg";
|
||||
a.download = "DON-Internal-View-"+timestamp+".svg";
|
||||
a.click();
|
||||
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="internal">
|
||||
<table width="100%">
|
||||
<th class="title">
|
||||
DON: Internal View
|
||||
</th>
|
||||
<tr>
|
||||
<td align="right" class="table_header">
|
||||
<button class="btn btn-default btn-sm ajax-modal btn-launch ajax-update"
|
||||
onClick="location.href='/dashboard/don/analyze'"><span class="fa fa-search"></span>
|
||||
Analyze</button>
|
||||
|
||||
<button class="btn btn-default btn-sm ajax-modal btn-launch ajax-update"
|
||||
onClick="location.href='/dashboard/don/ping'">
|
||||
Ping Tracer</button>
|
||||
|
||||
<button class="btn btn-default btn-sm"
|
||||
onClick="download();"><span class="fa fa-download"></span>
|
||||
Download Graph</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><object class="emb" data="{{STATIC_URL}}don/don.svg" width="100%" height="850" type="image/svg+xml" id="don_svg"></object></td>
|
||||
<!-- <img src='test.png'> -->
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
29
openstack_dashboard/local/enabled/_7000_don.py
Normal file
@ -0,0 +1,29 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# The slug of the dashboard to be added to HORIZON['dashboards']. Required.
|
||||
DASHBOARD = 'don'
|
||||
# If set to True, this dashboard will be set as the default dashboard.
|
||||
DEFAULT = False
|
||||
# A dictionary of exception classes to be added to HORIZON['exceptions'].
|
||||
ADD_EXCEPTIONS = {}
|
||||
# A list of applications to be added to INSTALLED_APPS.
|
||||
ADD_INSTALLED_APPS = ['don']
|
||||
|
||||
ADD_ANGULAR_MODULES = [
|
||||
# 'horizon.dashboard.don',
|
||||
]
|
||||
|
||||
AUTO_DISCOVER_STATIC_FILES = True
|
||||
|
||||
|
||||
# WEBROOT = '/'
|
@ -3,3 +3,4 @@
|
||||
# process, which may cause wedges in the gate later.
|
||||
|
||||
pbr>=1.6
|
||||
Django<1.9,>=1.8
|
||||
|
152
static/don/CollapsibleLists.js
Normal file
@ -0,0 +1,152 @@
|
||||
/*
|
||||
|
||||
CollapsibleLists.js
|
||||
|
||||
An object allowing lists to dynamically expand and collapse
|
||||
|
||||
Created by Stephen Morley - http://code.stephenmorley.org/ - and released under
|
||||
the terms of the CC0 1.0 Universal legal code:
|
||||
|
||||
http://creativecommons.org/publicdomain/zero/1.0/legalcode
|
||||
|
||||
*/
|
||||
|
||||
// create the CollapsibleLists object
|
||||
var CollapsibleLists =
|
||||
new function(){
|
||||
|
||||
/* Makes all lists with the class 'collapsibleList' collapsible. The
|
||||
* parameter is:
|
||||
*
|
||||
* doNotRecurse - true if sub-lists should not be made collapsible
|
||||
*/
|
||||
this.apply = function(doNotRecurse){
|
||||
|
||||
// loop over the unordered lists
|
||||
var uls = document.getElementsByTagName('ul');
|
||||
for (var index = 0; index < uls.length; index ++){
|
||||
|
||||
// check whether this list should be made collapsible
|
||||
if (uls[index].className.match(/(^| )collapsibleList( |$)/)){
|
||||
|
||||
// make this list collapsible
|
||||
this.applyTo(uls[index], true);
|
||||
|
||||
// check whether sub-lists should also be made collapsible
|
||||
if (!doNotRecurse){
|
||||
|
||||
// add the collapsibleList class to the sub-lists
|
||||
var subUls = uls[index].getElementsByTagName('ul');
|
||||
for (var subIndex = 0; subIndex < subUls.length; subIndex ++){
|
||||
subUls[subIndex].className += ' collapsibleList';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* Makes the specified list collapsible. The parameters are:
|
||||
*
|
||||
* node - the list element
|
||||
* doNotRecurse - true if sub-lists should not be made collapsible
|
||||
*/
|
||||
this.applyTo = function(node, doNotRecurse){
|
||||
|
||||
// loop over the list items within this node
|
||||
var lis = node.getElementsByTagName('li');
|
||||
for (var index = 0; index < lis.length; index ++){
|
||||
|
||||
// check whether this list item should be collapsible
|
||||
if (!doNotRecurse || node == lis[index].parentNode){
|
||||
|
||||
// prevent text from being selected unintentionally
|
||||
if (lis[index].addEventListener){
|
||||
lis[index].addEventListener(
|
||||
'mousedown', function (e){ e.preventDefault(); }, false);
|
||||
}else{
|
||||
lis[index].attachEvent(
|
||||
'onselectstart', function(){ event.returnValue = false; });
|
||||
}
|
||||
|
||||
// add the click listener
|
||||
if (lis[index].addEventListener){
|
||||
lis[index].addEventListener(
|
||||
'click', createClickListener(lis[index]), false);
|
||||
}else{
|
||||
lis[index].attachEvent(
|
||||
'onclick', createClickListener(lis[index]));
|
||||
}
|
||||
|
||||
// close the unordered lists within this list item
|
||||
toggle(lis[index]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* Returns a function that toggles the display status of any unordered
|
||||
* list elements within the specified node. The parameter is:
|
||||
*
|
||||
* node - the node containing the unordered list elements
|
||||
*/
|
||||
function createClickListener(node){
|
||||
|
||||
// return the function
|
||||
return function(e){
|
||||
|
||||
// ensure the event object is defined
|
||||
if (!e) e = window.event;
|
||||
|
||||
// find the list item containing the target of the event
|
||||
var li = (e.target ? e.target : e.srcElement);
|
||||
while (li.nodeName != 'LI') li = li.parentNode;
|
||||
|
||||
// toggle the state of the node if it was the target of the event
|
||||
if (li == node) toggle(node);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/* Opens or closes the unordered list elements directly within the
|
||||
* specified node. The parameter is:
|
||||
*
|
||||
* node - the node containing the unordered list elements
|
||||
*/
|
||||
function toggle(node){
|
||||
|
||||
// determine whether to open or close the unordered lists
|
||||
var open = node.className.match(/(^| )collapsibleListClosed( |$)/);
|
||||
|
||||
// loop over the unordered list elements with the node
|
||||
var uls = node.getElementsByTagName('ul');
|
||||
for (var index = 0; index < uls.length; index ++){
|
||||
|
||||
// find the parent list item of this unordered list
|
||||
var li = uls[index];
|
||||
while (li.nodeName != 'LI') li = li.parentNode;
|
||||
|
||||
// style the unordered list if it is directly within this node
|
||||
if (li == node) uls[index].style.display = (open ? 'block' : 'none');
|
||||
|
||||
}
|
||||
|
||||
// remove the current class from the node
|
||||
node.className =
|
||||
node.className.replace(
|
||||
/(^| )collapsibleList(Open|Closed)( |$)/, '');
|
||||
|
||||
// if the node contains unordered lists, set its class
|
||||
if (uls.length > 0){
|
||||
node.className += ' collapsibleList' + (open ? 'Open' : 'Closed');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}();
|
BIN
static/don/button-closed.png
Normal file
After Width: | Height: | Size: 256 B |
BIN
static/don/button-open.png
Normal file
After Width: | Height: | Size: 240 B |
BIN
static/don/button.png
Normal file
After Width: | Height: | Size: 230 B |
112
static/don/compute.dot
Normal file
@ -0,0 +1,112 @@
|
||||
digraph DON_compute {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101003">10.10.0.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101004">10.10.0.4</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap71ac5bef_7c">tap71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr8aa60600_7b">qbr8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr71ac5bef_7c">qbr71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb8aa60600_7b">qvb8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb71ac5bef_7c">qvb71ac5bef-7c</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7b">[6] qvo8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7c">[7] qvo71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7ctag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
VMs:101004:s -> LinuxBridge:tap71ac5bef_7c:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb8aa60600_7b:s -> compute_br_int:qvo8aa60600_7b:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb71ac5bef_7c:s -> compute_br_int:qvo71ac5bef_7c:n [color = "#0066cc", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
|
||||
}
|
||||
|
132
static/don/compute.svg
Normal file
@ -0,0 +1,132 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_compute Pages: 1 -->
|
||||
<svg width="282pt" height="816pt"
|
||||
viewBox="0.00 0.00 282.00 816.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 812)">
|
||||
<title>DON_compute</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-812 278,-812 278,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="none" stroke="black" points="47,-744 47,-800 167,-800 167,-744 47,-744"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="22,-344 22,-696 252,-696 252,-344 22,-344"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="30,-548 30,-688 184,-688 184,-548 30,-548"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="30,-352 30,-492 244,-492 244,-352 30,-352"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-304 266,-304 266,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-156 16,-296 258,-296 258,-156 16,-156"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="81,-16 81,-100 193,-100 193,-16 81,-16"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="63,-756 63,-788 151,-788 151,-756 63,-756"/>
|
||||
<polygon fill="yellow" stroke="none" points="68,-761 68,-783 146,-783 146,-761 68,-761"/>
|
||||
<text text-anchor="start" x="73.5" y="-769.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="46,-560 46,-676 168,-676 168,-560 46,-560"/>
|
||||
<polygon fill="white" stroke="none" points="51,-649 51,-671 163,-671 163,-649 51,-649"/>
|
||||
<text text-anchor="start" x="96.5" y="-657.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="51,-621 51,-644 105,-644 105,-621 51,-621"/>
|
||||
<polygon fill="none" stroke="black" points="51,-621 51,-644 105,-644 105,-621 51,-621"/>
|
||||
<text text-anchor="start" x="68.5" y="-630" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="110,-621 110,-644 163,-644 163,-621 110,-621"/>
|
||||
<polygon fill="none" stroke="black" points="110,-621 110,-644 163,-644 163,-621 110,-621"/>
|
||||
<text text-anchor="start" x="127" y="-630" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="51,-593 51,-616 105,-616 105,-593 51,-593"/>
|
||||
<polygon fill="none" stroke="black" points="51,-593 51,-616 105,-616 105,-593 51,-593"/>
|
||||
<text text-anchor="start" x="60.5" y="-602" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="110,-593 110,-616 163,-616 163,-593 110,-593"/>
|
||||
<polygon fill="none" stroke="black" points="110,-593 110,-616 163,-616 163,-593 110,-593"/>
|
||||
<text text-anchor="start" x="119" y="-602" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="51,-565 51,-588 105,-588 105,-565 51,-565"/>
|
||||
<polygon fill="none" stroke="black" points="51,-565 51,-588 105,-588 105,-565 51,-565"/>
|
||||
<text text-anchor="start" x="57.5" y="-574" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="110,-565 110,-588 163,-588 163,-565 110,-565"/>
|
||||
<polygon fill="none" stroke="black" points="110,-565 110,-588 163,-588 163,-565 110,-565"/>
|
||||
<text text-anchor="start" x="116" y="-574" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<polygon fill="white" stroke="none" points="46,-364 46,-480 228,-480 228,-364 46,-364"/>
|
||||
<polygon fill="white" stroke="none" points="51,-453 51,-475 223,-475 223,-453 51,-453"/>
|
||||
<text text-anchor="start" x="109.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">Linux Bridge</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="51,-425 51,-448 136,-448 136,-425 51,-425"/>
|
||||
<polygon fill="none" stroke="black" points="51,-425 51,-448 136,-448 136,-425 51,-425"/>
|
||||
<text text-anchor="start" x="60" y="-434" font-family="Helvetica,sans-Serif" font-size="10.00">tap71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="51,-397 51,-420 136,-420 136,-397 51,-397"/>
|
||||
<polygon fill="none" stroke="black" points="51,-397 51,-420 136,-420 136,-397 51,-397"/>
|
||||
<text text-anchor="start" x="58.5" y="-406" font-family="Helvetica,sans-Serif" font-size="10.00">qbr8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-397 141,-420 223,-420 223,-397 141,-397"/>
|
||||
<polygon fill="none" stroke="black" points="141,-397 141,-420 223,-420 223,-397 141,-397"/>
|
||||
<text text-anchor="start" x="148.5" y="-406" font-family="Helvetica,sans-Serif" font-size="10.00">qbr71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="51,-369 51,-392 136,-392 136,-369 51,-369"/>
|
||||
<polygon fill="none" stroke="black" points="51,-369 51,-392 136,-392 136,-369 51,-369"/>
|
||||
<text text-anchor="start" x="57.5" y="-378" font-family="Helvetica,sans-Serif" font-size="10.00">qvb8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-369 141,-392 223,-392 223,-369 141,-369"/>
|
||||
<polygon fill="none" stroke="black" points="141,-369 141,-392 223,-392 223,-369 141,-369"/>
|
||||
<text text-anchor="start" x="147" y="-378" font-family="Helvetica,sans-Serif" font-size="10.00">qvb71ac5bef-7c</text>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge2" class="edge"><title>VMs:101004:s->LinuxBridge:tap71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M137,-564C137,-509.276 93,-503.724 93,-449"/>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="32,-168 32,-284 242,-284 242,-168 32,-168"/>
|
||||
<polygon fill="white" stroke="none" points="37,-257 37,-279 237,-279 237,-257 37,-257"/>
|
||||
<text text-anchor="start" x="112.5" y="-265.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="37,-229 37,-252 136,-252 136,-229 37,-229"/>
|
||||
<polygon fill="none" stroke="black" points="37,-229 37,-252 136,-252 136,-229 37,-229"/>
|
||||
<text text-anchor="start" x="43.5" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-229 141,-252 237,-252 237,-229 141,-229"/>
|
||||
<polygon fill="none" stroke="black" points="141,-229 141,-252 237,-252 237,-229 141,-229"/>
|
||||
<text text-anchor="start" x="147" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="37,-201 37,-224 136,-224 136,-201 37,-201"/>
|
||||
<polygon fill="none" stroke="black" points="37,-201 37,-224 136,-224 136,-201 37,-201"/>
|
||||
<text text-anchor="start" x="60.5" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="141,-201 141,-224 237,-224 237,-201 141,-201"/>
|
||||
<polygon fill="none" stroke="black" points="141,-201 141,-224 237,-224 237,-201 141,-201"/>
|
||||
<text text-anchor="start" x="163" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="37,-173 37,-196 237,-196 237,-173 37,-173"/>
|
||||
<polygon fill="none" stroke="black" points="37,-173 37,-196 237,-196 237,-173 37,-173"/>
|
||||
<text text-anchor="start" x="109.5" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M93,-368C93,-316.794 86,-304.206 86,-253"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge4" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M182,-368C182,-316.794 189,-304.206 189,-253"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="97,-28 97,-88 177,-88 177,-28 97,-28"/>
|
||||
<polygon fill="white" stroke="none" points="102,-61 102,-83 172,-83 172,-61 102,-61"/>
|
||||
<text text-anchor="start" x="111" y="-69.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="102,-33 102,-56 172,-56 172,-33 102,-33"/>
|
||||
<polygon fill="none" stroke="black" points="102,-33 102,-56 172,-56 172,-33 102,-33"/>
|
||||
<text text-anchor="start" x="111" y="-42" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge5" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M137,-172C137,-120.889 137,-108.111 137,-57"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.5 KiB |
211
static/don/don.css
Normal file
@ -0,0 +1,211 @@
|
||||
body {
|
||||
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
color: black;
|
||||
background-color: #ffffff
|
||||
}
|
||||
|
||||
pre {
|
||||
width: 500px; /* specify width */
|
||||
white-space: pre-wrap; /* CSS3 browsers */
|
||||
white-space: -moz-pre-wrap !important; /* 1999+ Mozilla */
|
||||
white-space: -pre-wrap; /* Opera 4 thru 6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 and up */
|
||||
/* word-wrap: break-word; */ /* IE 5.5+ and up */
|
||||
font-family: "Courier New", monospace;
|
||||
line-height: 1.6em;
|
||||
margin: 1.7em 0 1.7em 0.3em;
|
||||
font-size: 12px;
|
||||
/* overflow-x: auto; */ /* Firefox 2 only */
|
||||
width: 90%; /* only if needed */
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-family: Georgia, Helvetica,san-Serif;
|
||||
font-weight: bold;
|
||||
font-size: 20pt;
|
||||
/*color:#fffff0;*/
|
||||
color: #2A4E68;
|
||||
padding: 5px;
|
||||
margin: 20px 0px 0px 0px;
|
||||
/*background:#3399ff;*/
|
||||
/*border-radius: 20px;*/
|
||||
/*
|
||||
font-family: "Helvetica Neue", Helvetica, Geneva, Arial,
|
||||
SunSans-Regular, sans-serif;
|
||||
padding: 0px;
|
||||
font-weight: normal;
|
||||
color: #2A4E68;
|
||||
border-top: 1px solid black;
|
||||
#border-bottom: 0.5px solid black;
|
||||
#background: #ff9933;
|
||||
#border-radius: 10px;
|
||||
width:750px;
|
||||
*/
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: "Helvetica Neue", Helvetica, Geneva, Arial,
|
||||
SunSans-Regular, sans-serif;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 5px;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
color: #ff9933;
|
||||
border-bottom: 0.5px solid black;
|
||||
width:750px; /*Change this to whatever value that you want*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
pre.pass {
|
||||
border-left: 2px solid #009900;
|
||||
}
|
||||
pre.fail {
|
||||
border-left: 2px solid #f00000;
|
||||
}
|
||||
|
||||
font.pass {color:#00cc00; text-decoration:none;}
|
||||
font.fail {color:#f00000; font-weight:bold; text-decoration:none;}
|
||||
|
||||
.collapsibleList li{
|
||||
list-style-image:url('button.png');
|
||||
cursor:auto;
|
||||
margin:0 0 5px 0;
|
||||
}
|
||||
|
||||
li.collapsibleListOpen{
|
||||
list-style-image:url('button-open.png');
|
||||
cursor:pointer;
|
||||
margin:0 0 5px 0;
|
||||
}
|
||||
|
||||
li.collapsibleListClosed{
|
||||
list-style-image:url('button-closed.png');
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.message {
|
||||
position: absolute;
|
||||
display: none;
|
||||
border: 0px solid red;
|
||||
width:80px;
|
||||
height:80px;
|
||||
padding: 0px;
|
||||
float: top;
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
#main {
|
||||
width:1000px;
|
||||
float:left;
|
||||
border: 0px solid red;
|
||||
}
|
||||
|
||||
#internal {
|
||||
width:1800px;
|
||||
float:left;
|
||||
border: 0px solid red;
|
||||
}
|
||||
|
||||
|
||||
|
||||
table
|
||||
{
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
border: 0px solid blue;
|
||||
padding: 0px;
|
||||
border-spacing:0px;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
|
||||
th {
|
||||
font-family: Georgia, Helvetica,san-Serif;
|
||||
font-weight: bold;
|
||||
font-size: 20pt;
|
||||
/*color:#fffff0;*/
|
||||
color: #2A4E68;
|
||||
padding: 5px;
|
||||
/*background:#3399ff;*/
|
||||
/*border-radius: 20px;*/
|
||||
}
|
||||
|
||||
tr {
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
padding: 0px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
td {
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
vertical-align: middle;
|
||||
padding: 5px;
|
||||
|
||||
border-style: solid;
|
||||
border-width: 0px;
|
||||
border-color: black;
|
||||
}
|
||||
|
||||
td.clickme {
|
||||
font-family: Helvetica,san-Serif;
|
||||
font-weight: normal;
|
||||
font-size: large;
|
||||
vertical-align: bottom;
|
||||
padding: 20px;
|
||||
/*background:#e5e5e5;*/
|
||||
background:#ffffff;
|
||||
border-radius: 15px;
|
||||
border-style: solid;
|
||||
border-width: 0px;
|
||||
border-color: black;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.myButton {
|
||||
-moz-box-shadow: 0px 10px 14px -7px #3e7327;
|
||||
-webkit-box-shadow: 0px 10px 14px -7px #3e7327;
|
||||
box-shadow: 0px 10px 14px -7px #3e7327;
|
||||
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #77b55a), color-stop(1, #72b352));
|
||||
background:-moz-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:-webkit-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:-o-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:-ms-linear-gradient(top, #77b55a 5%, #72b352 100%);
|
||||
background:linear-gradient(to bottom, #77b55a 5%, #72b352 100%);
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#77b55a', endColorstr='#72b352',GradientType=0);
|
||||
background-color:#77b55a;
|
||||
-moz-border-radius:4px;
|
||||
-webkit-border-radius:4px;
|
||||
border-radius:4px;
|
||||
border:1px solid #4b8f29;
|
||||
display:inline-block;
|
||||
cursor:pointer;
|
||||
color:#ffffff;
|
||||
font-family:Arial;
|
||||
font-size:20px;
|
||||
font-weight:bold;
|
||||
padding:6px 12px;
|
||||
text-decoration:none;
|
||||
text-shadow:0px 1px 0px #5b8a3c;
|
||||
}
|
||||
.myButton:hover {
|
||||
background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #72b352), color-stop(1, #77b55a));
|
||||
background:-moz-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:-webkit-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:-o-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:-ms-linear-gradient(top, #72b352 5%, #77b55a 100%);
|
||||
background:linear-gradient(to bottom, #72b352 5%, #77b55a 100%);
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#72b352', endColorstr='#77b55a',GradientType=0);
|
||||
background-color:#72b352;
|
||||
}
|
||||
.myButton:active {
|
||||
position:relative;
|
||||
top:1px;
|
||||
}
|
||||
|
||||
|
200
static/don/don.dot
Normal file
@ -0,0 +1,200 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933">vm2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101003">10.10.0.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="101004">10.10.0.4</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap71ac5bef_7c">tap71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr8aa60600_7b">qbr8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qbr71ac5bef_7c">qbr71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb8aa60600_7b">qvb8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvb71ac5bef_7c">qvb71ac5bef-7c</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7b">[6] qvo8aa60600-7b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7c">[7] qvo71ac5bef-7c</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo8aa60600_7btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qvo71ac5bef_7ctag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
VMs:101004:s -> LinuxBridge:tap71ac5bef_7c:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb8aa60600_7b:s -> compute_br_int:qvo8aa60600_7b:n [color = "#0066cc", penwidth = "4"]
|
||||
LinuxBridge:qvb71ac5bef_7c:s -> compute_br_int:qvo71ac5bef_7c:n [color = "#0066cc", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_757bf552_73">[2] qg-757bf552-73</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b">[8] qr-43b83157-3b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap1e1c73c9_35">[10] tap1e1c73c9-35</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap1e1c73c9_35tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b10.10.0.1/24">10.10.0.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap1e1c73c9_3510.10.0.5/24">10.10.0.5/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_757bf552_73:s -> network_br_int:qr_43b83157_3b:n [color = "#0066cc", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
144
static/don/don.report.html
Normal file
@ -0,0 +1,144 @@
|
||||
<html>
|
||||
<head>
|
||||
<script type="text/javascript" src="CollapsibleLists.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="don.css">
|
||||
<title>DON: Analysis Results</title>
|
||||
</head>
|
||||
<body onload=CollapsibleLists.apply()>
|
||||
<h2>OVS Test Results</h2>
|
||||
<h3>OVS test between all pairs of ports using the same tag in br-int</h3>
|
||||
<ul class="collapsibleList">
|
||||
<li>OVS bridge br-int
|
||||
<ul class="collapsibleList">
|
||||
<li>tag 2
|
||||
<ul class="collapsibleList">
|
||||
<li> 6 → 7 <font class="fail">✘</font>
|
||||
<ul class="collapsibleList">
|
||||
<pre class="fail">
|
||||
'sudo ovs-appctl fdb/flush br-int'
|
||||
'sudo ovs-appctl ofproto/trace br-int in_port=6,dl_src=AA:BB:CC:DD:EE:11,dl_dst=AA:BB:CC:DD:EE:22 -generate'
|
||||
'sudo ovs-appctl fdb/show br-int'
|
||||
'sudo ovs-appctl ofproto/trace br-int in_port=7,dl_src=AA:BB:CC:DD:EE:22,dl_dst=AA:BB:CC:DD:EE:11 -generate'
|
||||
{
|
||||
"command_list": [
|
||||
{
|
||||
"cmd": "sudo ovs-appctl fdb/flush br-int",
|
||||
"output": [
|
||||
"table successfully flushed",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl ofproto/trace br-int in_port=6,dl_src=AA:BB:CC:DD:EE:11,dl_dst=AA:BB:CC:DD:EE:22 -generate",
|
||||
"output": [
|
||||
"Flow: metadata=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
"Rule: table=0 cookie=0xbafdefa428c693b6 priority=0",
|
||||
"OpenFlow actions=NORMAL",
|
||||
"no learned MAC for destination, flooding",
|
||||
"",
|
||||
" Resubmitted flow: metadata=0,in_port=1,dl_vlan=2,dl_vlan_pcp=0,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,pop_vlan,8,push_vlan(vid=2,pcp=0),5,9",
|
||||
" Rule: table=0 cookie=0xbafdefa428c693b6 priority=1,in_port=1",
|
||||
" OpenFlow actions=resubmit(,2)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,pop_vlan,8,push_vlan(vid=2,pcp=0),5,9",
|
||||
" Rule: table=2 cookie=0xbafdefa428c693b6 priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00",
|
||||
" OpenFlow actions=resubmit(,20)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,pop_vlan,8,push_vlan(vid=2,pcp=0),5,9",
|
||||
" Rule: table=20 cookie=0xbafdefa428c693b6 priority=0",
|
||||
" OpenFlow actions=resubmit(,22)",
|
||||
"",
|
||||
" Resubmitted flow: unchanged",
|
||||
" Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0",
|
||||
" Resubmitted odp: push_vlan(vid=2,pcp=0),6,pop_vlan,8,push_vlan(vid=2,pcp=0),5,9",
|
||||
" Rule: table=22 cookie=0xbafdefa428c693b6 priority=0",
|
||||
" OpenFlow actions=drop",
|
||||
"",
|
||||
"Final flow: metadata=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000",
|
||||
"Relevant fields: skb_priority=0,in_port=6,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:11,dl_dst=aa:bb:cc:dd:ee:22,dl_type=0x0000,nw_proto=0,nw_frag=no,tp_src=0",
|
||||
"Datapath actions: push_vlan(vid=2,pcp=0),6,pop_vlan,8,push_vlan(vid=2,pcp=0),5,9,pop_vlan,13,14",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl fdb/show br-int",
|
||||
"output": [
|
||||
" port VLAN MAC Age",
|
||||
" 6 2 aa:bb:cc:dd:ee:11 0",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cmd": "sudo ovs-appctl ofproto/trace br-int in_port=7,dl_src=AA:BB:CC:DD:EE:22,dl_dst=AA:BB:CC:DD:EE:11 -generate",
|
||||
"output": [
|
||||
"Flow: metadata=0,in_port=7,vlan_tci=0x0000,dl_src=aa:bb:cc:dd:ee:22,dl_dst=aa:bb:cc:dd:ee:11,dl_type=0x0000",
|
||||
"Rule: table=0 cookie=0xbafdefa428c693b6 priority=0",
|
||||
"OpenFlow actions=NORMAL",
|
||||
"forwarding to learned port",
|
||||
"",
|
||||
"Final flow: unchanged",
|
||||
"Relevant fields: skb_priority=0,in_port=7,vlan_tci=0x0000/0x1fff,dl_src=aa:bb:cc:dd:ee:22,dl_dst=aa:bb:cc:dd:ee:11,dl_type=0x0000,nw_proto=0,nw_frag=no,tp_src=0",
|
||||
"Datapath actions: 12",
|
||||
""
|
||||
]
|
||||
}
|
||||
],
|
||||
"comment": "ovs br-int port 6 --> 7",
|
||||
"debugs": [
|
||||
"AA:BB:CC:DD:EE:11 learnt on expected vlan 2 on port 6",
|
||||
"Packet for learnt mac forwarded properly"
|
||||
],
|
||||
"errors": [
|
||||
"Packet forwarded to incorrect port 12, expected 6"
|
||||
],
|
||||
"pass": false
|
||||
}
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
OVERALL RESULT: <font class="fail">✘</font>
|
||||
<h2>Ping Test Results</h2>
|
||||
<h3>Ping test between all pairs of VMs</h3>
|
||||
<ul class="collapsibleList">
|
||||
<li>router1 (Namespace [qrouter-90111551-6cfc-4be0-b1c2-ce8bffb7edf6])
|
||||
<ul class="collapsibleList">
|
||||
<li>vm1 → vm2
|
||||
<ul class="collapsibleList">
|
||||
<li> 10.10.0.3 → 10.10.0.4 <font class="fail">✘</font>
|
||||
<ul class="collapsibleList">
|
||||
<pre class="fail">
|
||||
{
|
||||
"command_list": [
|
||||
{
|
||||
"cmd": "ssh 10.10.0.3 with provided username and passwd",
|
||||
"output": "Could not ssh to 10.10.0.3",
|
||||
"pass": false
|
||||
}
|
||||
],
|
||||
"comment": "PING 10.10.0.3 to 10.10.0.4",
|
||||
"errors": [],
|
||||
"pass": false
|
||||
}
|
||||
|
||||
</pre>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
OVERALL RESULT: <font class="fail">✘</font>
|
||||
</body>
|
||||
</html>
|
225
static/don/don.svg
Normal file
@ -0,0 +1,225 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="582pt" height="916pt"
|
||||
viewBox="0.00 0.00 582.00 916.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 912)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-912 578,-912 578,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-900 282,-900 282,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="55,-836 55,-892 175,-892 175,-836 55,-836"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="30,-394 30,-788 260,-788 260,-394 30,-394"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="38,-640 38,-780 192,-780 192,-640 38,-640"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="38,-402 38,-542 252,-542 252,-402 38,-402"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-312 274,-312 274,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-164 24,-304 266,-304 266,-164 24,-164"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="89,-24 89,-108 201,-108 201,-24 89,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="290,-176 290,-900 566,-900 566,-176 290,-176"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="298,-184 298,-788 558,-788 558,-184 298,-184"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="306,-640 306,-780 444,-780 444,-640 306,-640"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="306,-360 306,-584 550,-584 550,-360 306,-360"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="373,-192 373,-276 485,-276 485,-192 373,-192"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="316,-836 316,-892 434,-892 434,-836 316,-836"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="71,-848 71,-880 159,-880 159,-848 71,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="76,-853 76,-875 154,-875 154,-853 76,-853"/>
|
||||
<text text-anchor="start" x="81.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="54,-652 54,-768 176,-768 176,-652 54,-652"/>
|
||||
<polygon fill="white" stroke="none" points="59,-741 59,-763 171,-763 171,-741 59,-741"/>
|
||||
<text text-anchor="start" x="104.5" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="59,-713 59,-736 113,-736 113,-713 59,-713"/>
|
||||
<polygon fill="none" stroke="black" points="59,-713 59,-736 113,-736 113,-713 59,-713"/>
|
||||
<text text-anchor="start" x="76.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">vm1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="118,-713 118,-736 171,-736 171,-713 118,-713"/>
|
||||
<polygon fill="none" stroke="black" points="118,-713 118,-736 171,-736 171,-713 118,-713"/>
|
||||
<text text-anchor="start" x="135" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">vm2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="59,-685 59,-708 113,-708 113,-685 59,-685"/>
|
||||
<polygon fill="none" stroke="black" points="59,-685 59,-708 113,-708 113,-685 59,-685"/>
|
||||
<text text-anchor="start" x="68.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="118,-685 118,-708 171,-708 171,-685 118,-685"/>
|
||||
<polygon fill="none" stroke="black" points="118,-685 118,-708 171,-708 171,-685 118,-685"/>
|
||||
<text text-anchor="start" x="127" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="59,-657 59,-680 113,-680 113,-657 59,-657"/>
|
||||
<polygon fill="none" stroke="black" points="59,-657 59,-680 113,-680 113,-657 59,-657"/>
|
||||
<text text-anchor="start" x="65.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.3</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="118,-657 118,-680 171,-680 171,-657 118,-657"/>
|
||||
<polygon fill="none" stroke="black" points="118,-657 118,-680 171,-680 171,-657 118,-657"/>
|
||||
<text text-anchor="start" x="124" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.4</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<polygon fill="white" stroke="none" points="54,-414 54,-530 236,-530 236,-414 54,-414"/>
|
||||
<polygon fill="white" stroke="none" points="59,-503 59,-525 231,-525 231,-503 59,-503"/>
|
||||
<text text-anchor="start" x="117.5" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">Linux Bridge</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="59,-475 59,-498 144,-498 144,-475 59,-475"/>
|
||||
<polygon fill="none" stroke="black" points="59,-475 59,-498 144,-498 144,-475 59,-475"/>
|
||||
<text text-anchor="start" x="68" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="59,-447 59,-470 144,-470 144,-447 59,-447"/>
|
||||
<polygon fill="none" stroke="black" points="59,-447 59,-470 144,-470 144,-447 59,-447"/>
|
||||
<text text-anchor="start" x="66.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-447 149,-470 231,-470 231,-447 149,-447"/>
|
||||
<polygon fill="none" stroke="black" points="149,-447 149,-470 231,-470 231,-447 149,-447"/>
|
||||
<text text-anchor="start" x="156.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="59,-419 59,-442 144,-442 144,-419 59,-419"/>
|
||||
<polygon fill="none" stroke="black" points="59,-419 59,-442 144,-442 144,-419 59,-419"/>
|
||||
<text text-anchor="start" x="65.5" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-419 149,-442 231,-442 231,-419 149,-419"/>
|
||||
<polygon fill="none" stroke="black" points="149,-419 149,-442 231,-442 231,-419 149,-419"/>
|
||||
<text text-anchor="start" x="155" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb71ac5bef-7c</text>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge2" class="edge"><title>VMs:101004:s->LinuxBridge:tap71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M145,-656C145,-583.534 101,-571.466 101,-499"/>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40,-176 40,-292 250,-292 250,-176 40,-176"/>
|
||||
<polygon fill="white" stroke="none" points="45,-265 45,-287 245,-287 245,-265 45,-265"/>
|
||||
<text text-anchor="start" x="120.5" y="-273.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-237 45,-260 144,-260 144,-237 45,-237"/>
|
||||
<polygon fill="none" stroke="black" points="45,-237 45,-260 144,-260 144,-237 45,-237"/>
|
||||
<text text-anchor="start" x="51.5" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[6] qvo8aa60600-7b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-237 149,-260 245,-260 245,-237 149,-237"/>
|
||||
<polygon fill="none" stroke="black" points="149,-237 149,-260 245,-260 245,-237 149,-237"/>
|
||||
<text text-anchor="start" x="155" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qvo71ac5bef-7c</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="45,-209 45,-232 144,-232 144,-209 45,-209"/>
|
||||
<polygon fill="none" stroke="black" points="45,-209 45,-232 144,-232 144,-209 45,-209"/>
|
||||
<text text-anchor="start" x="68.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="149,-209 149,-232 245,-232 245,-209 149,-209"/>
|
||||
<polygon fill="none" stroke="black" points="149,-209 149,-232 245,-232 245,-209 149,-209"/>
|
||||
<text text-anchor="start" x="171" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="45,-181 45,-204 245,-204 245,-181 45,-181"/>
|
||||
<polygon fill="none" stroke="black" points="45,-181 45,-204 245,-204 245,-181 45,-181"/>
|
||||
<text text-anchor="start" x="117.5" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge3" class="edge"><title>LinuxBridge:qvb8aa60600_7b:s->compute_br_int:qvo8aa60600_7b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M101,-418C101,-348.153 94,-330.847 94,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge4" class="edge"><title>LinuxBridge:qvb71ac5bef_7c:s->compute_br_int:qvo71ac5bef_7c:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M190,-418C190,-348.153 197,-330.847 197,-261"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="105,-36 105,-96 185,-96 185,-36 105,-36"/>
|
||||
<polygon fill="white" stroke="none" points="110,-69 110,-91 180,-91 180,-69 110,-69"/>
|
||||
<text text-anchor="start" x="119" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<polygon fill="none" stroke="black" points="110,-41 110,-64 180,-64 180,-41 110,-41"/>
|
||||
<text text-anchor="start" x="119" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge5" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M145,-180C145,-128.889 145,-116.111 145,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="332.5,-848 332.5,-880 417.5,-880 417.5,-848 332.5,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="338,-853 338,-875 413,-875 413,-853 338,-853"/>
|
||||
<text text-anchor="start" x="343.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="322.5,-652 322.5,-768 427.5,-768 427.5,-652 322.5,-652"/>
|
||||
<polygon fill="white" stroke="none" points="328,-741 328,-763 423,-763 423,-741 328,-741"/>
|
||||
<text text-anchor="start" x="351" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="328,-713 328,-736 423,-736 423,-713 328,-713"/>
|
||||
<polygon fill="none" stroke="black" points="328,-713 328,-736 423,-736 423,-713 328,-713"/>
|
||||
<text text-anchor="start" x="360" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="328,-685 328,-708 423,-708 423,-685 328,-685"/>
|
||||
<polygon fill="none" stroke="black" points="328,-685 328,-708 423,-708 423,-685 328,-685"/>
|
||||
<text text-anchor="start" x="345.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="328,-657 328,-680 423,-680 423,-657 328,-657"/>
|
||||
<polygon fill="none" stroke="black" points="328,-657 328,-680 423,-680 423,-657 328,-657"/>
|
||||
<text text-anchor="start" x="334.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="322.5,-372 322.5,-572 533.5,-572 533.5,-372 322.5,-372"/>
|
||||
<polygon fill="white" stroke="none" points="328,-545 328,-567 529,-567 529,-545 328,-545"/>
|
||||
<text text-anchor="start" x="404" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="328,-517 328,-540 423,-540 423,-517 328,-517"/>
|
||||
<polygon fill="none" stroke="black" points="328,-517 328,-540 423,-540 423,-517 328,-517"/>
|
||||
<text text-anchor="start" x="334.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="428,-517 428,-540 529,-540 529,-517 428,-517"/>
|
||||
<polygon fill="none" stroke="black" points="428,-517 428,-540 529,-540 529,-517 428,-517"/>
|
||||
<text text-anchor="start" x="434" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[10] tap1e1c73c9-35</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="328,-489 328,-512 423,-512 423,-489 328,-489"/>
|
||||
<polygon fill="none" stroke="black" points="328,-489 328,-512 423,-512 423,-489 328,-489"/>
|
||||
<text text-anchor="start" x="349.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="428,-489 428,-512 529,-512 529,-489 428,-489"/>
|
||||
<polygon fill="none" stroke="black" points="428,-489 428,-512 529,-512 529,-489 428,-489"/>
|
||||
<text text-anchor="start" x="452.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="328,-461 328,-484 423,-484 423,-461 328,-461"/>
|
||||
<polygon fill="none" stroke="black" points="328,-461 328,-484 423,-484 423,-461 328,-461"/>
|
||||
<text text-anchor="start" x="348" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="428,-461 428,-484 529,-484 529,-461 428,-461"/>
|
||||
<polygon fill="none" stroke="black" points="428,-461 428,-484 529,-484 529,-461 428,-461"/>
|
||||
<text text-anchor="start" x="451" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.5/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="328,-433 328,-456 529,-456 529,-433 328,-433"/>
|
||||
<polygon fill="none" stroke="black" points="328,-433 328,-456 529,-456 529,-433 328,-433"/>
|
||||
<text text-anchor="start" x="411" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="328,-405 328,-428 529,-428 529,-405 328,-405"/>
|
||||
<polygon fill="none" stroke="black" points="328,-405 328,-428 529,-428 529,-405 328,-405"/>
|
||||
<text text-anchor="start" x="413" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="328,-377 328,-400 529,-400 529,-377 328,-377"/>
|
||||
<polygon fill="none" stroke="black" points="328,-377 328,-400 529,-400 529,-377 328,-377"/>
|
||||
<text text-anchor="start" x="401" y="-386" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge8" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M376,-656C376,-604.887 375,-592.113 375,-541"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="389,-204 389,-264 469,-264 469,-204 389,-204"/>
|
||||
<polygon fill="white" stroke="none" points="394,-237 394,-259 464,-259 464,-237 394,-237"/>
|
||||
<text text-anchor="start" x="403" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="394,-209 394,-232 464,-232 464,-209 394,-209"/>
|
||||
<polygon fill="none" stroke="black" points="394,-209 394,-232 464,-232 464,-209 394,-209"/>
|
||||
<text text-anchor="start" x="403" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge7" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M429,-376C429,-312.444 429,-296.556 429,-233"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
92
static/don/network.dot
Normal file
@ -0,0 +1,92 @@
|
||||
digraph DON_network {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#ff9933" PORT="qg_757bf552_73">[2] qg-757bf552-73</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b">[8] qr-43b83157-3b</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap1e1c73c9_35">[10] tap1e1c73c9-35</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3btag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap1e1c73c9_35tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="qr_43b83157_3b10.10.0.1/24">10.10.0.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#c079f3" PORT="tap1e1c73c9_3510.10.0.5/24">10.10.0.5/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#c079f3" PORT="private1">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ff9933" PORT="router1">router1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#ffcc00" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#0066cc", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#0066cc", penwidth = "4"]
|
||||
br_ex:qg_757bf552_73:s -> network_br_int:qr_43b83157_3b:n [color = "#0066cc", penwidth = "4"]
|
||||
|
||||
}
|
||||
|
100
static/don/network.svg
Normal file
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_network Pages: 1 -->
|
||||
<svg width="284pt" height="704pt"
|
||||
viewBox="0.00 0.00 284.00 704.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 700)">
|
||||
<title>DON_network</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-700 280,-700 280,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="none" stroke="black" points="26,-632 26,-688 144,-688 144,-632 26,-632"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-584 268,-584 268,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-436 16,-576 154,-576 154,-436 16,-436"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-156 16,-380 260,-380 260,-156 16,-156"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="83,-16 83,-100 195,-100 195,-16 83,-16"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node1" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="42.5,-644 42.5,-676 127.5,-676 127.5,-644 42.5,-644"/>
|
||||
<polygon fill="yellow" stroke="none" points="48,-649 48,-671 123,-671 123,-649 48,-649"/>
|
||||
<text text-anchor="start" x="53.5" y="-657.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node2" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="32.5,-448 32.5,-564 137.5,-564 137.5,-448 32.5,-448"/>
|
||||
<polygon fill="white" stroke="none" points="38,-537 38,-559 133,-559 133,-537 38,-537"/>
|
||||
<text text-anchor="start" x="61" y="-545.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-509 38,-532 133,-532 133,-509 38,-509"/>
|
||||
<polygon fill="none" stroke="black" points="38,-509 38,-532 133,-532 133,-509 38,-509"/>
|
||||
<text text-anchor="start" x="70" y="-518" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-481 38,-504 133,-504 133,-481 38,-481"/>
|
||||
<polygon fill="none" stroke="black" points="38,-481 38,-504 133,-504 133,-481 38,-481"/>
|
||||
<text text-anchor="start" x="55.5" y="-490" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-453 38,-476 133,-476 133,-453 38,-453"/>
|
||||
<polygon fill="none" stroke="black" points="38,-453 38,-476 133,-476 133,-453 38,-453"/>
|
||||
<text text-anchor="start" x="44.5" y="-462" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-757bf552-73</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node3" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="32.5,-168 32.5,-368 243.5,-368 243.5,-168 32.5,-168"/>
|
||||
<polygon fill="white" stroke="none" points="38,-341 38,-363 239,-363 239,-341 38,-341"/>
|
||||
<text text-anchor="start" x="114" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-313 38,-336 133,-336 133,-313 38,-313"/>
|
||||
<polygon fill="none" stroke="black" points="38,-313 38,-336 133,-336 133,-313 38,-313"/>
|
||||
<text text-anchor="start" x="44.5" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-43b83157-3b</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-313 138,-336 239,-336 239,-313 138,-313"/>
|
||||
<polygon fill="none" stroke="black" points="138,-313 138,-336 239,-336 239,-313 138,-313"/>
|
||||
<text text-anchor="start" x="144" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">[10] tap1e1c73c9-35</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-285 38,-308 133,-308 133,-285 38,-285"/>
|
||||
<polygon fill="none" stroke="black" points="38,-285 38,-308 133,-308 133,-285 38,-285"/>
|
||||
<text text-anchor="start" x="59.5" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-285 138,-308 239,-308 239,-285 138,-285"/>
|
||||
<polygon fill="none" stroke="black" points="138,-285 138,-308 239,-308 239,-285 138,-285"/>
|
||||
<text text-anchor="start" x="162.5" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-257 38,-280 133,-280 133,-257 38,-257"/>
|
||||
<polygon fill="none" stroke="black" points="38,-257 38,-280 133,-280 133,-257 38,-257"/>
|
||||
<text text-anchor="start" x="58" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.1/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="138,-257 138,-280 239,-280 239,-257 138,-257"/>
|
||||
<polygon fill="none" stroke="black" points="138,-257 138,-280 239,-280 239,-257 138,-257"/>
|
||||
<text text-anchor="start" x="161" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">10.10.0.5/24</text>
|
||||
<polygon fill="#c079f3" stroke="none" points="38,-229 38,-252 239,-252 239,-229 38,-229"/>
|
||||
<polygon fill="none" stroke="black" points="38,-229 38,-252 239,-252 239,-229 38,-229"/>
|
||||
<text text-anchor="start" x="121" y="-238" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#ff9933" stroke="none" points="38,-201 38,-224 239,-224 239,-201 38,-201"/>
|
||||
<polygon fill="none" stroke="black" points="38,-201 38,-224 239,-224 239,-201 38,-201"/>
|
||||
<text text-anchor="start" x="123" y="-210" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="38,-173 38,-196 239,-196 239,-173 38,-173"/>
|
||||
<polygon fill="none" stroke="black" points="38,-173 38,-196 239,-196 239,-173 38,-173"/>
|
||||
<text text-anchor="start" x="111" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge3" class="edge"><title>br_ex:qg_757bf552_73:s->network_br_int:qr_43b83157_3b:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M86,-452C86,-400.887 85,-388.113 85,-337"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node4" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="99,-28 99,-88 179,-88 179,-28 99,-28"/>
|
||||
<polygon fill="white" stroke="none" points="104,-61 104,-83 174,-83 174,-61 104,-61"/>
|
||||
<text text-anchor="start" x="113" y="-69.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#ffcc00" stroke="none" points="104,-33 104,-56 174,-56 174,-33 104,-33"/>
|
||||
<polygon fill="none" stroke="black" points="104,-33 104,-56 174,-56 174,-33 104,-33"/>
|
||||
<text text-anchor="start" x="113" y="-42" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge2" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#0066cc" stroke-width="4" d="M139,-172C139,-120.889 139,-108.111 139,-57"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
278
static/don/ping.dot
Normal file
@ -0,0 +1,278 @@
|
||||
digraph DON_DON {
|
||||
graph [fontsize=10 fontname="Helvetica"];
|
||||
node [fontsize=10 fontname="Helvetica"];
|
||||
rankdir = TB;
|
||||
ranksep = 1;
|
||||
concentrate = true;
|
||||
compound = true;
|
||||
edge [dir=none]
|
||||
|
||||
subgraph cluster_DONComputeNode {
|
||||
style=filled
|
||||
subgraph cluster_ComputeNode {
|
||||
ComputeNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="ComputeNode">Compute Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_Nova {
|
||||
style=filled
|
||||
subgraph cluster_VMs {
|
||||
VMs [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="VMs">VMs</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM1-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM1-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM3-1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">VM3-2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="3" BGCOLOR="#909090">VM4</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">public</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090">private1</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10023">10.0.2.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10024">10.0.2.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="10033">10.0.3.3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10034">10.0.3.4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="1722445">172.24.4.5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10036">10.0.3.6</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="10026">10.0.2.6</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_LinuxBridge {
|
||||
LinuxBridge [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="LinuxBridge">Linux Bridge</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tape0d697f2_cb">tape0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapbd4f1f72_5f">tapbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="tapbd96ca7d_5e">tapbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tap4441e3a6_f2">tap4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapce3d7b20_1d">tapce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapf0841d56_02">tapf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapfbb76083_60">tapfbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbre0d697f2_cb">qbre0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrbd4f1f72_5f">qbrbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qbrbd96ca7d_5e">qbrbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbr4441e3a6_f2">qbr4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrce3d7b20_1d">qbrce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrf0841d56_02">qbrf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qbrfbb76083_60">qbrfbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbe0d697f2_cb">qvbe0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbbd4f1f72_5f">qvbbd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvbbd96ca7d_5e">qvbbd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvb4441e3a6_f2">qvb4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbce3d7b20_1d">qvbce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbf0841d56_02">qvbf0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvbfbb76083_60">qvbfbb76083-60</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_compute_br_int {
|
||||
compute_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvoe0d697f2_cb">[9] qvoe0d697f2-cb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd4f1f72_5f">[10] qvobd4f1f72-5f</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qvobd96ca7d_5e">[11] qvobd96ca7d-5e</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvo4441e3a6_f2">[12] qvo4441e3a6-f2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoce3d7b20_1d">[17] qvoce3d7b20-1d</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvof0841d56_02">[16] qvof0841d56-02</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvofbb76083_60">[15] qvofbb76083-60</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoe0d697f2_cbtag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd4f1f72_5ftag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvobd96ca7d_5etag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvo4441e3a6_f2tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvoce3d7b20_1dtag_4">VLAN tag:4</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvof0841d56_02tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qvofbb76083_60tag_2">VLAN tag:2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_compute_br_tun {
|
||||
compute_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ComputeNode:s -> VMs:n [color = "#909090", penwidth = "4", style="invis"]
|
||||
VMs:10023:s -> LinuxBridge:tape0d697f2_cb:n [color = "#009900", penwidth = "4"]
|
||||
VMs:10024:s -> LinuxBridge:tapbd4f1f72_5f:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10033:s -> LinuxBridge:tapbd96ca7d_5e:n [color = "#009900", penwidth = "4"]
|
||||
VMs:10034:s -> LinuxBridge:tap4441e3a6_f2:n [color = "#909090", penwidth = "4"]
|
||||
VMs:1722445:s -> LinuxBridge:tapce3d7b20_1d:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10036:s -> LinuxBridge:tapf0841d56_02:n [color = "#909090", penwidth = "4"]
|
||||
VMs:10026:s -> LinuxBridge:tapfbb76083_60:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbe0d697f2_cb:s -> compute_br_int:qvoe0d697f2_cb:n [color = "#009900", penwidth = "4"]
|
||||
LinuxBridge:qvbbd4f1f72_5f:s -> compute_br_int:qvobd4f1f72_5f:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbbd96ca7d_5e:s -> compute_br_int:qvobd96ca7d_5e:n [color = "#009900", penwidth = "4"]
|
||||
LinuxBridge:qvb4441e3a6_f2:s -> compute_br_int:qvo4441e3a6_f2:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbce3d7b20_1d:s -> compute_br_int:qvoce3d7b20_1d:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbf0841d56_02:s -> compute_br_int:qvof0841d56_02:n [color = "#909090", penwidth = "4"]
|
||||
LinuxBridge:qvbfbb76083_60:s -> compute_br_int:qvofbb76083_60:n [color = "#909090", penwidth = "4"]
|
||||
compute_br_int:patch_tun:s -> compute_br_tun:patch_int:n [color = "#909090", penwidth = "4"]
|
||||
}
|
||||
|
||||
subgraph cluster_DONNetworkNode {
|
||||
style=filled
|
||||
subgraph cluster_NetworkNode {
|
||||
NetworkNode [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="red">
|
||||
<TR>
|
||||
<TD COLSPAN="1" BORDER="0" BGCOLOR="yellow" PORT="NetworkNode">Network Node</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_OVS {
|
||||
style=filled
|
||||
subgraph cluster_br_ex {
|
||||
br_ex [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="2" BORDER="0" BGCOLOR="white" PORT="OVSbr_ex">OVS br_ex</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="172.24.4.3/24">172.24.4.3/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="172.24.4.4/24">172.24.4.4/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qg_eb8796fb_83">[2] qg-eb8796fb-83</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qg_e2b1b0d3_a8">[3] qg-e2b1b0d3-a8</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_int {
|
||||
network_br_int [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="8" BORDER="0" BGCOLOR="white" PORT="OVSbr_int">OVS br_int</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_09a15e37_ca">[8] qr-09a15e37-ca</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb">[6] tapd0828ef0-eb</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#b2f379" PORT="qr_622abba5_e2">[7] qr-622abba5-e2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0">[5] tapd6f091a2-c0</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e5">[13] qr-361be2af-e5</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0">[5] tapd6f091a2-c0</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_36">[14] qr-b66b902a-36</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb">[6] tapd0828ef0-eb</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_09a15e37_catag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_ebtag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_622abba5_e2tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e5tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c0tag_2">VLAN tag:2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_36tag_3">VLAN tag:3</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_ebtag_3">VLAN tag:3</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_09a15e37_ca10.0.3.1/24">10.0.3.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb10.0.3.2/24">10.0.3.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_622abba5_e210.0.2.1/24">10.0.2.1/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c010.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_361be2af_e510.0.2.5/24">10.0.2.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd6f091a2_c010.0.2.2/24">10.0.2.2/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="qr_b66b902a_3610.0.3.5/24">10.0.3.5/24</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="1" BGCOLOR="#909090" PORT="tapd0828ef0_eb10.0.3.2/24">10.0.3.2/24</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private2">private2</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private1">private1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="2" BGCOLOR="#909090" PORT="private2">private2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#909090" PORT="router1">router1</TD>
|
||||
<TD ROWSPAN="1" COLSPAN="4" BGCOLOR="#909090" PORT="router2">router2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="8" BGCOLOR="#909090" PORT="patch_tun">[1] patch-tun</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
subgraph cluster_network_br_tun {
|
||||
network_br_tun [ shape = plaintext, label = <
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="5" CELLPADDING="5" BGCOLOR="white">
|
||||
<TR>
|
||||
<TD COLSPAN="7" BORDER="0" BGCOLOR="white" PORT="OVSbr_tun">OVS br_tun</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD ROWSPAN="1" COLSPAN="7" BGCOLOR="#909090" PORT="patch_int">[1] patch-int</TD>
|
||||
</TR>
|
||||
</TABLE>>];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NetworkNode:s -> br_ex:n [color = "#909090", penwidth = "4", style="invis"]
|
||||
network_br_int:patch_tun:s -> network_br_tun:patch_int:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_e2b1b0d3_a8:s -> network_br_int:qr_361be2af_e5:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_e2b1b0d3_a8:s -> network_br_int:qr_b66b902a_36:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_eb8796fb_83:s -> network_br_int:qr_09a15e37_ca:n [color = "#909090", penwidth = "4"]
|
||||
br_ex:qg_eb8796fb_83:s -> network_br_int:qr_622abba5_e2:n [color = "#909090", penwidth = "4"]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
473
static/don/ping.svg
Normal file
@ -0,0 +1,473 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
|
||||
-->
|
||||
<!-- Title: DON_DON Pages: 1 -->
|
||||
<svg width="1710pt" height="916pt"
|
||||
viewBox="0.00 0.00 1710.00 916.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 912)">
|
||||
<title>DON_DON</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-912 1706,-912 1706,4 -4,4"/>
|
||||
<g id="clust1" class="cluster"><title>cluster_DONComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="8,-8 8,-900 816,-900 816,-8 8,-8"/>
|
||||
</g>
|
||||
<g id="clust2" class="cluster"><title>cluster_ComputeNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="352,-836 352,-892 472,-892 472,-836 352,-836"/>
|
||||
</g>
|
||||
<g id="clust3" class="cluster"><title>cluster_Nova</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="79,-394 79,-788 741,-788 741,-394 79,-394"/>
|
||||
</g>
|
||||
<g id="clust4" class="cluster"><title>cluster_VMs</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="202,-640 202,-780 622,-780 622,-640 202,-640"/>
|
||||
</g>
|
||||
<g id="clust5" class="cluster"><title>cluster_LinuxBridge</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="87,-402 87,-542 733,-542 733,-402 87,-402"/>
|
||||
</g>
|
||||
<g id="clust6" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="16,-16 16,-312 808,-312 808,-16 16,-16"/>
|
||||
</g>
|
||||
<g id="clust7" class="cluster"><title>cluster_compute_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="24,-164 24,-304 800,-304 800,-164 24,-164"/>
|
||||
</g>
|
||||
<g id="clust8" class="cluster"><title>cluster_compute_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="343,-24 343,-108 481,-108 481,-24 343,-24"/>
|
||||
</g>
|
||||
<g id="clust9" class="cluster"><title>cluster_DONNetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="824,-176 824,-900 1694,-900 1694,-176 824,-176"/>
|
||||
</g>
|
||||
<g id="clust11" class="cluster"><title>cluster_OVS</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="832,-184 832,-788 1686,-788 1686,-184 832,-184"/>
|
||||
</g>
|
||||
<g id="clust12" class="cluster"><title>cluster_br_ex</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1088,-640 1088,-780 1326,-780 1326,-640 1088,-640"/>
|
||||
</g>
|
||||
<g id="clust13" class="cluster"><title>cluster_network_br_int</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="840,-360 840,-584 1678,-584 1678,-360 840,-360"/>
|
||||
</g>
|
||||
<g id="clust14" class="cluster"><title>cluster_network_br_tun</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1189,-192 1189,-276 1327,-276 1327,-192 1189,-192"/>
|
||||
</g>
|
||||
<g id="clust10" class="cluster"><title>cluster_NetworkNode</title>
|
||||
<polygon fill="lightgrey" stroke="black" points="1148,-836 1148,-892 1266,-892 1266,-836 1148,-836"/>
|
||||
</g>
|
||||
<!-- ComputeNode -->
|
||||
<g id="node1" class="node"><title>ComputeNode</title>
|
||||
<polygon fill="red" stroke="none" points="368,-848 368,-880 456,-880 456,-848 368,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="373,-853 373,-875 451,-875 451,-853 373,-853"/>
|
||||
<text text-anchor="start" x="378.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Compute Node</text>
|
||||
</g>
|
||||
<!-- VMs -->
|
||||
<g id="node2" class="node"><title>VMs</title>
|
||||
<polygon fill="white" stroke="none" points="218.5,-652 218.5,-768 605.5,-768 605.5,-652 218.5,-652"/>
|
||||
<polygon fill="white" stroke="none" points="224,-741 224,-763 601,-763 601,-741 224,-741"/>
|
||||
<text text-anchor="start" x="402" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">VMs</text>
|
||||
<polygon fill="#909090" stroke="none" points="224,-713 224,-736 273,-736 273,-713 224,-713"/>
|
||||
<polygon fill="none" stroke="black" points="224,-713 224,-736 273,-736 273,-713 224,-713"/>
|
||||
<text text-anchor="start" x="234" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-1</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-713 278,-736 326,-736 326,-713 278,-713"/>
|
||||
<polygon fill="none" stroke="black" points="278,-713 278,-736 326,-736 326,-713 278,-713"/>
|
||||
<text text-anchor="start" x="287.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM1-2</text>
|
||||
<polygon fill="#909090" stroke="none" points="331,-713 331,-736 379,-736 379,-713 331,-713"/>
|
||||
<polygon fill="none" stroke="black" points="331,-713 331,-736 379,-736 379,-713 331,-713"/>
|
||||
<text text-anchor="start" x="340.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-1</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-713 384,-736 432,-736 432,-713 384,-713"/>
|
||||
<polygon fill="none" stroke="black" points="384,-713 384,-736 432,-736 432,-713 384,-713"/>
|
||||
<text text-anchor="start" x="393.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM3-2</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-713 437,-736 601,-736 601,-713 437,-713"/>
|
||||
<polygon fill="none" stroke="black" points="437,-713 437,-736 601,-736 601,-713 437,-713"/>
|
||||
<text text-anchor="start" x="508.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">VM4</text>
|
||||
<polygon fill="#909090" stroke="none" points="224,-685 224,-708 273,-708 273,-685 224,-685"/>
|
||||
<polygon fill="none" stroke="black" points="224,-685 224,-708 273,-708 273,-685 224,-685"/>
|
||||
<text text-anchor="start" x="231" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-685 278,-708 326,-708 326,-685 278,-685"/>
|
||||
<polygon fill="none" stroke="black" points="278,-685 278,-708 326,-708 326,-685 278,-685"/>
|
||||
<text text-anchor="start" x="284.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="331,-685 331,-708 379,-708 379,-685 331,-685"/>
|
||||
<polygon fill="none" stroke="black" points="331,-685 331,-708 379,-708 379,-685 331,-685"/>
|
||||
<text text-anchor="start" x="337.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-685 384,-708 432,-708 432,-685 384,-685"/>
|
||||
<polygon fill="none" stroke="black" points="384,-685 384,-708 432,-708 432,-685 384,-685"/>
|
||||
<text text-anchor="start" x="390.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-685 437,-708 495,-708 495,-685 437,-685"/>
|
||||
<polygon fill="none" stroke="black" points="437,-685 437,-708 495,-708 495,-685 437,-685"/>
|
||||
<text text-anchor="start" x="453" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">public</text>
|
||||
<polygon fill="#909090" stroke="none" points="500,-685 500,-708 548,-708 548,-685 500,-685"/>
|
||||
<polygon fill="none" stroke="black" points="500,-685 500,-708 548,-708 548,-685 500,-685"/>
|
||||
<text text-anchor="start" x="506.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="553,-685 553,-708 601,-708 601,-685 553,-685"/>
|
||||
<polygon fill="none" stroke="black" points="553,-685 553,-708 601,-708 601,-685 553,-685"/>
|
||||
<text text-anchor="start" x="559.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="224,-657 224,-680 273,-680 273,-657 224,-657"/>
|
||||
<polygon fill="none" stroke="black" points="224,-657 224,-680 273,-680 273,-657 224,-657"/>
|
||||
<text text-anchor="start" x="230.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.3</text>
|
||||
<polygon fill="#909090" stroke="none" points="278,-657 278,-680 326,-680 326,-657 278,-657"/>
|
||||
<polygon fill="none" stroke="black" points="278,-657 278,-680 326,-680 326,-657 278,-657"/>
|
||||
<text text-anchor="start" x="284" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.4</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="331,-657 331,-680 379,-680 379,-657 331,-657"/>
|
||||
<polygon fill="none" stroke="black" points="331,-657 331,-680 379,-680 379,-657 331,-657"/>
|
||||
<text text-anchor="start" x="337" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.3</text>
|
||||
<polygon fill="#909090" stroke="none" points="384,-657 384,-680 432,-680 432,-657 384,-657"/>
|
||||
<polygon fill="none" stroke="black" points="384,-657 384,-680 432,-680 432,-657 384,-657"/>
|
||||
<text text-anchor="start" x="390" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.4</text>
|
||||
<polygon fill="#909090" stroke="none" points="437,-657 437,-680 495,-680 495,-657 437,-657"/>
|
||||
<polygon fill="none" stroke="black" points="437,-657 437,-680 495,-680 495,-657 437,-657"/>
|
||||
<text text-anchor="start" x="443" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.5</text>
|
||||
<polygon fill="#909090" stroke="none" points="500,-657 500,-680 548,-680 548,-657 500,-657"/>
|
||||
<polygon fill="none" stroke="black" points="500,-657 500,-680 548,-680 548,-657 500,-657"/>
|
||||
<text text-anchor="start" x="506" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.6</text>
|
||||
<polygon fill="#909090" stroke="none" points="553,-657 553,-680 601,-680 601,-657 553,-657"/>
|
||||
<polygon fill="none" stroke="black" points="553,-657 553,-680 601,-680 601,-657 553,-657"/>
|
||||
<text text-anchor="start" x="559" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.6</text>
|
||||
</g>
|
||||
<!-- ComputeNode->VMs -->
|
||||
<!-- LinuxBridge -->
|
||||
<g id="node3" class="node"><title>LinuxBridge</title>
|
||||
<polygon fill="white" stroke="none" points="103,-414 103,-530 717,-530 717,-414 103,-414"/>
|
||||
<polygon fill="white" stroke="none" points="108,-503 108,-525 712,-525 712,-503 108,-503"/>
|
||||
<text text-anchor="start" x="382.5" y="-511.5" font-family="Helvetica,sans-Serif" font-size="10.00">Linux Bridge</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-475 108,-498 191,-498 191,-475 108,-475"/>
|
||||
<polygon fill="none" stroke="black" points="108,-475 108,-498 191,-498 191,-475 108,-475"/>
|
||||
<text text-anchor="start" x="116" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tape0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-475 196,-498 273,-498 273,-475 196,-475"/>
|
||||
<polygon fill="none" stroke="black" points="196,-475 196,-498 273,-498 273,-475 196,-475"/>
|
||||
<text text-anchor="start" x="203" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-475 278,-498 362,-498 362,-475 278,-475"/>
|
||||
<polygon fill="none" stroke="black" points="278,-475 278,-498 362,-498 362,-475 278,-475"/>
|
||||
<text text-anchor="start" x="285" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-475 367,-498 449,-498 449,-475 367,-475"/>
|
||||
<polygon fill="none" stroke="black" points="367,-475 367,-498 449,-498 449,-475 367,-475"/>
|
||||
<text text-anchor="start" x="374.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tap4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-475 454,-498 538,-498 538,-475 454,-475"/>
|
||||
<polygon fill="none" stroke="black" points="454,-475 454,-498 538,-498 538,-475 454,-475"/>
|
||||
<text text-anchor="start" x="461" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-475 543,-498 625,-498 625,-475 543,-475"/>
|
||||
<polygon fill="none" stroke="black" points="543,-475 543,-498 625,-498 625,-475 543,-475"/>
|
||||
<text text-anchor="start" x="550.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-475 630,-498 712,-498 712,-475 630,-475"/>
|
||||
<polygon fill="none" stroke="black" points="630,-475 630,-498 712,-498 712,-475 630,-475"/>
|
||||
<text text-anchor="start" x="637.5" y="-484" font-family="Helvetica,sans-Serif" font-size="10.00">tapfbb76083-60</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-447 108,-470 191,-470 191,-447 108,-447"/>
|
||||
<polygon fill="none" stroke="black" points="108,-447 108,-470 191,-470 191,-447 108,-447"/>
|
||||
<text text-anchor="start" x="116" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbre0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-447 196,-470 273,-470 273,-447 196,-447"/>
|
||||
<polygon fill="none" stroke="black" points="196,-447 196,-470 273,-470 273,-447 196,-447"/>
|
||||
<text text-anchor="start" x="203" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-447 278,-470 362,-470 362,-447 278,-447"/>
|
||||
<polygon fill="none" stroke="black" points="278,-447 278,-470 362,-470 362,-447 278,-447"/>
|
||||
<text text-anchor="start" x="285" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-447 367,-470 449,-470 449,-447 367,-447"/>
|
||||
<polygon fill="none" stroke="black" points="367,-447 367,-470 449,-470 449,-447 367,-447"/>
|
||||
<text text-anchor="start" x="374.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbr4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-447 454,-470 538,-470 538,-447 454,-447"/>
|
||||
<polygon fill="none" stroke="black" points="454,-447 454,-470 538,-470 538,-447 454,-447"/>
|
||||
<text text-anchor="start" x="461" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-447 543,-470 625,-470 625,-447 543,-447"/>
|
||||
<polygon fill="none" stroke="black" points="543,-447 543,-470 625,-470 625,-447 543,-447"/>
|
||||
<text text-anchor="start" x="550.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-447 630,-470 712,-470 712,-447 630,-447"/>
|
||||
<polygon fill="none" stroke="black" points="630,-447 630,-470 712,-470 712,-447 630,-447"/>
|
||||
<text text-anchor="start" x="637.5" y="-456" font-family="Helvetica,sans-Serif" font-size="10.00">qbrfbb76083-60</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="108,-419 108,-442 191,-442 191,-419 108,-419"/>
|
||||
<polygon fill="none" stroke="black" points="108,-419 108,-442 191,-442 191,-419 108,-419"/>
|
||||
<text text-anchor="start" x="114.5" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbe0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="196,-419 196,-442 273,-442 273,-419 196,-419"/>
|
||||
<polygon fill="none" stroke="black" points="196,-419 196,-442 273,-442 273,-419 196,-419"/>
|
||||
<text text-anchor="start" x="202" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbbd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="278,-419 278,-442 362,-442 362,-419 278,-419"/>
|
||||
<polygon fill="none" stroke="black" points="278,-419 278,-442 362,-442 362,-419 278,-419"/>
|
||||
<text text-anchor="start" x="284" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbbd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="367,-419 367,-442 449,-442 449,-419 367,-419"/>
|
||||
<polygon fill="none" stroke="black" points="367,-419 367,-442 449,-442 449,-419 367,-419"/>
|
||||
<text text-anchor="start" x="373" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvb4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="454,-419 454,-442 538,-442 538,-419 454,-419"/>
|
||||
<polygon fill="none" stroke="black" points="454,-419 454,-442 538,-442 538,-419 454,-419"/>
|
||||
<text text-anchor="start" x="460" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="543,-419 543,-442 625,-442 625,-419 543,-419"/>
|
||||
<polygon fill="none" stroke="black" points="543,-419 543,-442 625,-442 625,-419 543,-419"/>
|
||||
<text text-anchor="start" x="549" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbf0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="630,-419 630,-442 712,-442 712,-419 630,-419"/>
|
||||
<polygon fill="none" stroke="black" points="630,-419 630,-442 712,-442 712,-419 630,-419"/>
|
||||
<text text-anchor="start" x="636" y="-428" font-family="Helvetica,sans-Serif" font-size="10.00">qvbfbb76083-60</text>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge2" class="edge"><title>VMs:10023:s->LinuxBridge:tape0d697f2_cb:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M248,-656C248,-573.508 149,-581.492 149,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge3" class="edge"><title>VMs:10024:s->LinuxBridge:tapbd4f1f72_5f:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M302,-656C302,-579.958 234,-575.042 234,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge4" class="edge"><title>VMs:10033:s->LinuxBridge:tapbd96ca7d_5e:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M355,-656C355,-584.509 320,-570.491 320,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge5" class="edge"><title>VMs:10034:s->LinuxBridge:tap4441e3a6_f2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M408,-656C408,-586.222 408,-568.778 408,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge6" class="edge"><title>VMs:1722445:s->LinuxBridge:tapce3d7b20_1d:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M466,-656C466,-584.96 496,-570.04 496,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge7" class="edge"><title>VMs:10036:s->LinuxBridge:tapf0841d56_02:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M524,-656C524,-581.3 584,-573.7 584,-499"/>
|
||||
</g>
|
||||
<!-- VMs->LinuxBridge -->
|
||||
<g id="edge8" class="edge"><title>VMs:10026:s->LinuxBridge:tapfbb76083_60:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M577,-656C577,-574.672 671,-580.328 671,-499"/>
|
||||
</g>
|
||||
<!-- compute_br_int -->
|
||||
<g id="node4" class="node"><title>compute_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="40.5,-176 40.5,-292 783.5,-292 783.5,-176 40.5,-176"/>
|
||||
<polygon fill="white" stroke="none" points="46,-265 46,-287 779,-287 779,-265 46,-265"/>
|
||||
<text text-anchor="start" x="388" y="-273.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="46,-237 46,-260 143,-260 143,-237 46,-237"/>
|
||||
<polygon fill="none" stroke="black" points="46,-237 46,-260 143,-260 143,-237 46,-237"/>
|
||||
<text text-anchor="start" x="52.5" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[9] qvoe0d697f2-cb</text>
|
||||
<polygon fill="#909090" stroke="none" points="148,-237 148,-260 245,-260 245,-237 148,-237"/>
|
||||
<polygon fill="none" stroke="black" points="148,-237 148,-260 245,-260 245,-237 148,-237"/>
|
||||
<text text-anchor="start" x="154" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[10] qvobd4f1f72-5f</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="250,-237 250,-260 353,-260 353,-237 250,-237"/>
|
||||
<polygon fill="none" stroke="black" points="250,-237 250,-260 353,-260 353,-237 250,-237"/>
|
||||
<text text-anchor="start" x="256" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[11] qvobd96ca7d-5e</text>
|
||||
<polygon fill="#909090" stroke="none" points="358,-237 358,-260 459,-260 459,-237 358,-237"/>
|
||||
<polygon fill="none" stroke="black" points="358,-237 358,-260 459,-260 459,-237 358,-237"/>
|
||||
<text text-anchor="start" x="364" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[12] qvo4441e3a6-f2</text>
|
||||
<polygon fill="#909090" stroke="none" points="464,-237 464,-260 567,-260 567,-237 464,-237"/>
|
||||
<polygon fill="none" stroke="black" points="464,-237 464,-260 567,-260 567,-237 464,-237"/>
|
||||
<text text-anchor="start" x="470" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[17] qvoce3d7b20-1d</text>
|
||||
<polygon fill="#909090" stroke="none" points="572,-237 572,-260 673,-260 673,-237 572,-237"/>
|
||||
<polygon fill="none" stroke="black" points="572,-237 572,-260 673,-260 673,-237 572,-237"/>
|
||||
<text text-anchor="start" x="578" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[16] qvof0841d56-02</text>
|
||||
<polygon fill="#909090" stroke="none" points="678,-237 678,-260 779,-260 779,-237 678,-237"/>
|
||||
<polygon fill="none" stroke="black" points="678,-237 678,-260 779,-260 779,-237 678,-237"/>
|
||||
<text text-anchor="start" x="684" y="-246" font-family="Helvetica,sans-Serif" font-size="10.00">[15] qvofbb76083-60</text>
|
||||
<polygon fill="#909090" stroke="none" points="46,-209 46,-232 143,-232 143,-209 46,-209"/>
|
||||
<polygon fill="none" stroke="black" points="46,-209 46,-232 143,-232 143,-209 46,-209"/>
|
||||
<text text-anchor="start" x="68.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="148,-209 148,-232 245,-232 245,-209 148,-209"/>
|
||||
<polygon fill="none" stroke="black" points="148,-209 148,-232 245,-232 245,-209 148,-209"/>
|
||||
<text text-anchor="start" x="170.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="250,-209 250,-232 353,-232 353,-209 250,-209"/>
|
||||
<polygon fill="none" stroke="black" points="250,-209 250,-232 353,-232 353,-209 250,-209"/>
|
||||
<text text-anchor="start" x="275.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="358,-209 358,-232 459,-232 459,-209 358,-209"/>
|
||||
<polygon fill="none" stroke="black" points="358,-209 358,-232 459,-232 459,-209 358,-209"/>
|
||||
<text text-anchor="start" x="382.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="464,-209 464,-232 567,-232 567,-209 464,-209"/>
|
||||
<polygon fill="none" stroke="black" points="464,-209 464,-232 567,-232 567,-209 464,-209"/>
|
||||
<text text-anchor="start" x="489.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:4</text>
|
||||
<polygon fill="#909090" stroke="none" points="572,-209 572,-232 673,-232 673,-209 572,-209"/>
|
||||
<polygon fill="none" stroke="black" points="572,-209 572,-232 673,-232 673,-209 572,-209"/>
|
||||
<text text-anchor="start" x="596.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="678,-209 678,-232 779,-232 779,-209 678,-209"/>
|
||||
<polygon fill="none" stroke="black" points="678,-209 678,-232 779,-232 779,-209 678,-209"/>
|
||||
<text text-anchor="start" x="702.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="46,-181 46,-204 779,-204 779,-181 46,-181"/>
|
||||
<polygon fill="none" stroke="black" points="46,-181 46,-204 779,-204 779,-181 46,-181"/>
|
||||
<text text-anchor="start" x="385" y="-190" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge9" class="edge"><title>LinuxBridge:qvbe0d697f2_cb:s->compute_br_int:qvoe0d697f2_cb:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M149,-418C149,-344.064 94,-334.936 94,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge10" class="edge"><title>LinuxBridge:qvbbd4f1f72_5f:s->compute_br_int:qvobd4f1f72_5f:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M234,-418C234,-346.207 196,-332.793 196,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge11" class="edge"><title>LinuxBridge:qvbbd96ca7d_5e:s->compute_br_int:qvobd96ca7d_5e:n</title>
|
||||
<path fill="none" stroke="#009900" stroke-width="4" d="M320,-418C320,-347.713 301,-331.287 301,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge12" class="edge"><title>LinuxBridge:qvb4441e3a6_f2:s->compute_br_int:qvo4441e3a6_f2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M408,-418C408,-348.222 408,-330.778 408,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge13" class="edge"><title>LinuxBridge:qvbce3d7b20_1d:s->compute_br_int:qvoce3d7b20_1d:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M496,-418C496,-347.658 516,-331.342 516,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge14" class="edge"><title>LinuxBridge:qvbf0841d56_02:s->compute_br_int:qvof0841d56_02:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M584,-418C584,-346.102 623,-332.898 623,-261"/>
|
||||
</g>
|
||||
<!-- LinuxBridge->compute_br_int -->
|
||||
<g id="edge15" class="edge"><title>LinuxBridge:qvbfbb76083_60:s->compute_br_int:qvofbb76083_60:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M671,-418C671,-343.613 729,-335.387 729,-261"/>
|
||||
</g>
|
||||
<!-- compute_br_tun -->
|
||||
<g id="node5" class="node"><title>compute_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="359.5,-36 359.5,-96 464.5,-96 464.5,-36 359.5,-36"/>
|
||||
<polygon fill="white" stroke="none" points="365,-69 365,-91 460,-91 460,-69 365,-69"/>
|
||||
<text text-anchor="start" x="386.5" y="-77.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#909090" stroke="none" points="365,-41 365,-64 460,-64 460,-41 365,-41"/>
|
||||
<polygon fill="none" stroke="black" points="365,-41 365,-64 460,-64 460,-41 365,-41"/>
|
||||
<text text-anchor="start" x="386.5" y="-50" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- compute_br_int->compute_br_tun -->
|
||||
<g id="edge16" class="edge"><title>compute_br_int:patch_tun:s->compute_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M413,-180C413,-128.889 413,-116.111 413,-65"/>
|
||||
</g>
|
||||
<!-- NetworkNode -->
|
||||
<g id="node6" class="node"><title>NetworkNode</title>
|
||||
<polygon fill="red" stroke="none" points="1164.5,-848 1164.5,-880 1249.5,-880 1249.5,-848 1164.5,-848"/>
|
||||
<polygon fill="yellow" stroke="none" points="1170,-853 1170,-875 1245,-875 1245,-853 1170,-853"/>
|
||||
<text text-anchor="start" x="1175.5" y="-861.5" font-family="Helvetica,sans-Serif" font-size="10.00">Network Node</text>
|
||||
</g>
|
||||
<!-- br_ex -->
|
||||
<g id="node7" class="node"><title>br_ex</title>
|
||||
<polygon fill="white" stroke="none" points="1104,-652 1104,-768 1310,-768 1310,-652 1104,-652"/>
|
||||
<polygon fill="white" stroke="none" points="1109,-741 1109,-763 1305,-763 1305,-741 1109,-741"/>
|
||||
<text text-anchor="start" x="1182.5" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_ex</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-713 1109,-736 1204,-736 1204,-713 1109,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-713 1109,-736 1204,-736 1204,-713 1109,-713"/>
|
||||
<text text-anchor="start" x="1141" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-713 1209,-736 1305,-736 1305,-713 1209,-713"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-713 1209,-736 1305,-736 1305,-713 1209,-713"/>
|
||||
<text text-anchor="start" x="1241.5" y="-722" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-685 1109,-708 1204,-708 1204,-685 1109,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-685 1109,-708 1204,-708 1204,-685 1109,-685"/>
|
||||
<text text-anchor="start" x="1126.5" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.3/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-685 1209,-708 1305,-708 1305,-685 1209,-685"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-685 1209,-708 1305,-708 1305,-685 1209,-685"/>
|
||||
<text text-anchor="start" x="1227" y="-694" font-family="Helvetica,sans-Serif" font-size="10.00">172.24.4.4/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1109,-657 1109,-680 1204,-680 1204,-657 1109,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1109,-657 1109,-680 1204,-680 1204,-657 1109,-657"/>
|
||||
<text text-anchor="start" x="1115.5" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[2] qg-eb8796fb-83</text>
|
||||
<polygon fill="#909090" stroke="none" points="1209,-657 1209,-680 1305,-680 1305,-657 1209,-657"/>
|
||||
<polygon fill="none" stroke="black" points="1209,-657 1209,-680 1305,-680 1305,-657 1209,-657"/>
|
||||
<text text-anchor="start" x="1215" y="-666" font-family="Helvetica,sans-Serif" font-size="10.00">[3] qg-e2b1b0d3-a8</text>
|
||||
</g>
|
||||
<!-- NetworkNode->br_ex -->
|
||||
<!-- network_br_int -->
|
||||
<g id="node8" class="node"><title>network_br_int</title>
|
||||
<polygon fill="white" stroke="none" points="856,-372 856,-572 1662,-572 1662,-372 856,-372"/>
|
||||
<polygon fill="white" stroke="none" points="861,-545 861,-567 1657,-567 1657,-545 861,-545"/>
|
||||
<text text-anchor="start" x="1234.5" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_int</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="861,-517 861,-540 956,-540 956,-517 861,-517"/>
|
||||
<polygon fill="none" stroke="black" points="861,-517 861,-540 956,-540 956,-517 861,-517"/>
|
||||
<text text-anchor="start" x="867.5" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[8] qr-09a15e37-ca</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-517 961,-540 1055,-540 1055,-517 961,-517"/>
|
||||
<polygon fill="none" stroke="black" points="961,-517 961,-540 1055,-540 1055,-517 961,-517"/>
|
||||
<text text-anchor="start" x="967" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[6] tapd0828ef0-eb</text>
|
||||
<polygon fill="#b2f379" stroke="none" points="1060,-517 1060,-540 1154,-540 1154,-517 1060,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-517 1060,-540 1154,-540 1154,-517 1060,-517"/>
|
||||
<text text-anchor="start" x="1066" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[7] qr-622abba5-e2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-517 1159,-540 1253,-540 1253,-517 1159,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-517 1159,-540 1253,-540 1253,-517 1159,-517"/>
|
||||
<text text-anchor="start" x="1165" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tapd6f091a2-c0</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-517 1258,-540 1355,-540 1355,-517 1258,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-517 1258,-540 1355,-540 1355,-517 1258,-517"/>
|
||||
<text text-anchor="start" x="1264" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[13] qr-361be2af-e5</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-517 1360,-540 1454,-540 1454,-517 1360,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-517 1360,-540 1454,-540 1454,-517 1360,-517"/>
|
||||
<text text-anchor="start" x="1366" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[5] tapd6f091a2-c0</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-517 1459,-540 1558,-540 1558,-517 1459,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-517 1459,-540 1558,-540 1558,-517 1459,-517"/>
|
||||
<text text-anchor="start" x="1465" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[14] qr-b66b902a-36</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-517 1563,-540 1657,-540 1657,-517 1563,-517"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-517 1563,-540 1657,-540 1657,-517 1563,-517"/>
|
||||
<text text-anchor="start" x="1569" y="-526" font-family="Helvetica,sans-Serif" font-size="10.00">[6] tapd0828ef0-eb</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-489 861,-512 956,-512 956,-489 861,-489"/>
|
||||
<polygon fill="none" stroke="black" points="861,-489 861,-512 956,-512 956,-489 861,-489"/>
|
||||
<text text-anchor="start" x="882.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-489 961,-512 1055,-512 1055,-489 961,-489"/>
|
||||
<polygon fill="none" stroke="black" points="961,-489 961,-512 1055,-512 1055,-489 961,-489"/>
|
||||
<text text-anchor="start" x="982" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-489 1060,-512 1154,-512 1154,-489 1060,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-489 1060,-512 1154,-512 1154,-489 1060,-489"/>
|
||||
<text text-anchor="start" x="1081" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-489 1159,-512 1253,-512 1253,-489 1159,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-489 1159,-512 1253,-512 1253,-489 1159,-489"/>
|
||||
<text text-anchor="start" x="1180" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-489 1258,-512 1355,-512 1355,-489 1258,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-489 1258,-512 1355,-512 1355,-489 1258,-489"/>
|
||||
<text text-anchor="start" x="1280.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-489 1360,-512 1454,-512 1454,-489 1360,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-489 1360,-512 1454,-512 1454,-489 1360,-489"/>
|
||||
<text text-anchor="start" x="1381" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-489 1459,-512 1558,-512 1558,-489 1459,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-489 1459,-512 1558,-512 1558,-489 1459,-489"/>
|
||||
<text text-anchor="start" x="1482.5" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-489 1563,-512 1657,-512 1657,-489 1563,-489"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-489 1563,-512 1657,-512 1657,-489 1563,-489"/>
|
||||
<text text-anchor="start" x="1584" y="-498" font-family="Helvetica,sans-Serif" font-size="10.00">VLAN tag:3</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-461 861,-484 956,-484 956,-461 861,-461"/>
|
||||
<polygon fill="none" stroke="black" points="861,-461 861,-484 956,-484 956,-461 861,-461"/>
|
||||
<text text-anchor="start" x="884" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.1/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="961,-461 961,-484 1055,-484 1055,-461 961,-461"/>
|
||||
<polygon fill="none" stroke="black" points="961,-461 961,-484 1055,-484 1055,-461 961,-461"/>
|
||||
<text text-anchor="start" x="983.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-461 1060,-484 1154,-484 1154,-461 1060,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-461 1060,-484 1154,-484 1154,-461 1060,-461"/>
|
||||
<text text-anchor="start" x="1082.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.1/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1159,-461 1159,-484 1253,-484 1253,-461 1159,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1159,-461 1159,-484 1253,-484 1253,-461 1159,-461"/>
|
||||
<text text-anchor="start" x="1181.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-461 1258,-484 1355,-484 1355,-461 1258,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-461 1258,-484 1355,-484 1355,-461 1258,-461"/>
|
||||
<text text-anchor="start" x="1282" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.5/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1360,-461 1360,-484 1454,-484 1454,-461 1360,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1360,-461 1360,-484 1454,-484 1454,-461 1360,-461"/>
|
||||
<text text-anchor="start" x="1382.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.2.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-461 1459,-484 1558,-484 1558,-461 1459,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-461 1459,-484 1558,-484 1558,-461 1459,-461"/>
|
||||
<text text-anchor="start" x="1484" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.5/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="1563,-461 1563,-484 1657,-484 1657,-461 1563,-461"/>
|
||||
<polygon fill="none" stroke="black" points="1563,-461 1563,-484 1657,-484 1657,-461 1563,-461"/>
|
||||
<text text-anchor="start" x="1585.5" y="-470" font-family="Helvetica,sans-Serif" font-size="10.00">10.0.3.2/24</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-433 861,-456 1055,-456 1055,-433 861,-433"/>
|
||||
<polygon fill="none" stroke="black" points="861,-433 861,-456 1055,-456 1055,-433 861,-433"/>
|
||||
<text text-anchor="start" x="940.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="1060,-433 1060,-456 1253,-456 1253,-433 1060,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1060,-433 1060,-456 1253,-456 1253,-433 1060,-433"/>
|
||||
<text text-anchor="start" x="1139" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-433 1258,-456 1454,-456 1454,-433 1258,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-433 1258,-456 1454,-456 1454,-433 1258,-433"/>
|
||||
<text text-anchor="start" x="1338.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1459,-433 1459,-456 1657,-456 1657,-433 1459,-433"/>
|
||||
<polygon fill="none" stroke="black" points="1459,-433 1459,-456 1657,-456 1657,-433 1459,-433"/>
|
||||
<text text-anchor="start" x="1540.5" y="-442" font-family="Helvetica,sans-Serif" font-size="10.00">private2</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-405 861,-428 1253,-428 1253,-405 861,-405"/>
|
||||
<polygon fill="none" stroke="black" points="861,-405 861,-428 1253,-428 1253,-405 861,-405"/>
|
||||
<text text-anchor="start" x="1041.5" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router1</text>
|
||||
<polygon fill="#909090" stroke="none" points="1258,-405 1258,-428 1657,-428 1657,-405 1258,-405"/>
|
||||
<polygon fill="none" stroke="black" points="1258,-405 1258,-428 1657,-428 1657,-405 1258,-405"/>
|
||||
<text text-anchor="start" x="1442" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">router2</text>
|
||||
<polygon fill="#909090" stroke="none" points="861,-377 861,-400 1657,-400 1657,-377 861,-377"/>
|
||||
<polygon fill="none" stroke="black" points="861,-377 861,-400 1657,-400 1657,-377 861,-377"/>
|
||||
<text text-anchor="start" x="1231.5" y="-386" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-tun</text>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge19" class="edge"><title>br_ex:qg_e2b1b0d3_a8:s->network_br_int:qr_361be2af_e5:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1257,-656C1257,-600.267 1307,-596.733 1307,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge20" class="edge"><title>br_ex:qg_e2b1b0d3_a8:s->network_br_int:qr_b66b902a_36:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1257,-656C1257,-532.889 1509,-664.111 1509,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge21" class="edge"><title>br_ex:qg_eb8796fb_83:s->network_br_int:qr_09a15e37_ca:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1156,-656C1156,-534.504 908,-662.496 908,-541"/>
|
||||
</g>
|
||||
<!-- br_ex->network_br_int -->
|
||||
<g id="edge22" class="edge"><title>br_ex:qg_eb8796fb_83:s->network_br_int:qr_622abba5_e2:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1156,-656C1156,-600.443 1107,-596.557 1107,-541"/>
|
||||
</g>
|
||||
<!-- network_br_tun -->
|
||||
<g id="node9" class="node"><title>network_br_tun</title>
|
||||
<polygon fill="white" stroke="none" points="1205.5,-204 1205.5,-264 1310.5,-264 1310.5,-204 1205.5,-204"/>
|
||||
<polygon fill="white" stroke="none" points="1211,-237 1211,-259 1306,-259 1306,-237 1211,-237"/>
|
||||
<text text-anchor="start" x="1232.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">OVS br_tun</text>
|
||||
<polygon fill="#909090" stroke="none" points="1211,-209 1211,-232 1306,-232 1306,-209 1211,-209"/>
|
||||
<polygon fill="none" stroke="black" points="1211,-209 1211,-232 1306,-232 1306,-209 1211,-209"/>
|
||||
<text text-anchor="start" x="1232.5" y="-218" font-family="Helvetica,sans-Serif" font-size="10.00">[1] patch-int</text>
|
||||
</g>
|
||||
<!-- network_br_int->network_br_tun -->
|
||||
<g id="edge18" class="edge"><title>network_br_int:patch_tun:s->network_br_tun:patch_int:n</title>
|
||||
<path fill="none" stroke="#909090" stroke-width="4" d="M1259,-376C1259,-312.444 1259,-296.556 1259,-233"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 40 KiB |
@ -2,7 +2,8 @@
|
||||
# of appearance. Changing the order has an impact on the overall integration
|
||||
# process, which may cause wedges in the gate later.
|
||||
|
||||
hacking<0.11,>=0.10.0
|
||||
#hacking<0.11,>=0.10.0
|
||||
flake8<2.6.0,>=2.5.4
|
||||
|
||||
coverage>=3.6
|
||||
python-subunit>=0.0.18
|
||||
|
4
tox.ini
@ -59,6 +59,6 @@ commands = oslo_debug_helper {posargs}
|
||||
# E123, E125 skipped as they are invalid PEP-8.
|
||||
|
||||
show-source = True
|
||||
ignore = E123,E125
|
||||
ignore = E123,E125,H101,H302,H803,W601,E501
|
||||
builtins = _
|
||||
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
|
||||
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tools,local_settings.py
|
||||
|