Browse Source

Merge remote-tracking branch 'origin/master' into merge-branch

Change-Id: Ib8c70c6aec4e320c84546c8ab52e29b97c62d401
tags/7.0.0.0rc1
Kyle Mestery 5 years ago
parent
commit
7f759c077f
100 changed files with 225 additions and 9069 deletions
  1. +0
    -3
      .gitignore
  2. +0
    -1
      .pylintrc
  3. +1
    -0
      HACKING.rst
  4. +4
    -4
      TESTING.rst
  5. +1
    -1
      doc/source/devref/callbacks.rst
  6. +12
    -23
      doc/source/devref/contribute.rst
  7. +93
    -0
      doc/source/devref/fullstack_testing.rst
  8. BIN
      doc/source/devref/images/fullstack-multinode-simulation.png
  9. +8
    -1
      doc/source/devref/index.rst
  10. +49
    -1
      doc/source/devref/openvswitch_agent.rst
  11. +7
    -7
      doc/source/devref/security_group_api.rst
  12. +50
    -38
      doc/source/devref/sub_projects.rst
  13. +0
    -14
      doc/source/docbkx/docbkx-example/README
  14. +0
    -38
      doc/source/docbkx/docbkx-example/pom.xml
  15. +0
    -318
      doc/source/docbkx/docbkx-example/src/docbkx/example.xml
  16. +0
    -79
      doc/source/docbkx/docbkx-example/src/docbkx/figures/example.sdx
  17. +0
    -523
      doc/source/docbkx/docbkx-example/src/docbkx/figures/example.svg
  18. +0
    -112
      doc/source/docbkx/quantum-api-1.0/common.ent
  19. +0
    -70
      doc/source/docbkx/quantum-api-1.0/figures/Arrow_east.svg
  20. +0
    -60
      doc/source/docbkx/quantum-api-1.0/figures/Check_mark_23x20_02.svg
  21. +0
    -337
      doc/source/docbkx/quantum-api-1.0/js/shjs/sh_java.js
  22. +0
    -347
      doc/source/docbkx/quantum-api-1.0/js/shjs/sh_javascript.js
  23. +0
    -538
      doc/source/docbkx/quantum-api-1.0/js/shjs/sh_main.js
  24. +0
    -115
      doc/source/docbkx/quantum-api-1.0/js/shjs/sh_xml.js
  25. +0
    -184
      doc/source/docbkx/quantum-api-1.0/js/trc/schema/controller.js
  26. +0
    -137
      doc/source/docbkx/quantum-api-1.0/js/trc/schema/layoutManager.js
  27. +0
    -342
      doc/source/docbkx/quantum-api-1.0/js/trc/schema/sampleManager.js
  28. +0
    -564
      doc/source/docbkx/quantum-api-1.0/js/trc/util.js
  29. +0
    -2011
      doc/source/docbkx/quantum-api-1.0/quantum-api-guide.xml
  30. +0
    -3
      doc/source/docbkx/quantum-api-1.0/samples/att-get-res-none.json
  31. +0
    -1
      doc/source/docbkx/quantum-api-1.0/samples/att-get-res-none.xml
  32. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/att-get-res.json
  33. +0
    -1
      doc/source/docbkx/quantum-api-1.0/samples/att-get-res.xml
  34. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/att-put-req.json
  35. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/att-put-req.xml
  36. +0
    -19
      doc/source/docbkx/quantum-api-1.0/samples/extensions.json
  37. +0
    -21
      doc/source/docbkx/quantum-api-1.0/samples/extensions.xml
  38. +0
    -7
      doc/source/docbkx/quantum-api-1.0/samples/fault.json
  39. +0
    -8
      doc/source/docbkx/quantum-api-1.0/samples/fault.xml
  40. +0
    -22
      doc/source/docbkx/quantum-api-1.0/samples/network-get-detail-res.json
  41. +0
    -14
      doc/source/docbkx/quantum-api-1.0/samples/network-get-detail-res.xml
  42. +0
    -7
      doc/source/docbkx/quantum-api-1.0/samples/network-get-res.json
  43. +0
    -3
      doc/source/docbkx/quantum-api-1.0/samples/network-get-res.xml
  44. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/network-post-req.json
  45. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/network-post-req.xml
  46. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/network-post-res.json
  47. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/network-post-res.xml
  48. +0
    -13
      doc/source/docbkx/quantum-api-1.0/samples/networks-get-detail-res.json
  49. +0
    -8
      doc/source/docbkx/quantum-api-1.0/samples/networks-get-detail-res.xml
  50. +0
    -11
      doc/source/docbkx/quantum-api-1.0/samples/networks-get-res.json
  51. +0
    -4
      doc/source/docbkx/quantum-api-1.0/samples/networks-get-res.xml
  52. +0
    -5
      doc/source/docbkx/quantum-api-1.0/samples/networks-post-req.json
  53. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/networks-post-req.xml
  54. +0
    -5
      doc/source/docbkx/quantum-api-1.0/samples/networks-post-res.json
  55. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/networks-post-res.xml
  56. +0
    -7
      doc/source/docbkx/quantum-api-1.0/samples/notfound.json
  57. +0
    -7
      doc/source/docbkx/quantum-api-1.0/samples/notfound.xml
  58. +0
    -7
      doc/source/docbkx/quantum-api-1.0/samples/notimplemented.json
  59. +0
    -5
      doc/source/docbkx/quantum-api-1.0/samples/notimplemented.xml
  60. +0
    -12
      doc/source/docbkx/quantum-api-1.0/samples/port-get-detail-res.json
  61. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/port-get-detail-res.xml
  62. +0
    -8
      doc/source/docbkx/quantum-api-1.0/samples/port-get-res.json
  63. +0
    -3
      doc/source/docbkx/quantum-api-1.0/samples/port-get-res.xml
  64. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/port-post-req.json
  65. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/port-post-req.xml
  66. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/port-post-res.json
  67. +0
    -2
      doc/source/docbkx/quantum-api-1.0/samples/port-post-res.xml
  68. +0
    -12
      doc/source/docbkx/quantum-api-1.0/samples/ports-get-detail-res.json
  69. +0
    -8
      doc/source/docbkx/quantum-api-1.0/samples/ports-get-detail-res.xml
  70. +0
    -11
      doc/source/docbkx/quantum-api-1.0/samples/ports-get-res.json
  71. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/ports-get-res.xml
  72. +0
    -9
      doc/source/docbkx/quantum-api-1.0/samples/private.json
  73. +0
    -6
      doc/source/docbkx/quantum-api-1.0/samples/private.xml
  74. +0
    -11
      doc/source/docbkx/quantum-api-1.0/samples/public.json
  75. +0
    -8
      doc/source/docbkx/quantum-api-1.0/samples/public.xml
  76. +0
    -22
      doc/source/docbkx/quantum-api-1.0/samples/versions-atom.xml
  77. +0
    -24
      doc/source/docbkx/quantum-api-1.0/samples/versions.json
  78. +0
    -12
      doc/source/docbkx/quantum-api-1.0/samples/versions.xml
  79. +0
    -82
      doc/source/docbkx/quantum-api-1.0/style/schema.css
  80. +0
    -151
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_acid.css
  81. +0
    -151
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_darkblue.css
  82. +0
    -139
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_emacs.css
  83. +0
    -151
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_night.css
  84. +0
    -151
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_pablo.css
  85. +0
    -145
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_print.css
  86. +0
    -66
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_style.css
  87. +0
    -139
      doc/source/docbkx/quantum-api-1.0/style/shjs/sh_whitengrey.css
  88. +0
    -6
      doc/source/docbkx/quantum-api-1.0/xsd/.htaccess
  89. +0
    -439
      doc/source/docbkx/quantum-api-1.0/xsd/actions.xsd
  90. +0
    -11
      doc/source/docbkx/quantum-api-1.0/xsd/affinity-id.xjb
  91. +0
    -39
      doc/source/docbkx/quantum-api-1.0/xsd/affinity-id.xsd
  92. +0
    -11
      doc/source/docbkx/quantum-api-1.0/xsd/api-common.xjb
  93. +0
    -66
      doc/source/docbkx/quantum-api-1.0/xsd/api-common.xsd
  94. +0
    -21
      doc/source/docbkx/quantum-api-1.0/xsd/api.xjb
  95. +0
    -103
      doc/source/docbkx/quantum-api-1.0/xsd/api.xsd
  96. +0
    -11
      doc/source/docbkx/quantum-api-1.0/xsd/atom.xjb
  97. +0
    -105
      doc/source/docbkx/quantum-api-1.0/xsd/atom/atom.xsd
  98. +0
    -294
      doc/source/docbkx/quantum-api-1.0/xsd/atom/xml.xsd
  99. +0
    -378
      doc/source/docbkx/quantum-api-1.0/xsd/backup.xsd
  100. +0
    -156
      doc/source/docbkx/quantum-api-1.0/xsd/common.xsd

