fix Maven Archetype doc
[docs.git] / docs / developer-guide / of-config-developer-guide.rst
1 .. _ofconfig-dev-guide:
2
3 OF-CONFIG Developer Guide
4 =========================
5
6 Overview
7 --------
8
9 OF-CONFIG defines an OpenFlow switch as an abstraction called an
10 OpenFlow Logical Switch. The OF-CONFIG protocol enables configuration of
11 essential artifacts of an OpenFlow Logical Switch so that an OpenFlow
12 controller can communicate and control the OpenFlow Logical switch via
13 the OpenFlow protocol. OF-CONFIG introduces an operating context for one
14 or more OpenFlow data paths called an OpenFlow Capable Switch for one or
15 more switches. An OpenFlow Capable Switch is intended to be equivalent
16 to an actual physical or virtual network element (e.g. an Ethernet
17 switch) which is hosting one or more OpenFlow data paths by partitioning
18 a set of OpenFlow related resources such as ports and queues among the
19 hosted OpenFlow data paths. The OF-CONFIG protocol enables dynamic
20 association of the OpenFlow related resources of an OpenFlow Capable
21 Switch with specific OpenFlow Logical Switches which are being hosted on
22 the OpenFlow Capable Switch. OF-CONFIG does not specify or report how
23 the partitioning of resources on an OpenFlow Capable Switch is achieved.
24 OF-CONFIG assumes that resources such as ports and queues are
25 partitioned amongst multiple OpenFlow Logical Switches such that each
26 OpenFlow Logical Switch can assume full control over the resources that
27 is assigned to it.
28
29 How to start
30 ------------
31
32 -  start OF-CONFIG feature as below:
33
34    ::
35
36        feature:install odl-of-config-all
37
38 Compatible with NETCONF
39 -----------------------
40
41 -  Config OpenFlow Capable Switch via OpenFlow Configuration Points
42
43    Method: POST
44
45    URI:
46    http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/controller-config/yang-ext:mount/config:modules
47
48    Headers: Content-Type" and "Accept" header attributes set to
49    application/xml
50
51    Payload:
52
53    .. code:: xml
54
55        <module xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
56          <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">prefix:sal-netconf-connector</type>
57          <name>testtool</name>
58          <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">10.74.151.67</address>
59          <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">830</port>
60          <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">mininet</username>
61          <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">mininet</password>
62          <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only>
63          <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
64            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type>
65            <name>global-event-executor</name>
66          </event-executor>
67          <binding-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
68            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type>
69            <name>binding-osgi-broker</name>
70          </binding-registry>
71          <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
72            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
73            <name>dom-broker</name>
74          </dom-registry>
75          <client-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
76            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type>
77            <name>global-netconf-dispatcher</name>
78          </client-dispatcher>
79          <processing-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
80            <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:threadpool</type>
81            <name>global-netconf-processing-executor</name>
82          </processing-executor>
83        </module>
84
85 -  NETCONF establishes the connections with OpenFlow Capable Switches
86    using the parameters in the previous step. NETCONF also gets the
87    information of whether the OpenFlow Switch supports NETCONF during
88    the signal handshaking. The information will be stored in the NETCONF
89    topology as prosperity of a node.
90
91 -  OF-CONFIG can be aware of the switches accessing and leaving by
92    monitoring the data changes in the NETCONF topology. For the detailed
93    information it can be refered to the
94    `implementation <https://git.opendaylight.org/gerrit/gitweb?p=of-config.git;a=blob_plain;f=southbound/southbound-impl/src/main/java/org/opendaylight/ofconfig/southbound/impl/OdlOfconfigApiServiceImpl.java;hb=refs/heads/stable/boron>`__.
95
96 The establishment of OF-CONFIG topology
97 ---------------------------------------
98
99 Firstly, OF-CONFIG will check whether the newly accessed switch supports
100 OF-CONFIG by querying the NETCONF interface.
101
102 1. During the NETCONF connection’s establishment, the NETCONF and the
103    switches will exchange the their capabilities via the "hello"
104    message.
105
106 2. OF-CONFIG gets the connection information between the NETCONF and
107    switches by monitoring the data changes via the interface of
108    DataChangeListener.
109
110 3. After the NETCONF connection established, the OF-CONFIG module will
111    check whether OF-CONFIG capability is in the switch’s capabilities
112    list which is got in step 1.
113
114 4. If the result of step 3 is yes, the OF-CONFIG will call the following
115    processing steps to create the topology database.
116
117 For the detailed information it can be referred to the
118 `implementation <https://git.opendaylight.org/gerrit/gitweb?p=of-config.git;a=blob_plain;f=southbound/southbound-impl/src/main/java/org/opendaylight/ofconfig/southbound/impl/listener/OfconfigListenerHelper.java;hb=refs/heads/stable/boron>`__.
119
120 Secondly, the capable switch node and logical switch node are added in
121 the OF-CONFIG topology if the switch supports OF-CONFIG.
122
123 OF-CONFIG’s topology compromise: Capable Switch topology (underlay) and
124 logical Switch topology (overlay). Both of them are enhanced (augment)
125 on
126
127 /topo:network-topology/topo:topology/topo:node
128
129 The NETCONF will add the nodes in the Topology via the path of
130 "/topo:network-topology/topo:topology/topo:node" if it gets the
131 configuration information of the switches.
132
133 For the detailed information it can be referred to the
134 `implementation <https://git.opendaylight.org/gerrit/gitweb?p=of-config.git;a=blob;f=southbound/southbound-api/src/main/yang/odl-ofconfig-topology.yang;h=dbdaec46ee59da3791386011f571d7434dd1e416;hb=refs/heads/stable/boron>`__.
135