1 == Packet Cable MultiMedia (PCMM)
3 === Checking out the Packetcable PCMM project
4 git clone https://git.opendaylight.org/gerrit/p/packetcable.git
6 The above command will create a directory called "packetcable" with the project.
10 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 MD-SAL compliant component.
13 image::pcmm-architecture.png["System Overview",width=500]
17 image::pcmm-depends-map.png["Dependency Map",width=500]
19 === Packetcable Components
21 packetcable is comprised of three OpenDaylight bundles
23 .Table of Bundle and Components
25 |=======================
27 | packetcable-model | Contains the YANG information model for flows and nodes
28 | packetcable-provider | Provider hosts the model processing, RESTCONF, API implementation, and brokers requests to consumer
29 | packetcable-driver | Driver manages PCMM Gate message over COPS for flows and CMTS connections
30 | packetcable-consumer | Consumer is the codec for for transforming the model of nodes and flows to COPS Gate messages
31 |=======================
34 See link:https://git.opendaylight.org/gerrit/gitweb?p=packetcable.git;a=tree;f=packetcable-model/src/main/yang[YANG Model]
36 === Download and Install
42 link:http://nexus.opendaylight.org/content/groups/staging/org/opendaylight/integration/distribution-karaf/0.2.0-Helium/distribution-karaf-0.2.0-Helium.zip[Download]
45 http://nexus.opendaylight.org/content/groups/staging/org/opendaylight/integration/distribution-karaf/
50 unzip distribution-karaf-0.2.0-Helium.zip
57 cd distribution-karaf-0.2.0-Helium/bin/
61 === Preparing to Work with the Packetcable PCMM Service
63 ==== Minimum install procedure
67 opendaylight-user@root>feature:install odl-packetcable-all
70 ==== Useful Features to Start with PCMM
74 opendaylight-user@root>feature:install odl-restconf odl-l2switch-switch odl-dlux-core odl-mdsal-apidocs odl-packetcable-all
77 ==== Auto Starting a Series of Bundles using Karaf
79 Edit etc/org.apache.karaf.features.cfg ‘featuresBoot'
83 # Comma separated list of features to install at startup
85 featuresBoot=config,standard,region,package,kar,ssh,management,odl-restconf,odl-l2switch-switch,odl-dlux-core,odl-mdsal-apidocs,odl-packetcable-all
89 ==== Starting Karaf as System Service
91 cd distribution-karaf-0.2.0-Helium/
95 ===== Accessing the Karaf Console
98 ssh -p 8101 karaf@localhost
102 ===== Add These Directives to Your Operating System Profile to Change the Karaf Startup Parameters for Troubleshooting
105 export KARAF_DEBUG=true
106 export JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
109 ===== Tell a Bundle to Log Debug
112 log:set org.opendaylight.packetcable
118 http://localhost:8181/dlux/index.html
120 |=======================
123 |=======================
129 image::pcmm-dlux-login.png["Dlux Login",width=500]
133 .View and Manage Flows in Dlux
134 image::pcmm-dlux-flows.png["Dlux Flows",width=500]
138 .View and Manage Nodes in Dlux
139 image::pcmm-dlux-nodes.png["Dlux Nodes",width=500]
142 === Explore and exercise the PacketCable REST API
143 http://localhost:8181/apidoc/explorer/index.html
147 === RESTCONF API Explorer
149 http://localhost:8181/apidoc/explorer/index.html
151 Add a CMTS to Opendaylight Inventory
153 .Add CMTS using RESTCONF Explorer
154 image::pcmm-apidoc-explorer.png["Add CMTS using RESTCONF Explorer",width=500]
159 link:https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en[Configure the Chrome browser]
161 Download and import sample
162 link:https://git.opendaylight.org/gerrit/gitweb?p=packetcable.git;a=tree;f=packetcable-client[packetcable collection] for Postman.
164 .Postman Collection for Packetcable PCMM
165 image::pcmm-postman.png["Postman",width=500]
169 Most of the tests for RESTCONF can be adapted for PCMM and service flow testing. The following list of
170 Packetcable client testing. Browse this folder for tests and examples used for testing.
174 Scripted series of packetcable actions testing compliance. Other flows can be formulated and added to create a regression test of what kind of flows are interesting for use cases.
177 ==== flow_config_perf_pcmm.py
178 For load testing there is this nice tool that could be repurpose to load test a CMTS.
180 === Using Wireshark to Trace PCMM
181 To start wireshark with privileges issue the following command:
187 Select the interface to monitor.
189 Use the Filter to only display COPS messages by applying “cops” in the filter field.
190 .Using Wireshark to View COPS
191 image::pcmm-wireshark.png["Wireshark",width=500]
193 === Debugging and Verifying DQoS Gate (Flows) on the CMTS
195 Below are some of the most useful CMTS commands to verify flows have been enabled on the CMTS.
199 link:http://www.cisco.com/c/en/us/td/docs/cable/cmts/cmd_ref/b_cmts_cable_cmd_ref.pdf[Cisco CMTS Cable Command Reference]
202 === Find the Cable Modem
206 10k2-DSG#show cable modem
208 MAC Address IP Address I/F MAC Prim RxPwr Timing Num I
209 State Sid (dBmv) Offset CPE P
210 0010.188a.faf6 0.0.0.0 C8/0/0/U0 offline 1 0.00 1482 0 N
211 74ae.7600.01f3 10.32.115.150 C8/0/10/U0 online 1 -0.50 1431 0 Y
212 0010.188a.fad8 10.32.115.142 C8/0/10/UB w-online 2 -0.50 1507 1 Y
213 000e.0900.00dd 10.32.115.143 C8/0/10/UB w-online 3 1.00 1677 0 Y
214 e86d.5271.304f 10.32.115.168 C8/0/10/UB w-online 6 -0.50 1419 1 Y
217 ==== Show PCMM Plugin Connection
221 10k2-DSG#show packetcabl ?
222 cms Gate Controllers connected to this PacketCable client
223 event Event message server information
224 gate PacketCable gate information
225 global PacketCable global information
227 10k2-DSG#show packetcable cms
228 GC-Addr GC-Port Client-Addr COPS-handle Version PSID Key PDD-Cfg
231 10k2-DSG#show packetcable cms
232 GC-Addr GC-Port Client-Addr COPS-handle Version PSID Key PDD-Cfg
233 10.32.0.240 54238 10.32.15.3 0x4B9C8150/1 4.0 0 0 0
236 ==== Show COPS Messages
243 ==== Use CM Mac Address to List Service Flows
247 10k2-DSG#show cable modem
249 MAC Address IP Address I/F MAC Prim RxPwr Timing Num I
250 State Sid (dBmv) Offset CPE P
251 0010.188a.faf6 --- C8/0/0/UB w-online 1 0.50 1480 1 N
252 74ae.7600.01f3 10.32.115.150 C8/0/10/U0 online 1 -0.50 1431 0 Y
253 0010.188a.fad8 10.32.115.142 C8/0/10/UB w-online 2 -0.50 1507 1 Y
254 000e.0900.00dd 10.32.115.143 C8/0/10/UB w-online 3 0.00 1677 0 Y
255 e86d.5271.304f 10.32.115.168 C8/0/10/UB w-online 6 -0.50 1419 1 Y
258 10k2-DSG#show cable modem 000e.0900.00dd service-flow
262 MAC Address IP Address Host MAC Prim Num Primary DS
263 Interface State Sid CPE Downstream RfId
264 000e.0900.00dd 10.32.115.143 C8/0/10/UB w-online 3 0 Mo8/0/2:1 2353
267 Sfid Dir Curr Sid Sched Prio MaxSusRate MaxBrst MinRsvRate Throughput
269 23 US act 3 BE 0 0 3044 0 39
270 30 US act 16 BE 0 500000 3044 0 0
271 24 DS act N/A N/A 0 0 3044 0 17
275 UPSTREAM SERVICE FLOW DETAIL:
277 SFID SID Requests Polls Grants Delayed Dropped Packets
279 23 3 784 0 784 0 0 784
283 DOWNSTREAM SERVICE FLOW DETAIL:
285 SFID RP_SFID QID Flg Policer Scheduler FrwdIF
286 Xmits Drops Xmits Drops
287 24 33019 131550 0 0 777 0 Wi8/0/2:2
290 $: Low Latency Queue (aggregated)
294 ==== Deleting a PCMM Gate Message from the CMTS
298 10k2-DSG#test cable dsd 000e.0900.00dd 30
301 ==== Find service flows
303 All gate controllers currently connected to the PacketCable client are displayed
307 show cable modem 00:11:22:33:44:55 service flow ????
312 ==== Debug and display PCMM Gate messages
315 debug packetcable gate control
316 debug packetcable gate events
317 show packetcable gate summary
318 show packetcable global
322 ==== Debug COPS messages
326 debug packetcable cops
327 debug cable dynamic_qos trace
335 === RESTCONF API for Packetcable PCMM
339 CMTS can be read, created, updated and deleted by a user having the
340 correct role. An ID is used to identify where to read
341 or save the CMTS node.
348 | /restconf/config/opendaylight-inventory:nodes/node/[id]/packetcable-cmts:cmts-node/
355 // include::cmts-get-request.json.adoc[]
362 // include::cmts-get-response.json.adoc[]
376 | /restconf/config/opendaylight-inventory:nodes/node/[id]/packetcable-cmts:cmts-node/
383 // include::cmts-put-response.json.adoc[]
387 "packetcable-cmts:cmts-node": {
389 "address": "10.200.90.3"
409 | /restconf/config/opendaylight-inventory:nodes/node/[id]/packetcable-cmts:cmts-node/
416 // include::cmts-delete-request.json.adoc[]
433 Flows can be read, created, updated and deleted by a user having the
434 correct role. A CMTS ID is used to identify which CMTS node to read
435 or save the flow. Note: The Table ID is not used.
442 | /restconf/config/opendaylight-inventory:nodes/node/[cmts id]/table/0/flow/[flow id]
449 // include::flow-get-request.json.adoc[]
456 // include::flow-get-response.json.adoc[]
462 "cookie_mask": "255",
463 "flow-name": "FooXf7",
464 "hard-timeout": "1200",
466 "idle-timeout": "3400",
467 "installHw": "false",
473 "traffic-profile": "best-effort"
490 "ipv6-destination": "fe80:2acf:e9ff:fe21::6431/94",
491 "ipv6-source": "1234:5678:9ABC:DEF0:FDCD:A987:6543:210F/76",
492 "tcp-destination-port": "8080",
493 "tcp-source-port": "183"
508 | /restconf/config/opendaylight-inventory:nodes/node/[cmts id]/table/0/flow/[flow id]
515 // include::flow-put-response.json.adoc[]
521 "flow-name": "FooXCableFlowCrazyTrafficProfileFBesteffort1",
523 "installHw": "false",
528 "traffic-profile": "best-effort",
529 "be-authorized-envelope": {
530 "traffic-priority":"0",
533 "request-transmission-policy":"0",
534 "maximum-sustained-traffic-rate":"0",
535 "maximum-traffic-burst":"3044",
536 "maximum-reserved-traffic-rate":"0",
537 "traffic-rate-packet-size-maximum-concatenated-burst":"0",
538 "assumed-minimum-reserved":"1522",
539 "required-attribute-mask":"0",
540 "forbidden-attribute-mask":"0",
541 "attribute-aggregation-rule-mask":"0",
543 "be-reserved-envelope": {
544 "traffic-priority":"0",
547 "request-transmission-policy":"0",
548 "maximum-sustained-traffic-rate":"0",
549 "maximum-traffic-burst":"3044",
550 "maximum-reserved-traffic-rate":"0",
551 "traffic-rate-packet-size-maximum-concatenated-burst":"0",
552 "assumed-minimum-reserved":"1522",
553 "required-attribute-mask":"0",
554 "forbidden-attribute-mask":"0",
555 "attribute-aggregation-rule-mask":"0",
557 "be-committed-envelope": {
558 "traffic-priority":"0",
561 "request-transmission-policy":"0",
562 "maximum-sustained-traffic-rate":"0",
563 "maximum-traffic-burst":"3044",
564 "maximum-reserved-traffic-rate":"0",
565 "traffic-rate-packet-size-maximum-concatenated-burst":"0",
566 "assumed-minimum-reserved":"1522",
567 "required-attribute-mask":"0",
568 "forbidden-attribute-mask":"0",
569 "attribute-aggregation-rule-mask":"0",
584 "ipv4-destination": "10.0.0.1/24"
606 | /restconf/config/opendaylight-inventory:nodes/node/[cmts id]/table/0/flow/[flow id]
613 // include::flow-delete-request.json.adoc[]
620 // include::flow-delete-request.json.adoc[]
631 ==== Specifications and References
632 The packetcable-driver was written to the
633 link:http://www.cablelabs.com/wp-content/uploads/specdocs/PKT-SP-MM-I05-091029.pdf[PacketCable Specification Multimedia Specification PKT-SP-MM-I05-091029]