Docs : Added mulitple test docs for the implemented and planned test
modules in CORD Tester.

Change-Id: I692f0d95463c28d011291f5af8758417a039a959
diff --git a/docs/modules/acl_test_plan.md b/docs/modules/acl_test_plan.md
new file mode 100644
index 0000000..14f01a9
--- /dev/null
+++ b/docs/modules/acl_test_plan.md
@@ -0,0 +1,375 @@
+**ACL  Test Plan**
+
+**ACL Test Cases (Implemented and Planned) : **
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>ACL_1</td>
+    <td>Test acl allow rule</td>
+    <td>test_acl_allow_rule</td>
+    <td>Configure ACL rule with allow action
+Verify ACL rule is being created on DUT</td>
+    <td>ACL rule has beed created on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_2</td>
+    <td>Test acl allow rule with 24 bit mask</td>
+    <td>test_acl_allow_rule_with_24_bit_mask</td>
+    <td>1.  Configure ACL rule with allow action and 24 bit mask
+2.  Verify ACL rule is being created on DUT</td>
+    <td>ACL rule has beed created on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_3</td>
+    <td>Test acl deny rule</td>
+    <td>test_acl_deny_rule</td>
+    <td>1.  Configure ACL rule with deny action
+2.  Verify ACL rule is being created on DUT</td>
+    <td>ACL rule has beed created on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_4</td>
+    <td>Test acl deny rule with 24 bit mask</td>
+    <td>test_acl_deny_rule_with_24_bit_mask</td>
+    <td>1.  Configure ACL rule with deny action and 24 bit mask
+2.  Verify ACL rule is being created on DUT</td>
+    <td>ACL rule has beed created on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_5</td>
+    <td>Test acl add remove rule</td>
+    <td>test_acl_add_remove_rule</td>
+    <td>1.  Configure ACL rule with any action
+2.  Verify ACL rule is being created on DUT
+3. Delete created ACL rule</td>
+    <td>ACL rule has been deleted on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_6</td>
+    <td>Test acl add removeall rules</td>
+    <td>test_acl_add_remove_all_rules</td>
+    <td>1.  Configure ACL rule with any action
+2.  Verify ACL rule is being created on DUT
+3. Delete created all ACL rule</td>
+    <td>All ACL rules has been deleted on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_7</td>
+    <td>Test acl remove all rules without add</td>
+    <td>test_acl_remove_all_rules_without_add</td>
+    <td>1. Delete all ACL rule with out create amy ACL rule</td>
+    <td>All ACL rule has been deleted on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_8</td>
+    <td>Test acl allow and deny rule for same src and dst ip</td>
+    <td>test_acl_allow_and_deny_rule_for_same_src_and_dst_ip</td>
+    <td>1.  Configure ACL rule with for same src and dst ip with action allow and deny
+2.  Verify ACL rule is not being created on DUT</td>
+    <td>ACL rule has not been created on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_9</td>
+    <td>Test acl allow rules for matched dst ips</td>
+    <td>test_acl_allow_rules_for_matched_dst_ips</td>
+    <td> Configure ACL rule with for dst ip where already matched ACL rule
+Verify ACL rule is not being created on DU</td>
+    <td>ACL rule has not been created on DUT</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_10</td>
+    <td>Test acl with matching src and dst ip traffic</td>
+    <td>test_acl_with_matching_src_and_dst_ip_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3.   Check with ACL rule matched traffic
+</td>
+    <td>ACL rule has been created on DUT and traffic is allowed</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_11</td>
+    <td>Test acl with matching 24bit mask src and  dst ip traffic</td>
+    <td>test_acl_with_matching_24bit_mask_src_and_dst_ip_traffic</td>
+    <td>1.  Configure ACL rule with allow action and 24 bit mask
+2.  Verify ACL rule is being created on DUT
+3.   Check with ACL rule matched traffic
+</td>
+    <td>ACL rule has been created on DUT and traffic is allowed</td>
+    <td>Not tested</td>
+  </tr>
+  <tr>
+    <td>ACL_12</td>
+    <td>Test acl with non matching src and dst ip traffic</td>
+    <td>test_acl_with_non_matching_src_and_dst_ip_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3.   Check with ACL rule non matched traffic
+</td>
+    <td>ACL rule has been created on DUT and traffic is not allowed </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_13</td>
+    <td>Test acl deny rule with matching src and dst ip traffic</td>
+    <td>test_acl_deny_rule_with_matching_src_and_dst_ip_traffic</td>
+    <td>1.  Configure ACL rule with deny action
+2.  Verify ACL rule is being created on DUT
+3.   Check with ACL rule matched traffic
+</td>
+    <td>ACL rule has been created on DUT and traffic is not  allowed</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_14</td>
+    <td>Test acl deny rule with src and dst ip apply ing 24 bit mask for matching traffic</td>
+    <td>test_acl_deny_rule_with_src_and_dst_ip_applying_24_bit_mask_for_matching_traffic</td>
+    <td>1.  Configure ACL rule with deny action and 24 bit mask
+2.  Verify ACL rule is being created on DUT
+3.   Check with ACL rule matched traffic
+</td>
+    <td>ACL rule has been created on DUT and traffic is not allowed</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_15</td>
+    <td>Test acl deny_rule with non matching src and dst ip traffic</td>
+    <td>test_acl_deny_rule_with_non_matching_src_and_dst_ip_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3.   Check with ACL rule non matched traffic
+</td>
+    <td>ACL rule has been created on DUT and traffic is not allowed </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_16</td>
+    <td>Test acl allow and deny rules with matching src and dst ip traffic</td>
+    <td>test_acl_allow_and_deny_rules_with_matching_src_and_dst_ip_traffic</td>
+    <td>1.  Configure ACL rules with allow and deny action
+2.  Verify ACL rules is being created on DUT
+3.   Check with ACL rules matched traffic
+</td>
+    <td>ACL rules has been created on DUT and matched traffic is allowed for allow action and deny for deny action.</td>
+    <td>Not tested</td>
+  </tr>
+  <tr>
+    <td>ACL_17</td>
+    <td>Test acl for l4 acl rule</td>
+    <td>test_acl_for_l4_acl_rule</td>
+    <td>1.  Configure ACL rule with L4 port and allow action
+2.  Verify ACL rule is being created on DUT
+</td>
+    <td>ACL rule has been created on DUT </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_18</td>
+    <td>Test acl for remove l4 rule</td>
+    <td>test_acl_for_remove_l4_rule</td>
+    <td>Configure ACL rule with L4 port and allow action
+Remove the config ACL rule
+
+</td>
+    <td>ACL rule has been created on DUT and able to removed it</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_19</td>
+    <td>Test acl for remove l4 rules</td>
+    <td>test_acl_for_remove_l4_rules</td>
+    <td>1.  Configure ACL rule with L4 port and allow action
+2.  Remove the config all ACL rules
+</td>
+    <td>ACL rule has been created on DUT and able to removed all of acl rules</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_20</td>
+    <td>Test acl adding specific l4 and all l4 allow rule</td>
+    <td>test_acl_adding_specific_l4_and_all_l4_allow_rule</td>
+    <td>1.  Configure ACL rule with specific L4 port and allow action
+2.  Verify ACL rule with all L4 port is being created on DUT
+
+</td>
+    <td>ACL rules has been created on DUT </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_21</td>
+    <td>Test acl adding all l4 and specific l4 allow rule</td>
+    <td>test_acl_adding_all_l4_and_specific_l4_allow_rule</td>
+    <td>1.  Configure ACL rule with all L4 port and allow action
+2.  Verify ACL rule with specific L4 port is not being created on DUT
+</td>
+    <td>ACL rule with all L4 port number has been created on DUT  </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_22</td>
+    <td>Test acl with specific l4 deny and all l4 allow rule</td>
+    <td>test_acl_with_specific_l4_deny_and_all_l4_allow_rule</td>
+    <td>1.  Configure ACL rule with specific L4 port and deny action
+2.  Verify ACL rule with all L4 port and allow is being created on DUT
+
+</td>
+    <td>ACL rules has been created on DUT </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_23</td>
+    <td>Test acl with all l4 and specific l4 deny rule</td>
+    <td>test_acl_with_all_l4_and_specific_l4_deny_rule</td>
+    <td>1.  Configure ACL rule with all L4 port and deny action
+2.  Verify ACL rule with specific L4 port and deny is not being created on DUT
+</td>
+    <td>ACL rule has been created on DUT </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_24</td>
+    <td>Test acl with specific l4 deny and all l4 allow rule</td>
+    <td>test_acl_with_specific_l4_deny_and_all_l4_allow_rule</td>
+    <td>1.  Configure ACL rule with specific L4 port and deny action
+2.  Verify ACL rule with all L4 port and allow is not being created on DUT
+</td>
+    <td>ACL rules has been created on DUT </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_25</td>
+    <td>Test acl deny all l4 and allow specific l4 rule</td>
+    <td>test_acl_deny_all_l4_and_allow_specific_l4_rule</td>
+    <td>1.  Configure ACL rule with all L4 port and deny action
+2.  Verify ACL rule with specific L4 port and allow is not being created on DUT
+</td>
+    <td>ACL rule has been created on DUT </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>ACL_26</td>
+    <td>Test acl tcp port allow rule for matching and non matching traffic</td>
+    <td>test_acl_tcp_port_allow_rule_for_matching_and_non_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_27</td>
+    <td>Test acl udp port allow rule for matching and non matching traffic</td>
+    <td>test_acl_udp_port_allow_rule_for_matching_and_non_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_28</td>
+    <td>Test acl icmp port allow rule for matching and non matching traffic</td>
+    <td>test_acl_icmp_port_allow_rule_for_matching_and_non_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_29</td>
+    <td>Test acl tcp port deny rule for matching and non matching traffic</td>
+    <td>test_acl_tcp_port_deny_rule_for_matching_and_non_matching_traffic</td>
+    <td>1.  Configure ACL rule with deny action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_30</td>
+    <td>Test acl udp port deny rule for matching and non matching traffic</td>
+    <td>test_acl_udp_port_deny_rule_for_matching_and_non_matching_traffic</td>
+    <td>1.  Configure ACL rule with deny action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_31</td>
+    <td>Test acl icmp port deny rule for matching and non matching traffic</td>
+    <td>test_acl_icmp_port_deny_rule_for_matching_and_non_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_32</td>
+    <td>Test acl two allow rules for tcp port matching traffic</td>
+    <td>test_acl_two_allow_rules_for_tcp_port_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic for first ACL</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_33</td>
+    <td>Test acl two allow rules for udp port matching traffic</td>
+    <td>test_acl_two_allow_rules_for_udp_port_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic for first ACL</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_34</td>
+    <td>Test acl two allow rules for src ips dst ips and l4 ports matching traffic</td>
+    <td>test_acl_two_allow_rules_for_src_ips_dst_ips_and_l4_ports_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic for first ACL</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+  <tr>
+    <td>ACL_35</td>
+    <td>test_acl allow and deny rules for src ips dst ips and l4 ports matching traffic</td>
+    <td>test_acl_allow_and_deny_rules_for_src_ips_dst_ips_and_l4_ports_matching_traffic</td>
+    <td>1.  Configure ACL rule with allow and deny action
+2.  Verify ACL rule is being created on DUT
+3. Check with ACL rule matched traffic
+4. Check with ACL rule non matched traffic for first ACL</td>
+    <td>ACL rule has been created on DUT and matched traffic is allowed and non-matched is not allowed</td>
+    <td>Failed</td>
+  </tr>
+</table>
diff --git a/docs/modules/authentication_test_plan.md b/docs/modules/authentication_test_plan.md
new file mode 100644
index 0000000..d5f26dd
--- /dev/null
+++ b/docs/modules/authentication_test_plan.md
@@ -0,0 +1,141 @@
+**Authentication Test Plan**
+
+**Authentication Test Cases (Implemented and Planned) : **
+
+**Set up for EAP-TLS :**
+
+**-------------------------**
+
+**1. ****ea.conf file  (**
+
+**          in eap section  default_eap_type = tls **
+
+**          in gtc section comment the #auth_type = EAP }**
+
+** **
+
+**2. TLS Client Certification PEM file. (File name - inno-dev-ca-certificate..pem) .**
+
+**3. Copy and past Client crt in server installed  CA.crt file. (File name -inno-dev-ca-certificate.crt)   **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>Auth_1</td>
+    <td>Verify EAP-MD5 authentication </td>
+    <td> test_eap_md5</td>
+    <td>1. Send EAPOL start message from the client.
+2. Send EAP response with identity.
+3. Send EAP response with MD5 challenge</td>
+    <td>1. Got EAP Request for identity.
+2. Got EAP request  for MD5 challenge.
+3. EAP success message should be seen.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Auth_2</td>
+    <td>Verify EAP-MD5 authentication with wrong password</td>
+    <td>test_eap_md5_wrg_password</td>
+    <td>1. Send EAPOL start message from the client.
+2. Send EAP response.
+3. Send EAP response with MD5 challenge with wrong password</td>
+    <td>1. Got EAP Request for identity.
+2. Got EAP request  for MD5 challenge.
+3. EAP failure message should be seen.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Auth_3</td>
+    <td>Verify EAP-MD5 authentication with wrong challenge</td>
+    <td> </td>
+    <td>1. Send EAPOL start message from the client.
+2. Send EAP response.
+3. Send EAP response with MD5 challenge with wrong challenge</td>
+    <td>1. Got EAP Request for identity.
+2. Got EAP request  for MD5 challenge.
+3. EAP failure message should be seen.
+ </td>
+    <td>To Be implemented</td>
+  </tr>
+  <tr>
+    <td>Auth_4</td>
+    <td>Verify EAP-TLS authentication</td>
+    <td>test_eap_tls</td>
+    <td>1. Send EAPOL start message from the client.
+2. Send EAP response with identity.
+3. Send Client Hello TLS payload .
+4. Send Client Hello TLS Certificate.
+5. Send Client TLS Finished</td>
+    <td>1. Got EAP Request for identity.
+2. Got hello request for id.
+3. Got cert request.
+4. Got change cipher request from server
+5. EAP-TLS success message should be seen.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Auth_5</td>
+    <td>Verify EAP-TLS authentication with empty TLS client certification</td>
+    <td>test_eap_tls_noCrt</td>
+    <td>1. Send EAPOL start message from the client
+2.  Send EAP response with identity.
+3. Send Client Hello TLS payload .
+4. Send an empty Client Hello TLS Certificate
+ </td>
+    <td>1. Got EAP Request for identity.
+2. Got hello request for id.
+3. Got cert request.
+4. Access reject message should be seen from ONOS or socket should get timed out.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Auth_6</td>
+    <td>Verify EAP-TLS authentication with Invalid client certification</td>
+    <td>test_eap_tls_InvalidCrt</td>
+    <td>1. Send EAPOL start message from the client .
+2.  Send EAP response with identity.
+3. Send Client Hello TLS payload .
+4. Send an invalid Client Hello TLS Certificate
+ </td>
+    <td>1. Got EAP Request for identity.
+2. Got hello request for id.
+3. Got cert request.
+4. Access reject message should be seen from ONOS or socket should get timed out. </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Auth_7</td>
+    <td>Verify EAP-TLS authentication with self signed client certification</td>
+    <td>test_eap_tls_Self_Signed_Crt</td>
+    <td>1. Send EAPOL start message from the client .
+2.  Send EAP response with identity.
+3. Send Client Hello TLS payload .
+4. Send Self signed Client Hello TLS Certificate. </td>
+    <td>1. Got EAP Request for identity.
+2. Got hello request for id.
+3. Got cert request.
+4. Access reject message should be seen from ONOS or socket should get timed out.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Auth_8</td>
+    <td>Verify EAP-TLS authentication with 2 RGs having the same valid TLS certificate </td>
+    <td>test_eap_tls_2RGs_SameValid_Crt</td>
+    <td>1.Let one RG start with EAPOL message using the valid TLS certificate.
+2. Let 2nd RG start with EAPOL message using the same TLS certificate. </td>
+    <td>Access reject message should be seen from ONOS or socket should get timed out.  </td>
+    <td>Pass</td>
+  </tr>
+</table>
+
diff --git a/docs/modules/cord_subscriber_test_plan.md b/docs/modules/cord_subscriber_test_plan.md
new file mode 100644
index 0000000..2b710b6
--- /dev/null
+++ b/docs/modules/cord_subscriber_test_plan.md
@@ -0,0 +1,367 @@
+**CORD Subscriber Test Plan**
+
+**CORD Subscriber Test Cases (Implemented and Planned) : **
+
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>Subs_1</td>
+    <td>Verify subscriber joining and receiving traffic
+</td>
+    <td>test_subscriber_join_recv_channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2. Send a DHCP discover packet from the client.
+3. Verify joining to a particular group.
+</td>
+    <td>1. TLS authentication should be successful.
+2. IP address should be assigned to client.
+3. Interface should receive traffic. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_2</td>
+    <td>Verify joining and jumping to the next channel for channel surfing</td>
+    <td>test_subscriber_join_jump_channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2.  Jump to the next ip.
+3. Jump to the next channel and verify the traffic
+ </td>
+    <td>1. TLS authentication should be successful.
+2. IP address should be assigned to client.
+3. Interface should receive traffic. Also it should show the jump RX stats for subscriber.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_3</td>
+    <td>Test subscriber join next for channels</td>
+    <td>test_subscriber_join_next_channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2.  Join the next channel and verify the traffic. </td>
+    <td>1.TLS authentication should be successful.
+2. Interface should receive traffic</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_4</td>
+    <td>Verify subscriber TLS authentication by sending invalid client certificate</td>
+    <td>test_subscriber_authentication_with_invalid_certificate_and_channel_surfing</td>
+    <td>1. Send an invalid Client Hello TLS Certificate.
+2. Send a DHCP discover packet from the subscriber.
+ </td>
+    <td>1. Authentication should not be successful.
+2. Subscriber should not receive any ip from DHCP server. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_5</td>
+    <td>Verify subscriber TLS authentication by sending no client certificate</td>
+    <td>test_subscriber_authentication_with_no_certificate_and_channel_surfing</td>
+    <td>1. Send an blank Client Hello TLS Certificate.
+2. Send a DHCP discover packet from the subscriber.
+ </td>
+    <td>1.Authentication should not be successful.
+2.Subscriber shouldn’t receive any ip from DHCP server. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_6</td>
+    <td>Verify subscriber TLS authentication by sending self signed certificate </td>
+    <td>test_subscriber_authentication_with_self_signed_certificate_and_channel_surfing</td>
+    <td>1. Send a self sigend Client Hello TLS Certificate.
+2. Send a DHCP discover packet from the subscriber.</td>
+    <td>1.Authentication should not be successful.
+2.Subscriber shouldn’t receive any ip from DHCP server. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_7</td>
+    <td>Verify subscribers TLS authenticatiby sending non ca  certificate. </td>
+    <td>test_subscriber_authentication_with_non_ca_authorized_certificate_and_channel_surfing</td>
+    <td>1. Send a non ca Hello TLS Certificate.
+2. Send a DHCP discover packet from the subscriber.</td>
+    <td>1.Authentication should not be successful.
+2.Subscriber shouldn’t receive any ip from DHCP server. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_8</td>
+    <td>Verify subscriber with dhcp rediscover functionality</td>
+    <td>test_subscriber_authentication_with_dhcp_discover_and_channel_surfing</td>
+    <td>1. Send a DHCP discover packet from the subscriber.
+2. Send DHCP release and again send dhcp discover from the client.</td>
+    <td>1. DHCP Ack should get received.
+2. After releasing and then re-sending, dhcp ip address assignment should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_9</td>
+    <td>Verify the DHCP process when the subscriber becomes down and  up.</td>
+    <td>test_subscriber_authentication_with_dhcp_client_reboot_scenario_and_channel_surfing</td>
+    <td>After DHCP address assignment to the client, make the subscriber down and then make it up.</td>
+    <td>Once its up, DHCP request message should be sent from the client to the server which is unicast.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_10</td>
+    <td>Verify the DHCP process when the DHCP server becomes down and  up.
+</td>
+    <td>test_subscriber_authentication_with_dhcp_server_reboot_scenario_and_channel_surfing</td>
+    <td>1. Send a DHCP discover packet .
+2. Send a DHCP request packet from the client.
+3. Make the DHCP server down.
+4. Make the DHCP server up.</td>
+    <td>1. DHCP offer packet generated.
+2. DHCP Ack packet generated.
+3. Client should have the same ip till the lease time expires.
+4. DHCP Ack should be sent from the server. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_11</td>
+    <td>Verify dhcp subscriber rebind process</td>
+    <td>test_subscriber_authentication_with_dhcp_client_rebind_and_channel_surfing</td>
+    <td>After Rebind timer expires, a DHCP request message which is broadcast is being sent .</td>
+    <td>Since the server is up and reachable , it should respond back with DHCP Ack packet</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_12</td>
+    <td>Verify DHCP subscriber starvation attack </td>
+    <td>test_subscriber_authentication_with_dhcp_starvation_scenario_and_channel_surfing</td>
+    <td>1. Let the authentication be successful.
+2. Send a lot of dummy DHCP requests, with random source Mac address (using Scapy)</td>
+    <td>After few second, there is no more IP addresses available in the pool, thus successfully performing denial of service attack to other subscriber</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_13</td>
+    <td>Verify ip address assignment is successful when DHCP discover is sent twice.
+</td>
+    <td>test_subscriber_authentication_with_multiple_dhcp_discover_for_same_subscriber_and_channel_surfing</td>
+    <td> Let authentication be successful.
+Send DHCP discover message twice from the client.
+
+</td>
+    <td>DHCP server should give the same ip to the client using the DHCP Ack packet. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_14</td>
+    <td>Verify ip address assignment is successful when DHCP request is sent twice.</td>
+    <td>test_subscriber_authentication_with_multiple_dhcp_request_for_same_subscriber_and_channel_surfing</td>
+    <td>1. Send a DHCP discover message from the client.
+2. Send DHCP request message.
+3. Again send DHCP request message.
+</td>
+    <td>1. DHCP offer should be sent from the server.
+2. DHCP Ack should get received.
+</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_15</td>
+    <td>Verify subscriber ip address assignment is successful when desired ip is sent.</td>
+    <td>test_subscriber_authentication_with_dhcp_client_requested_ip_and_channel_surfing</td>
+    <td>1.Let the authentication be successful.
+Send a DHCP discover packet with the desired ip which is in the server address pool.
+2.Send DHCP discover message twice from the client.</td>
+    <td>DHCP ip address assignment should be successful.
+</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_16</td>
+    <td>Verify ip address assignment when dhcp request and offer ip are different </td>
+    <td>test_subscriber_authentication_with_dhcp_non_offered_ip_and_channel_surfing</td>
+    <td>1.  Let the authentication be successful.
+2. Send a DHCP discover message from the client.
+3.  Send DHCP request message with a different ip.
+ </td>
+    <td>2. DHCP offer should be sent from server.
+3. DHCP NAK should be sent from the server.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_17</td>
+    <td>Verify subscriber ip address assignment when desired ip is sent which is out of the pool. </td>
+    <td>test_subscriber_authentication_with_dhcp_request_out_of_pool_ip_by_client_and_channel_surfing</td>
+    <td>1. Let the authentication be successful.
+2. Send a DHCP discover packet with the desired ip which is out of the  server address pool</td>
+    <td>DHCP NAK message should be sent</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_18</td>
+    <td>Verify subscriber ip address assignement with the lease time information specified.</td>
+    <td>test_subscriber_authentication_with_dhcp_specified_lease_time_functionality_and_channel_surfing</td>
+    <td>1. Let the authentication be successful.
+2. Send a DHCP discover packet with the least time mentioned.
+</td>
+    <td>DHCP ip address assignment should be successful with the mentioned lease time.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_19</td>
+    <td>Verify subscriber join and receive with multiple channels 100</td>
+    <td>test_subscriber_join_recv_100channels</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2. Send a DHCP discover packet from the client.
+3. Verify joining to 100 channels
+ </td>
+    <td>1. TLS authentication should be successful.
+2. IP address should be assigned to client.
+3. All interfaces  should receive traffic.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_20</td>
+    <td>Verify subscribers jumping to 100channels.</td>
+    <td>test_subscribers_join_jump_100channel</td>
+    <td>1.Send a DHCP discover from 10 subscribers.
+2. Jump to 5 channels and verify the traffic</td>
+    <td>1.IP address should be assigend to all the subscribers.
+2. All interfaces should receive traffic.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_21</td>
+    <td>Verify subscribers joining next to 100 channels.</td>
+    <td>test_subscribers_join_next_100channel</td>
+    <td>1.Send a DHCP discover from 10 subscribers.
+2. Join next to 5 channels and verify the traffic</td>
+    <td>1.IP address should be assigend to all the subscribers.
+2. All interfaces should receive traffic.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_22</td>
+    <td>Verify subscriber join and receive with multiple channels 400</td>
+    <td>test_subscriber_join_recv_400channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2. Send a DHCP discover packet from the client.
+3. Verify joining to 400 channels
+ </td>
+    <td>1. TLS authentication should be successful.
+2. IP address should be assigned to client.
+3. All interfaces  should receive traffic.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_23</td>
+    <td>Verify subscriber join and receive with multiple channels 800</td>
+    <td>test_subscriber_join_recv_800channels</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2. Send a DHCP discover packet from the client.
+3. Verify joining to 800 channels
+ </td>
+    <td>1. TLS authentication should be successful.
+2. IP address should be assigned to client.
+3. All interfaces  should receive traffic.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_24</td>
+    <td>Verify subscriber join and receive with 1500 multiple channels</td>
+    <td>test_subscriber_join_recv_1500channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication from a subscriber
+2. Send a DHCP discover packet
+3. Verify joining to 1500 channels. </td>
+    <td>1. TLS authentication should be successful.
+2. IP address should be assigned to all the clients.
+3. All interfaces  should receive traffic.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_25</td>
+    <td>Verify joining and jumping to 400 channels for channel surfing</td>
+    <td>test_subscriber_join_jump_400channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2.  Jump to the next 400 channels and verify the traffic
+ </td>
+    <td>1. TLS authentication should be successful.
+2. All Interfaces should receive traffic. Also it should show the jump RX stats for subscriber.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_26</td>
+    <td>Verify joining and jumping to  800 channels for channel surfing</td>
+    <td>test_subscriber_join_jump_800channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2.  Jump to the next 800 channels and verify the traffic
+ </td>
+    <td>1. TLS authentication should be successful.
+2. All Interfaces should receive traffic. Also it should show the jump RX stats for subscriber.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_27</td>
+    <td>Verify joining and jumping to  1200 channels for channel surfing</td>
+    <td>test_subscriber_join_jump_1200channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2.  Jump to the next 1200 channels and verify the traffic
+ </td>
+    <td>1. TLS authentication should be successful.
+2. All Interfaces should receive traffic. Also it should show the jump RX stats for subscriber.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_28</td>
+    <td>Verify joining and jumping to  1500 channels for channel surfing</td>
+    <td>test_subscriber_join_jump_1500channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication.
+2.  Jump to the next 1500 channels and verify the traffic
+ </td>
+    <td>1. TLS authentication should be successful.
+2. All Interfaces should receive traffic. Also it should show the jump RX stats for subscriber.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_29</td>
+    <td>Test subscriber join next for 400 channels</td>
+    <td>test_subscriber_join_next_400channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication from a subscriber
+2.  Join the next 400 channels and verify the traffic</td>
+    <td>1. TLS authentication should be successful.
+2. Interfaces should receive traffic. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_30</td>
+    <td>Test subscriber join next for 800 channels</td>
+    <td>test_subscriber_join_next_800channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication from a subscriber
+2.  Join the next 800 channels and verify the traffic</td>
+    <td>1. TLS authentication should be successful.
+2. Interfaces should receive traffic. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_31</td>
+    <td>Test subscriber join next for 1200 channels</td>
+    <td>test_subscriber_join_next_1200channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication from a subscriber
+2.  Join the next 1200 channels and verify the traffic</td>
+    <td>1. TLS authentication should be successful.
+2. Interfaces should receive traffic. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Subs_32</td>
+    <td>Test subscriber join next for 1500 channels</td>
+    <td>test_subscriber_join_next_1500channel</td>
+    <td>1. Send a EAPOL start message for TLS authentication from a subscriber
+2.  Join the next 1500 channels and verify the traffic</td>
+    <td>1. TLS authentication should be successful.
+2. Interfaces should receive traffic. </td>
+    <td></td>
+  </tr>
+</table>
+
diff --git a/docs/modules/dhcp_relay_test_plan.md b/docs/modules/dhcp_relay_test_plan.md
new file mode 100644
index 0000000..4384b2a
--- /dev/null
+++ b/docs/modules/dhcp_relay_test_plan.md
@@ -0,0 +1,498 @@
+**DHCP Relay  Test Plan**
+
+**DHCP Relay Test Cases (Implemented and Planned) : **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_1</td>
+    <td>Verify the dynamic ip address allocation of client</td>
+    <td>test_dhcpRelay_1request</td>
+    <td>Send a DHCP discover message from client</td>
+    <td>All DHCP messages like DHCP discover, DHCP offer, DHCP request and DHCP Ack should be checked.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_2</td>
+    <td>Verify DHCP NAK message from the server</td>
+    <td> </td>
+    <td>1. Configure pool lets say 20.0.0.1-20.0.0.10 in DHCP server.
+2. Let client get the ip address
+1. Disconnect this server and Connect another server with IP pool as 80.0.0.1-80.0.0.10
+2. Let client send DHCP request message.</td>
+    <td>When the client sends DHCPREQUEST it will ask for the previous ip address which is not present in pool so the server will send NAK.</td>
+    <td>Not yet implemented</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_3</td>
+    <td>Verify releasing an IP from the client to the server to rediscover</td>
+    <td>test_dhcpRelay_1release</td>
+    <td>Send DHCP release packet from the client to the server</td>
+    <td>IP address should get released back to the server and should be able to rediscover</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_4</td>
+    <td>Multiple dhcp servers</td>
+    <td> </td>
+    <td>Let there be multiple DHCP servers.
+Start a dhcp client from one host.</td>
+    <td>IP address should get allocated to the host from one of the DHCP servers.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>
+DHCPRelay_5</td>
+    <td>
+Verify DHCP decline message from the client</td>
+    <td> test_dhcpRelay_1release</td>
+    <td>
+1. You need two clients. One static and one through DHCP server.
+2. Try to first assign ip address to dhcp client, reboot the client or just remove it from network.
+3. Meanwhile give the same static ip to another client.
+4. Now connect the dhcp client.</td>
+    <td>
+When the server assigns the ip address the client will do gracious arp and as static ip is already present it will send DHCPDECLINE message to the Server.</td>
+    <td>
+Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_6</td>
+    <td>Verify restarting the dhcp client</td>
+    <td>test_dhcpRelay_client_request_after_reboot</td>
+    <td>1. Restart the client which has got previously leased IP address.
+2. Check for DHCP Ack message </td>
+    <td>If the requested IP address can be used by the client, the DHCP server responds with a DHCPAck message.
+   </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_7</td>
+    <td>Verify multiple client scenario</td>
+    <td>test_dhcpRelay_Nrequest</td>
+    <td>Let there be multiple hosts and generate a multiple DHCP request messages</td>
+    <td>Server should be able to give ip address to all the hosts.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_8
+
+
+
+
+</td>
+    <td>check for Fail over mechanism in dhcp</td>
+    <td> </td>
+    <td>Let there be 2 dhcp servers in the same subnet or scope.
+Make one dhcp server down</td>
+    <td>If a DHCP server1 is no longer reachable, then client is able to extend the lease on its current IP address by contacting another DHCP server2.</td>
+    <td>Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_9</td>
+    <td>Verify DHCP client renewing State</td>
+    <td>test_dhcpRelay_client_renew_time</td>
+    <td>After T1 timer expires, a DHCP request message which is unicast is being sent to the same server</td>
+    <td>Since the server is up and reachable , it should respond back with DHCP Ack packet</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_10</td>
+    <td>Verify the client behavior when DHCP server is rebooted.</td>
+    <td>test_dhcpRelay_server_after_reboot</td>
+    <td>1. Send a DHCP discover packet .
+2. Send a DHCP request packet from the client.
+3. Make the DHCP server down.
+4. Make the DHCP server up.</td>
+    <td>1. DHCP offer packet generated.
+2. DHCP Ack packet generated.
+3. Client should have the same ip till the lease time expires.
+4. DHCP Ack should be sent from the server. </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_11</td>
+    <td>Verify generation of DHCP inform message</td>
+    <td>test_dhcpRelay_inform_packet</td>
+    <td>1. Let client send a DHCP inform message with its own ip address in ciaddr field.
+2. Check for DHCP ACk message</td>
+    <td>DHCP Ack message should be sent from the server which includes the needed parameters in the appropriate DHCP option fields</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_12</td>
+    <td>DHCP starvation attack</td>
+    <td>test_dhcpRelay_starvation</td>
+    <td>Send a lot of dummy DHCP requests, with random source Mac address (using Scapy)</td>
+    <td>After few second, there is no more IP addresses available in the pool, thus successfully performing denial of service attack to other network client.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_13
+
+</td>
+    <td>Verify DHCP Relay functionality</td>
+    <td> </td>
+    <td>Make ONOS as DHCP relay agent and Send a DHCP discover message from the client. This inserts the option 82.</td>
+    <td>ONOS should forward the DHCP server reply to the client</td>
+    <td>Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_14</td>
+    <td>Verify sending DHCP discover packet twice</td>
+    <td>test_dhcpRelay_same_client_multiple_discover</td>
+    <td>Send DHCP discover packet twice from the client.</td>
+    <td>DHCP server should give the same ip to the client.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_15</td>
+    <td>Verify sending DHCP request packet twice</td>
+    <td>test_dhcpRelay_same_client_multiple_request</td>
+    <td>Send the DHCP request packet twice form the client</td>
+    <td>DHCP Ack should be sent.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_16</td>
+    <td>Verify ip address assignment when dhcp request and offer ip are different </td>
+    <td>test_dhcpRelay_server_nak_packet</td>
+    <td>1. Send a DHCP discover message from the client.
+2. Send DHCP request message with a different ip.
+ </td>
+    <td>1. DHCP offer should be sent from server.
+2. DHCP NAK should be sent from the server.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_17</td>
+    <td>Verify  ip address assignment is successful when desired ip is sent.</td>
+    <td>test_dhcpRelay_client_desired_address</td>
+    <td>Send a DHCP discover packet with the desired ip which is in the server address pool.
+ </td>
+    <td>DHCP ip address assignment should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_18</td>
+    <td>Verify  ip address assignment when desired ip is sent which is out of the pool.</td>
+    <td>test_dhcpRelay_client_desired_address_out_of_pool</td>
+    <td>Send a DHCP discover packet with the desired ip which is out of the  server address pool.
+ </td>
+    <td>DHCP NAK message should be sent</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_19</td>
+    <td>Verify  ip address assignment with the lease time information specified.</td>
+    <td>test_dhcpRelay_lease_packet</td>
+    <td>Send a DHCP discover packet with the least time mentioned.</td>
+    <td>DHCP ip address assignment should be successful with the mentioned lease time.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_20
+</td>
+    <td>Verify sending N releases from the client </td>
+    <td>test_dhcpRelay_Nrelease
+</td>
+    <td>Send multiple DHCP release packet from the client to the server</td>
+    <td>All IP addresses should get released back to the server and should be able to rediscover
+
+</td>
+    <td>Pass
+
+</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_21</td>
+    <td>Verify broadcast address in dhcp offer</td>
+    <td>test_dhcpRelay_client_expected_broadcast_address </td>
+    <td>1. Send DHCP discover message.
+2. Extract option broadcast address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Broadcast address should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_22
+
+
+
+</td>
+    <td>Verify dns address in dhcp offer</td>
+    <td>test_dhcpRelay_client_expected_dns_address </td>
+    <td>1. Send DHCP discover message.
+2. Extract option dns address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Dns address should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DCPRelay_23</td>
+    <td>Verify router address in dhcp offer</td>
+    <td>test_dhcpRelay_client_expected_router_address </td>
+    <td>1. Send DHCP discover message.
+2. Extract option router address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Router address should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_24</td>
+    <td>Verify Subnet mask in dhcp offer</td>
+    <td>test_dhcpRelay_client_expected_subnet_mask </td>
+    <td>1.Send DHCP discover message.
+2.Extract option Subnet mask from dhcp offer message.
+3.Check with your server configuration</td>
+    <td>Subnet mask should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_25</td>
+    <td>Verify sending dhcp discover with wrong broadcast address</td>
+    <td>test_dhcpRelay_client_sends_dhcp_request_with_wrong_broadcast_address </td>
+    <td>1. Send DHCP discover message with wrong broadcast address.
+2. Extract option Broadcast address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration broadcast address should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_26
+
+
+
+
+
+
+
+</td>
+    <td>Verify sending dhcp discover with wrong DNS address</td>
+    <td>test_dhcpRelay_client_sends_dhcp_request_with_wrong_dns_address </td>
+    <td>1. Send DHCP discover message with wrong dns address.
+2. Extract option DNS server from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration DNS address should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_27</td>
+    <td>Verify sending dhcp discover with wrong router address</td>
+    <td>test_dhcpRelay_client_sends_dhcp_request_with_wrong_router_address </td>
+    <td>1. Send DHCP discover message with wrong router address.
+2. Extract option router address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration Router address should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_28</td>
+    <td>Verify sending dhcp discover with wrong Subnet mask address</td>
+    <td>test_dhcpRelay_client_sends_dhcp_request_with_wrong_subnet_mask </td>
+    <td>1. Send DHCP discover message with wrong Subnet mask.
+2. Extract option Subnet mask address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration Subnet mask should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_29</td>
+    <td>Verify dhcp client renew process</td>
+    <td>test_dhcpRelay_client_renew_time </td>
+    <td>After T1 timer expires, a DHCP request message which is unicast is being sent to the same server</td>
+    <td>Since the server is up and reachable, it should respond back with DHCP Ack packet</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_30
+</td>
+    <td>Verify dhcp client rebind process</td>
+    <td>test_dhcpRelay_client_rebind_time </td>
+    <td>After Rebind timer expires, a DHCP request message which is broadcast is being sent.</td>
+    <td>Since the server is up and reachable, it should respond back with DHCP Ack packet</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_31</td>
+    <td>Verify lease time check</td>
+    <td>test_dhcpRelay_lease_packet</td>
+    <td>1. Send DHCP discover message.
+2. Send DHCP request now.
+3. Extract the option lease time in DHCP ACK packet.</td>
+    <td>1. DHCP offer should be received.
+2. DHCP Ack packet should be received with the default lease time of 600 sec.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_32</td>
+    <td>Measure average no. of transactions in DHCP server in 1 second</td>
+    <td>test_dhcpRelay_server_transactions_per_second </td>
+    <td>1. Send DHCP discover and DHCP request messages from different MAC addresses.
+2. Calculate total running time and total no. of transactions after repeating the procedure for 3 times.
+3. Divide total no. of transactions with total running time.</td>
+    <td>1. DHCP offer and DHCP Ack should be received until there are free addresses in pool of DHCP server.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_33
+
+
+
+
+
+
+
+
+
+
+
+
+
+</td>
+    <td>Measure average no. of consecutive successful  transactions in DHCP server in 1 second</td>
+    <td>test_dhcpRelay_server_consecutive_successes_per_second</td>
+    <td>1. Send DHCP discover and DHCP request messages from different MAC addresses.
+2. Calculate total running time and total no. of successful transactions after repeating the procedure for 3 times.
+3. Divide total no. of successful transactions with total running time.</td>
+    <td>1. DHCP offer and DHCP Ack should be received until there are free addresses in pool of DHCP server.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_34</td>
+    <td>Measure average number of clients (DHCP discover) in 1 second</td>
+    <td>test_dhcpRelay_server_clients_per_second </td>
+    <td>1. Send DHCP discover packets continuously from different mac address.
+ 2.Calculate total running time and total no. Of clients after repeating the procedure for 3 times.
+3. Divide total no. of clients with total running time.</td>
+    <td>DHCP offer should be received until DHCP server pool ip address are exhausted.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_35</td>
+    <td>Measure average no. of consecutive successful  clients in DHCP server in 1 second</td>
+    <td>test_dhcpRelay_server_consecutive_successful_clients_per_second</td>
+    <td>1. Send DHCP discover packets continuously from different mac address.
+ 2.Calculate total running time and total no. Of successful clients after repeating the procedure for 3 times.
+3. Divide total no. Of successful clients with total running time.</td>
+    <td>DHCP offer should be received until DHCP server pool ip address are exhausted.</td>
+    <td>Pass
+
+</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>DHCPRelay_36</td>
+    <td>Measure average no. Of concurrent transactions in DHCP server in 1 second</td>
+    <td>test_dhcpRelay_concurrent_transactions_per_second</td>
+    <td>1. Send DHCP discover and DHCP request messages from different MAC addresses using Multithreading Programming Enviornment.
+2. Calculate total running time and total no. of transactions after repeating the procedure for 3 times.
+3. Divide total no. of transactions with total running time.</td>
+    <td>1. DHCP offer and DHCP Ack should be received until there are free addresses in pool of DHCP server.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_37</td>
+
+
+</td>
+    <td>Measure average no. Of concurrent consecutive successful  transactions in DHCP server in 1 second</td>
+    <td>test_dhcpRelay_concurrent_consecutive_successes_per_second</td>
+    <td>1. Send DHCP discover and DHCP request messages from different MAC addresses using Multithreading Programming Enviornment.
+2. Calculate total running time and total no. of successful transactions after repeating the procedure for 3 times.
+3. Divide total no. of successful transactions with total running time.</td>
+    <td>1. DHCP offer and DHCP Ack should be received until there are free addresses in pool of DHCP server.
+ </td>
+    <td>Pass</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>DHCPRelay_38</td>
+    <td>Measure average number of concurrent clients (DHCP discover) in 1 second</td>
+    <td>test_dhcpRelay_concurrent_clients_per_second</td>
+    <td>1. Send DHCP discover packets continuously from different mac address using Multithreading Programming Enviornment.
+ 2.Calculate total running time and total no. Of clients after repeating the procedure for 3 times.
+3. Divide total no. of clients with total running time.</td>
+    <td>DHCP offer should be received until DHCP server pool ip address are exhausted.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCPRelay_39
+
+
+
+
+
+
+
+
+
+
+</td>
+    <td>Measure average no. of consecutive successful concurrent clients in DHCP server in 1 second</td>
+    <td>test_dhcpRelay_concurrent_consecutive_successes_per_second</td>
+    <td>1. Send DHCP discover packets continuously from different mac address using Multithreading Programming Enviornment.
+ 2.Calculate total running time and total no. Of successful clients after repeating the procedure for 3 times.
+3. Divide total no. Of successful clients with total running time.</td>
+    <td>DHCP offer should be received until DHCP server pool ip address are exhausted.</td>
+    <td>Pass
+
+
+
+
+
+
+
+</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>DHCPRelay_40
+
+
+
+
+
+
+
+
+
+
+</td>
+    <td>Verify 2 DHCP clients conflict Scenario</td>
+    <td>test_dhcpRelay_client_conflict</td>
+    <td>1. Send DHCP discover packet from one DHCP client.
+ 2.Extract ip from DHCP offer packet
+3. Send DHCP Discover from 2nd DHCP client with extracted ip as desired ip. Then also send DHCP Request.
+4.  Now send DHCP Request from 1st DHCP client.  </td>
+    <td>No Reply from DHCP Server.</td>
+    <td>Pass
+
+
+
+
+
+
+
+</td>
+  </tr>
+</table>
diff --git a/docs/modules/dhcp_test_plan.md b/docs/modules/dhcp_test_plan.md
new file mode 100644
index 0000000..8117c5c
--- /dev/null
+++ b/docs/modules/dhcp_test_plan.md
@@ -0,0 +1,352 @@
+**DHCP  Test Plan**
+
+**DHCP Test Cases (Implemented and Planned) : **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>DHCP_1</td>
+    <td>Verify the dynamic ip address allocation of client</td>
+    <td>test_dhcp_1request</td>
+    <td>Send a DHCP discover message from client</td>
+    <td>All DHCP messages like DHCP discover, DHCP offer, DHCP request and DHCP Ack should be checked.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_2</td>
+    <td>Verify DHCP NAK message from the server</td>
+    <td> </td>
+    <td>1. Configure pool lets say 20.0.0.1-20.0.0.10 in DHCP server.
+2. Let client get the ip address
+1. Disconnect this server and Connect another server with IP pool as 80.0.0.1-80.0.0.10
+2. Let client send DHCP request message.</td>
+    <td>When the client sends DHCPREQUEST it will ask for the previous ip address which is not present in pool so the server will send NAK.</td>
+    <td>Not yet implemented</td>
+  </tr>
+  <tr>
+    <td>DHCP_3</td>
+    <td>Verify releasing an IP from the client to the server to rediscover</td>
+    <td>test_dhcp_1release</td>
+    <td>Send DHCP release packet from the client to the server</td>
+    <td>IP address should get released back to the server and should be able to rediscover</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_4</td>
+    <td>Multiple dhcp servers</td>
+    <td> </td>
+    <td>Let there be multiple DHCP servers.
+Start a dhcp client from one host.</td>
+    <td>IP address should get allocated to the host from one of the DHCP servers.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>DHCP_5</td>
+    <td>Verify DHCP decline message from the client</td>
+    <td> </td>
+    <td>1. You need two clients. One static and one through DHCP server.
+2. Try to first assign ip address to dhcp client, reboot the client or just remove it from network.
+3. Meanwhile give the same static ip to another client.
+4. Now connect the dhcp client.</td>
+    <td>When the server assigns the ip address the client will do gracious arp and as static ip is already present it will send DHCPDECLINE message to the Server.</td>
+    <td>Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHCP_6</td>
+    <td>Verify restarting the dhcp client</td>
+    <td>test_dhcp_client_request_after_reboot</td>
+    <td>1. Restart the client which has got previously leased IP address.
+2. Check for DHCP Ack message </td>
+    <td>If the requested IP address can be used by the client, the DHCP server responds with a DHCPAck message.
+   </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_7</td>
+    <td>Verify multiple client scenario</td>
+    <td>test_dhcp_Nrequest</td>
+    <td>Let there be multiple hosts and generate a multiple DHCP request messages</td>
+    <td>Server should be able to give ip address to all the hosts.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_8</td>
+    <td>check for Fail over mechanism in dhcp</td>
+    <td> </td>
+    <td>Let there be 2 dhcp servers in the same subnet or scope.
+Make one dhcp server down</td>
+    <td>If a DHCP server1 is no longer reachable, then client is able to extend the lease on its current IP address by contacting another DHCP server2.</td>
+    <td>Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHCP_9</td>
+    <td>Verify DHCP client renewing State</td>
+    <td> </td>
+    <td>After T1 timer expires, a DHCP request message which is unicast is being sent to the same server</td>
+    <td>Since the server is up and reachable , it should respond back with DHCP Ack packet</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_10</td>
+    <td>Verify the client behavior when DHCP server is rebooted.</td>
+    <td>test_dhcp_server_after_reboot</td>
+    <td>1. Send a DHCP discover packet .
+2. Send a DHCP request packet from the client.
+3. Make the DHCP server down.
+4. Make the DHCP server up.</td>
+    <td>1. DHCP offer packet generated.
+2. DHCP Ack packet generated.
+3. Client should have the same ip till the lease time expires.
+4. DHCP Ack should be sent from the server. </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_11</td>
+    <td>Verify generation of DHCP inform message</td>
+    <td> </td>
+    <td>1. Let client send a DHCP inform message with its own ip address in ciaddr field.
+2. Check for DHCP ACk message</td>
+    <td>DHCP Ack message should be sent from the server which includes the needed parameters in the appropriate DHCP option fields</td>
+    <td>Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHCP_12</td>
+    <td>DHCP starvation attack</td>
+    <td>test_dhcp_starvation</td>
+    <td>Send a lot of dummy DHCP requests, with random source Mac address (using Scapy)</td>
+    <td>After few second, there is no more IP addresses available in the pool, thus successfully performing denial of service attack to other network client.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_13</td>
+    <td>Verify DHCP Relay functionality</td>
+    <td> </td>
+    <td>Make ONOS as DHCP relay agent and Send a DHCP discover message from the client. This inserts the option 82.</td>
+    <td>ONOS should forward the DHCP server reply to the client</td>
+    <td>Not implemented</td>
+  </tr>
+  <tr>
+    <td>DHVP_14</td>
+    <td>Verify sending DHCP discover packet twice</td>
+    <td>test_dhcp_same_client_multiple_discover</td>
+    <td>Send DHCP discover packet twice from the client.</td>
+    <td>DHCP server should give the same ip to the client.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_15</td>
+    <td>Verify sending DHCP request packet twice</td>
+    <td>test_dhcp_same_client_multiple_request</td>
+    <td>Send the DHCP request packet twice form the client</td>
+    <td>DHCP Ack should be sent.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_16</td>
+    <td>Verify ip address assignment when dhcp request and offer ip are different </td>
+    <td>test_dhcp_server_nak_packet</td>
+    <td>1. Send a DHCP discover message from the client.
+2. Send DHCP request message with a different ip.
+ </td>
+    <td>1. DHCP offer should be sent from server.
+2. DHCP NAK should be sent from the server.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_17</td>
+    <td>Verify  ip address assignment is successful when desired ip is sent.</td>
+    <td>test_dhcp_client_desired_address</td>
+    <td>Send a DHCP discover packet with the desired ip which is in the server address pool.
+ </td>
+    <td>DHCP ip address assignment should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_18</td>
+    <td>Verify  ip address assignment when desired ip is sent which is out of the pool.</td>
+    <td>test_dhcp_client_desired_address_out_of_pool</td>
+    <td>Send a DHCP discover packet with the desired ip which is out of the  server address pool.
+ </td>
+    <td>DHCP NAK message should be sent</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_19</td>
+    <td>Verify  ip address assignment with the lease time information specified.</td>
+    <td>test_dhcp_lease_packet</td>
+    <td>Send a DHCP discover packet with the least time mentioned.</td>
+    <td>DHCP ip address assignment should be successful with the mentioned lease time.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>DHCP_20
+</td>
+    <td>Verify sending N releases from the client </td>
+    <td>test_dhcp_Nrelease
+</td>
+    <td>Send multiple DHCP release packet from the client to the server</td>
+    <td>All IP addresses should get released back to the server and should be able to rediscover
+
+</td>
+    <td>Pass
+
+</td>
+  </tr>
+  <tr>
+    <td>DHCP_21</td>
+    <td>Verify broadcast address in dhcp offer</td>
+    <td>test_dhcp_client_expected_broadcast_address </td>
+    <td>1. Send DHCP discover message.
+2. Extract option broadcast address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Broadcast address should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_22</td>
+    <td>Verify dns address in dhcp offer</td>
+    <td>test_dhcp_client_expected_dns_address </td>
+    <td>1. Send DHCP discover message.
+2. Extract option dns address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Dns address should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_23</td>
+    <td>Verify router address in dhcp offer</td>
+    <td>test_dhcp_client_expected_router_address </td>
+    <td>1. Send DHCP discover message.
+2. Extract option router address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Router address should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_24</td>
+    <td>Verify Subnet mask in dhcp offer</td>
+    <td>test_dhcp_client_expected_subnet_mask </td>
+    <td>1.Send DHCP discover message.
+2.Extract option Subnet mask from dhcp offer message.
+3.Check with your server configuration</td>
+    <td>Subnet mask should match</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_25</td>
+    <td>Verify sending dhcp discover with wrong broadcast address</td>
+    <td>test_dhcp_client_sends_dhcp_request_with_wrong_broadcast_address </td>
+    <td>1. Send DHCP discover message with wrong broadcast address.
+2. Extract option Broadcast address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration broadcast address should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_26</td>
+    <td>Verify sending dhcp discover with wrong DNS address</td>
+    <td>test_dhcp_client_sends_dhcp_request_with_wrong_dns_address </td>
+    <td>1. Send DHCP discover message with wrong dns address.
+2. Extract option DNS server from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration DNS address should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_27</td>
+    <td>Verify sending dhcp discover with wrong router address</td>
+    <td>test_dhcp_client_sends_dhcp_request_with_wrong_router_address </td>
+    <td>1. Send DHCP discover message with wrong router address.
+2. Extract option router address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration Router address should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_28</td>
+    <td>Verify sending dhcp discover with wrong Subnet mask address</td>
+    <td>test_dhcp_client_sends_dhcp_request_with_wrong_subnet_mask </td>
+    <td>1. Send DHCP discover message with wrong Subnet mask.
+2. Extract option Subnet mask address from dhcp offer message.
+3. Check with your server configuration</td>
+    <td>Server configuration Subnet mask should be seen in dhcp offer</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_29</td>
+    <td>Verify dhcp client renew process</td>
+    <td>test_dhcp_client_renew_time </td>
+    <td>After T1 timer expires, a DHCP request message which is unicast is being sent to the same server</td>
+    <td>Since the server is up and reachable, it should respond back with DHCP Ack packet</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_30</td>
+    <td>Verify dhcp client rebind process</td>
+    <td>test_dhcp_client_rebind_time </td>
+    <td>After Rebind timer expires, a DHCP request message which is broadcast is being sent.</td>
+    <td>Since the server is up and reachable, it should respond back with DHCP Ack packet</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_31</td>
+    <td>Verify lease time check</td>
+    <td>test_dhcp_lease_packet</td>
+    <td>1. Send DHCP discover message.
+2. Send DHCP request now.
+3. Extract the option lease time in DHCP ACK packet.</td>
+    <td>1. DHCP offer should be received.
+2. DHCP Ack packet should be received with the default lease time of 600 sec.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_32</td>
+    <td>Measure average no. of transactions in DHCP server in 1 second</td>
+    <td>test_dhcp_server_transactions_per_second </td>
+    <td>1. Send DHCP discover and DHCP request messages from different MAC addresses.
+2. Calculate total running time and total no. of transactions after repeating the procedure for 3 times.
+3. Divide total no. of transactions with total running time.</td>
+    <td>1. DHCP offer and DHCP Ack should be received until there are free addresses in pool of DHCP server.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_33</td>
+    <td>Measure average no. of consecutive successful  transactions in DHCP server in 1 second</td>
+    <td>test_dhcp_server_consecutive_successes_per_second</td>
+    <td>1. Send DHCP discover and DHCP request messages from different MAC addresses.
+2. Calculate total running time and total no. of successful transactions after repeating the procedure for 3 times.
+3. Divide total no. of successful transactions with total running time.</td>
+    <td>1. DHCP offer and DHCP Ack should be received until there are free addresses in pool of DHCP server.
+ </td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_34</td>
+    <td>Measure average number of clients (DHCP discover) in 1 second</td>
+    <td>test_dhcp_server_clients_per_second </td>
+    <td>1. Send DHCP discover packets continuously from different mac address.
+ 2.Calculate total running time and total no. Of clients after repeating the procedure for 3 times.
+3. Divide total no. of clients with total running time.</td>
+    <td>DHCP offer should be received until DHCP server pool ip address are exhausted.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>DHCP_35</td>
+    <td>Measure average no. of consecutive successful  clients in DHCP server in 1 second</td>
+    <td>test_dhcp_server_consecutive_successful_clients_per_second</td>
+    <td>1. Send DHCP discover packets continuously from different mac address.
+ 2.Calculate total running time and total no. Of successful clients after repeating the procedure for 3 times.
+3. Divide total no. Of successful clients with total running time.</td>
+    <td>DHCP offer should be received until DHCP server pool ip address are exhausted.</td>
+    <td>Pass</td>
+  </tr>
+</table>
+
diff --git a/docs/modules/flows_test_plan.md b/docs/modules/flows_test_plan.md
new file mode 100644
index 0000000..d945d20
--- /dev/null
+++ b/docs/modules/flows_test_plan.md
@@ -0,0 +1,476 @@
+**Flow Install  Test Plan**
+
+**Flow Install Test Cases (Implemented and Planned) : **
+
+**This is to verify that the flow subsystem is compiling flows correctly.**
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>Flows_1</td>
+    <td>Add and verify flows with MAC selectors</td>
+    <td>test_flow_mac</td>
+    <td>1.Add flow with source and dest mac using REST API.
+2. Send packet to verify if flows are correct</td>
+    <td>Packet should get received according to flow.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_2</td>
+    <td>Add and verify flows with IPv4 selectors</td>
+    <td>test_flow_ip</td>
+    <td>1. Add flow with source and dest ip using REST API.
+2. Send packet to verify if flows are correct.</td>
+    <td>Packet should get received according to flow.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_3</td>
+    <td>Add and verify flows with TCP ports</td>
+    <td>test_flow_tcp_port</td>
+    <td>1.Add flow with source and dest tcp ports  using REST API.
+2. Send packet to verify if flows are correct.</td>
+    <td>Packet should get received according to flow.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_4</td>
+    <td>Add and verify flows with UDP ports</td>
+    <td>test_flow_udp_port</td>
+    <td>1.Add flow with source and dest UDP ports  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packet should get received according to flow.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_5</td>
+    <td>Add and verify 5 flows with constant dest mac</td>
+    <td>test_5_flow_constant_dst_mac</td>
+    <td>1.Add 5 flows with constant dest mac and varying src mac  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_6</td>
+    <td>Add and verify 500 flows with constant dest mac</td>
+    <td>test_500_flow_constant_dst_mac</td>
+    <td>1.Add 500 flows with constant dest mac and varying src mac  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_7</td>
+    <td>Add and verify 1k flows with constant dest mac</td>
+    <td>test_1k_flow_constant_dst_mac</td>
+    <td>1.Add 1k flows with constant dest mac and varying src mac  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_8</td>
+    <td>Add and verify 10k flows with constant dest mac</td>
+    <td>test_10k_flow_constant_dst_mac</td>
+    <td>1.Add 10k flows with constant dest mac and varying src mac  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_9</td>
+    <td>Add and verify 100k flows with constant dest mac</td>
+    <td>test_100k_flow_constant_dst_mac</td>
+    <td>1.Add 100k flows with constant dest mac and varying src mac  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_10</td>
+    <td>Add and verify 1000k flows with constant dest mac</td>
+    <td>test_1000k_flow_constant_dst_mac</td>
+    <td>1.Add 1000k flows with constant dest mac and varying src mac  using REST API.
+2. Send a packet to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_11
+
+
+
+
+
+
+</td>
+    <td>Add and verify 500 flows with varying mac selectors</td>
+    <td>test_500_flow_mac</td>
+    <td>1.Add 500 flows with varying dest mac and src mac  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_12</td>
+    <td>Add and verify 1k flows with varying mac selectors</td>
+    <td>test_1k_flow_mac</td>
+    <td>1.Add 1k flows with varying dest mac and src mac  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_13</td>
+    <td>Add and verify 10k flows with varying mac selectors</td>
+    <td>test_10k_flow_mac</td>
+    <td>1.Add 10k flows with varying dest mac and src mac  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_14</td>
+    <td>Add and verify 100k flows with varying mac selectors</td>
+    <td>test_100k_flow_mac</td>
+    <td>1.Add 100k flows with varying dest mac and src mac  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_15</td>
+    <td>Add and verify 1000k flows with varying mac selectors</td>
+    <td>test_1000k_flow_mac</td>
+    <td>1.Add 1000k flows with varying dest mac and src mac  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_16</td>
+    <td>Add and verify 500 flows with varying ip selectors</td>
+    <td>test_500_flow_ip</td>
+    <td>1.Add 500 flows with varying dest ip and src ip  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_17</td>
+    <td>Add and verify 1k flows with varying ip selectors</td>
+    <td>test_1k_flow_ip</td>
+    <td>1. Add 1k flows with varying dest ip and src ip  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_18
+
+
+
+
+
+</td>
+    <td>Add and verify 10k flows with varying ip selectors</td>
+    <td>test_10k_flow_ip</td>
+    <td>1. Add 10k flows with varying dest ip and src ip  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_19</td>
+    <td>Add and verify 100k flows with varying ip selectors</td>
+    <td>test_100k_flow_ip</td>
+    <td>1. Add 100k flows with varying dest ip and src ip  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_20</td>
+    <td>Add and verify 1000k flows with varying ip selectors</td>
+    <td>test_1000k_flow_ip</td>
+    <td>1. Add 1000k flows with varying dest ip and src ip  using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_21</td>
+    <td>Add and verify 500 flows with varying tcp ports</td>
+    <td>test_500_flow_tcp_port</td>
+    <td>1. Add 1000k flows with varying source and dest tcp ports using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_22</td>
+    <td>Add and verify 1k flows with varying tcp ports</td>
+    <td>test_1k_flow_tcp_port</td>
+    <td>1. Add 1k flows with varying source and dest tcp ports using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_23</td>
+    <td>Add and verify 10k flows with varying tcp ports</td>
+    <td>test_10k_flow_tcp_port</td>
+    <td>1. Add 10k flows with varying source and dest tcp ports using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>Flows_24</td>
+    <td>Add and verify 500 flows with varying udp ports</td>
+    <td>test_500_flow_udp_port</td>
+    <td>1. Add 500 flows with varying source and dest udp ports using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_25</td>
+    <td>Add and verify 1k flows with varying udp ports</td>
+    <td>test_1k_flow_udp_port</td>
+    <td>1. Add 1k flows with varying source and dest udp ports using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_26</td>
+    <td>Add and verify 10k flows with varying udp ports</td>
+    <td>test_10k_flow_udp_port</td>
+    <td>1. Add 10k flows with varying source and dest udp ports using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_27</td>
+    <td>Add and verify flow with dscp values</td>
+    <td>test_flow_dscp</td>
+    <td>1. Add flow with dscp value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_28</td>
+    <td>Add and verify flows with all possible dscp values</td>
+    <td>test_flow_available_dscp</td>
+    <td>1. Add flows with all possible dscp values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_29</td>
+    <td>Add and verify flow with ecn values</td>
+    <td>test_flow_ecn</td>
+    <td>1. Add flow with ecn value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_30</td>
+    <td>Add and verify flow with all tos values</td>
+    <td>test_flow_available_dscp_and_ecn</td>
+    <td>1. Add flows with all possible tos values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_31</td>
+    <td>Add and verify flow for icmpv4 values</td>
+    <td>test_flow_icmp</td>
+    <td>1. Add flows with icmpv4 values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_32</td>
+    <td>Add and verify flow for different icmpv4 values</td>
+    <td>test_flow_icmp_different_types</td>
+    <td>1. Add flows with different icmpv4 values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_33</td>
+    <td>Add and verify flow for ipv6 selectors</td>
+    <td>test_flow_ipv6</td>
+    <td>1. Add flows with ipv6 using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_34</td>
+    <td>Add and verify flow for ipv6 and icmpv6 selectors</td>
+    <td>test_flow_ipv6_and_icmpv6</td>
+    <td>1. Add flows with ipv6 and icmpv6 values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>Flows_35</td>
+    <td>Add and verify flow for ipv6 extension header</td>
+    <td>test_flow_ipv6_extension_header</td>
+    <td>1. Add flows with ipv6 extension header values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_36</td>
+    <td>Add and verify flow for all available ipv6 extension header</td>
+    <td>test_flow_ipv6_available_extension_headers</td>
+    <td>1. Add flows with ipv6 all available extension header values using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_37</td>
+    <td>Add and verify flow for ipv6 flow label</td>
+    <td>test_flow_ipv6_flow_label</td>
+    <td>1. Add flows with ipv6 flow label value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_38</td>
+    <td>Add and verify flow for icmpv6 destination unreachable value</td>
+    <td>test_flow_icmpv6_DestUnreachable</td>
+    <td>1. Add flows with icmpv6 destination unreachable value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_39</td>
+    <td>Add and verify flow for icmpv6 echo reply value</td>
+    <td>test_flow_icmpv6_EchoReply</td>
+    <td>1. Add flows with icmpv6 echo reply value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_40</td>
+    <td>Add and verify flow for icmpv6 echo request value</td>
+    <td>test_flow_icmpv6_EchoRequest</td>
+    <td>1. Add flows with icmpv6 echo request value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>Flows_41</td>
+    <td>Add and verify flow for icmpv6 packet too big value</td>
+    <td>test_flow_icmpv6_PacketTooBig</td>
+    <td>1. Add flows with icmpv6 packet too big value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_42</td>
+    <td>Add and verify flow for icmpv6 parameter problem value</td>
+    <td>test_flow_icmpv6_ParameterProblem</td>
+    <td>1. Add flows  icmpv6 parameter problem value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_43</td>
+    <td>Add and verify flow for icmpv6 time exceeded value</td>
+    <td>test_flow_icmpv6_TimeExceeded</td>
+    <td>1. Add flows with icmpv6 time exceeded value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_44</td>
+    <td>Add and verify flow for ipv6 Neighbour Advertisement TLL value</td>
+    <td>test_flow_icmpv6_NA_TLL</td>
+    <td>1. Add flows with ipv6 Neighbour Advertisement TLL value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Flows_45</td>
+    <td>Add and verify flow for ipv6 Neighbour Discovery SLL value</td>
+    <td>test_flow_icmpv6_ND_SLL</td>
+    <td>1. Add flows with ipv6 Neighbour Discovery SLL value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+</table>
+
+
+<table>
+  <tr>
+    <td>Flows_46</td>
+    <td>Add and verify flow for ipv6 Neighbour Discovery Target address value</td>
+    <td>test_flow_icmpv6_ND_Target_address</td>
+    <td>1. Add flows with ipv6 Neighbour Discovery Target address value using REST API.
+2. Send packets to verify if flows are correct. </td>
+    <td>Packets should get received according to flows.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+  </tr>
+  <tr>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+  </tr>
+</table>
+
diff --git a/docs/modules/igmp_test_plan.md b/docs/modules/igmp_test_plan.md
new file mode 100644
index 0000000..0a2f72f
--- /dev/null
+++ b/docs/modules/igmp_test_plan.md
@@ -0,0 +1,366 @@
+**IGMP  Test Plan**
+
+**IGMP Test Cases (Implemented and Planned) : **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>IGMP_1</td>
+    <td>Verify the traffic flow after joining </td>
+    <td>test_igmp_join_verify_traffic</td>
+    <td>1. Send a IGMP join message to a particular group from an interface
+2. Check for traffic flow </td>
+    <td>Traffic should get received on that interface</td>
+    <td>
+Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_2</td>
+    <td>Verify the traffic after leaving from the group</td>
+    <td>test_igmp_leave_verify_traffic</td>
+    <td>1. Leave a group from an interface.
+2. Check for traffic flow</td>
+    <td>Traffic should not get received on that interface</td>
+    <td>Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_3</td>
+    <td>Verify joining loop</td>
+    <td>test_igmp_leave_join_loop</td>
+    <td>Send a join message to the groups in the same subnet</td>
+    <td>Joining interface should receive traffic</td>
+    <td>Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_4</td>
+    <td>Check for latency with 1  group</td>
+    <td>test_igmp_1group_join_latency</td>
+    <td>1. Send a join message to one group from intf1.
+2. Send multicast data from intf2.
+3. Check for the latency of the data which is sent from intf2 to intf1</td>
+    <td>Latency should be checked when the data is being received on intf1</td>
+    <td>Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_5</td>
+    <td>Check for latency with 2 groups</td>
+    <td>test_igmp_2group_join_latency</td>
+    <td>1. Send a join message to 2 groups from 2  different interfaces
+2. Send multicast data to 2 groups.
+3. Check for the latency of the data</td>
+    <td>Latency should be checked when the data is being received on 2 different interfaces</td>
+    <td>Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_6</td>
+    <td>Check for latency with N groups</td>
+    <td>test_igmp_Ngroup_join_latency</td>
+    <td>1. Send a join message to N groups from N different interfaces
+2. Send multicast data to N groups.
+3. Check for the latency of the data</td>
+    <td>Latency should be checked when the data is being received on N different interfaces</td>
+    <td>Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_7</td>
+    <td>Verify IGMP query packet</td>
+    <td>test_igmp_query</td>
+    <td>1. Send a Leave message to the group 224.0.0.1.
+2. Check for IGMP query message from the router.</td>
+    <td>ONOS should send the IGMP Query message to 224.0.0.1</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_8</td>
+    <td>Verify leaving group2 when group1 is still alive</td>
+    <td>test_igmp_2joins_1leave_functionality</td>
+    <td>1. Send a join message to  group1 and check  the traffic.
+2. Send a leave message to group2  and check the traffic on the interface1</td>
+    <td>1. Traffic should get received on an interface.
+2. Traffic should  get received without any interruptions.</td>
+    <td>Pass
+ </td>
+  </tr>
+  <tr>
+    <td>IGMP_9</td>
+    <td>Verify rejoining to the same group</td>
+    <td>test_igmp_2joins_1leave_again_joins_functionality</td>
+    <td>1. Send a join message to 2 groups.
+2. Send a leave message to group2 and join back again</td>
+    <td>Traffic should get received on interface.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_10</td>
+    <td>Verify joining a group with source ip as 0.0.0.0</td>
+    <td>test_igmp_join_sourceip_0_0_0_0_functionality</td>
+    <td>1. Send a join message to a group with source ip as 0.0.0.0
+2. Check the traffic on the interface.</td>
+    <td>Traffic should not get received.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_11</td>
+    <td>Verify the traffic when invalid join message is being sent</td>
+    <td> test_igmp_invalidClassD_IP_join_packet_functionality</td>
+    <td>Send an invalid join message to a group. Eg class D IP</td>
+    <td>Traffic should not get received.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_12</td>
+    <td>Verify periodic general query messages</td>
+    <td>test_igmp_periodic_query_packet_received_on_joining_interface</td>
+    <td>Send a Join packet  to a particular group. </td>
+    <td>Joining interface should receive multiple periodic general query packets from ONOS</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_13</td>
+    <td>Verify general membership query packet</td>
+    <td>test_igmp_query_packet_received_on_joining_interface</td>
+    <td>Send a join message and wait for membership query packet</td>
+    <td>General membership query packet should be received from querier router after 60sec</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_14</td>
+    <td>Verify the traffic after 180sec</td>
+    <td>test_igmp_general_query_recv_packet_traffic_functionality</td>
+    <td>1. Let onos send query packets.
+2. For 180 sec, hosts should not respond.
+3. Check for multicast data.</td>
+    <td>Multicast data should stop after 180 sec of time.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_15</td>
+    <td>Verify the traffic after the interface is made down and then up.</td>
+    <td>test_igmp_join_data_receiving_during_subscriber_link_up_down_functionality</td>
+    <td>1. Send a join message to the group from the intf1
+2. Bring down the intf1.
+3. Make the intf1 up again.</td>
+    <td>Traffic should get stopped and then resume once the interface is made up.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_16</td>
+    <td>Check for "include" source list</td>
+    <td>test_igmp_include_to_allow_src_list_functionality</td>
+    <td>Send a join message with the include source list as A,B</td>
+    <td>Traffic sent from any of the source address should not get filtered</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_17</td>
+    <td>Check for “Exclude” source list</td>
+    <td>test_igmp_exclude_to_allow_src_list_functionality</td>
+    <td>Send a join message with the exclude source list as C</td>
+    <td>Traffic sent from any of the source address should get filtered.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_18</td>
+    <td>Changing filter to Include mode</td>
+    <td>test_igmp_change_to_include_src_list_functionality</td>
+    <td>1. Send a join message with Exclude mode.
+2. Now change it to Include.</td>
+    <td>Traffic sent from any of the source address should now not get filtered</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_19</td>
+    <td>Changing filter to Exclude mode</td>
+    <td>test_igmp_change_to_exclude_src_list_functionality</td>
+    <td>1. Send join message with Include mode.
+2. Now change it to Exclude. </td>
+    <td>Traffic sent from any of the source address should now get filtered</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_20</td>
+    <td>Verify Allowing new sources list</td>
+    <td>test_igmp_new_src_list_functionality</td>
+    <td>1. Send join message with include mode for A and B.
+2. Add a new source list for C.
+3. Check the traffic</td>
+    <td>Traffic sent from the new source list should now not get filtered.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_21</td>
+    <td>Verify Blocking Old sources list</td>
+    <td>test_igmp_block_old_src_list_functionality</td>
+    <td>1. Send join message with include mode for A and B.
+2. Disallow A and B now.</td>
+    <td>Traffic sent from the new source list should now be filtered.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_22</td>
+    <td>Verify sending multicast data which is not in Join group</td>
+    <td>test_igmp_not_in_src_list_functionality</td>
+    <td>1. Let the join group has 2.2.2.2 and 3.3.3.3
+2. Send a multicast data from 6.6.6.6</td>
+    <td>The joining interfaces should not receive the multicast data.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_23</td>
+    <td>Verify the traffic when invalid join message is being sent with source list</td>
+    <td>test_igmp_invalid_join_packet_functionality</td>
+    <td>1. Send a join message with the include source list as A,B
+2. Specify the source ip be as 255.255.255.255</td>
+    <td>Traffic should not get received.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_24</td>
+    <td>Verify general query packet for Include(A) and Allow(B)</td>
+    <td>test_igmp_include_to_allow_src_list_check_for_general_query</td>
+    <td>1. Send a join message with include mode for A and Allow for B.
+2. Check for membership query packet</td>
+    <td>General membership query packet should get received from both A and B source list.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_25</td>
+    <td>Verify specific query packet for Include(A) and Block(B)</td>
+    <td>test_igmp_include_to_block_src_list_check_for_group_source_specific_query</td>
+    <td>1. Send a join message with include mode with source list A for G1 and Allow with new source list B for G1.
+2. Check for specific query packet</td>
+    <td>Source  membership query packet should get received to A*B source list interface</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_26</td>
+    <td>Verify general query packet for Exclude(A) and Allow(B)</td>
+    <td>test_igmp_exclude_to_allow_src_list_check_for_general_query</td>
+    <td>1. Send a join message Exclude mode with source list A for G1 and Allow with new source list B for G1.
+2. Check for general membership query packet</td>
+    <td>General membership query packet should get received on A*B source list interface</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_27</td>
+    <td>Verify query packet for Exclude(A) and Block(B)</td>
+    <td>test_igmp_exclude_to_block_src_list_check_for_group_source_specific_query(</td>
+    <td>1. Send a join message with  Exclude mode with source list A for G1 and block with new source list B for G1.
+2. Check for Specific query packet</td>
+    <td>Specific query packet should not get received.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_28</td>
+    <td>Verify traffic for INCLUDE (A) and Block(B)</td>
+    <td>test_igmp_include_to_block_src_list_functionality</td>
+    <td>1. Send a join message with Include mode for A and Block for B.
+2. Check for multicast traffic</td>
+    <td>Multicast traffic should get received from  A source list.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_29</td>
+    <td>Verify joining across multicast range of address </td>
+    <td>test_igmp_join_rover</td>
+    <td>Keep sending joins across different multicast range of address. </td>
+    <td>Joining interface should receive traffic for all the groups.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_30</td>
+    <td>Verify empty source list include</td>
+    <td>test_igmp_include_empty_src_list_functionality</td>
+    <td>Send a join message with include mode with empty source list</td>
+    <td>It should be unsuccessful</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_31</td>
+    <td>Verify empty source list Exclude</td>
+    <td>test_igmp_exclude_empty_src_list_functionality</td>
+    <td>Send a join message with Exclude mode with empty source list</td>
+    <td>It should be unsuccessful</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_32</td>
+    <td>Verify invalid Class D ip join packet with source list</td>
+    <td>test_igmp_invalidClassD_IP_as_srclistIP_join_packet_functionality</td>
+    <td>1. Send a join message with the include source list as A,B
+2. Specify the source ip be as 239.5.5.5</td>
+    <td>Traffic shouldn't get received</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_33</td>
+    <td>Verify the traffic after the channel is made down and then up.</td>
+    <td> test_igmp_join_data_receiving_during_channel_distributor_link_down_up_functionality</td>
+    <td>1. Send a join message to the group from the intf1
+2. Bring down the channel
+4. Make the channel up again.</td>
+    <td>Traffic should get stopped and then resume.</td>
+    <td>To Be implemented</td>
+  </tr>
+  <tr>
+    <td>IGMP_34</td>
+    <td>Verify entry deletion after membership query time expires</td>
+    <td>test_igmp_periodic_query_packet_received_and_checking_entry_deleted</td>
+    <td>Send IGMP join and wait till 3 membership query packets are received. Check for traffic</td>
+    <td>Traffic shouldn't get received.
+ONOS should not show the entry for MF table </td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_35</td>
+    <td>Verify rejoining interface after membership query interval expires</td>
+    <td>test_igmp_member_query_interval_expire_re_joining_interface</td>
+    <td>1.Send IGMP join and wait till 3 membership query packets are received.
+2. After the timer expires, again rejoin the interface</td>
+    <td>Rejoining the interface should happen and traffic flow should be seen.</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_36</td>
+    <td>Verify source specific query for leave message</td>
+    <td>test_igmp_leave_verify_received_group_source_specific_query</td>
+    <td>1.Leave a group from an interface.
+2.Check for source specific query</td>
+    <td>Source specific query should not get received on that interface</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_37</td>
+    <td>Verify group specific query packet after changing to exclude mode</td>
+    <td>test_igmp_change_to_exclude_src_list_check_for_group_source_specific_query</td>
+    <td>1. Send join message with Include mode.
+2. Now change it to Exclude.
+3. Check for specific query packet</td>
+    <td>Specific query packet  sent from any of the source address should now get filtered</td>
+    <td>Fail</td>
+  </tr>
+  <tr>
+    <td>IGMP_38</td>
+    <td>Verify group specific query packet after changing to Include mode</td>
+    <td>test_igmp_change_to_include_src_list_check_for_general_query</td>
+    <td>1. Send a join message with Exclude mode.
+2. Now change it to Include.
+3. Check for General query packet</td>
+    <td>General query packet  sent from any of the source address should not get filtered</td>
+    <td>Fail</td>
+  </tr>
+</table>
+
diff --git a/docs/modules/ipv6_test_plan.md b/docs/modules/ipv6_test_plan.md
new file mode 100644
index 0000000..f79122c
--- /dev/null
+++ b/docs/modules/ipv6_test_plan.md
@@ -0,0 +1,163 @@
+**IPv6  Test Plan**
+
+**IPv6 Test Cases (Implemented and Planned) : **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>IPV6_1</td>
+    <td>Verify IPv6 Host Discovery before adding intents</td>
+    <td></td>
+    <td>1. Add 2 IPV6 hosts .
+2. Check in the cli</td>
+    <td>Command "hosts" should show IPV6 hosts.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_2</td>
+    <td>Verify IPv6 Neighbor Solicitation message</td>
+    <td></td>
+    <td>Send an ICMPv6 packet with type as 134. </td>
+    <td>Neighbor should be advertised</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_3</td>
+    <td>Verify IPv6 Neighbor Advertisement</td>
+    <td></td>
+    <td>Send a NS message from the host and check for Neighbor advertisement message </td>
+    <td>A value of 136 should be captured in the Type field of ICMP packet header.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_4</td>
+    <td>Verify ICMP6 Ping </td>
+    <td></td>
+    <td>Do an ICMPv6 ping from one host to another</td>
+    <td>Ping should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_5</td>
+    <td>Verify IPv6 Host Intent Addition</td>
+    <td></td>
+    <td>1. Add point intents between 2 IPV6 hosts.
+2. Check ping between the hosts </td>
+    <td>Ping should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_6</td>
+    <td>Verify Point Intent Addition matching on port numbers</td>
+    <td></td>
+    <td>1. Add point intents between 2 IPV6 hosts matching on port numbers.
+2. Check ping between the hosts </td>
+    <td>Ping should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_7</td>
+    <td>Verify Installing 300 host intents and verify ping all</td>
+    <td></td>
+    <td>1. Add 300 point intents.
+2. Ping all across all hosts to test connectivity</td>
+    <td>1. 300 point intents should get successfully installed.
+2. Ping should be successful.
+ </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_8</td>
+    <td>Randomly bring some core links down and verify ping all</td>
+    <td></td>
+    <td>1. Bring down the core links.
+2. Check ping between the hosts.</td>
+    <td>Even during link down state, connectivity still exists via reroute and ping should be successful.
+ </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_9</td>
+    <td>Bring core links Up that were down and verify ping all</td>
+    <td></td>
+    <td>1. Bring the links that were down to up.
+2. Check ping between the hosts.</td>
+    <td>Ping should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_10</td>
+    <td>Verify Intents with VLAN-id</td>
+    <td></td>
+    <td>1. Add point intents with vlan id .
+2. Check hosts command in ONOS.
+3. Verify ping between the hosts.</td>
+    <td>2.“Hosts”command should discover correct vlan tag.
+3. Ping should be successful.
+ </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_11</td>
+    <td>Verify the INSTALLED state in intents</td>
+    <td></td>
+    <td>Rewrite mac address action in multi point to single point intent.
+Check the cli command “Intents “</td>
+    <td> Intent's state should be INSTALLED</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_12</td>
+    <td>Verify the ping after removing the intents between the hosts.</td>
+    <td></td>
+    <td>1. Remove the previously added intents.
+2. Check for ping between hosts.</td>
+    <td>Ping should fail.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_13</td>
+    <td>Verify Modify IPv6 Source Address</td>
+    <td></td>
+    <td>1. Configure and connect the Primary-controller.
+2. Create a flow with action OFPAT_SET_NW_SRC and output to an egress port.
+3. Send matching packet to ingress port. </td>
+    <td>packet gets output to egress port with correct IPv6 source address as specified in the flow.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_14</td>
+    <td>Verify Modify IPv6 destination address</td>
+    <td></td>
+    <td>1. Configure and connect the Primary-controller.
+2. Create a flow with action OFPAT_SET_NW_DST and output to an egress port.
+3. Send matching packet to ingress port. </td>
+    <td>packet gets output to egress port with correct IPv6 destination address as specified in the flow</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_15</td>
+    <td>Verify ping between the IPV6 hosts where muti point to single point intent is added</td>
+    <td></td>
+    <td>1. Add a multi point to single point intent related SDNIP matching on IP Prefix and rewriting the mac address.
+2. Verify the ping </td>
+    <td>Ping should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>IPV6_16</td>
+    <td>Check the ping after adding bidirectional point intents </td>
+    <td></td>
+    <td>1. Add a bidirectional point intents between 2 packet layer devices.
+2. Verify the ping</td>
+    <td>Ping should be successful.</td>
+    <td></td>
+  </tr>
+</table>
diff --git a/docs/modules/metrics_test_plan.md b/docs/modules/metrics_test_plan.md
new file mode 100644
index 0000000..30ac553
--- /dev/null
+++ b/docs/modules/metrics_test_plan.md
@@ -0,0 +1,159 @@
+**Metrics  Test Plan**
+
+**Metrics Test Cases (Implemented and Planned) : **
+
+
+**1. Install CollectD plugin which is in charge of reporting all metric values to ONOS through REST API.**
+
+**2. Install ONOS and activate CPMan application to receive system metrics from CollectD**.
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Functio Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>Metrics_1</td>
+    <td>Collector- CPU metrics</td>
+    <td></td>
+    <td>POST /collector/cpu_metrics</td>
+    <td>Collects CPU metrics</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_2</td>
+    <td>Collector- network I/O metrics</td>
+    <td></td>
+    <td>POST /collector/network_metrics</td>
+    <td>Collects network I/O metrics include in/out-bound packets/bytes statistics</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_3</td>
+    <td>Collector-disk I/O metrics</td>
+    <td></td>
+    <td>POST /collector/disk_metrics</td>
+    <td>Collects disk I/O metrics include read and write bytes</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_4</td>
+    <td>Collector-system info</td>
+    <td></td>
+    <td>POST /collector/system_info</td>
+    <td>Collects system information</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_5</td>
+    <td>Collector-memory metrics</td>
+    <td></td>
+    <td>POST /collector/memory_metrics</td>
+    <td>Collects memory metrics</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_6</td>
+    <td>Control-Memory metrics</td>
+    <td></td>
+    <td>GET /controlmetrics/memory_metrics</td>
+    <td>List memory metrics of all network resources</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_7</td>
+    <td>Control-message metrics</td>
+    <td></td>
+    <td>GET /controlmetrics/messages</td>
+    <td>List control message metrics of all devices</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_8</td>
+    <td>Control-message metrics</td>
+    <td></td>
+    <td>GET /controlmetrics/messages/{deviceId}</td>
+    <td>List control message metrics of a given device</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_9</td>
+    <td>Control-CPU metrics</td>
+    <td></td>
+    <td>GET /controlmetrics/cpu_metrics</td>
+    <td>List CPU metrics</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_10</td>
+    <td>Control-disk metrics</td>
+    <td></td>
+    <td>GET /controlmetrics/disk_metrics</td>
+    <td>List disk metrics of all disk resources</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_11</td>
+    <td>Verify the intent installation latency</td>
+    <td></td>
+    <td>1. Install the intent metrics feature by  "onos-app-metrics-intent" in the ONOS_FEATURE configuration list.
+2. Load the "onos-app-metrics-intent" feature from the ONOS CLI while ONOS is running.                                      3.Install a single intent from the CLI
+ </td>
+    <td>Command :
+onos:intents-events-metrics
+Should show the detailed information of all the event rate and the last event timestamp</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_12</td>
+    <td>Verify the intent installation latency in JSON format</td>
+    <td></td>
+    <td>1. Install the intent metrics feature by  "onos-app-metrics-intent" in the ONOS_FEATURE configuration list.
+2. Load the "onos-app-metrics-intent" feature from the ONOS CLI while ONOS is running.
+3. Install a single intent from the CLI</td>
+    <td>Command :
+onos:intents-events-metrics --json
+Should show the information in json format.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_13</td>
+    <td>Listing ONOS intent events</td>
+    <td></td>
+    <td>onos> onos:intents-events</td>
+    <td>It should list 100 intent related events.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_14</td>
+    <td>Verify topology event metrics</td>
+    <td></td>
+    <td>Disable a switch port with a link connecting that switch to another one</td>
+    <td>Command :
+onos:topology-events-metrics
+Should show the detailed information of all the event rate and the last event timestamp</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_15</td>
+    <td>Verify topology event metrics</td>
+    <td></td>
+    <td>Disable a switch port with a link connecting that switch to another one</td>
+    <td>Command :
+onos:topology-events-metrics --json
+Should show the information in json format.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Metrics_16</td>
+    <td>Listing topology events</td>
+    <td></td>
+    <td>onos> onos:topology-events</td>
+    <td>This should list last 100 topology events.</td>
+    <td></td>
+  </tr>
+</table>
diff --git a/docs/modules/platform_test_plan.md b/docs/modules/platform_test_plan.md
new file mode 100644
index 0000000..c4b9329
--- /dev/null
+++ b/docs/modules/platform_test_plan.md
@@ -0,0 +1,86 @@
+**Platform Test Plan**
+
+**Platform Test Cases (Implemented and Planned) : **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>Plat_1</td>
+    <td>Verify the docker status</td>
+    <td></td>
+    <td></td>
+    <td>If its running, docker status should return true. </td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_2</td>
+    <td>Pull (default) "onosproject/onos:latest" image</td>
+    <td></td>
+    <td></td>
+    <td>Pulling should be successful.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_3</td>
+    <td>Create new container for onos</td>
+    <td></td>
+    <td></td>
+    <td>Container should get successfully created.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_4</td>
+    <td>Get IP address on ONOS containers</td>
+    <td></td>
+    <td></td>
+    <td>Container IPs should get listed.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_5</td>
+    <td>check standalone apps status</td>
+    <td></td>
+    <td></td>
+    <td>"drivers" app should be in ACTIVE state AND all builtin apps in "INSTALLED" state</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_6</td>
+    <td>Activate "proxyarp" and "fwd" apps and check apps status</td>
+    <td></td>
+    <td></td>
+    <td>It should be in "ACTIVE" state</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_7</td>
+    <td>Deactivate "proxyarp" and "fwd" apps and check app status</td>
+    <td></td>
+    <td></td>
+    <td>It should be in "Installed" state</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_8</td>
+    <td>ONOS exceptions check</td>
+    <td></td>
+    <td></td>
+    <td>After test, there should be no logs for exceptions.</td>
+    <td></td>
+  </tr>
+  <tr>
+    <td>Plat_9</td>
+    <td>post-test clean env</td>
+    <td></td>
+    <td></td>
+    <td>No containers and images should be left.</td>
+    <td></td>
+  </tr>
+</table>
diff --git a/docs/modules/proxy_arp_test_plan.md b/docs/modules/proxy_arp_test_plan.md
new file mode 100644
index 0000000..0112220
--- /dev/null
+++ b/docs/modules/proxy_arp_test_plan.md
@@ -0,0 +1,107 @@
+**Proxy ARP  Test Plan**
+
+**Proxy ARP Test Cases (Implemented and Planned) : **
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>PARP_1</td>
+    <td>Verify if Proxy ARP is working properly with 1 host creation</td>
+    <td>test_proxyarp_with_1_host </td>
+    <td>Configure host and Interface configurations in ONOS
+Send an ARP request to host IP</td>
+    <td>Proxy ARP should repsond back to the ARP requests.</td>
+    <td> PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_2</td>
+    <td>Verify if Proxy ARP is working properly with 10 host creation</td>
+    <td> test_proxyarp_with_10_hosts</td>
+    <td>1. Configure host and Interface configurations in ONOS
+2. Send an ARP request to all 10  host IPs</td>
+    <td>Proxy ARP should repsond back to the ARP requests.</td>
+    <td> PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_3</td>
+    <td>Verify if Proxy ARP is working properly with 50 host creation</td>
+    <td> test_proxyarp_with_50_hosts</td>
+    <td>1. Configure host and Interface configurations in ONOS
+2. Send an ARP request to all 50 host IPs.</td>
+    <td>Proxy ARP should repsond back to the ARP requests.</td>
+    <td>PASS </td>
+  </tr>
+  <tr>
+    <td>PARP_4</td>
+    <td>Verify if Proxy ARP is working properly when it disable and re-enabled</td>
+    <td> test_proxyarp_app_with_disabling_and_re_enabling
+
+</td>
+    <td>1. Configure host and Interface configurations in ONOS
+2.Send an ARP request
+3. Disable proxy-arp app in ONSO and send arp requests again </td>
+    <td>Proxy Arp should not response once it disabled </td>
+    <td> PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_5</td>
+    <td>Verify if Proxy ARP is working properly for non-existing Host </td>
+    <td>test_proxyarp_nonexisting_host</td>
+    <td>1. Dont Configure host and Interface configurations in ONOS
+2.Send an ARP request
+3. Now configure Host and Interface configurations in ONOS
+4. Repeat step 2  </td>
+    <td>Proxy Arp should not respond for arp requests sent to non-existing host IPs</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_6</td>
+    <td>Verify if Proxy ARP is working properly for already existing host removed </td>
+    <td>test_proxyarp_removing_host
+</td>
+    <td>1. Configure host and Interface configurations in ONOS
+2.Send an ARP request
+3. Now Remove Host configuration in ONOS
+4. Repeat step 2  </td>
+    <td>Proxy Arp should not respond to arp  requests once the host configuration removed </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_7</td>
+    <td>Verify if Proxy ARP is working properly for multiple arp requests at once</td>
+    <td>test_proxyarp_concurrent_requests_with_multiple_host_and_different_interfaces
+</td>
+    <td>1. Configure 10 host and Interface configurations in ONOS
+2. Send an ARP request to all 10 host IPs from 10 ports at once</td>
+    <td>Proxy should response to all 10 arp requests received at once</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_8</td>
+    <td>Verify if Proxy ARP is working properly when it disable and re-enabled in case of multiple requests at once</td>
+    <td>test_proxyarp_disabling_enabling_app_initiating_concurrent_requests</td>
+    <td>1. Configure 10 host and Interface configurations in ONOS
+2.Send an ARP request to all 10 host IPs
+3. Disable proxy-arp app in ONSO send arp requests again </td>
+    <td>Proxy ARP should not respond once its disabled </td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>PARP_9</td>
+    <td>Verify if Proxy ARP is working properly in case of both existing and non-existing hosts </td>
+    <td>test_proxyarp_with_existing_and_non_existing_hostIPs_initiating_concurrent_requests</td>
+    <td>1. Configure 5 host and Interface configurations in ONOS
+2.Send an ARP request for 10 host IPs
+ </td>
+    <td>Proxy ARP should respond to only existing Host IPs</td>
+    <td>PASS</td>
+  </tr>
+</table>
+
diff --git a/docs/modules/vrouter_test_plan.md b/docs/modules/vrouter_test_plan.md
new file mode 100644
index 0000000..d4082b2
--- /dev/null
+++ b/docs/modules/vrouter_test_plan.md
@@ -0,0 +1,357 @@
+**vRouter Test Plan**
+
+**vRouter Test Cases (Implemented and Planned) : **
+
+** Start the quagga container and activate the Vrouter app.**
+
+<table>
+  <tr>
+    <td>ID</td>
+    <td>Title</td>
+    <td>Function Name</td>
+    <td>Test Steps</td>
+    <td>Expected Result</td>
+    <td>Actual Result</td>
+  </tr>
+  <tr>
+    <td>Vrouter_1</td>
+    <td>Test vrouter with 5 routes</td>
+    <td>test_vrouter_with_5_routes</td>
+    <td> 1.Generate vrouter configuration with new network configuration file
+Start onos and Quagga
+Run traffic for routes and check</td>
+    <td>Route installation should be successful</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_2</td>
+    <td>Test vrouter with 5 routes with 2 peers</td>
+    <td>test_vrouter_with_5_routes_2_peers</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes with 2 peers and check</td>
+    <td>Route installation should be successfull</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_3</td>
+    <td>Test vrouter with 5 routes with stopping Quagga</td>
+    <td>test_vrouter_with_5_routes_stopping_quagga</td>
+    <td> 1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check
+4. Stop Quagga and check</td>
+    <td>Route installation should be successfull</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_4</td>
+    <td>Test vrouter with 50 routes with stopping Quagga</td>
+    <td> test_vrouter_with_50_routes_stopping_quagga</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check
+4. Stop Quagga and check</td>
+    <td>Route installation should be successfull</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_5</td>
+    <td>Test vrouter with 6 routes with 3 peers</td>
+    <td> test_vrouter_with_6_routes_3_peers</td>
+    <td> 1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes with 2 peers and check</td>
+    <td>It should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_6</td>
+    <td>Test vrouter with 50 routes</td>
+    <td> test_vrouter_with_50_routes</td>
+    <td> 1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>It should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_7</td>
+    <td>Test vrouter with 50 routes and 5 peers</td>
+    <td> test_vrouter_with_50_routes_5_peers</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes with 5 peers and check</td>
+    <td>It should be successful..</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_8</td>
+    <td>Test vrouter with 100 routes</td>
+    <td> test_vrouter_with_100_routes</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>It should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_9</td>
+    <td>Test vrouter with 100 routes and 10 peers</td>
+    <td> test_vrouter_with_100_routes_10_peers</td>
+    <td>   1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes with 10 peers and check</td>
+    <td>It should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_10</td>
+    <td>Test vrouter with 300 routes</td>
+    <td> test_vrouter_with_300_routes</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>It should be successful.</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_11</td>
+    <td>Test vrouter with 1000 routes</td>
+    <td> test_vrouter_with_1000_routes</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>It should be successful</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_12</td>
+    <td>Test vrouter with 10000 routes</td>
+    <td> test_vrouter_with_10000_routes</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>Route installation should be successful</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_13</td>
+    <td>Test vrouter with 100000 routes</td>
+    <td> test_vrouter_with_100000_routes</td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>Route installation should be successful</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_14</td>
+    <td>Test vrouter with 1000000 routes</td>
+    <td>test_vrouter_with_1000000_routes </td>
+    <td>  1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes and check</td>
+    <td>Route installation should be successful</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_15</td>
+    <td>Test vrouterwith route update</td>
+    <td>test_vrouter_with_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>Pass</td>
+  </tr>
+  <tr>
+    <td>Vrouter_16</td>
+    <td>Test vrouterwith classA route update</td>
+    <td>test_vrouter_with_classA_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_17</td>
+    <td>Test vrouterwith classB route update</td>
+    <td>test_vrouter_with_classB_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_18</td>
+    <td>Test vrouterwith class less route update</td>
+    <td>test_vrouter_with_classless_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_19</td>
+    <td>Test vrouter with classA duplicate route update</td>
+    <td>test_vrouter_with_classA_duplicate_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_20</td>
+    <td>Test vrouter with classB duplicate route update</td>
+    <td>test_vrouter_with_classB_duplicate_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_21</td>
+    <td>Test vrouter with classless duplicate route update</td>
+    <td>test_vrouter_with_classless_duplicate_route_update</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_22</td>
+    <td>Test vrouter with invalid peers</td>
+    <td>test_vrouter_with_invalid_peers</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>Not Tested</td>
+  </tr>
+  <tr>
+    <td>Vrouter_23</td>
+    <td>Test vrouter with traffic sent between peers connected to onos</td>
+    <td>test_vrouter_with_traffic_sent_between_peers_connected_to_onos</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>Not Tested</td>
+  </tr>
+  <tr>
+    <td>Vrouter_24</td>
+    <td>Test vrouter with routes time expire</td>
+    <td>test_vrouter_with_routes_time_expire</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_25</td>
+    <td>Test vrouter with unreachable route</td>
+    <td>test_vrouter_with_unreachable_route</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_26</td>
+    <td>Test vrouter with enabling disabling vrouter app</td>
+    <td>test_vrouter_with_enabling_disabling_vrouter_app</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_27</td>
+    <td>Test vrouter with adding new routes in routing table</td>
+    <td>test_vrouter_with_adding_new_routes_in_routing_table</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_28</td>
+    <td>Test vrouter with removing old routes in routing table</td>
+    <td>test_vrouter_with_removing_old_routes_in_routing_table</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_29</td>
+    <td>Test vrouter modifying nexthop route in routing table</td>
+    <td>test_vrouter_modifying_nexthop_route_in_routing_table</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_30</td>
+    <td>Test vrouter deleting alternative nexthop in routing table</td>
+    <td>test_vrouter_deleting_alternative_nexthop_in_routing_table</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_31</td>
+    <td>Test vrouter deleting some routes in routing table</td>
+    <td>test_vrouter_deleting_some_routes_in_routing_table</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+  <tr>
+    <td>Vrouter_32</td>
+    <td>Test vrouter deleting and adding routes in routing table</td>
+    <td>test_vrouter_deleting_and_adding_routes_in_routing_table</td>
+    <td>1.Generate vrouter configuration with new network configuration file
+2. Start onos and Quagga
+3. Run traffic for routes
+4. Config routes on Quagga and check updated route on DUT</td>
+    <td>Route installation should be successful</td>
+    <td>PASS</td>
+  </tr>
+</table>
+