{{collect_status}}
++ DON: Diagnosing OpenStack Networking + | +
---|
+ + | +
diff --git a/etc/don/don.conf b/etc/don/don.conf new file mode 100644 index 0000000..3649b18 --- /dev/null +++ b/etc/don/don.conf @@ -0,0 +1,6 @@ +[DEFAULT] +# Deployment type should be devstack/multinode +deployment_type=multinode + +[neutron] + diff --git a/openstack_dashboard/don/__init__.py b/openstack_dashboard/don/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openstack_dashboard/don/api.py b/openstack_dashboard/don/api.py new file mode 100644 index 0000000..8503965 --- /dev/null +++ b/openstack_dashboard/don/api.py @@ -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() diff --git a/openstack_dashboard/don/archive/__init__.py b/openstack_dashboard/don/archive/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openstack_dashboard/don/archive/panel.py b/openstack_dashboard/don/archive/panel.py new file mode 100644 index 0000000..136765b --- /dev/null +++ b/openstack_dashboard/don/archive/panel.py @@ -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) diff --git a/openstack_dashboard/don/archive/templates/archive/index.html b/openstack_dashboard/don/archive/templates/archive/index.html new file mode 100644 index 0000000..40a83ca --- /dev/null +++ b/openstack_dashboard/don/archive/templates/archive/index.html @@ -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 %} diff --git a/openstack_dashboard/don/archive/templates/archive/view.html b/openstack_dashboard/don/archive/templates/archive/view.html new file mode 100644 index 0000000..1b533a3 --- /dev/null +++ b/openstack_dashboard/don/archive/templates/archive/view.html @@ -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 %} + +{% endblock %} diff --git a/openstack_dashboard/don/archive/urls.py b/openstack_dashboard/don/archive/urls.py new file mode 100644 index 0000000..d7f59db --- /dev/null +++ b/openstack_dashboard/don/archive/urls.py @@ -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'), + +) diff --git a/openstack_dashboard/don/archive/views.py b/openstack_dashboard/don/archive/views.py new file mode 100644 index 0000000..bab02aa --- /dev/null +++ b/openstack_dashboard/don/archive/views.py @@ -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')) + +''' diff --git a/openstack_dashboard/don/dashboard.py b/openstack_dashboard/don/dashboard.py new file mode 100644 index 0000000..3b138a8 --- /dev/null +++ b/openstack_dashboard/don/dashboard.py @@ -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) diff --git a/openstack_dashboard/don/models.py b/openstack_dashboard/don/models.py new file mode 100644 index 0000000..ed5b3e0 --- /dev/null +++ b/openstack_dashboard/don/models.py @@ -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() diff --git a/openstack_dashboard/don/ovs/__init__.py b/openstack_dashboard/don/ovs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openstack_dashboard/don/ovs/admin-openrc.sh b/openstack_dashboard/don/ovs/admin-openrc.sh new file mode 100644 index 0000000..bbdb7c3 --- /dev/null +++ b/openstack_dashboard/don/ovs/admin-openrc.sh @@ -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 diff --git a/openstack_dashboard/don/ovs/analyzer.py b/openstack_dashboard/don/ovs/analyzer.py new file mode 100644 index 0000000..4e84840 --- /dev/null +++ b/openstack_dashboard/don/ovs/analyzer.py @@ -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('\n') + f.write('
\n') + f.write( + '\n') + f.write( + '\n') + f.write('\n') + else: + lines.append('\n') + for line in cmds[qrouter][key][key2]['output'].split('\n'): + lines.append(line + '\n') + lines.append('\n') + lines.append('
\n') + else: + lines.append('\n') + for line in cmds[tag][key]['output'].split('\n'): + lines.append(line + '\n') + lines.append('
Compute Node | +
+ DON: Internal View + | +
---|
+ + + + | +
+ |
Compute Node | +
VMs | +|
vm1 | +vm2 | +
private1 | +private1 | +
10.10.0.3 | +10.10.0.4 | +
Linux Bridge | +|
qbr8aa60600-7b | +qbr71ac5bef-7c | +
qvb8aa60600-7b | +qvb71ac5bef-7c | +
OVS br_int | +|
[6] qvo8aa60600-7b | +[7] qvo71ac5bef-7c | +
VLAN tag:2 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Network Node | +
OVS br_ex | +
router1 | +
172.24.4.3/24 | +
[2] qg-757bf552-73 | +
OVS br_int | +|
[8] qr-43b83157-3b | +[5] tap59f90a3b-f5 | +
VLAN tag:2 | +VLAN tag:2 | +
10.10.0.1/24 | +10.10.0.2/24 | +
private1 | +|
router1 | +|
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
+ DON: Diagnosing OpenStack Networking + | +
---|
+ + | +
+'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 +} + +
+{ + "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 +} + ++
Compute Node | +
VMs | +||||||
VM1-1 | +VM1-2 | +VM3-1 | +VM3-2 | +VM4 | +||
private1 | +private1 | +private2 | +private2 | +private2 | +public | +private1 | +
10.0.2.3 | +10.0.2.4 | +10.0.3.3 | +10.0.3.4 | +10.0.3.6 | +172.24.4.5 | +10.0.2.6 | +
Linux Bridge | +||||||
tapba7460ea-c9 | +tapa1eba09e-99 | +tap95772001-99 | +tapb0cb94f0-97 | +tap58b49f9d-1d | +tap68484e46-cf | +tap8f35a39f-2a | +
qbrba7460ea-c9 | +qbra1eba09e-99 | +qbr95772001-99 | +qbrb0cb94f0-97 | +qbr58b49f9d-1d | +qbr68484e46-cf | +qbr8f35a39f-2a | +
qvbba7460ea-c9 | +qvba1eba09e-99 | +qvb95772001-99 | +qvbb0cb94f0-97 | +qvb58b49f9d-1d | +qvb68484e46-cf | +qvb8f35a39f-2a | +
OVS br_int | +||||||
[28] qvoba7460ea-c9 | +[29] qvoa1eba09e-99 | +[30] qvo95772001-99 | +[31] qvob0cb94f0-97 | +[33] qvo58b49f9d-1d | +[34] qvo68484e46-cf | +[32] qvo8f35a39f-2a | +
VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +VLAN tag:3 | +VLAN tag:4 | +VLAN tag:2 | +
[19] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
Network Node | +
OVS br_ex | +|
router1 | +router2 | +
172.24.4.3/24 | +172.24.4.4/24 | +
[6] qg-e6c19c2c-8c | +[7] qg-718e237a-3a | +
OVS br_int | +|||||||
[25] qr-04542d8f-13 | +[23] tapfd625661-7e | +[24] qr-e503ba9c-89 | +[22] tapb9083cd7-6f | +[27] qr-fb2585a7-bd | +[23] tapfd625661-7e | +[26] qr-5de9034a-db | +[22] tapb9083cd7-6f | +
VLAN tag:3 | +VLAN tag:3 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +VLAN tag:2 | +VLAN tag:2 | +
10.0.3.1/24 | +10.0.3.2/24 | +10.0.2.1/24 | +10.0.2.2/24 | +10.0.3.5/24 | +10.0.3.2/24 | +10.0.2.5/24 | +10.0.2.2/24 | +
private2 | +private1 | +private2 | +private1 | +||||
router1 | +router2 | +||||||
[19] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
Network Node | +
OVS br_ex | +
router1 | +
172.24.4.3/24 | +
[2] qg-757bf552-73 | +
OVS br_int | +|
[8] qr-43b83157-3b | +[5] tap59f90a3b-f5 | +
VLAN tag:2 | +VLAN tag:2 | +
10.10.0.1/24 | +10.10.0.2/24 | +
private1 | +|
router1 | +|
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
+ DON: Ping Tracer + | +
---|
+ + | +
+ |
Compute Node | +
VMs | +||||||
VM1-1 | +VM1-2 | +VM3-1 | +VM3-2 | +VM4 | +||
private1 | +private1 | +private2 | +private2 | +public | +private2 | +private1 | +
10.0.2.3 | +10.0.2.4 | +10.0.3.3 | +10.0.3.4 | +172.24.4.5 | +10.0.3.6 | +10.0.2.6 | +
Linux Bridge | +||||||
tape0d697f2-cb | +tapbd4f1f72-5f | +tapbd96ca7d-5e | +tap4441e3a6-f2 | +tapce3d7b20-1d | +tapf0841d56-02 | +tapfbb76083-60 | +
qbre0d697f2-cb | +qbrbd4f1f72-5f | +qbrbd96ca7d-5e | +qbr4441e3a6-f2 | +qbrce3d7b20-1d | +qbrf0841d56-02 | +qbrfbb76083-60 | +
qvbe0d697f2-cb | +qvbbd4f1f72-5f | +qvbbd96ca7d-5e | +qvb4441e3a6-f2 | +qvbce3d7b20-1d | +qvbf0841d56-02 | +qvbfbb76083-60 | +
OVS br_int | +||||||
[9] qvoe0d697f2-cb | +[10] qvobd4f1f72-5f | +[11] qvobd96ca7d-5e | +[12] qvo4441e3a6-f2 | +[17] qvoce3d7b20-1d | +[16] qvof0841d56-02 | +[15] qvofbb76083-60 | +
VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +VLAN tag:4 | +VLAN tag:3 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
Network Node | +
OVS br_ex | +|
router1 | +router2 | +
172.24.4.3/24 | +172.24.4.4/24 | +
[2] qg-eb8796fb-83 | +[3] qg-e2b1b0d3-a8 | +
OVS br_int | +|||||||
[8] qr-09a15e37-ca | +[6] tapd0828ef0-eb | +[7] qr-622abba5-e2 | +[5] tapd6f091a2-c0 | +[13] qr-361be2af-e5 | +[5] tapd6f091a2-c0 | +[14] qr-b66b902a-36 | +[6] tapd0828ef0-eb | +
VLAN tag:3 | +VLAN tag:3 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +
10.0.3.1/24 | +10.0.3.2/24 | +10.0.2.1/24 | +10.0.2.2/24 | +10.0.2.5/24 | +10.0.2.2/24 | +10.0.3.5/24 | +10.0.3.2/24 | +
private2 | +private1 | +private1 | +private2 | +||||
router1 | +router2 | +||||||
[1] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
+ DON: Internal View + | +
---|
+ + + + | +
+ |
+ DON: Internal View + | +
---|
+ + + + | +
+ |
Compute Node | +
Compute Node | +
VMs | +|
vm1 | +vm2 | +
private1 | +private1 | +
10.10.0.3 | +10.10.0.4 | +
Linux Bridge | +|
qbr8aa60600-7b | +qbr71ac5bef-7c | +
qvb8aa60600-7b | +qvb71ac5bef-7c | +
OVS br_int | +|
[6] qvo8aa60600-7b | +[7] qvo71ac5bef-7c | +
VLAN tag:2 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Network Node | +
OVS br_ex | +
router1 | +
172.24.4.3/24 | +
[2] qg-757bf552-73 | +
OVS br_int | +|
[8] qr-43b83157-3b | +[5] tap59f90a3b-f5 | +
VLAN tag:2 | +VLAN tag:2 | +
10.10.0.1/24 | +10.10.0.2/24 | +
private1 | +|
router1 | +|
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Network Node | +
OVS br_ex | +
router1 | +
172.24.4.3/24 | +
[2] qg-757bf552-73 | +
OVS br_int | +|
[8] qr-43b83157-3b | +[5] tap59f90a3b-f5 | +
VLAN tag:2 | +VLAN tag:2 | +
10.10.0.1/24 | +10.10.0.2/24 | +
private1 | +|
router1 | +|
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Compute Node | +
VMs | +||||||
VM1-1 | +VM1-2 | +VM3-1 | +VM3-2 | +VM4 | +||
private1 | +private1 | +private2 | +private2 | +public | +private2 | +private1 | +
10.0.2.3 | +10.0.2.4 | +10.0.3.3 | +10.0.3.4 | +172.24.4.5 | +10.0.3.6 | +10.0.2.6 | +
Linux Bridge | +||||||
tape0d697f2-cb | +tapbd4f1f72-5f | +tapbd96ca7d-5e | +tap4441e3a6-f2 | +tapce3d7b20-1d | +tapf0841d56-02 | +tapfbb76083-60 | +
qbre0d697f2-cb | +qbrbd4f1f72-5f | +qbrbd96ca7d-5e | +qbr4441e3a6-f2 | +qbrce3d7b20-1d | +qbrf0841d56-02 | +qbrfbb76083-60 | +
qvbe0d697f2-cb | +qvbbd4f1f72-5f | +qvbbd96ca7d-5e | +qvb4441e3a6-f2 | +qvbce3d7b20-1d | +qvbf0841d56-02 | +qvbfbb76083-60 | +
OVS br_int | +||||||
[9] qvoe0d697f2-cb | +[10] qvobd4f1f72-5f | +[11] qvobd96ca7d-5e | +[12] qvo4441e3a6-f2 | +[17] qvoce3d7b20-1d | +[16] qvof0841d56-02 | +[15] qvofbb76083-60 | +
VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +VLAN tag:4 | +VLAN tag:3 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
Network Node | +
OVS br_ex | +|
router1 | +router2 | +
172.24.4.3/24 | +172.24.4.4/24 | +
[2] qg-eb8796fb-83 | +[3] qg-e2b1b0d3-a8 | +
OVS br_int | +|||||||
[8] qr-09a15e37-ca | +[6] tapd0828ef0-eb | +[7] qr-622abba5-e2 | +[5] tapd6f091a2-c0 | +[13] qr-361be2af-e5 | +[5] tapd6f091a2-c0 | +[14] qr-b66b902a-36 | +[6] tapd0828ef0-eb | +
VLAN tag:3 | +VLAN tag:3 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +
10.0.3.1/24 | +10.0.3.2/24 | +10.0.2.1/24 | +10.0.2.2/24 | +10.0.2.5/24 | +10.0.2.2/24 | +10.0.3.5/24 | +10.0.3.2/24 | +
private2 | +private1 | +private1 | +private2 | +||||
router1 | +router2 | +||||||
[1] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
+ DON: Internal View + | +
---|
+ + + + | +
+ |
+ DON: Diagnosing OpenStack Networking + | +
---|
+ Step 1 Collect |
+
+
+ + + + | +
+ + + |
+
+'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 +} + +
+{ + "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 +} + ++
+ DON: Ping Tracer + | +
---|
+ + | +
+ |
+ DON: Internal View + | +
---|
+ + + + + + | +
+ + |
Compute Node | +
VMs | +|
vm1 | +vm2 | +
private1 | +private1 | +
10.10.0.3 | +10.10.0.4 | +
Linux Bridge | +|
tap71ac5bef-7c | +|
qbr8aa60600-7b | +qbr71ac5bef-7c | +
qvb8aa60600-7b | +qvb71ac5bef-7c | +
OVS br_int | +|
[6] qvo8aa60600-7b | +[7] qvo71ac5bef-7c | +
VLAN tag:2 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Compute Node | +
VMs | +|
vm1 | +vm2 | +
private1 | +private1 | +
10.10.0.3 | +10.10.0.4 | +
Linux Bridge | +|
tap71ac5bef-7c | +|
qbr8aa60600-7b | +qbr71ac5bef-7c | +
qvb8aa60600-7b | +qvb71ac5bef-7c | +
OVS br_int | +|
[6] qvo8aa60600-7b | +[7] qvo71ac5bef-7c | +
VLAN tag:2 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Network Node | +
OVS br_ex | +
router1 | +
172.24.4.3/24 | +
[2] qg-757bf552-73 | +
OVS br_int | +|
[8] qr-43b83157-3b | +[10] tap1e1c73c9-35 | +
VLAN tag:2 | +VLAN tag:2 | +
10.10.0.1/24 | +10.10.0.5/24 | +
private1 | +|
router1 | +|
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
+'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 +} + +
+{ + "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 +} + ++
Network Node | +
OVS br_ex | +
router1 | +
172.24.4.3/24 | +
[2] qg-757bf552-73 | +
OVS br_int | +|
[8] qr-43b83157-3b | +[10] tap1e1c73c9-35 | +
VLAN tag:2 | +VLAN tag:2 | +
10.10.0.1/24 | +10.10.0.5/24 | +
private1 | +|
router1 | +|
[1] patch-tun | +
OVS br_tun | +|
[1] patch-int | +
Compute Node | +
VMs | +||||||
VM1-1 | +VM1-2 | +VM3-1 | +VM3-2 | +VM4 | +||
private1 | +private1 | +private2 | +private2 | +public | +private2 | +private1 | +
10.0.2.3 | +10.0.2.4 | +10.0.3.3 | +10.0.3.4 | +172.24.4.5 | +10.0.3.6 | +10.0.2.6 | +
Linux Bridge | +||||||
tape0d697f2-cb | +tapbd4f1f72-5f | +tapbd96ca7d-5e | +tap4441e3a6-f2 | +tapce3d7b20-1d | +tapf0841d56-02 | +tapfbb76083-60 | +
qbre0d697f2-cb | +qbrbd4f1f72-5f | +qbrbd96ca7d-5e | +qbr4441e3a6-f2 | +qbrce3d7b20-1d | +qbrf0841d56-02 | +qbrfbb76083-60 | +
qvbe0d697f2-cb | +qvbbd4f1f72-5f | +qvbbd96ca7d-5e | +qvb4441e3a6-f2 | +qvbce3d7b20-1d | +qvbf0841d56-02 | +qvbfbb76083-60 | +
OVS br_int | +||||||
[9] qvoe0d697f2-cb | +[10] qvobd4f1f72-5f | +[11] qvobd96ca7d-5e | +[12] qvo4441e3a6-f2 | +[17] qvoce3d7b20-1d | +[16] qvof0841d56-02 | +[15] qvofbb76083-60 | +
VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +VLAN tag:4 | +VLAN tag:3 | +VLAN tag:2 | +
[1] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +
Network Node | +
OVS br_ex | +|
router1 | +router2 | +
172.24.4.3/24 | +172.24.4.4/24 | +
[2] qg-eb8796fb-83 | +[3] qg-e2b1b0d3-a8 | +
OVS br_int | +|||||||
[8] qr-09a15e37-ca | +[6] tapd0828ef0-eb | +[7] qr-622abba5-e2 | +[5] tapd6f091a2-c0 | +[13] qr-361be2af-e5 | +[5] tapd6f091a2-c0 | +[14] qr-b66b902a-36 | +[6] tapd0828ef0-eb | +
VLAN tag:3 | +VLAN tag:3 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:2 | +VLAN tag:3 | +VLAN tag:3 | +
10.0.3.1/24 | +10.0.3.2/24 | +10.0.2.1/24 | +10.0.2.2/24 | +10.0.2.5/24 | +10.0.2.2/24 | +10.0.3.5/24 | +10.0.3.2/24 | +
private2 | +private1 | +private1 | +private2 | +||||
router1 | +router2 | +||||||
[1] patch-tun | +
OVS br_tun | +||||||
[1] patch-int | +