Migrate TTP dev docs to rst 92/44192/2
authorColin Dixon <colin@colindixon.com>
Wed, 17 Aug 2016 18:16:26 +0000 (14:16 -0400)
committerColin Dixon <colin@colindixon.com>
Wed, 17 Aug 2016 19:09:13 +0000 (19:09 +0000)
Change-Id: Iedd3bd9ee274adbd674698c836f204af813859c4
Signed-off-by: Colin Dixon <colin@colindixon.com>
docs/developer-guide/images/ttp-screen1-basic-auth.png [new file with mode: 0644]
docs/developer-guide/images/ttp-screen2-applied-basic-auth.png [new file with mode: 0644]
docs/developer-guide/images/ttp-screen3-sent-put.png [new file with mode: 0644]
docs/developer-guide/images/ttp-screen4-get-json.png [new file with mode: 0644]
docs/developer-guide/images/ttp-screen5-get-xml.png [new file with mode: 0644]
docs/developer-guide/ttp-cli-tools-developer-guide.rst [new file with mode: 0644]
docs/developer-guide/ttp-model-developer-guide.rst [new file with mode: 0644]
manuals/developer-guide/src/main/asciidoc/ttp/ttp-cli-tools-dev.adoc
manuals/developer-guide/src/main/asciidoc/ttp/ttp-model-dev.adoc

