--- /dev/null
+[[developer-and-testing-preliminary]]
+= PCMM Developer and Testing (*Preliminary*)
+
+[[specification]]
+== Specification
+
+http://www.cablelabs.com/wp-content/uploads/specdocs/PKT-SP-MM-I05-091029.pdf[PacketCable™
+Specification Multimedia Specification PKT-SP-MM-I05-091029]
+
+[[system-overview]]
+== System Overview
+
+These components introduce a DOCSIS QoS Service Flow management using
+the PCMM protocol. The driver component is responsible for the
+PCMM/COPS/PDP functionality required to service requests from
+PacketCable Provider and FlowManager. Requests are transposed into PCMM
+Gate Control messages and transmitted via COPS to the CMTS. This plugin
+adheres to the PCMM/COPS/PDP functionality defined in the CableLabs
+specification. PacketCable solution is an MDSAL compliant component.
+
+image:Screenshot6.png[Screenshot6.png,title="Screenshot6.png"]
+
+image:Odp_diagram_helium_v6.jpg[Odp_diagram_helium_v6.jpg,title="Odp_diagram_helium_v6.jpg"]
+
+[[packetcable-components]]
+== Packetcable Components
+
+packetcable is comprised of three OpendayLight bundles
+
+[cols=",",options="header",]
+|=======================================================================
+|Bundle |Description
+|packetcable-model |Contains the YANG information model for flows and
+nodes
+
+|packetcable-provider |Provider hosts the model processing, RESTCONF,
+API implementation, and brokers requests to consumer
+
+|packetcable-consumer |Consumer hosts packet codec and sends requests to
+driver
+
+|packetcable-driver |The codec for transforming the model into the
+appropriate PCMM Gate message for flows and CMTS connections.
+|=======================================================================
+
+See
+https://git.opendaylight.org/gerrit/gitweb?p=packetcable.git;a=tree;f=packetcable-model/src/main/yang[YANG
+Model]
+
+[[tell-a-bundle-to-log-debug]]
+==== Tell a Bundle to Log Debug
+
+` log:set org.opendaylight.packetcable.packetcable-provider`
+
+[[tools-for-testing]]
+== Tools for Testing
+
+[[custom-testsuite]]
+=== Custom Testsuite
+
+Most of the
+[https://wiki.opendaylight.org/view/OpenDaylight_OpenFlow_Plugin::Python_test_scripts
+Openflow tests for RESTCONF] can be adapted for PCMM and service flow
+testing.
+https://git.opendaylight.org/gerrit/gitweb?p=packetcable.git;a=tree;f=packetcable-client[Browse
+this folder] for WIP of tests and examples used for minimum acceptance
+testing.
+
+[[restconfapi.py]]
+==== restconfapi.py
+
+Scripted series of packetcable actions testing minimum compliance.
+
+For example, adding a CMTS, adding IPv4 flow, delete flow and delete
+CMTS.
+
+Other flows can be formulated and added to create a regression test of
+what kind of flows are interesting for use cases. Multicast?
+
+[[flow_config_perf_pcmm.py]]
+==== flow_config_perf_pcmm.py
+
+For load testing there is this nice tool that could be repurpose to load
+test a CMTS. TODO: Adapt this script for load testing PCMM on a CMTS.
+
+[[yang-ide]]
+=== Yang-IDE
+
+https://github.com/xored/yang-ide/wiki/Setup-and-build[Setup and Build
+Yang-IDE for Eclipse]
+
+[[using-wireshark-to-trace-pcmm]]
+== Using Wireshark to Trace PCMM
+
+1. To start wireshark with privileges issue the following command:
++
+----------------
+sudo wireshark &
+----------------
+2. Select the interface to monitor.
+3. Use the Filter to only display COPS messages by applying “cops” in
+the filter field.
+
+image:Screenshot8.png[Screenshot8.png,title="Screenshot8.png"]
+
+[[debugging-and-verifying-dqos-gate-flows-on-the-cmts]]
+== Debugging and Verifying DQoS Gate (Flows) on the CMTS
+
+http://books.google.com/books?id=zNnCLUa8CHQC&pg=PA701&lpg=PA701&dq=show+packetcable+gate[This
+book] serves as a good reference. Below are some of the most useful CMTS
+commands to verify flows have been enabled on the CMTS.
+
+[[cisco]]
+=== Cisco
+
+http://www.cisco.com/c/en/us/td/docs/cable/cmts/cmd_ref/b_cmts_cable_cmd_ref.pdf[Cisco
+CMTS Cable Command Reference]
+
+[[find-the-cable-modem]]
+=== Find the Cable Modem
+
+-----------------------------------------------------------------------------------
+10k2-DSG#show cable modem
+ D
+MAC Address IP Address I/F MAC Prim RxPwr Timing Num I
+ State Sid (dBmv) Offset CPE P
+0010.188a.faf6 0.0.0.0 C8/0/0/U0 offline 1 0.00 1482 0 N
+74ae.7600.01f3 10.32.115.150 C8/0/10/U0 online 1 -0.50 1431 0 Y
+0010.188a.fad8 10.32.115.142 C8/0/10/UB w-online 2 -0.50 1507 1 Y
+000e.0900.00dd 10.32.115.143 C8/0/10/UB w-online 3 1.00 1677 0 Y
+e86d.5271.304f 10.32.115.168 C8/0/10/UB w-online 6 -0.50 1419 1 Y
+-----------------------------------------------------------------------------------
+
+[[show-pcmm-plugin-connection]]
+=== Show PCMM Plugin Connection
+
+----------------------------------------------------------------------------
+10k2-DSG#show packetcabl ?
+ cms Gate Controllers connected to this PacketCable client
+ event Event message server information
+ gate PacketCable gate information
+ global PacketCable global information
+
+10k2-DSG#show packetcable cms
+GC-Addr GC-Port Client-Addr COPS-handle Version PSID Key PDD-Cfg
+
+
+10k2-DSG#show packetcable cms
+GC-Addr GC-Port Client-Addr COPS-handle Version PSID Key PDD-Cfg
+10.32.0.240 54238 10.32.15.3 0x4B9C8150/1 4.0 0 0 0
+----------------------------------------------------------------------------
+
+[[show-cops-messages]]
+=== Show COPS Messages
+
+------------------
+debug cops details
+------------------
+
+[[use-cm-mac-address-to-list-service-flows]]
+=== Use CM Mac Address to List Service Flows
+
+------------------------------------------------------------------------------------
+10k2-DSG#show cable modem
+ D
+MAC Address IP Address I/F MAC Prim RxPwr Timing Num I
+ State Sid (dBmv) Offset CPE P
+0010.188a.faf6 --- C8/0/0/UB w-online 1 0.50 1480 1 N
+74ae.7600.01f3 10.32.115.150 C8/0/10/U0 online 1 -0.50 1431 0 Y
+0010.188a.fad8 10.32.115.142 C8/0/10/UB w-online 2 -0.50 1507 1 Y
+000e.0900.00dd 10.32.115.143 C8/0/10/UB w-online 3 0.00 1677 0 Y
+e86d.5271.304f 10.32.115.168 C8/0/10/UB w-online 6 -0.50 1419 1 Y
+
+
+10k2-DSG#show cable modem 000e.0900.00dd service-flow
+
+
+SUMMARY:
+MAC Address IP Address Host MAC Prim Num Primary DS
+ Interface State Sid CPE Downstream RfId
+000e.0900.00dd 10.32.115.143 C8/0/10/UB w-online 3 0 Mo8/0/2:1 2353
+
+
+Sfid Dir Curr Sid Sched Prio MaxSusRate MaxBrst MinRsvRate Throughput
+ State Type
+23 US act 3 BE 0 0 3044 0 39
+30 US act 16 BE 0 500000 3044 0 0
+24 DS act N/A N/A 0 0 3044 0 17
+
+
+
+UPSTREAM SERVICE FLOW DETAIL:
+
+SFID SID Requests Polls Grants Delayed Dropped Packets
+ Grants Grants
+23 3 784 0 784 0 0 784
+30 16 0 0 0 0 0 0
+
+
+DOWNSTREAM SERVICE FLOW DETAIL:
+
+SFID RP_SFID QID Flg Policer Scheduler FrwdIF
+ Xmits Drops Xmits Drops
+24 33019 131550 0 0 777 0 Wi8/0/2:2
+
+Flags Legend:
+$: Low Latency Queue (aggregated)
+~: CIR Queue
+------------------------------------------------------------------------------------
+
+[[deleting-a-pcmm-gate-message-from-the-cmts]]
+=== Deleting a PCMM Gate Message from the CMTS
+
+------------------------------------------
+10k2-DSG#test cable dsd 000e.0900.00dd 30
+------------------------------------------
+
+[[find-service-flows]]
+=== Find service flows
+
+All gate controllers currently connected to the PacketCable client are
+displayed
+
+------------------------------------------------------
+show cable modem 00:11:22:33:44:55 service flow ????
+show cable modem
+------------------------------------------------------
+
+[[debug-and-display-pcmm-gate-messages]]
+=== Debug and display PCMM Gate messages
+
+------------------------------
+debug packetcable gate control
+debug packetcable gate events
+show packetcable gate summary
+show packetcable global
+show packetcable cms
+------------------------------
+
+[[debug-cops-messages]]
+=== Debug COPS messages
+
+-----------------------------
+debug cops detail
+debug packetcable cops
+debug cable dynamic_qos trace
+-----------------------------
+
+[[arris]]
+=== Arris
+
+Pending
+
+[[integration-verification]]
+== Integration Verification
+
+Checkout the integration project and perform regression tests.
+
+--------------------------------------------------------------------------
+git clone ssh://${ODL_USERNAME}@git.opendaylight.org:29418/integration.git
+git clone https:/git.opendaylight.org/gerrit/integration.git
+--------------------------------------------------------------------------
+
+1. Check and edit the
+integration/features/src/main/resources/features.xml and follow the
+directions there.
+2. Check and edit the integration/features/pom.xml and add a dependency
+for your feature file
+3. Build integration/features and debug
+
+` mvn clean install`
+
+Test your feature in the integration/distributions/extra/karaf/
+distribution
+
+-----------------------------------------
+cd integration/distributions/extra/karaf/
+mvn clean install
+cd target/assembly/bin
+./karaf
+-----------------------------------------
+
+[[service-wrapper]]
+=== service-wrapper
+
+Install http://karaf.apache.org/manual/latest/users-guide/wrapper.html
+
+--------------------------------------------------------------------------------------------------------
+opendaylight-user@root>feature:install service-wrapper
+opendaylight-user@root>wrapper:install --help
+DESCRIPTION
+ wrapper:install
+
+Install the container as a system service in the OS.
+
+SYNTAX
+ wrapper:install [options]
+
+OPTIONS
+ -d, --display
+ The display name of the service.
+ (defaults to karaf)
+ --help
+ Display this help message
+ -s, --start-type
+ Mode in which the service is installed. AUTO_START or DEMAND_START (Default: AUTO_START)
+ (defaults to AUTO_START)
+ -n, --name
+ The service name that will be used when installing the service. (Default: karaf)
+ (defaults to karaf)
+ -D, --description
+ The description of the service.
+ (defaults to )
+
+opendaylight-user@root> wrapper:install
+Creating file: /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/bin/karaf-wrapper
+Creating file: /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/bin/karaf-service
+Creating file: /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/etc/karaf-wrapper.conf
+Creating file: /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/lib/libwrapper.so
+Creating file: /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/lib/karaf-wrapper.jar
+Creating file: /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/lib/karaf-wrapper-main.jar
+
+Setup complete. You may wish to tweak the JVM properties in the wrapper configuration file:
+/home/user/odl/distribution-karaf-0.2.0-Helium-RC0/etc/karaf-wrapper.conf
+before installing and starting the service.
+
+
+Ubuntu/Debian Linux system detected:
+ To install the service:
+ $ ln -s /home/user/odl/distribution-karaf-0.2.0-Helium-RC0/bin/karaf-service /etc/init.d/
+
+ To start the service when the machine is rebooted:
+ $ update-rc.d karaf-service defaults
+
+ To disable starting the service when the machine is rebooted:
+ $ update-rc.d -f karaf-service remove
+
+ To start the service:
+ $ /etc/init.d/karaf-service start
+
+ To stop the service:
+ $ /etc/init.d/karaf-service stop
+
+ To uninstall the service :
+ $ rm /etc/init.d/karaf-service
+--------------------------------------------------------------------------------------------------------
--- /dev/null
+[[pcmm-user-guide-preliminary]]
+= PCMM User Guide (*Preliminary*)
+
+[[system-overview]]
+== System Overview
+
+These components introduce a DOCSIS QoS Service Flow management using
+the PCMM protocol. The driver component is responsible for the
+PCMM/COPS/PDP functionality required to service requests from
+PacketCable Provider and FlowManager. Requests are transposed into PCMM
+Gate Control messages and transmitted via COPS to the CMTS. This plugin
+adheres to the PCMM/COPS/PDP functionality defined in the CableLabs
+specification. PacketCable solution is an MDSAL compliant component.
+
+image:Screenshot6.png[Screenshot6.png,title="Screenshot6.png"]
+
+image:Odp_diagram_helium_v6.jpg[Odp_diagram_helium_v6.jpg,title="Odp_diagram_helium_v6.jpg"]
+
+[[dependency-map]]
+== Dependency Map
+
+image:ODL-Helium-dependency.png[ODL-Helium-dependency.png,title="ODL-Helium-dependency.png"]
+
+[[packetcable-components]]
+== Packetcable Components
+
+packetcable is comprised of three OpendayLight bundles
+
+[cols=",",options="header",]
+|=======================================================================
+|Bundle |Description
+|packetcable-model |Contains the YANG information model for flows and
+nodes
+
+|packetcable-provider |Provider hosts the model processing, RESTCONF,
+API implementation, and brokers requests to consumer
+
+|packetcable-consumer |Consumer hosts packet codec and sends requests to
+driver
+
+|packetcable-driver |The codec for transforming the model into the
+appropriate PCMM Gate message for flows and CMTS connections.
+|=======================================================================
+
+See
+https://git.opendaylight.org/gerrit/gitweb?p=packetcable.git;a=tree;f=packetcable-model/src/main/yang[YANG
+Model]
+
+[[features-to-install]]
+=== Features to Install
+
+---------------------------------------------------------------------------------------------------------------------------
+opendaylight-user@root>feature:install odl-restconf odl-l2switch-switch odl-dlux-core odl-mdsal-apidocs odl-packetcable-all
+---------------------------------------------------------------------------------------------------------------------------
+
+[[accessing-user-interface-assets]]
+== Accessing User Interface Assets
+
+[[management-ui]]
+=== Management UI
+
+[[install-node.js]]
+==== Install Node.js
+
+Use the following script install_nodejs.sh to guide you through Node.js
+installation on Ubuntu.
+
+-------------------------------------------------
+#!/bin/sh
+
+sudo apt-get install nodejs nodejs-legacy npm git
+sudo npm -g install grunt
+sudo npm -g install grunt-cli
+sudo npm -g install bower
+sudo npm -g install karma
+sudo npm -g install karma-cli
+-------------------------------------------------
+
+NOTE: Not needed unless running standalone.
+https://wiki.opendaylight.org/view/OpenDaylight_dlux:Setup_and_Run[Setup
+dLux for Development]
+
+http://localhost:8181/dlux/index.html
+
+user: admin
+
+password: admin
+
+Sign in
+
+image:Screenshot4.png[|Dlux Login,title="|Dlux Login"]
+
+Manage Flows
+
+image:Screenshot3.png[|Dlux Flows,title="|Dlux Flows"]
+
+Manage Nodes
+
+image:Screenshot2.png[|Dlux Nodes,title="|Dlux Nodes"]
+
+[[explore-and-exercise-the-packetcable-rest-api]]
+=== Explore and exercise the PacketCable REST API
+
+http://localhost:8181/apidoc/explorer/index.html
+
+link:#RESTCONF_API_Explorer[ See Explorer ]
+
+[[Add CMTS]]
+== Adding a CMTS to OpenDaylight Inventory
+
+Add a CMTS to Opendaylight Inventory
+
+image:Screenshot1.png[Add CMTS using RESTCONF
+Explorer,title="Add CMTS using RESTCONF Explorer"]
+
+[[postman]]
+=== Postman
+
+https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en[Configure
+the Chrome browser]
+
+https://git.opendaylight.org/gerrit/gitweb?p=packetcable.git;a=tree;f=packetcable-client[Download
+and import sample packetcable collection]
+
+image:Screenshot5.png[Postman,title="Postman"]
+