+ 0
- 3
.gitignore View File

@@ -12,9 +12,6 @@ neutron.egg-info/
neutron/vcsversion.py
neutron/versioninfo
pbr*.egg/
quantum.egg-info/
quantum/vcsversion.py
quantum/versioninfo
setuptools*.egg/
*.log
*.mo


+ 0
- 1
.pylintrc View File

@@ -31,7 +31,6 @@ disable=
broad-except,
dangerous-default-value,
deprecated-lambda,
duplicate-key,
expression-not-assigned,
fixme,
global-statement,


+ 1
- 0
HACKING.rst View File

@@ -16,6 +16,7 @@ Neutron Specific Commandments
- [N324] Prevent use of deprecated contextlib.nested.
- [N325] Python 3: Do not use xrange.
- [N326] Python 3: do not use basestring.
- [N327] Python 3: do not use dict.iteritems.

Creating Unit Tests
-------------------


+ 4
- 4
TESTING.rst View File

@@ -242,10 +242,10 @@ dependencies as the functional tests, using the configuration script
tools/configure_for_func_testing.sh is advised (as described above).
When running full-stack tests on a clean VM for the first time, we
advise to run ./stack.sh successfully to make sure all Neutron's
dependencies are met. Also note that in order to preserve resources
on the gate, running the dsvm-functional suite will also run all
full-stack tests (and a new worker won't be assigned specifically for
dsvm-fullstack).
dependencies are met. Full-stack based Neutron daemons produce logs to a
sub-folder in /tmp/fullstack-logs (for example, a test named
"test_example" will produce logs to /tmp/fullstack-logs/test_example/),
so that will be a good place to look if your test is failing.

API Tests
=========


+ 1
- 1
doc/source/devref/callbacks.rst View File

@@ -223,7 +223,7 @@ There are a few options to unsubscribe registered callbacks:
resource R, any notification of events related to resource R will no longer be handed
over to C, after the unsubscribe_by_resource() invocation.
* unsubscribe_all(): say that callback C has subscribed to events A, B for resource R1,
and events C, D for resource R2, any notification of events pertaining resouces R1 and
and events C, D for resource R2, any notification of events pertaining resources R1 and
R2 will no longer be handed over to C, after the unsubscribe_all() invocation.

The snippet below shows these concepts in action:


+ 12
- 23
doc/source/devref/contribute.rst View File

@@ -129,7 +129,7 @@ The testing process will be as follow:
the vendor to choose what CI system they see fit to run them. There is no
need or requirement to use OpenStack CI resources if they do not want to.
Having said that, it may be useful to provide coverage for the shim layer in
the form of basic validation as done in `ODL <https://github.com/openstack/neutron/blob/master/neutron/tests/unit/ml2/test_mechanism_odl.py>`_ and `LBaaS A10 driver <https://github.com/openstack/neutron-lbaas/blob/master/neutron_lbaas/tests/unit/services/loadbalancer/drivers/a10networks/test_driver_v1.py>`_.
the form of basic validation as done in `ODL <https://git.openstack.org/cgit/openstack/networking-odl/tree/networking_odl/tests/unit/ml2/test_mechanism_odl.py>`_ and `LBaaS A10 driver <https://git.openstack.org/cgit/openstack/neutron-lbaas/tree/neutron_lbaas/tests/unit/services/loadbalancer/drivers/a10networks/test_driver_v1.py>`_.

* 3rd Party CI will continue to validate vendor integration with Neutron via
functional testing. 3rd Party CI is a communication mechanism. This objective
@@ -227,7 +227,7 @@ library, and it leads to the greatest level of flexibility when dealing with Dev
dev/test deployments.

Having said that, most Neutron plugins developed in the past likely already have
integration with DevStack in the form of `neutron_plugins <https://github.com/openstack-dev/devstack/tree/master/lib/neutron_plugins>`_.
integration with DevStack in the form of `neutron_plugins <https://git.openstack.org/cgit/openstack-dev/devstack/tree/lib/neutron_plugins>`_.
If the plugin is being decomposed in vendor integration plus vendor library, it would
be necessary to adjust the instructions provided in the neutron_plugin file to pull the
vendor library code as a new dependency. For instance, the instructions below:
@@ -247,7 +247,7 @@ vendor library code as a new dependency. For instance, the instructions below:

could be placed in 'neutron_plugin_configure_service', ahead of the service
configuration. An alternative could be under the `third_party section
<https://github.com/openstack-dev/devstack/tree/master/lib/neutron_thirdparty>`_,
<https://git.openstack.org/cgit/openstack-dev/devstack/tree/lib/neutron_thirdparty>`_,
if available. This solution can be similarly exploited for both monolithic
plugins or ML2 mechanism drivers. The configuration of the plugin or driver itself can be
done by leveraging the extensibility mechanisms provided by `local.conf <http://docs.openstack.org/developer/devstack/configuration.html>`_. In fact, since the .ini file for the vendor plugin or driver lives
@@ -270,9 +270,9 @@ is strongly encouraged to revise the existing DevStack integration, in order to
in an extras.d hooks based approach.

One final consideration is worth making for 3rd party CI setups: if `Devstack Gate
<https://github.com/openstack-infra/devstack-gate>`_ is used, it does provide hook
<https://git.openstack.org/cgit/openstack-infra/devstack-gate>`_ is used, it does provide hook
functions that can be executed at specific times of the devstack-gate-wrap script run.
For example, the `Neutron Functional job <https://github.com/openstack-infra/project-config/blob/master/jenkins/jobs/neutron-functional.yaml>`_ uses them. For more details see `devstack-vm-gate-wrap.sh <https://github.com/openstack-infra/devstack-gate/blob/master/devstack-vm-gate-wrap.sh>`_.
For example, the `Neutron Functional job <https://git.openstack.org/cgit/openstack-infra/project-config/tree/jenkins/jobs/neutron.yaml>`_ uses them. For more details see `devstack-vm-gate-wrap.sh <https://git.openstack.org/cgit/openstack-infra/devstack-gate/tree/devstack-vm-gate-wrap.sh>`_.

Documentation Strategies
------------------------
@@ -291,12 +291,12 @@ The list of steps below are somewhat the tl;dr; version of what you can find
on http://docs.openstack.org/infra/manual/creators.html. They are meant to
be the bare minimum you have to complete in order to get you off the ground.

* Create a public repository: this can be a personal github.com repo or any
publicly available git repo, e.g. https://github.com/john-doe/foo.git. This
* Create a public repository: this can be a personal git.openstack.org repo or any
publicly available git repo, e.g. ``https://github.com/john-doe/foo.git``. This
would be a temporary buffer to be used to feed the StackForge one.
* Initialize the repository: if you are starting afresh, you may *optionally*
want to use cookiecutter to get a skeleton project. You can learn how to use
cookiecutter on https://github.com/openstack-dev/cookiecutter.
cookiecutter on https://git.openstack.org/cgit/openstack-dev/cookiecutter.
If you want to build the repository from an existing Neutron module, you may
want to skip this step now, build the history first (next step), and come back
here to initialize the remainder of the repository with other files being
@@ -312,7 +312,7 @@ be the bare minimum you have to complete in order to get you off the ground.

::