diff --git a/docs/developer-guide/images/ttp-screen1-basic-auth.png b/docs/developer-guide/images/ttp-screen1-basic-auth.png
new file mode 100644 (file)
index 0000000..6714e7c
Binary files /dev/null and b/docs/developer-guide/images/ttp-screen1-basic-auth.png differ
diff --git a/docs/developer-guide/images/ttp-screen2-applied-basic-auth.png b/docs/developer-guide/images/ttp-screen2-applied-basic-auth.png
new file mode 100644 (file)
index 0000000..b97546f
Binary files /dev/null and b/docs/developer-guide/images/ttp-screen2-applied-basic-auth.png differ
diff --git a/docs/developer-guide/images/ttp-screen3-sent-put.png b/docs/developer-guide/images/ttp-screen3-sent-put.png
new file mode 100644 (file)
index 0000000..1667d64
Binary files /dev/null and b/docs/developer-guide/images/ttp-screen3-sent-put.png differ
diff --git a/docs/developer-guide/images/ttp-screen4-get-json.png b/docs/developer-guide/images/ttp-screen4-get-json.png
new file mode 100644 (file)
index 0000000..f2ceaf1
Binary files /dev/null and b/docs/developer-guide/images/ttp-screen4-get-json.png differ
diff --git a/docs/developer-guide/images/ttp-screen5-get-xml.png b/docs/developer-guide/images/ttp-screen5-get-xml.png
new file mode 100644 (file)
index 0000000..eaadc2d
Binary files /dev/null and b/docs/developer-guide/images/ttp-screen5-get-xml.png differ
diff --git a/docs/developer-guide/ttp-cli-tools-developer-guide.rst b/docs/developer-guide/ttp-cli-tools-developer-guide.rst
new file mode 100644 (file)
index 0000000..6a6c3d6
--- /dev/null
@@ -0,0 +1,31 @@
+TTP CLI Tools Developer Guide
+=============================
+
+Overview
+--------
+
+Table Type Patterns are a specification developed by the `Open
+Networking Foundation <https://www.opennetworking.org/>`__ to enable the
+description and negotiation of subsets of the OpenFlow protocol. This is
+particularly useful for hardware switches that support OpenFlow as it
+enables the to describe what features they do (and thus also what
+features they do not) support. More details can be found in the full
+specification listed on the `OpenFlow specifications
+page <https://www.opennetworking.org/sdn-resources/onf-specifications/openflow>`__.
+
+The TTP CLI Tools provide a way for people interested in TTPs to read
+in, validate, output, and manipulate TTPs as a self-contained,
+executable jar file.
+
+TTP CLI Tools Architecture
+--------------------------
+
+The TTP CLI Tools use the TTP Model and the YANG Tools/RESTCONF codecs
+to translate between the Data Transfer Objects (DTOs) and JSON/XML.
+
+Command Line Options
+--------------------
+
+This will cover the various options for the CLI Tools. For now, there
+are no options and it merely outputs fixed data using the codecs.
+
diff --git a/docs/developer-guide/ttp-model-developer-guide.rst b/docs/developer-guide/ttp-model-developer-guide.rst
new file mode 100644 (file)
index 0000000..390e6fc
--- /dev/null
@@ -0,0 +1,531 @@
+TTP Model Developer Guide
+=========================
+
+Overview
+--------
+
+Table Type Patterns are a specification developed by the `Open
+Networking Foundation <https://www.opennetworking.org/>`__ to enable the
+description and negotiation of subsets of the OpenFlow protocol. This is
+particularly useful for hardware switches that support OpenFlow as it
+enables the to describe what features they do (and thus also what
+features they do not) support. More details can be found in the full
+specification listed on the `OpenFlow specifications
+page <https://www.opennetworking.org/sdn-resources/onf-specifications/openflow>`__.
+
+TTP Model Architecture
+----------------------
+
+The TTP Model provides a YANG-modeled type for a TTP and allows them to
+be associated with a master list of known TTPs, as well as active and
+supported TTPs with nodes in the MD-SAL inventory model.
+
+Key APIs and Interfaces
+-----------------------
+
+The key API provided by the TTP Model feature is the ability to store a
+set of TTPs in the MD-SAL as well as associate zero or one active TTPs
+and zero or more supported TTPs along with a given node in the MD-SAL
+inventory model.
+
+API Reference Documentation
+---------------------------
+
+RESTCONF
+~~~~~~~~
+
+See the generated RESTCONF API documentation at:
+http://localhost:8181/apidoc/explorer/index.html
+
+Look for the onf-ttp module to expand and see the various RESTCONF APIs.
+
+Java Bindings
+~~~~~~~~~~~~~
+
+As stated above there are 3 locations where a Table Type Pattern can be
+placed into the MD-SAL Data Store. They correspond to 3 different REST
+API URIs:
+
+1. ``restconf/config/onf-ttp:opendaylight-ttps/onf-ttp:table-type-patterns/``
+
+2. ``restconf/config/opendaylight-inventory:nodes/node/{id}/ttp-inventory-node:active_ttp/``
+
+3. ``restconf/config/opendaylight-inventory:nodes/node/{id}/ttp-inventory-node:supported_ttps/``
+
+.. note::
+
+    Typically, these URIs are running on the machine the controller is
+    on at port 8181. If you are on the same machine they can thus be
+    accessed at ``http://localhost:8181/<uri>``
+
+Using the TTP Model RESTCONF APIs
+---------------------------------
+
+Setting REST HTTP Headers
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Authentication
+^^^^^^^^^^^^^^
+
+The REST API calls require authentication by default. The default method
+is to use basic auth with a user name and password of ‘admin’.
+
+Content-Type and Accept
+^^^^^^^^^^^^^^^^^^^^^^^
+
+RESTCONF supports both xml and json. This example focuses on JSON, but
+xml can be used just as easily. When doing a PUT or POST be sure to
+specify the appropriate ``Conetnt-Type`` header: either
+``application/json`` or ``application/xml``.
+
+When doing a GET be sure to specify the appropriate ``Accept`` header:
+again, either ``application/json`` or ``application/xml``.
+
+Content
+~~~~~~~
+
+The contents of a PUT or POST should be a OpenDaylight Table Type
+Pattern. An example of one is provided below. The example can also be
+found at ```parser/sample-TTP-from-tests.ttp`` in the TTP git
+repository <https://git.opendaylight.org/gerrit/gitweb?p=ttp.git;a=blob;f=parser/sample-TTP-from-tests.ttp;h=45130949b25c6f86b750959d27d04ec2208935fb;hb=HEAD>`__.
+
+**Sample Table Type Pattern (json).**
+
+::
+
+    {
+        "table-type-patterns": {
+            "table-type-pattern": [
+                {
+                    "security": {
+                        "doc": [
+                            "This TTP is not published for use by ONF. It is an example and for",
+                            "illustrative purposes only.",
+                            "If this TTP were published for use it would include",
+                            "guidance as to any security considerations in this doc member."
+                        ]
+                    },
+                    "NDM_metadata": {
+                        "authority": "org.opennetworking.fawg",
+                        "OF_protocol_version": "1.3.3",
+                        "version": "1.0.0",
+                        "type": "TTPv1",
+                        "doc": [
+                            "Example of a TTP supporting L2 (unicast, multicast, flooding), L3 (unicast only),",
+                            "and an ACL table."
+                        ],
+                        "name": "L2-L3-ACLs"
+                    },
+                    "identifiers": [
+                        {
+                            "doc": [
+                                "The VLAN ID of a locally attached L2 subnet on a Router."
+                            ],
+                            "var": "<subnet_VID>"
+                        },
+                        {
+                            "doc": [
+                                "An OpenFlow group identifier (integer) identifying a group table entry",
+                                "of the type indicated by the variable name"
+                            ],
+                            "var": "<<group_entry_types/name>>"
+                        }
+                    ],
+                    "features": [
+                        {
+                            "doc": [
+                                "Flow entry notification Extension – notification of changes in flow entries"
+                            ],
+                            "feature": "ext187"
+                        },
+                        {
+                            "doc": [
+                                "Group notifications Extension – notification of changes in group or meter entries"
+                            ],
+                            "feature": "ext235"
+                        }
+                    ],
+                    "meter_table": {
+                        "meter_types": [
+                            {
+                                "name": "ControllerMeterType",
+                                "bands": [
+                                    {
+                                        "type": "DROP",
+                                        "rate": "1000..10000",
+                                        "burst": "50..200"
+                                    }
+                                ]
+                            },
+                            {
+                                "name": "TrafficMeter",
+                                "bands": [
+                                    {
+                                        "type": "DSCP_REMARK",
+                                        "rate": "10000..500000",
+                                        "burst": "50..500"
+                                    },
+                                    {
+                                        "type": "DROP",
+                                        "rate": "10000..500000",
+                                        "burst": "50..500"
+                                    }
+                                ]
+                            }
+                        ],
+                        "built_in_meters": [
+                            {
+                                "name": "ControllerMeter",
+                                "meter_id": 1,
+                                "type": "ControllerMeterType",
+                                "bands": [
+                                    {
+                                        "rate": 2000,
+                                        "burst": 75
+                                    }
+                                ]
+                            },
+                            {
+                                "name": "AllArpMeter",
+                                "meter_id": 2,
+                                "type": "ControllerMeterType",
+                                "bands": [
+                                    {
+                                        "rate": 1000,
+                                        "burst": 50
+                                    }
+                                ]
+                            }
+                        ]
+                    },
+                    "table_map": [
+                        {
+                            "name": "ControlFrame",
+                            "number": 0
+                        },
+                        {
+                            "name": "IngressVLAN",
+                            "number": 10
+                        },
+                        {
+                            "name": "MacLearning",
+                            "number": 20
+                        },
+                        {
+                            "name": "ACL",
+                            "number": 30
+                        },
+                        {
+                            "name": "L2",
+                            "number": 40
+                        },
+                        {
+                            "name": "ProtoFilter",
+                            "number": 50
+                        },
+                        {
+                            "name": "IPv4",
+                            "number": 60
+                        },
+                        {
+                            "name": "IPv6",
+                            "number": 80
+                        }
+                    ],
+                    "parameters": [
+                        {
+                            "doc": [
+                                "documentation"
+                            ],
+                            "name": "Showing-curt-how-this-works",
+                            "type": "type1"
+                        }
+                    ],
+                    "flow_tables": [
+                        {
+                            "doc": [
+                                "Filters L2 control reserved destination addresses and",
+                                "may forward control packets to the controller.",
+                                "Directs all other packets to the Ingress VLAN table."
+                            ],
+                            "name": "ControlFrame",
+                            "flow_mod_types": [
+                                {
+                                    "doc": [
+                                        "This match/action pair allows for flow_mods that match on either",
+                                        "ETH_TYPE or ETH_DST (or both) and send the packet to the",
+                                        "controller, subject to metering."
+                                    ],
+                                    "name": "Frame-To-Controller",
+                                    "match_set": [
+                                        {
+                                            "field": "ETH_TYPE",
+                                            "match_type": "all_or_exact"
+                                        },
+                                        {
+                                            "field": "ETH_DST",
+                                            "match_type": "exact"
+                                        }
+                                    ],
+                                    "instruction_set": [
+                                        {
+                                            "doc": [
+                                                "This meter may be used to limit the rate of PACKET_IN frames",
+                                                "sent to the controller"
+                                            ],
+                                            "instruction": "METER",
+                                            "meter_name": "ControllerMeter"
+                                        },
+                                        {
+                                            "instruction": "APPLY_ACTIONS",
+                                            "actions": [
+                                                {
+                                                    "action": "OUTPUT",
+                                                    "port": "CONTROLLER"
+                                                }
+                                            ]
+                                        }
+                                    ]
+                                }
+                            ],
+                            "built_in_flow_mods": [
+                                {
+                                    "doc": [
+                                        "Mandatory filtering of control frames with C-VLAN Bridge reserved DA."
+                                    ],
+                                    "name": "Control-Frame-Filter",
+                                    "priority": "1",
+                                    "match_set": [
+                                        {
+                                            "field": "ETH_DST",
+                                            "mask": "0xfffffffffff0",
+                                            "value": "0x0180C2000000"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "doc": [
+                                        "Mandatory miss flow_mod, sends packets to IngressVLAN table."
+                                    ],
+                                    "name": "Non-Control-Frame",
+                                    "priority": "0",
+                                    "instruction_set": [
+                                        {
+                                            "instruction": "GOTO_TABLE",
+                                            "table": "IngressVLAN"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ],
+                    "group_entry_types": [
+                        {
+                            "doc": [
+                                "Output to a port, removing VLAN tag if needed.",
+                                "Entry per port, plus entry per untagged VID per port."
+                            ],
+                            "name": "EgressPort",
+                            "group_type": "INDIRECT",
+                            "bucket_types": [
+                                {
+                                    "name": "OutputTagged",
+                                    "action_set": [
+                                        {
+                                            "action": "OUTPUT",
+                                            "port": "<port_no>"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "name": "OutputUntagged",
+                                    "action_set": [
+                                        {
+                                            "action": "POP_VLAN"
+                                        },
+                                        {
+                                            "action": "OUTPUT",
+                                            "port": "<port_no>"
+                                        }
+                                    ]
+                                },
+                                {
+                                    "opt_tag": "VID-X",
+                                    "name": "OutputVIDTranslate",
+                                    "action_set": [
+                                        {
+                                            "action": "SET_FIELD",
+                                            "field": "VLAN_VID",
+                                            "value": "<local_vid>"
+                                        },
+                                        {
+                                            "action": "OUTPUT",
+                                            "port": "<port_no>"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ],
+                    "flow_paths": [
+                        {
+                            "doc": [
+                                "This object contains just a few examples of flow paths, it is not",
+                                "a comprehensive list of the flow paths required for this TTP.  It is",
+                                "intended that the flow paths array could include either a list of",
+                                "required flow paths or a list of specific flow paths that are not",
+                                "required (whichever is more concise or more useful."
+                            ],
+                            "name": "L2-2",
+                            "path": [
+                                "Non-Control-Frame",
+                                "IV-pass",
+                                "Known-MAC",
+                                "ACLskip",
+                                "L2-Unicast",
+                                "EgressPort"
+                            ]
+                        },
+                        {
+                            "name": "L2-3",
+                            "path": [
+                                "Non-Control-Frame",
+                                "IV-pass",
+                                "Known-MAC",
+                                "ACLskip",
+                                "L2-Multicast",
+                                "L2Mcast",
+                                "[EgressPort]"
+                            ]
+                        },
+                        {
+                            "name": "L2-4",
+                            "path": [
+                                "Non-Control-Frame",
+                                "IV-pass",
+                                "Known-MAC",
+                                "ACL-skip",
+                                "VID-flood",
+                                "VIDflood",
+                                "[EgressPort]"
+                            ]
+                        },
+                        {
+                            "name": "L2-5",
+                            "path": [
+                                "Non-Control-Frame",
+                                "IV-pass",
+                                "Known-MAC",
+                                "ACLskip",
+                                "L2-Drop"
+                            ]
+                        },
+                        {
+                            "name": "v4-1",
+                            "path": [
+                                "Non-Control-Frame",
+                                "IV-pass",
+                                "Known-MAC",
+                                "ACLskip",
+                                "L2-Router-MAC",
+                                "IPv4",
+                                "v4-Unicast",
+                                "NextHop",
+                                "EgressPort"
+                            ]
+                        },
+                        {
+                            "name": "v4-2",
+                            "path": [
+                                "Non-Control-Frame",
+                                "IV-pass",
+                                "Known-MAC",
+                                "ACLskip",
+                                "L2-Router-MAC",
+                                "IPv4",
+                                "v4-Unicast-ECMP",
+                                "L3ECMP",
+                                "NextHop",
+                                "EgressPort"
+                            ]
+                        }
+                    ]
+                }
+            ]
+        }
+    }
+
+Making a REST Call
+~~~~~~~~~~~~~~~~~~
+
+In this example we’ll do a PUT to install the sample TTP from above into
+OpenDaylight and then retrieve it both as json and as xml. We’ll use the
+`Postman - REST
+Client <https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm>`__
+for Chrome in the examples, but any method of accessing REST should
+work.
+
+First, we’ll fill in the basic information:
+
+.. figure:: ./images/ttp-screen1-basic-auth.png
+   :alt: Filling in URL, content, Content-Type and basic auth
+
+   Filling in URL, content, Content-Type and basic auth
+
+1. Set the URL to
+   ``http://localhost:8181/restconf/config/onf-ttp:opendaylight-ttps/onf-ttp:table-type-patterns/``
+
+2. Set the action to ``PUT``
+
+3. Click Headers and
+
+4. Set a header for ``Content-Type`` to ``application/json``
+
+5. Make sure the content is set to raw and
+
+6. Copy the sample TTP from above into the content
+
+7. Click the Basic Auth tab and
+
+8. Set the username and password to admin
+
+9. Click Refresh headers
+
+.. figure:: ./images/ttp-screen2-applied-basic-auth.png
+   :alt: Refreshing basic auth headers
+
+   Refreshing basic auth headers
+
+After clicking Refresh headers, we can see that a new header
+(``Authorization``) has been created and this will allow us to
+authenticate to make the REST call.
+
+.. figure:: ./images/ttp-screen3-sent-put.png
+   :alt: PUTting a TTP
+
+   PUTting a TTP
+
+At this point, clicking send should result in a Status response of ``200
+OK`` indicating we’ve successfully PUT the TTP into OpenDaylight.
+
+.. figure:: ./images/ttp-screen4-get-json.png
+   :alt: Retrieving the TTP as json via a GET
+
+   Retrieving the TTP as json via a GET
+
+We can now retrieve the TTP by:
+
+1. Changing the action to ``GET``
+
+2. Setting an ``Accept`` header to ``application/json`` and
+
+3. Pressing send
+
+.. figure:: ./images/ttp-screen5-get-xml.png
+   :alt: Retrieving the TTP as xml via a GET
+
+   Retrieving the TTP as xml via a GET
+
+The same process can retrieve the content as xml by setting the
+``Accept`` header to ``application/xml``.
+
index fee9b28107682563a768f8116a59b129d2abf8ef..243c133a7194a10eefe3fc91b17e9be82bc7f448 100644 (file)
@@ -1,46 +1,3 @@
 == TTP CLI Tools Developer Guide
 
-=== Overview
-Table Type Patterns are a specification developed by the
-https://www.opennetworking.org/[Open Networking Foundation] to enable
-the description and negotiation of subsets of the OpenFlow protocol.
-This is particularly useful for hardware switches that support OpenFlow
-as it enables the to describe what features they do (and thus also what
-features they do not) support. More details can be found in the full
-specification listed on the
-https://www.opennetworking.org/sdn-resources/onf-specifications/openflow[OpenFlow
-specifications page].
-
-The TTP CLI Tools provide a way for people interested in TTPs to read
-in, validate, output, and manipulate TTPs as a self-contained,
-executable jar file.
-
-=== TTP CLI Tools Architecture
-The TTP CLI Tools use the TTP Model and the YANG Tools/RESTCONF codecs
-to translate between the Data Transfer Objects (DTOs) and JSON/XML.
-
-=== Command Line Options
-This will cover the various options for the CLI Tools. For now, there
-are no options and it merely outputs fixed data using the codecs.
-
-// The CLI tools don't have an APIs in the common sense.
-//
-// === Key APIs and Interfaces
-// Document the key things a user would want to use. For some features,
-// there will only be one logical grouping of APIs. For others there may be
-// more than one grouping.
-//
-// Assuming the API is MD-SAL- and YANG-based, the APIs will be available
-// both via RESTCONF and via Java APIs. Giving a few examples using each is
-// likely a good idea.
-//
-// ==== API Group 1
-// Provide a description of what the API does and some examples of how to
-// use it.
-//
-// ==== API Group 2
-// Provide a description of what the API does and some examples of how to
-// use it.
-//
-// === API Reference Documentation
-// Provide links to JavaDoc, REST API documentation, etc.
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/developer-guide/ttp-cli-tools-developer-guide.html
index 084215be1404dd66502ab15d226f4a7f46812080..1b9528b60b3075d254f97bde675d5e88664ee648 100644 (file)
@@ -1,492 +1,3 @@
 == TTP Model Developer Guide
 
-=== Overview
-Table Type Patterns are a specification developed by the
-https://www.opennetworking.org/[Open Networking Foundation] to enable
-the description and negotiation of subsets of the OpenFlow protocol.
-This is particularly useful for hardware switches that support OpenFlow
-as it enables the to describe what features they do (and thus also what
-features they do not) support. More details can be found in the full
-specification listed on the
-https://www.opennetworking.org/sdn-resources/onf-specifications/openflow[OpenFlow
-specifications page].
-
-=== TTP Model Architecture
-The TTP Model provides a YANG-modeled type for a TTP and allows them
-to be associated with a master list of known TTPs, as well as active
-and supported TTPs with nodes in the MD-SAL inventory model.
-
-=== Key APIs and Interfaces
-The key API provided by the TTP Model feature is the ability to store
-a set of TTPs in the MD-SAL as well as associate zero or one active
-TTPs and zero or more supported TTPs along with a given node in the
-MD-SAL inventory model.
-
-=== API Reference Documentation
-
-==== RESTCONF
-See the generated RESTCONF API documentation at:
-http://localhost:8181/apidoc/explorer/index.html
-
-Look for the onf-ttp module to expand and see the various RESTCONF
-APIs.
-
-==== Java Bindings
-
-//TODO: Provide a link to JavaDoc.
-
-As stated above there are 3 locations where a Table Type Pattern can be
-placed into the MD-SAL Data Store. They correspond to 3 different REST
-API URIs:
-
-. +restconf/config/onf-ttp:opendaylight-ttps/onf-ttp:table-type-patterns/+
-. +restconf/config/opendaylight-inventory:nodes/node/{id}/ttp-inventory-node:active_ttp/+
-. +restconf/config/opendaylight-inventory:nodes/node/{id}/ttp-inventory-node:supported_ttps/+
-
-[NOTE]
-===============================
-Typically, these URIs are running on the machine the controller is on
-at port 8181. If you are on the same machine they can thus be accessed
-at +http://localhost:8181/<uri>+
-===============================
-
-=== Using the TTP Model RESTCONF APIs
-
-==== Setting REST HTTP Headers
-
-===== Authentication
-
-The REST API calls require authentication by default. The default
-method is to use basic auth with a user name and password of `admin'.
-
-===== Content-Type and Accept
-
-RESTCONF supports both xml and json. This example focuses on JSON, but
-xml can be used just as easily. When doing a PUT or POST be sure to
-specify the appropriate +Conetnt-Type+ header: either
-+application/json+ or +application/xml+.
-
-When doing a GET be sure to specify the appropriate +Accept+ header:
-again, either +application/json+ or +application/xml+.
-
-==== Content
-
-The contents of a PUT or POST should be a OpenDaylight Table Type
-Pattern. An example of one is provided below. The example can also be
-found at https://git.opendaylight.org/gerrit/gitweb?p=ttp.git;a=blob;f=parser/sample-TTP-from-tests.ttp;h=45130949b25c6f86b750959d27d04ec2208935fb;hb=HEAD[+parser/sample-TTP-from-tests.ttp+ in the TTP git repository].
-
-.Sample Table Type Pattern (json)
------------------------------------------------------
-{
-    "table-type-patterns": {
-        "table-type-pattern": [
-            {
-                "security": {
-                    "doc": [
-                        "This TTP is not published for use by ONF. It is an example and for",
-                        "illustrative purposes only.",
-                        "If this TTP were published for use it would include",
-                        "guidance as to any security considerations in this doc member."
-                    ]
-                },
-                "NDM_metadata": {
-                    "authority": "org.opennetworking.fawg",
-                    "OF_protocol_version": "1.3.3",
-                    "version": "1.0.0",
-                    "type": "TTPv1",
-                    "doc": [
-                        "Example of a TTP supporting L2 (unicast, multicast, flooding), L3 (unicast only),",
-                        "and an ACL table."
-                    ],
-                    "name": "L2-L3-ACLs"
-                },
-                "identifiers": [
-                    {
-                        "doc": [
-                            "The VLAN ID of a locally attached L2 subnet on a Router."
-                        ],
-                        "var": "<subnet_VID>"
-                    },
-                    {
-                        "doc": [
-                            "An OpenFlow group identifier (integer) identifying a group table entry",
-                            "of the type indicated by the variable name"
-                        ],
-                        "var": "<<group_entry_types/name>>"
-                    }
-                ],
-                "features": [
-                    {
-                        "doc": [
-                            "Flow entry notification Extension – notification of changes in flow entries"
-                        ],
-                        "feature": "ext187"
-                    },
-                    {
-                        "doc": [
-                            "Group notifications Extension – notification of changes in group or meter entries"
-                        ],
-                        "feature": "ext235"
-                    }
-                ],
-                "meter_table": {
-                    "meter_types": [
-                        {
-                            "name": "ControllerMeterType",
-                            "bands": [
-                                {
-                                    "type": "DROP",
-                                    "rate": "1000..10000",
-                                    "burst": "50..200"
-                                }
-                            ]
-                        },
-                        {
-                            "name": "TrafficMeter",
-                            "bands": [
-                                {
-                                    "type": "DSCP_REMARK",
-                                    "rate": "10000..500000",
-                                    "burst": "50..500"
-                                },
-                                {
-                                    "type": "DROP",
-                                    "rate": "10000..500000",
-                                    "burst": "50..500"
-                                }
-                            ]
-                        }
-                    ],
-                    "built_in_meters": [
-                        {
-                            "name": "ControllerMeter",
-                            "meter_id": 1,
-                            "type": "ControllerMeterType",
-                            "bands": [
-                                {
-                                    "rate": 2000,
-                                    "burst": 75
-                                }
-                            ]
-                        },
-                        {
-                            "name": "AllArpMeter",
-                            "meter_id": 2,
-                            "type": "ControllerMeterType",
-                            "bands": [
-                                {
-                                    "rate": 1000,
-                                    "burst": 50
-                                }
-                            ]
-                        }
-                    ]
-                },
-                "table_map": [
-                    {
-                        "name": "ControlFrame",
-                        "number": 0
-                    },
-                    {
-                        "name": "IngressVLAN",
-                        "number": 10
-                    },
-                    {
-                        "name": "MacLearning",
-                        "number": 20
-                    },
-                    {
-                        "name": "ACL",
-                        "number": 30
-                    },
-                    {
-                        "name": "L2",
-                        "number": 40
-                    },
-                    {
-                        "name": "ProtoFilter",
-                        "number": 50
-                    },
-                    {
-                        "name": "IPv4",
-                        "number": 60
-                    },
-                    {
-                        "name": "IPv6",
-                        "number": 80
-                    }
-                ],
-                "parameters": [
-                    {
-                        "doc": [
-                            "documentation"
-                        ],
-                        "name": "Showing-curt-how-this-works",
-                        "type": "type1"
-                    }
-                ],
-                "flow_tables": [
-                    {
-                        "doc": [
-                            "Filters L2 control reserved destination addresses and",
-                            "may forward control packets to the controller.",
-                            "Directs all other packets to the Ingress VLAN table."
-                        ],
-                        "name": "ControlFrame",
-                        "flow_mod_types": [
-                            {
-                                "doc": [
-                                    "This match/action pair allows for flow_mods that match on either",
-                                    "ETH_TYPE or ETH_DST (or both) and send the packet to the",
-                                    "controller, subject to metering."
-                                ],
-                                "name": "Frame-To-Controller",
-                                "match_set": [
-                                    {
-                                        "field": "ETH_TYPE",
-                                        "match_type": "all_or_exact"
-                                    },
-                                    {
-                                        "field": "ETH_DST",
-                                        "match_type": "exact"
-                                    }
-                                ],
-                                "instruction_set": [
-                                    {
-                                        "doc": [
-                                            "This meter may be used to limit the rate of PACKET_IN frames",
-                                            "sent to the controller"
-                                        ],
-                                        "instruction": "METER",
-                                        "meter_name": "ControllerMeter"
-                                    },
-                                    {
-                                        "instruction": "APPLY_ACTIONS",
-                                        "actions": [
-                                            {
-                                                "action": "OUTPUT",
-                                                "port": "CONTROLLER"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        ],
-                        "built_in_flow_mods": [
-                            {
-                                "doc": [
-                                    "Mandatory filtering of control frames with C-VLAN Bridge reserved DA."
-                                ],
-                                "name": "Control-Frame-Filter",
-                                "priority": "1",
-                                "match_set": [
-                                    {
-                                        "field": "ETH_DST",
-                                        "mask": "0xfffffffffff0",
-                                        "value": "0x0180C2000000"
-                                    }
-                                ]
-                            },
-                            {
-                                "doc": [
-                                    "Mandatory miss flow_mod, sends packets to IngressVLAN table."
-                                ],
-                                "name": "Non-Control-Frame",
-                                "priority": "0",
-                                "instruction_set": [
-                                    {
-                                        "instruction": "GOTO_TABLE",
-                                        "table": "IngressVLAN"
-                                    }
-                                ]
-                            }
-                        ]
-                    }
-                ],
-                "group_entry_types": [
-                    {
-                        "doc": [
-                            "Output to a port, removing VLAN tag if needed.",
-                            "Entry per port, plus entry per untagged VID per port."
-                        ],
-                        "name": "EgressPort",
-                        "group_type": "INDIRECT",
-                        "bucket_types": [
-                            {
-                                "name": "OutputTagged",
-                                "action_set": [
-                                    {
-                                        "action": "OUTPUT",
-                                        "port": "<port_no>"
-                                    }
-                                ]
-                            },
-                            {
-                                "name": "OutputUntagged",
-                                "action_set": [
-                                    {
-                                        "action": "POP_VLAN"
-                                    },
-                                    {
-                                        "action": "OUTPUT",
-                                        "port": "<port_no>"
-                                    }
-                                ]
-                            },
-                            {
-                                "opt_tag": "VID-X",
-                                "name": "OutputVIDTranslate",
-                                "action_set": [
-                                    {
-                                        "action": "SET_FIELD",
-                                        "field": "VLAN_VID",
-                                        "value": "<local_vid>"
-                                    },
-                                    {
-                                        "action": "OUTPUT",
-                                        "port": "<port_no>"
-                                    }
-                                ]
-                            }
-                        ]
-                    }
-                ],
-                "flow_paths": [
-                    {
-                        "doc": [
-                            "This object contains just a few examples of flow paths, it is not",
-                            "a comprehensive list of the flow paths required for this TTP.  It is",
-                            "intended that the flow paths array could include either a list of",
-                            "required flow paths or a list of specific flow paths that are not",
-                            "required (whichever is more concise or more useful."
-                        ],
-                        "name": "L2-2",
-                        "path": [
-                            "Non-Control-Frame",
-                            "IV-pass",
-                            "Known-MAC",
-                            "ACLskip",
-                            "L2-Unicast",
-                            "EgressPort"
-                        ]
-                    },
-                    {
-                        "name": "L2-3",
-                        "path": [
-                            "Non-Control-Frame",
-                            "IV-pass",
-                            "Known-MAC",
-                            "ACLskip",
-                            "L2-Multicast",
-                            "L2Mcast",
-                            "[EgressPort]"
-                        ]
-                    },
-                    {
-                        "name": "L2-4",
-                        "path": [
-                            "Non-Control-Frame",
-                            "IV-pass",
-                            "Known-MAC",
-                            "ACL-skip",
-                            "VID-flood",
-                            "VIDflood",
-                            "[EgressPort]"
-                        ]
-                    },
-                    {
-                        "name": "L2-5",
-                        "path": [
-                            "Non-Control-Frame",
-                            "IV-pass",
-                            "Known-MAC",
-                            "ACLskip",
-                            "L2-Drop"
-                        ]
-                    },
-                    {
-                        "name": "v4-1",
-                        "path": [
-                            "Non-Control-Frame",
-                            "IV-pass",
-                            "Known-MAC",
-                            "ACLskip",
-                            "L2-Router-MAC",
-                            "IPv4",
-                            "v4-Unicast",
-                            "NextHop",
-                            "EgressPort"
-                        ]
-                    },
-                    {
-                        "name": "v4-2",
-                        "path": [
-                            "Non-Control-Frame",
-                            "IV-pass",
-                            "Known-MAC",
-                            "ACLskip",
-                            "L2-Router-MAC",
-                            "IPv4",
-                            "v4-Unicast-ECMP",
-                            "L3ECMP",
-                            "NextHop",
-                            "EgressPort"
-                        ]
-                    }
-                ]
-            }
-        ]
-    }
-}
------------------------------------------------------
-
-==== Making a REST Call
-
-In this example we'll do a PUT to install the sample TTP from above
-into OpenDaylight and then retrieve it both as json and as xml. We'll
-use the https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm[
-Postman - REST Client] for Chrome in the examples, but any method of
-accessing REST should work.
-
-First, we'll fill in the basic information:
-
-.Filling in URL, content, Content-Type and basic auth
-image::ttp-screen1-basic-auth.png[width=500]
-
-. Set the URL to +http://localhost:8181/restconf/config/onf-ttp:opendaylight-ttps/onf-ttp:table-type-patterns/+
-. Set the action to +PUT+
-. Click Headers and
-. Set a header for +Content-Type+ to +application/json+
-. Make sure the content is set to raw and
-. Copy the sample TTP from above into the content
-. Click the Basic Auth tab and
-. Set the username and password to admin
-. Click Refresh headers
-
-.Refreshing basic auth headers
-image::ttp-screen2-applied-basic-auth.png[width=500]
-
-After clicking Refresh headers, we can see that a new header
-(+Authorization+) has been created and this will allow us to
-authenticate to make the REST call.
-
-.PUTting a TTP
-image::ttp-screen3-sent-put.png[width=500]
-
-At this point, clicking send should result in a Status response of +200
-OK+ indicating we've successfully PUT the TTP into OpenDaylight.
-
-.Retrieving the TTP as json via a GET
-image::ttp-screen4-get-json.png[width=500]
-
-We can now retrieve the TTP by:
-
-. Changing the action to +GET+
-. Setting an +Accept+ header to +application/json+ and
-. Pressing send
-
-.Retrieving the TTP as xml via a GET
-image::ttp-screen5-get-xml.png[width=500]
-
-The same process can retrieve the content as xml by setting the
-+Accept+ header to +application/xml+.
+This content has been migrated to: http://docs.opendaylight.org/en/stable-boron/developer-guide/ttp-model-developer-guide.html