Improving README file and changing default value of 'useOltUplink' flag.
Change-Id: Icce7264e47250400fe8e371fe4bf0498ca6bf0e4
Signed-off-by: Gustavo Silva <gsilva@furukawalatam.com>
diff --git a/README.md b/README.md
index 6111801..111bd15 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,61 @@
-PPPoEAgent : PPPoE Intermediate Agent application
-=================================================
+# PppoeAgent : PPPoE Intermediate Agent application
-### What is PPPoEAgent?
+## What is a PPPoE Intermediate Agent?
As described in TR-101 Issue 2 - 3.9.2, the PPPoE Intermediate Agent supports the PPPoE access method and is a function placed on the Access Node in order to insert access loop identification.
### Description
-The PPPoE Intermediate Agent intercepts all upstream PPPoE discovery stage packets, i.e. the PADI, PADR and upstream PADT packets, but does not modify the source or destination MAC address of these PPPoE discovery packets.
-Upon receipt of a PADI or PADR packet sent by the PPPoE client, the Intermediate Agent adds a PPPoE TAG to the packet to be sent upstream. The TAG contains the identification of the access loop on which the PADI or PADR packet was received.
-If a PADI or PADR packet exceeds the Ethernet MTU after adding the access loop identification TAG, the Intermediate Agent must drop the packet, and issue the corresponding PADO or PADS response with a Generic-Error TAG to the sender.
\ No newline at end of file
+The PPPoE Agent intercepts all upstream PPPoED packets, i.e. the PADI, PADR and upstream PADT packets, but does not modify the source or destination MAC address of these PPPoE discovery packets.
+Upon receipt of a PADI or PADR packet sent by the PPPoE client, the Intermediate Agent adds a PPPoE TAG to the packet to be sent upstream. The TAG contains the identification of the access loop (circuit-id) on which the PADI or PADR packet was received.
+The circuit-id is generated following the format: "[OLT-SN] [SLOT]/[PON-PORT]:[ONU-SN]", i.e:
+
+*EC1724000150 0/2:ALPHe3132051*
+
+If a PADI or PADR packet exceeds the Ethernet MTU after adding the access loop identification TAG, the Intermediate Agent must drop the packet, and issue the corresponding PADO or PADS response with a Generic-Error TAG to the sender.
+
+PPPoE agent keeps track of the client's connect point saving it along other information (i.e: MAC address, session-id, last received packet type and etc) in a storage available through the CLI "pppoe-users". With that at hand, the agent also intercepts the downstream PPPoED packets, such as PADO, PADS and PADT from server. These responses are processed and delivered to the connect point associated with the destination MAC address. If the destination MAC address is not known for PPPoE Agent, the packet is dropped.
+A
+## Component Configuration
+```sh
+ "org.opencord.pppoeagent.impl.PppoeAgent": {
+ "pppoeMaxMtu": 1500,
+ "enableCircuitIdValidation": true,
+ "packetProcessorThreads": 10
+ }
+ ```
+### Component Configuration Parameters
+##### pppoeMaxMtu
+The allowed MTU size (in bytes) for upstream packet forwarding.
+##### enableCircuitIdValidation
+Flag to control the circuit-id validation mechanism: when configured as 'true' it checks if the Sadis "circuitId" field matches with the circuit-id generated by PPPoE Agent, if not the packet is dropped.
+When Sadis "circuitId" is not set for the PPPoE client, the validation is not performed whatsoever.
+##### packetProcessorThreads
+Reference to create a thread pool with a fixed number of threads for packet processing.
+
+
+## PPPoE Configuration in org.opencord.olt app:
+
+In order to PPPoE Agent receive the packets, Onos has to trap the PPPoED frames. A way to obtain that is configuring Olt app to install PPPoED trap rules as it follows:
+
+```sh
+"org.opencord.olt.impl.OltFlowService": {
+ "enablePppoe": true
+ }
+```
+
+# How to install the PPPoE Intermediate Agent on Onos
+Since this app is not available on "voltha-onos" image, first it's necessary to generate the *.oar* file. To do it so, you can follow the steps below:
+
+-> Clone this repository
+```sh
+git clone "https://gerrit.opencord.org/pppoeagent" && cd pppoeagent
+```
+-> Build it using Maven
+```sh
+mvn clean install
+```
+After these steps, the *.oar* file should be available at "pppoeagent/app/target/pppoeagent-app-1.0.0-SNAPSHOT.oar".
+
+Now you can upload and install the *.oar* in the Onos running instance using the [onos-app shell utility](https://gerrit.onosproject.org/plugins/gitiles/onos/+/refs/heads/onos-2.3/tools/package/runtime/bin/onos-app)
+
+Usage example:
+"onos-app [ONOS_ADDRESS] install! [OAR_FILE_PATH]"
diff --git a/app/src/main/java/org/opencord/pppoeagent/impl/PppoeAgent.java b/app/src/main/java/org/opencord/pppoeagent/impl/PppoeAgent.java
index 67c71da..ab04ff0 100644
--- a/app/src/main/java/org/opencord/pppoeagent/impl/PppoeAgent.java
+++ b/app/src/main/java/org/opencord/pppoeagent/impl/PppoeAgent.java
@@ -183,7 +183,7 @@
Set<ConnectPoint> pppoeConnectPoints;
protected AtomicReference<ConnectPoint> pppoeServerConnectPoint = new AtomicReference<>();
- protected boolean useOltUplink = false;
+ protected boolean useOltUplink = true;
static ConsistentMap<MacAddress, PppoeSessionInfo> sessionsMap;