git clone https://github.com/openstack/neutron.git
git clone https://git.openstack.org/openstack/neutron.git
cd neutron
./tools/split.sh
# Sit and wait for a while, or grab a cup of your favorite drink
@@ -347,7 +347,7 @@ be the bare minimum you have to complete in order to get you off the ground.
the previous step. In the latter case, you can do so by specifying the
upstream section for your project in project-config/gerrit/project.yaml.
Steps are documented on the
`Project Creators Manual <http://docs.openstack.org/infra/manual/creators.html>`_.
`Repository Creator's Guide <http://docs.openstack.org/infra/manual/creators.html>`_.
* Ask for a Launchpad user to be assigned to the core team created. Steps are
documented in
`this section <http://docs.openstack.org/infra/manual/creators.html#update-the-gerrit-group-members>`_.
@@ -357,7 +357,7 @@ be the bare minimum you have to complete in order to get you off the ground.
jobs that validate your patches when posted to Gerrit. For instance, one
thing you would need to do is to define an entry point for your plugin
or driver in your own setup.cfg similarly as to how it is done
`here <https://github.com/stackforge/networking-odl/blob/master/setup.cfg#L31>`_.
`here <https://git.openstack.org/cgit/openstack/networking-odl/tree/setup.cfg#n31>`_.
* Define an entry point for your plugin or driver in setup.cfg
* Create 3rd Party CI account: if you do not already have one, follow
instructions for
@@ -391,7 +391,7 @@ will be removed. The following aspects are captured:
effort is not considered justified. Assessment may change in the
future.

Absense of an entry for an existing plugin or driver means no active effort
Absence of an entry for an existing plugin or driver means no active effort
has been observed or potentially not required.
* Completed in: the release in which the effort is considered completed. Code
completion can be deemed as such, if there is no overlap/duplication between
@@ -402,14 +402,3 @@ will be removed. The following aspects are captured:
+===============================+=======================+===========+==================+=========+==============+
| freescale-nscs | ml2,fw | no | no | [D] | |
+-------------------------------+-----------------------+-----------+------------------+---------+--------------+
| networking-cisco_ | core,ml2,l3,fw,vpn | yes | yes | [B] | |
+-------------------------------+-----------------------+-----------+------------------+---------+--------------+

.. _networking-cisco:

Cisco
-----

* Git: https://git.openstack.org/stackforge/networking-cisco
* Launchpad: https://launchpad.net/networking-cisco
* PyPI: https://pypi.python.org/pypi/networking-cisco

+ 93
- 0
doc/source/devref/fullstack_testing.rst View File

@@ -0,0 +1,93 @@
==========================
Neutron Full Stack Testing
==========================

Why?
====

The idea behind "fullstack" testing is to fill a gap between unit + functional
tests and Tempest. Tempest tests are expensive to run, difficult to run in
a multi node environment, and are often very high level and provide little
indication to what is wrong, only that something is wrong. Developers further
benefit from full stack testing as it can sufficiently simulate a real
environment and provide a rapidly reproducible way to verify code as you're
still writing it.

How?
====

Full stack tests set up their own Neutron processes (Server & agents). They
assume a working Rabbit and MySQL server before the run starts. Instructions
on how to run fullstack tests on a VM are available at TESTING.rst:
http://git.openstack.org/cgit/openstack/neutron/tree/TESTING.rst

Each test defines its own topology (What and how many servers and agents should
be running).

Since the test runs on the machine itself, full stack testing enables
"white box" testing. This means that you can, for example, create a router
through the API and then assert that a namespace was created for it.

Full stack tests run in the Neutron tree with Neutron resources alone. You
may use the Neutron API (Keystone is set to NOAUTH so that it's out of the
picture). VMs may be simulated with a helper class that contains a container-
like object in its own namespace and IP address. It has helper methods to send
different kinds of traffic. The "VM" may be connected to br-int or br-ex,
to simulate internal or external traffic.

Full stack testing can simulate multi node testing by starting an agent
multiple times. Specifically, each node would have its own copy of the
OVS/DHCP/L3 agents, all configured with the same "host" value. Each OVS agent
is connected to its own pair of br-int/br-ex, and those bridges are then
interconnected.

.. image:: images/fullstack-multinode-simulation.png

When?
=====

1) You'd like to test the interaction between Neutron components (Server
and agents) and have already tested each component in isolation via unit or
functional tests. You should have many unit tests, fewer tests to test
a component and even fewer to test their interaction. Edge cases should
not be tested with full stack testing.
2) You'd like to increase coverage by testing features that require multi node
testing such as l2pop, L3 HA and DVR.
3) You'd like to test agent restarts. We've found bugs in the OVS, DHCP and
L3 agents and haven't found an effective way to test these scenarios. Full
stack testing can help here as the full stack infrastructure can restart an
agent during the test.

Short Term Goals
================

* Multinode & Stability:
- Interconnect the internal and external bridges
- Convert the L3 HA failover functional test to a full stack test
- Write a test for DHCP HA / Multiple DHCP agents per network
* Write DVR tests
* Write L3 HA tests
* Write a test that validates L3 HA + l2pop integration after
https://bugs.launchpad.net/neutron/+bug/1365476 is fixed.
* Write a test that validates DVR + L3 HA integration after
https://bugs.launchpad.net/neutron/+bug/1365473 is fixed.

None of these tasks currently have owners. Feel free to send patches!

After these tests are merged, it should be fair to start asking contributors to
add full stack tests when appropriate in the patches themselves and not after
the fact as there will probably be something to copy/paste from.

Long Term Goals
===============

