Deploying a PPPoE VNF
Simulation and validation scenarios
There are several possible scenarios for deploying the PPPoE VNF. This section depicts those scenarios and how to simulate and validate them.
The linux PPPoE client can be used to simulate the Residential Gateway (RG): link
The linux PPPoE server can be used as the server for the simulation/validation scenario: link
In the PPPoE VNF source code repository also an application is available to simulate the OLT. This application establishes a gRPC connection to the VNF or Control Relay (which conforms to the WT-477 Mfc_CPRI) and encapsulates the PPPoE packets generated by the PPPoE client (similar to a real OLT device).
Direct connection of the pOLT to the D-OLT - inband
In this scenario, the PPPoE VNF connects directly to the OLT, acting as a server of it. The OLT is also connected to a PPPoE client and a PPPoE server, via the “client_olt” and the “server_olt” docker networks respectively.
The PPPoE receives configuration data from the baa via a Kafka bus, and stores said data in a mongo database, which is accessed through the “mongo_network” docker network.
- From the project’s root, run “cd pppoe-relay-vnf”
- Run “docker-compose down –remove-orphans”
- Run “sudo rm -rf /baa”
- Run “docker-compose -f docker-compose.yml up -d –build”
- Open two new terminals (t1 and t2)
- On terminal t1 run “docker logs -f pppoe-relay-vnf”
- On terminal t2 run “docker exec -it baa tail -F /baa/baa-dist-1.0.0/data/log/karaf.log”
- Using a packet sniffer (ex: Wireshark), probe the “client_olt” and “server_olt” interfaces
- Wait for baa to finish initializing
- Connect netconf client to baa
- Send the following xml document to baa
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="181">
<edit-config>
<target>
<running/>
</target>
<config>
<baa-network-manager:network-manager xmlns:baa-network-manager="urn:bbf:yang:obbaa:network-manager">
<baa-network-manager:network-functions-settings>
<baa-network-manager:nf-client>
<baa-network-manager:enabled>true</baa-network-manager:enabled>
<baa-network-manager:nf-initiate>
<baa-network-manager:remote-endpoints>
<!-- vomci 1-->
<baa-network-manager:remote-endpoint>
<baa-network-manager:name>pppoe-kfk-1</baa-network-manager:name>
<baa-network-manager:nf-type xmlns:bbf-d-olt-nft="urn:bbf:yang:bbf-d-olt-network-function-types">bbf-d-olt-nft:d-olt-pppoeia</baa-network-manager:nf-type>
<baa-network-manager:local-endpoint-name>vOLTMF_Kafka_1</baa-network-manager:local-endpoint-name>
<baa-network-manager:kafka-agent>
<baa-network-manager:kafka-agent-parameters>
<baa-network-manager:client-id>client-id1</baa-network-manager:client-id>
<baa-network-manager:publication-parameters>
<baa-network-manager:topic>
<baa-network-manager:name>pppoe_relay_vnf-request</baa-network-manager:name>
<baa-network-manager:purpose>VOMCI_REQUEST</baa-network-manager:purpose>
</baa-network-manager:topic>
</baa-network-manager:publication-parameters>
<baa-network-manager:consumption-parameters>
<baa-network-manager:group-id>group-id</baa-network-manager:group-id>
<baa-network-manager:topic>
<baa-network-manager:name>pppoe_relay_vnf-response</baa-network-manager:name>
<baa-network-manager:purpose>VOMCI_RESPONSE</baa-network-manager:purpose>
</baa-network-manager:topic>
<baa-network-manager:topic>
<baa-network-manager:name>pppoe_relay_vnf-notification</baa-network-manager:name>
<baa-network-manager:purpose>VOMCI_NOTIFICATION</baa-network-manager:purpose>
</baa-network-manager:topic>
</baa-network-manager:consumption-parameters>
</baa-network-manager:kafka-agent-parameters>
</baa-network-manager:kafka-agent>
<baa-network-manager:access-point>
<baa-network-manager:name>pppoe1</baa-network-manager:name>
<baa-network-manager:kafka-agent>
<baa-network-manager:kafka-agent-transport-parameters>
<baa-network-manager:remote-address>kafka</baa-network-manager:remote-address>
</baa-network-manager:kafka-agent-transport-parameters>
</baa-network-manager:kafka-agent>
</baa-network-manager:access-point>
</baa-network-manager:remote-endpoint>
</baa-network-manager:remote-endpoints>
</baa-network-manager:nf-initiate>
</baa-network-manager:nf-client>
</baa-network-manager:network-functions-settings>
<!-- network functions -->
<baa-network-manager:network-functions>
<baa-network-manager:network-function>
<baa-network-manager:name>pppoe1</baa-network-manager:name>
<baa-network-manager:type xmlns:bbf-d-olt-nft="urn:bbf:yang:bbf-d-olt-network-function-types">bbf-d-olt-nft:d-olt-pppoeia</baa-network-manager:type>
<!-- must match the local endpoint name configured locally in the vOMCI function -->
<baa-network-manager:remote-endpoint-name>pppoe-kfk-1</baa-network-manager:remote-endpoint-name>
</baa-network-manager:network-function>
</baa-network-manager:network-functions>
</baa-network-manager:network-manager>
</config>
</edit-config>
</rpc>
- Wait for terminal t1 to report kafka connection and packet received ~~~ INFO[2023-06-23T15:18:39Z] [Starting event handling thread]
INFO[2023-06-23T15:19:46Z] [Received packet: header:{msg_id:”3” sender_name:”vOLTMF” recipient_name:”vomci-vendor-1” object_name:”ont1”} …
13. Send the following xml document to baa
14. On terminal t1 wait for the following logs
INFO[2023-06-23T15:19:46Z] [Received an UpdateConfig message.]
INFO[2023-06-23T15:19:46Z] [Update Config Instance Request]
INFO[2023-06-23T15:19:46Z] [Handling UpdateConfig message]
15. Now a PPPoE session should be established. If it is not, it is possible that the PPPoE client is not sending discovery packets. In that case run "docker exec -it pppoe_client bash" and "./client.sh". A PPPoE session should now be established.
The packet sniffer should have captured some PPPoE Discovery packets. Packets from the OLT to the Client/Server should have a "circuit-id" and a "remote-id" tags.
## Connection of pOLT via Control Relay
This scenario is similiar to the one above, but the PPPoE VNF and OLT comunicate through a Control Relay. The PPPoE VNF in this case is a client of the Control Relay.
<p align="center">
<img width="600px" height="200px" src="control_relay.png">
</p>
1. From the project's root, run "cd pppoe-relay-vnf"
2. Run "docker-compose down --remove-orphans"
3. Run "sudo rm -rf /baa"
4. Run "docker-compose -f docker-compose-relay.yml up -d --build"
5. Open two new terminals (t1 and t2)
6. On terminal t1 run "docker logs -f pppoe-relay-vnf"
7. On terminal t2 run "docker exec -it baa tail -F /baa/baa-dist-1.0.0/data/log/karaf.log"
8. Using a packet sniffer (ex: Wireshark), probe the "client_olt" and "server_olt" interfaces
9. Wait for baa to finish initializing
10. Connect netconf client to baa
11. Send the following xml document to baa
rpc xmlns=”urn:ietf:params:xml:ns:netconf:base:1.0” message-id=”181”>
</baa-network-manager:remote-endpoints>
</baa-network-manager:nf-initiate>
</baa-network-manager:nf-client>
</baa-network-manager:network-functions-settings>
<!-- network functions -->
<baa-network-manager:network-functions>
<baa-network-manager:network-function>
<baa-network-manager:name>pppoe1</baa-network-manager:name>
<baa-network-manager:type xmlns:bbf-d-olt-nft="urn:bbf:yang:bbf-d-olt-network-function-types">bbf-d-olt-nft:d-olt-pppoeia</baa-network-manager:type>
<!-- must match the local endpoint name configured locally in the vOMCI function -->
<baa-network-manager:remote-endpoint-name>pppoe-kfk-1</baa-network-manager:remote-endpoint-name>
</baa-network-manager:network-function>
</baa-network-manager:network-functions>
</baa-network-manager:network-manager>
</config>
</edit-config>
</rpc>
12. Wait for terminal t1 to report kafka connection and packet received
INFO[2023-06-23T15:18:39Z] [Starting event handling thread]
INFO[2023-06-23T15:19:46Z] [Received packet: header:{msg_id:”3” sender_name:”vOLTMF” recipient_name:”vomci-vendor-1” object_name:”ont1”} …
13. Send the following xml document to baa
At this point, packets should be arriving to the vnf and being discarded
14. Send the following xml document to baa
15. On terminal t1 wait for the following logs
INFO[2023-06-23T15:19:46Z] [Received an UpdateConfig message.]
INFO[2023-06-23T15:19:46Z] [Update Config Instance Request]
INFO[2023-06-23T15:19:46Z] [Handling UpdateConfig message] ~~~
- Now a PPPoE session should be established. If it is not, it is possible that the PPPoE client is not sending discovery packets. In that case run “docker exec -it pppoe_client bash” and “./client.sh”. A PPPoE session should now be established. The packet sniffer should have captured some PPPoE Discovery packets. Packets from the OLT to the Client/Server should have a “circuit-id” and a “remote-id” tags.