* Currently we configure the OVS agent with VLANs segmentation (Only because
it's easier). This allows us to validate most functionality, but we might
need to support tunneling somehow.
* How do advanced services use the full stack testing infrastructure? I'd
assume we treat all of the infrastructure classes as a publicly consumed
API and have the XaaS repos import and use them.
* Currently we configure the Neutron server with the ML2 plugin and the OVS
mechanism driver. We may modularize the topology configuration further to
allow to rerun full stack tests against different Neutron plugins or ML2
mechanism drivers.

BIN
doc/source/devref/images/fullstack-multinode-simulation.png View File

Before After
Width: 611  |  Height: 608  |  Size: 29KB

+ 8
- 1
doc/source/devref/index.rst View File

@@ -21,7 +21,8 @@ Developer Guide
In the Developer Guide, you will find information on Neutron's lower level
programming APIs. There are sections that cover the core pieces of Neutron,
including its database, message queue, and scheduler components. There are
also subsections that describe specific plugins inside Neutron.
also subsections that describe specific plugins inside Neutron. Finally,
the developer guide includes information about Neutron testing infrastructure.


Programming HowTos and Tutorials
@@ -51,6 +52,12 @@ Neutron Internals
oslo-incubator
callbacks

Testing
-------
.. toctree::
:maxdepth: 3

fullstack_testing

Module Reference
----------------


+ 49
- 1
doc/source/devref/openvswitch_agent.rst View File

@@ -6,7 +6,10 @@ This Agent uses the `OpenVSwitch`_ virtual switch to create L2
connectivity for instances, along with bridges created in conjunction
with OpenStack Nova for filtering.

ovs-neutron-agent can be configured to use two different networking technologies to create tenant isolation, either GRE tunnels or VLAN tags.
ovs-neutron-agent can be configured to use different networking technologies
to create tenant isolation.
These technologies are implemented as ML2 type drivers which are used in
conjunction with the OpenVSwitch mechanism driver.

VLAN Tags
---------
@@ -23,6 +26,51 @@ GRE Tunneling is documented in depth in the `Networking in too much
detail <http://openstack.redhat.com/Networking_in_too_much_detail>`_
by RedHat.


VXLAN Tunnels
-------------

VXLAN is an overlay technology which encapsulates MAC frames
at layer 2 into a UDP header.
More information can be found in `The VXLAN wiki page.
<http://en.wikipedia.org/wiki/Virtual_Extensible_LAN>`_


Bridge Management
-----------------

In order to make the agent capable of handling more than one tunneling
technology, to decouple the requirements of segmentation technology
from tenant isolation, and to preserve backward compatibility for OVS
agents working without tunneling, the agent relies on a tunneling bridge,
or br-tun, and the well known integration bridge, or br-int.

All VM VIFs are plugged into the integration bridge. VM VIFs on a given
virtual network share a common "local" VLAN (i.e. not propagated
externally). The VLAN id of this local VLAN is mapped to the physical
networking details realizing that virtual network.

For virtual networks realized as VXLAN/GRE tunnels, a Logical Switch
(LS) identifier is used to differentiate tenant traffic on inter-HV
tunnels. A mesh of tunnels is created to other Hypervisors in the
cloud. These tunnels originate and terminate on the tunneling bridge
of each hypervisor, leaving br-int unaffected. Port patching is done
to connect local VLANs on the integration bridge to inter-hypervisor
tunnels on the tunnel bridge.

For each virtual network realized as a VLAN or flat network, a veth
or a pair of patch ports is used to connect the local VLAN on
the integration bridge with the physical network bridge, with flow
rules adding, modifying, or stripping VLAN tags as necessary, thus
preserving backward compatibility with the way the OVS agent used
to work prior to the tunneling capability (for more details, please
look at https://review.openstack.org/#/c/4367).

Bear in mind, that this design decision may be overhauled in the
future to support existing VLAN-tagged traffic (coming from NFV VMs
for instance) and/or to deal with potential QinQ support natively
available in the Open vSwitch.

Further Reading
---------------



+ 7
- 7
doc/source/devref/security_group_api.rst View File

@@ -10,7 +10,7 @@ API Extension
The API extension is the 'front' end portion of the code, which handles defining a `REST-ful API`_, which is used by tenants.


.. _`REST-ful API`: https://github.com/openstack/neutron/blob/master/neutron/extensions/securitygroup.py
.. _`REST-ful API`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/extensions/securitygroup.py


Database API
@@ -18,7 +18,7 @@ Database API

The Security Group API extension adds a number of `methods to the database layer`_ of Neutron

.. _`methods to the database layer`: https://github.com/openstack/neutron/blob/master/neutron/db/securitygroups_db.py
.. _`methods to the database layer`: https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/securitygroups_db.py

Agent RPC
---------
@@ -27,12 +27,12 @@ This portion of the code handles processing requests from tenants, after they ha
running on the compute nodes, and modifying the IPTables rules on each hypervisor.


* `Plugin RPC classes <https://github.com/openstack/neutron/blob/master/neutron/db/securitygroups_rpc_base.py>`_
* `Plugin RPC classes <https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/securitygroups_rpc_base.py>`_

* `SecurityGroupServerRpcMixin <https://github.com/openstack/neutron/blob/master/neutron/db/securitygroups_rpc_base.py#39>`_ - defines the RPC API that the plugin uses to communicate with the agents running on the compute nodes
* `SecurityGroupServerRpcMixin <https://git.openstack.org/cgit/openstack/neutron/tree/neutron/db/securitygroups_rpc_base.py#39>`_ - defines the RPC API that the plugin uses to communicate with the agents running on the compute nodes
* SecurityGroupServerRpcMixin - Defines the API methods used to fetch data from the database, in order to return responses to agents via the RPC API

* `Agent RPC classes <https://github.com/openstack/neutron/blob/master/neutron/agent/securitygroups_rpc.py>`_
* `Agent RPC classes <https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/securitygroups_rpc.py>`_

* The SecurityGroupServerRpcApi defines the API methods that can be called by agents, back to the plugin that runs on the Neutron controller
* The SecurityGroupAgentRpcCallbackMixin defines methods that a plugin uses to call back to an agent after performing an action called by an agent.
@@ -43,8 +43,8 @@ IPTables Driver

* ``prepare_port_filter`` takes a ``port`` argument, which is a ``dictionary`` object that contains information about the port - including the ``security_group_rules``

* ``prepare_port_filter`` `appends the port to an internal dictionary <https://github.com/openstack/neutron/blob/master/neutron/agent/linux/iptables_firewall.py#L60>`_, ``filtered_ports`` which is used to track the internal state.
* ``prepare_port_filter`` `appends the port to an internal dictionary <https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/linux/iptables_firewall.py#L60>`_, ``filtered_ports`` which is used to track the internal state.

* Each security group has a `chain <http://www.thegeekstuff.com/2011/01/iptables-fundamentals/>`_ in Iptables.

* The ``IptablesFirewallDriver`` has a method to `convert security group rules into iptables statements <https://github.com/openstack/neutron/blob/master/neutron/agent/linux/iptables_firewall.py#L248>`_
* The ``IptablesFirewallDriver`` has a method to `convert security group rules into iptables statements <https://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/linux/iptables_firewall.py#L248>`_

+ 50
- 38
doc/source/devref/sub_projects.rst View File

@@ -56,24 +56,14 @@ The official source of all repositories that exist under the Neutron project is:

http://governance.openstack.org/reference/projects/neutron.html

The sub-projects are also listed here for convenience and as a place to provide
some additional metadata about them:

+-------------------------------+-----------------------+
| Name | Functionality |
+===============================+=======================+
| | |
+-------------------------------+-----------------------+

Affiliated projects
===================

Affiliated projects are related to Neutron in some way, but are not official
sub-projects of Neutron.

This table shows the unofficial affiliated projects that integrate with Neutron,
in one form or another. These projects typically leverage the pluggable
This table shows the affiliated projects that integrate with Neutron,
in one form or another. These projects typically leverage the pluggable
capabilities of Neutron, the Neutron API, or a combination of both.
This list may contain projects that are already listed in the governance
repo but are summarized here to describe the functionality they provide.

+-------------------------------+-----------------------+
| Name | Functionality |
@@ -92,6 +82,8 @@ capabilities of Neutron, the Neutron API, or a combination of both.
+-------------------------------+-----------------------+
| networking-brocade_ | ml2,l3 |
+-------------------------------+-----------------------+
| networking-cisco_ | core,ml2,l3,fw,vpn |
+-------------------------------+-----------------------+
| networking-edge-vpn_ | vpn |
+-------------------------------+-----------------------+
| networking-hyperv_ | ml2 |
@@ -124,6 +116,8 @@ capabilities of Neutron, the Neutron API, or a combination of both.
+-------------------------------+-----------------------+
| neutron-powervm_ | ml2 |
+-------------------------------+-----------------------+
| networking-sfc_ | service composition |
+-------------------------------+-----------------------+
| networking-vsphere_ | ml2 |
+-------------------------------+-----------------------+
| vmware-nsx_ | core |
@@ -148,7 +142,7 @@ Functionality legend
Arista
------

* Git: https://github.com/stackforge/networking-arista
* Git: https://git.openstack.org/cgit/stackforge/networking-arista
* Launchpad: https://launchpad.net/networking-arista
* Pypi: https://pypi.python.org/pypi/networking-arista

@@ -157,7 +151,7 @@ Arista
BaGPipe
-------

* Git: https://github.com/stackforge/networking-bagpipe-l2
* Git: https://git.openstack.org/cgit/stackforge/networking-bagpipe-l2
* Launchpad: https://launchpad.net/bagpipe-l2
* Pypi: https://pypi.python.org/pypi/bagpipe-l2

@@ -166,14 +160,14 @@ BaGPipe
BGPVPN
-------

* Git: https://github.com/stackforge/networking-bgpvpn
* Git: https://git.openstack.org/cgit/openstack/networking-bgpvpn

.. _networking-bigswitch:

Big Switch Networks
-------------------

* Git: https://git.openstack.org/stackforge/networking-bigswitch
* Git: https://git.openstack.org/cgit/stackforge/networking-bigswitch
* Pypi: https://pypi.python.org/pypi/bsnstacklib

.. _networking-brocade:
@@ -181,14 +175,25 @@ Big Switch Networks
Brocade
-------

* Git: https://github.com/stackforge/networking-brocade
* Git: https://git.openstack.org/cgit/stackforge/networking-brocade
* Launchpad: https://launchpad.net/networking-brocade
* PyPI: https://pypi.python.org/pypi/networking-brocade

.. _networking-cisco:

Cisco
-----

* Git: https://git.openstack.org/cgit/stackforge/networking-cisco
* Launchpad: https://launchpad.net/networking-cisco
* PyPI: https://pypi.python.org/pypi/networking-cisco

.. _dragonflow:

DragonFlow
----------

* Git: https://github.com/stackforge/dragonflow
* Git: https://git.openstack.org/cgit/openstack/dragonflow
* Launchpad: https://launchpad.net/dragonflow
* PyPi: https://pypi.python.org/pypi/DragonFlow

@@ -197,7 +202,7 @@ DragonFlow
Edge VPN
--------

* Git: https://git.openstack.org/stackforge/networking-edge-vpn
* Git: https://git.openstack.org/cgit/stackforge/networking-edge-vpn
* Launchpad: https://launchpad.net/edge-vpn

.. _networking-hyperv:
@@ -205,7 +210,7 @@ Edge VPN
Hyper-V
-------

* Git: https://github.com/stackforge/networking-hyperv
* Git: https://git.openstack.org/cgit/stackforge/networking-hyperv
* Launchpad: https://launchpad.net/networking-hyperv
* PyPi: https://pypi.python.org/pypi/networking-hyperv

@@ -214,7 +219,7 @@ Hyper-V
Group Based Policy
------------------

* Git: https://github.com/stackforge/group-based-policy
* Git: https://git.openstack.org/cgit/stackforge/group-based-policy
* Launchpad: https://launchpad.net/group-based-policy
* PyPi: https://pypi.python.org/pypi/group-based-policy

@@ -223,7 +228,7 @@ Group Based Policy
IBM SDNVE
---------

* Git: https://github.com/stackforge/networking-ibm
* Git: https://git.openstack.org/cgit/stackforge/networking-ibm
* Launchpad: https://launchpad.net/networking-ibm

.. _networking-l2gw:
@@ -231,7 +236,7 @@ IBM SDNVE
L2 Gateway
----------

* Git: https://github.com/stackforge/networking-l2gw
* Git: https://git.openstack.org/cgit/openstack/networking-l2gw
* Launchpad: https://launchpad.net/networking-l2gw

.. _networking-metaplugin:
@@ -246,7 +251,7 @@ Metaplugin
MidoNet
-------

* Git: https://github.com/stackforge/networking-midonet
* Git: https://git.openstack.org/cgit/openstack/networking-midonet
* Launchpad: https://launchpad.net/networking-midonet
* PyPI: https://pypi.python.org/pypi/networking-midonet

@@ -255,7 +260,7 @@ MidoNet
Mellanox
--------

* Git: https://github.com/stackforge/networking-mlnx
* Git: https://git.openstack.org/cgit/stackforge/networking-mlnx
* Launchpad: https://launchpad.net/networking-mlnx

.. _networking-nec:
@@ -263,7 +268,7 @@ Mellanox
NEC
---

* Git: https://github.com/stackforge/networking-nec
* Git: https://git.openstack.org/cgit/stackforge/networking-nec
* Launchpad: https://launchpad.net/networking-nec
* PyPI: https://pypi.python.org/pypi/networking-nec

@@ -279,7 +284,7 @@ Nuage
OpenDayLight
------------

* Git: https://github.com/stackforge/networking-odl
* Git: https://git.openstack.org/cgit/openstack/networking-odl
* Launchpad: https://launchpad.net/networking-odl

.. _networking-ofagent:
@@ -287,7 +292,7 @@ OpenDayLight
OpenFlow Agent (ofagent)
------------------------

* Git: https://github.com/stackforge/networking-ofagent
* Git: https://git.openstack.org/cgit/openstack/networking-ofagent
* Launchpad: https://launchpad.net/networking-ofagent
* PyPI: https://pypi.python.org/pypi/networking-ofagent

@@ -296,7 +301,7 @@ OpenFlow Agent (ofagent)
Open Virtual Network
--------------------

* Git: https://github.com/stackforge/networking-ovn
* Git: https://git.openstack.org/cgit/openstack/networking-ovn
* Launchpad: https://launchpad.net/networking-ovn
* PyPI: https://pypi.python.org/pypi/networking-ovn

@@ -305,7 +310,7 @@ Open Virtual Network
Open DPDK
---------

* Git: https://github.com/stackforge/networking-ovs-dpdk
* Git: https://git.openstack.org/cgit/stackforge/networking-ovs-dpdk
* Launchpad: https://launchpad.net/networking-ovs-dpdk

.. _networking-plumgrid:
@@ -313,7 +318,7 @@ Open DPDK
PLUMgrid
--------

* Git: https://github.com/stackforge/networking-plumgrid
* Git: https://git.openstack.org/cgit/stackforge/networking-plumgrid
* Launchpad: https://launchpad.net/networking-plumgrid
* PyPI: https://pypi.python.org/pypi/networking-plumgrid

@@ -322,7 +327,7 @@ PLUMgrid
PowerVM
-------

* Git: https://github.com/stackforge/neutron-powervm
* Git: https://git.openstack.org/cgit/stackforge/neutron-powervm
* Launchpad: https://launchpad.net/neutron-powervm
* PyPI: https://pypi.python.org/pypi/neutron-powervm

@@ -331,15 +336,22 @@ PowerVM
PortForwarding
--------------

* Git: https://github.com/stackforge/networking-portforwarding
* Git: https://git.openstack.org/cgit/stackforge/networking-portforwarding
* Launchpad: https://launchpad.net/networking-portforwarding

.. _networking-sfc:

SFC
---

* Git: https://git.openstack.org/cgit/openstack/networking-sfc

.. _networking-vsphere:

vSphere
-------

* Git: https://github.com/stackforge/networking-vsphere
* Git: https://git.openstack.org/cgit/stackforge/networking-vsphere
* Launchpad: https://launchpad.net/networking-vsphere

.. _vmware-nsx:
@@ -347,7 +359,7 @@ vSphere
VMware NSX
----------

* Git: https://github.com/stackforge/vmware-nsx
* Git: https://git.openstack.org/cgit/openstack/vmware-nsx
* Launchpad: https://launchpad.net/vmware-nsx
* PyPI: https://pypi.python.org/pypi/vmware-nsx

@@ -356,5 +368,5 @@ VMware NSX
Octavia
-------

* Git: https://github.com/stackforge/octavia
* Git: https://git.openstack.org/cgit/openstack/octavia
* Launchpad: https://launchpad.net/octavia

+ 0
- 14
doc/source/docbkx/docbkx-example/README View File

@@ -1,14 +0,0 @@
README

This docbkx-example folder is provided for those who want to use the maven mojo supplied with the project to build their own documents to PDF and HTML (webhelp) format. It's intended to be a template and model.

You can edit the src/docbkx/example.xml file using vi, emacs, or another DocBook editor. At Rackspace we use Oxygen. Both Oxygen and XML Mind offer free licenses to those working on open source project documentation.

To build the output, install Apache Maven (https://maven.apache.org/) and then run:

mvn clean generate-sources

in the directory containing the pom.xml file.

Feel free to ask questions of the openstack-docs team at https://launchpad.net/~openstack-doc.


+ 0
- 38
doc/source/docbkx/docbkx-example/pom.xml View File

@@ -1,38 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my-groupid</groupId>
<artifactId>my-guide</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>OpenStack stand alone documentation examples</name>

<build>
<plugins>
<plugin>
<groupId>com.agilejava.docbkx</groupId>
<artifactId>docbkx-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate-pdf</goal>
<goal>generate-webhelp</goal>
</goals>
<phase>generate-sources</phase>
</execution>
</executions>
<configuration>
<xincludeSupported>true</xincludeSupported>
<chunkSectionDepth>100</chunkSectionDepth>
<postProcess>
<copy todir="target/docbkx/webhelp/example/content/figures">
<fileset dir="src/docbkx/figures">
<include name="**/*.png" />
</fileset>
</copy>
</postProcess>
</configuration>
</plugin>
</plugins>
</build>

</project>

+ 0
- 318
doc/source/docbkx/docbkx-example/src/docbkx/example.xml View File

@@ -1,318 +0,0 @@
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:svg="http://www.w3.org/2000/svg"
xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:html="http://www.w3.org/1999/xhtml" version="5.0" status="DRAFT">
<title>Maven Example Documentation</title>
<info>
<author>
<personname>
<firstname/>
<surname/>
</personname>
<affiliation>
<orgname>Badges! We don't need any stinking badges!</orgname>
</affiliation>
</author>
<copyright>
<year>2011</year>
<holder>Timothy D. Witham</holder>
</copyright>
<releaseinfo>Example v0.1</releaseinfo>
<productname>Product Name Doesn't Exist - it's an example!™</productname>
<pubdate>2011-01-01</pubdate>
<legalnotice role="rs-api">
<annotation>
<remark>Copyright details are filled in by the template. Change the value of the role
attribute on the legalnotice element to change the license. </remark>
</annotation>
</legalnotice>
<abstract>
<para> This document is intended for individuals who whish to produce documentation using Maven and having
the same "feel" as the documentation that is produced by the mainline OpenStack projects.
</para>
</abstract>
<cover>
<para>this is a placeholder for the front cover</para>
</cover>
<cover>
<para>this is a placeholder for the back cover</para>
</cover>
</info>
<chapter>
<title>Overview</title>
<para>Welcome to the getting started with Maven documentation. Congratulations you have
successfully downloaded and built the example.
</para>
<para>For more details on the Product Name service, please refer to <link
xlink:href="http://www.rackspacecloud.com/cloud_hosting_products/files"
>http://www.rackspacecloud.com/cloud_hosting_products/product name</link>
</para>
<para>We welcome feedback, comments, and bug reports at <link
xlink:href="mailto:support@rackspacecloud.com">support@rackspacecloud.com</link>. </para>
<section>
<title>Intended Audience</title>
<para>This guide is intended to individuals who want to develop standalone documentation
to use within an OpenStack deployment. Using this tool chain will give you the look and
feel of the mainline OpenStack documentation.
</para>
</section>
<section>
<title>Document Change History</title>
<para>This version of the Maven Getting Started Guide replaces and obsoletes all previous versions. The
most recent changes are described in the table below:</para>
<informaltable rules="all">
<thead>
<tr>
<td align="center" colspan="1">Revision Date</td>
<td align="center" colspan="4">Summary of Changes</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="1" align="center">July. 14, 2011</td>
<td colspan="4">
<itemizedlist spacing="compact">
<listitem>
<para>Initial document creation.</para>
</listitem>
</itemizedlist>
</td>
</tr>
</tbody>
</informaltable>
</section>
<section>
<title>Additional Resources</title>
<itemizedlist spacing="compact">
<listitem>
<para>
<link xlink:href="http://www.openstack.org">
Openstack - Cloud Software
</link>
</para>
</listitem>
<listitem>
<para>
<link xlink:href="http://www.docbook.org">
Docbook Main Web Site
</link>
</para>
</listitem>
<listitem>
<para>
<link xlink:href="http://docbook.org/tdg/en/html/quickref.html">
Docbook Quick Reference
</link>
</para>
</listitem>
</itemizedlist>
</section>
</chapter>
<chapter>
<title>Concepts</title>
<para>
Need to put something here.
</para>
</chapter>
<chapter>
<title>How do I?</title>
<section>
<title>Notes and including images</title>
<para>So I want an note and an image in this section ...</para>
<note>
<para>This is an example of a note. </para>
</note>
<para>Here's a sample figure in svg and png formats:</para>
<figure xml:id="CFinterfaces">
<title>Sample Image</title>
<mediaobject>
<imageobject role="fo">
<imagedata fileref="figures/example.svg" contentwidth="5in"/>
</imageobject>
<imageobject role="html">
<imagedata fileref="figures/example.png"/>
</imageobject>
</mediaobject>
</figure>
</section>
<section>
<title>Multiple Related Documents</title>
<para>
What you need to do in order to have multiple documents fit within the
build structure.
</para>
</section>
<section>
<title>Using multiple files for a document</title>
<para>
What you need to do in order to have a single document that is made up of multiple
files.
</para>
</section>
<section>
<title>Who, What, Where, When and Why of pom.xml</title>
<para>
You will of noticed the <emphasis>pom.xml</emphasis> file at the root directory.
This file is used to set the project parameters for the documentation. Including
what type of documentation to produce and any post processing that needs to happen.
If you want to know more about
<link
xlink:href="http://www.openstack.org">
pom.xml - need a link
</link>
then follow the link.
</para>
<para> For the <emphasis>pom.xml</emphasis>file that was included in this distribution we will
parse the individual lines and explaine the meaning.
</para>
<para>
<programlisting language="xml"> <xi:include href="../../pom.xml" parse="text" /></programlisting>
</para>
<section>
<title> &lt;project&gt; </title>
<para>
What is all of this stuff and why is it important?
</para>
</section>
<section>
<title> &lt;modelVersion&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;groupId&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;artifactId&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;version&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;packaging&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;name&gt; </title>
<para>
Name of your document.
</para>
</section>
<section>
<title> &lt;build&gt; </title>
<para>
Make some documents.
</para>
<section>
<title> &lt;plugin(s)&gt; </title>
<para>
What does this do and why?
</para>
<section>
<title> &lt;groupId&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;artifactId&gt; </title>
<para>
What goes in here and why?
</para>
</section>
<section>
<title> &lt;execution(s)&gt; </title>
<para>
What goes in here and why?
</para>
<section>
<title> &lt;goal(s)&gt; </title>
<para>
Different types of goals and why you use them.
</para>
</section>
<section>
<title> &lt;phase&gt; </title>
<para>
What does this section do? What phases can you specify.
</para>
</section>
</section>
<section>
<title> &lt;configuration&gt; </title>
<para>
What does this section do?
</para>
<section>
<title> &lt;xincludeSupported&gt; </title>
<para>
What does this do and why?
</para>
</section>
<section>
<title> &lt;chunkSectionDepth&gt; </title>
<para>
What does this do and why?
</para>
</section>
<section>
<title> &lt;postprocess&gt; </title>
<para>
What does this section do? What are possible pieces?
</para>
<section>
<title> &lt;copy&gt; </title>
<para>
What does this section do? What are possible pieces?
</para>
<section>
<title> &lt;fileset&gt; </title>
<para>
What does this section do? What are possible pieces?
</para>
<section>
<title> &lt;include&gt; </title>
<para>
What does this section do? What are possible pieces?
</para>
</section>
</section>
</section>
</section>
</section>
</section>
</section>
</section>
<section>
<title>Who, What, Where, When and Why of build.xml</title>
<para>
You will of noticed the <emphasis>build.xml</emphasis> file at the root directory.
This file is used to set the project parameters for the documentation. Including
what type of documentation to produce and any post processing that needs to happen.
If you want to know more about
<link
xlink:href="http://www.openstack.org">
pom.xml - need a link
</link>
then follow the link.
</para>
</section>
</chapter>
<chapter>
<title>Troubleshooting</title>
<para>Sometimes things go wrong...</para>
</chapter>
</book>

+ 0
- 79
doc/source/docbkx/docbkx-example/src/docbkx/figures/example.sdx View File

@@ -1,79 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram>
<source><![CDATA[bfs:BFS[a]
/queue:FIFO
someNode:Node
node:Node
adjList:List
adj:Node

bfs:queue.new
bfs:someNode.setLevel(0)
bfs:queue.insert(someNode)
[c:loop while queue != ()]
bfs:node=queue.remove()
bfs:level=node.getLevel()
bfs:adjList=node.getAdjacentNodes()
[c:loop 0 <= i < #adjList]
bfs:adj=adjList.get(i)
bfs:nodeLevel=adj.getLevel()
[c:alt nodeLevel IS NOT defined]
bfs:adj.setLevel(level+1)
bfs:queue.insert(adj)
--[else]
bfs:nothing to do
[/c]
[/c]
[/c]
bfs:queue.destroy()]]></source>
<configuration>
<property name="actorWidth" value="25"/>
<property name="allowMessageProperties" value="false"/>
<property name="arrowSize" value="6"/>
<property name="colorizeThreads" value="true"/>
<property name="destructorWidth" value="30"/>
<property family="Dialog" name="font" size="12" style="0"/>
<property name="fragmentMargin" value="8"/>
<property name="fragmentPadding" value="10"/>
<property name="fragmentTextPadding" value="3"/>
<property name="glue" value="10"/>
<property name="headHeight" value="35"/>
<property name="headLabelPadding" value="5"/>
<property name="headWidth" value="100"/>
<property name="initialSpace" value="10"/>
<property name="leftMargin" value="5"/>
<property name="lineWrap" value="false"/>
<property name="lowerMargin" value="5"/>
<property name="mainLifelineWidth" value="8"/>
<property name="messageLabelSpace" value="3"/>
<property name="messagePadding" value="6"/>
<property name="noteMargin" value="6"/>
<property name="notePadding" value="6"/>
<property name="opaqueMessageText" value="false"/>
<property name="returnArrowVisible" value="true"/>
<property name="rightMargin" value="5"/>
<property name="selfMessageHorizontalSpace" value="15"/>
<property name="separatorBottomMargin" value="8"/>
<property name="separatorTopMargin" value="15"/>
<property name="shouldShadowParticipants" value="true"/>
<property name="spaceBeforeActivation" value="2"/>
<property name="spaceBeforeAnswerToSelf" value="10"/>
<property name="spaceBeforeConstruction" value="6"/>
<property name="spaceBeforeSelfMessage" value="7"/>
<property name="subLifelineWidth" value="6"/>
<property name="tc0" value="-1118482"/>
<property name="tc1" value="-256"/>
<property name="tc2" value="-65536"/>
<property name="tc3" value="-16776961"/>
<property name="tc4" value="-16711936"/>
<property name="tc5" value="-4144960"/>
<property name="tc6" value="-65281"/>
<property name="tc7" value="-14336"/>
<property name="tc8" value="-20561"/>
<property name="tc9" value="-12566464"/>
<property name="threadNumbersVisible" value="false"/>
<property name="threaded" value="true"/>
<property name="upperMargin" value="5"/>
<property name="verticallySplit" value="true"/>
</configuration>
</diagram>

+ 0
- 523
doc/source/docbkx/docbkx-example/src/docbkx/figures/example.svg
File diff suppressed because it is too large
View File


+ 0
- 112
doc/source/docbkx/quantum-api-1.0/common.ent View File

@@ -1,112 +0,0 @@

<!--
A collection of common faults, these are pretty much expected
in every request.
-->
<!ENTITY commonFaults
'
<response xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:computeFault"/>
<representation mediaType="application/json"/>
</response>
<response status="503" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:serviceUnavailable"/>
<representation mediaType="application/json"/>
</response>
<response status="401" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:unauthorized"/>
<representation mediaType="application/json"/>
</response>
<response status="403" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:forbidden"/>
<representation mediaType="application/json"/>
</response>
<response status="400" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:badRequest"/>
<representation mediaType="application/json"/>
</response>
<response status="405" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:badMethod"/>
<representation mediaType="application/json"/>
</response>
<response status="413" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:overLimit"/>
<representation mediaType="application/json"/>
</response>
'>
<!--
Faults on GET
-->
<!ENTITY getFaults
'
<response status="404" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:itemNotFound"/>
<representation mediaType="application/json"/>
</response>
'>
<!--
Faults on POST/PUT
-->
<!ENTITY postPutFaults
'
<response status="415" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:badMediaType"/>
<representation mediaType="application/json"/>
</response>
'>
<!--
Faults that can occur when we are building servers or images.
-->
<!ENTITY buildFaults
'
<response status="503" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:serverCapacityUnavailable"/>
<representation mediaType="application/json"/>
</response>
'>
<!--
Holds build in progress which occurs when an operation fails
because the server is in the process of being built.
-->
<!ENTITY inProgressFault
'
<response status="409" xmlns="http://wadl.dev.java.net/2009/02">
<representation mediaType="application/xml" element="osapi:buildInProgress"/>
<representation mediaType="application/json"/>
</response>
'>

<!-- Image List Parameters -->

<!ENTITY imageListParameters
'
<param xmlns="http://wadl.dev.java.net/2009/02" name="changes-since" style="query" required="false" type="xsd:dateTime"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="server" style="query" required="false" type="xsd:anyURI"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="name" style="query" required="false" type="xsd:string"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="status" style="query" required="false" type="osapi:ImageStatus"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="type" style="query" required="false" type="xsd:string" default="ALL">
<option value="BASE"/>
<option value="SERVER"/>
<option value="ALL"/>
</param>
'>

<!-- Server List Parameters -->

<!ENTITY serverListParameters
'
<param xmlns="http://wadl.dev.java.net/2009/02" name="changes-since" style="query" required="false" type="xsd:dateTime"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="image" style="query" required="false" type="xsd:anyURI"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="flavor" style="query" required="false" type="xsd:anyURI"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="name" style="query" required="false" type="xsd:string"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="status" style="query" required="false" type="osapi:ServerStatus"/>
'>

<!-- Flavor List Parameters -->

<!ENTITY flavorListParameters
'
<param xmlns="http://wadl.dev.java.net/2009/02" name="changes-since" style="query" required="false" type="xsd:dateTime"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="minDisk" style="query" required="false" type="xsd:int"/>
<param xmlns="http://wadl.dev.java.net/2009/02" name="minRam" style="query" required="false" type="xsd:int"/>
'>

+ 0
- 70
doc/source/docbkx/quantum-api-1.0/figures/Arrow_east.svg View File

@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg:svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="13.895596"
height="6.3500013"
viewBox="0 0 13.895595 6.3500013"
id="svg2868"
xml:space="preserve"
inkscape:version="0.48.0 r9654"
sodipodi:docname="Arrow_east.svg"><svg:metadata
id="metadata3857"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></svg:metadata><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1131"
inkscape:window-height="740"
id="namedview3855"
showgrid="false"
inkscape:zoom="11.313708"
inkscape:cx="8.6182271"
inkscape:cy="-2.2709277"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2868"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" /><svg:defs
id="defs2874" />
<namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
pageopacity="0.0"
pageshadow="2"
window-width="640"
window-height="541"
zoom="0.34493828"
cx="372.04722"
cy="256.66814"
window-x="75"
window-y="152"
current-layer="svg2033">
</namedview>
<svg:g
transform="matrix(-0.01540104,0,0,-0.01741068,13.895596,6.3500014)"
id="Ebene_1">
<svg:polygon
points="902.25049,222.98633 233.17773,222.98633 233.17773,364.71875 0,182.35938 233.17773,0 233.17773,141.73242 902.25049,141.73242 902.25049,222.98633 "
id="path2050" />
</svg:g>
</svg:svg>

+ 0
- 60
doc/source/docbkx/quantum-api-1.0/figures/Check_mark_23x20_02.svg View File

@@ -1,60 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="19.21315"
height="18.294994"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45"
sodipodi:modified="true"
version="1.0">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="17.757032"
inkscape:cy="7.298821"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="984"
inkscape:window-height="852"
inkscape:window-x="148"
inkscape:window-y="66" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-192.905,-516.02064)">
<path
style="fill:#000000"
d="M 197.67968,534.31563 C 197.40468,534.31208 196.21788,532.53719 195.04234,530.37143 L 192.905,526.43368 L 193.45901,525.87968 C 193.76371,525.57497 194.58269,525.32567 195.27896,525.32567 L 196.5449,525.32567 L 197.18129,527.33076 L 197.81768,529.33584 L 202.88215,523.79451 C 205.66761,520.74678 208.88522,517.75085 210.03239,517.13691 L 212.11815,516.02064 L 207.90871,520.80282 C 205.59351,523.43302 202.45735,527.55085 200.93947,529.95355 C 199.42159,532.35625 197.95468,534.31919 197.67968,534.31563 z "
id="path2223" />
</g>
</svg>

+ 0
- 337
doc/source/docbkx/quantum-api-1.0/js/shjs/sh_java.js View File

@@ -1,337 +0,0 @@
if (! this.sh_languages) {
this.sh_languages = {};
}
sh_languages['java'] = [
[
[
/\b(?:import|package)\b/g,
'sh_preproc',
-1
],
[
/\/\/\//g,
'sh_comment',
1
],
[
/\/\//g,
'sh_comment',
7
],
[
/\/\*\*/g,
'sh_comment',
8
],
[
/\/\*/g,
'sh_comment',
9
],
[
/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,
'sh_number',
-1
],
[
/"/g,
'sh_string',
10
],
[
/'/g,
'sh_string',
11
],
[
/(\b(?:class|interface))([ \t]+)([$A-Za-z0-9_]+)/g,
['sh_keyword', 'sh_normal', 'sh_classname'],
-1
],
[
/\b(?:abstract|assert|break|case|catch|class|const|continue|default|do|else|extends|false|final|finally|for|goto|if|implements|instanceof|interface|native|new|null|private|protected|public|return|static|strictfp|super|switch|synchronized|throw|throws|true|this|transient|try|volatile|while)\b/g,
'sh_keyword',
-1
],
[
/\b(?:int|byte|boolean|char|long|float|double|short|void)\b/g,
'sh_type',
-1
],
[
/~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,
'sh_symbol',
-1
],
[
/\{|\}/g,
'sh_cbracket',
-1
],
[
/(?:[A-Za-z]|_)[A-Za-z0-9_]*(?=[ \t]*\()/g,
'sh_function',
-1
],
[
/([A-Za-z](?:[^`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\s]|[_])*)((?:<.*>)?)(\s+(?=[*&]*[A-Za-z][^`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\s]*\s*[`~!@#$%&*()_=+{}|;:",<.>\/?'\\[\]\^\-\[\]]+))/g,
['sh_usertype', 'sh_usertype', 'sh_normal'],
-1
]
],
[
[
/$/g,
null,
-2
],
[
/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,
'sh_url',
-1
],
[
/<\?xml/g,
'sh_preproc',
2,
1
],
[
/<!DOCTYPE/g,
'sh_preproc',
4,
1
],
[
/<!--/g,
'sh_comment',
5
],
[
/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)(?:\/)?>/g,
'sh_keyword',
-1
],
[
/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,
'sh_keyword',
6,
1
],
[
/&(?:[A-Za-z0-9]+);/g,
'sh_preproc',
-1
],
[
/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,
'sh_keyword',
-1
],
[
/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,
'sh_keyword',
6,
1
],
[
/@[A-Za-z]+/g,
'sh_type',
-1
],
[
/(?:TODO|FIXME|BUG)(?:[:]?)/g,
'sh_todo',
-1
]
],
[
[
/\?>/g,
'sh_preproc',
-2
],
[
/([^=" \t>]+)([ \t]*)(=?)/g,
['sh_type', 'sh_normal', 'sh_symbol'],
-1
],
[
/"/g,
'sh_string',
3
]
],
[
[
/\\(?:\\|")/g,
null,
-1
],
[
/"/g,
'sh_string',
-2
]
],
[
[
/>/g,
'sh_preproc',
-2
],
[
/([^=" \t>]+)([ \t]*)(=?)/g,
['sh_type', 'sh_normal', 'sh_symbol'],
-1
],
[
/"/g,
'sh_string',
3
]
],
[
[
/-->/g,
'sh_comment',
-2
],
[
/<!--/g,
'sh_comment',
5
]
],
[
[
/(?:\/)?>/g,
'sh_keyword',
-2
],
[
/([^=" \t>]+)([ \t]*)(=?)/g,
['sh_type', 'sh_normal', 'sh_symbol'],
-1
],
[
/"/g,
'sh_string',
3
]
],
[
[
/$/g,
null,
-2
]
],
[
[
/\*\//g,
'sh_comment',
-2
],
[
/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,
'sh_url',
-1
],
[
/<\?xml/g,
'sh_preproc',
2,
1
],
[
/<!DOCTYPE/g,
'sh_preproc',
4,
1
],
[
/<!--/g,
'sh_comment',
5
],
[
/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)(?:\/)?>/g,
'sh_keyword',
-1
],
[
/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,
'sh_keyword',
6,
1
],
[
/&(?:[A-Za-z0-9]+);/g,
'sh_preproc',
-1
],
[
/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,
'sh_keyword',
-1
],
[
/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,
'sh_keyword',
6,
1
],
[
/@[A-Za-z]+/g,
'sh_type',
-1
],
[
/(?:TODO|FIXME|BUG)(?:[:]?)/g,
'sh_todo',
-1
]
],
[
[
/\*\//g,
'sh_comment',
-2
],
[
/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,
'sh_url',
-1
],
[
/(?:TODO|FIXME|BUG)(?:[:]?)/g,
'sh_todo',
-1
]
],
[
[
/"/g,
'sh_string',
-2
],
[
/\\./g,
'sh_specialchar',
-1
]
],
[
[
/'/g,
'sh_string',
-2
],
[
/\\./g,
'sh_specialchar',
-1
]
]
];

+ 0
- 347
doc/source/docbkx/quantum-api-1.0/js/shjs/sh_javascript.js View File

@@ -1,347 +0,0 @@
if (! this.sh_languages) {
this.sh_languages = {};
}
sh_languages['javascript'] = [
[
[
/\/\/\//g,
'sh_comment',
1
],
[
/\/\//g,
'sh_comment',
7
],
[
/\/\*\*/g,
'sh_comment',
8
],
[
/\/\*/g,
'sh_comment',
9
],
[
/\b(?:abstract|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|final|finally|for|function|goto|if|implements|in|instanceof|interface|native|new|null|private|protected|prototype|public|return|static|super|switch|synchronized|throw|throws|this|transient|true|try|typeof|var|volatile|while|with)\b/g,
'sh_keyword',
-1
],
[
/(\+\+|--|\)|\])(\s*)(\/=?(?![*\/]))/g,
['sh_symbol', 'sh_normal', 'sh_symbol'],
-1
],
[
/(0x[A-Fa-f0-9]+|(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?)(\s*)(\/(?![*\/]))/g,
['sh_number', 'sh_normal', 'sh_symbol'],
-1
],
[
/([A-Za-z$_][A-Za-z0-9$_]*\s*)(\/=?(?![*\/]))/g,
['sh_normal', 'sh_symbol'],
-1
],
[
/\/(?:\\.|[^*\\\/])(?:\\.|[^\\\/])*\/[gim]*/g,
'sh_regexp',
-1
],
[
/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,
'sh_number',
-1
],
[
/"/g,
'sh_string',
10
],
[
/'/g,
'sh_string',
11
],
[
/~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,
'sh_symbol',
-1
],
[
/\{|\}/g,
'sh_cbracket',
-1
],
[
/\b(?:Math|Infinity|NaN|undefined|arguments)\b/g,
'sh_predef_var',
-1
],
[
/\b(?:Array|Boolean|Date|Error|EvalError|Function|Number|Object|RangeError|ReferenceError|RegExp|String|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt)\b/g,
'sh_predef_func',
-1
],
[
/(?:[A-Za-z]|_)[A-Za-z0-9_]*(?=[ \t]*\()/g,
'sh_function',
-1
]
],
[
[
/$/g,
null,
-2
],
[
/(?:<?)[A-Za-z0-9_\.\/\-_~]+@[A-Za-z0-9_\.\/\-_~]+(?:>?)|(?:<?)[A-Za-z0-9_]+:\/\/[A-Za-z0-9_\.\/\-_~]+(?:>?)/g,
'sh_url',
-1
],
[
/<\?xml/g,
'sh_preproc',
2,
1
],
[
/<!DOCTYPE/g,
'sh_preproc',
4,
1
],
[
/<!--/g,
'sh_comment',
5
],
[
/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)(?:\/)?>/g,
'sh_keyword',
-1
],
[
/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,
'sh_keyword',
6,
1
],
[
/&(?:[A-Za-z0-9]+);/g,
'sh_preproc',
-1
],
[
/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,
'sh_keyword',
-1
],
[
/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,
'sh_keyword',
6,
1
],
[
/@[A-Za-z]+/g,
'sh_type',
-1
],
[
/(?:TODO|FIXME|BUG)(?:[:]?)/g,
'sh_todo',
-1
]
],
[
[
/\?>/g,
'sh_preproc',
-2
],
[
/([^=" \t>]+)([ \t]*)(=?)/g,
['sh_type', 'sh_normal', 'sh_symbol'],
-1
],
[
/"/g,
'sh_string',
3
]
],
[
[
/\\(?:\\|")/g,
null,
-1
],
[
/"/g,
'sh_string',
-2
]
],
[
[
/>/g,
'sh_preproc',
-2
],
[
/([^=" \t>]+)([ \t]*)(=?)/g,
['sh_type', 'sh_normal', 'sh_symbol'],
-1
],
[
/"/g,
'sh_string',
3
]
],
[
[