ios-xe renderer - initial push
[groupbasedpolicy.git] / renderers / ios-xe / src / main / yang / netconf / ned.yang
1 module ned {
2
3     prefix ios;
4     namespace
5         "urn:ios";
6
7     import tailf-common {
8         prefix tailf;
9     }
10
11     import ietf-inet-types {
12         prefix inet;
13         revision-date 2013-07-15;
14     }
15
16     import ietf-yang-types {
17         prefix yang;
18       }
19
20     description
21         "This file was adapted to be parsed by yangtools for groupbasedpolicy project purpose";
22
23     revision
24         2016-05-16;
25
26 /// ========================================================================
27 /// typedefs
28 /// ========================================================================
29
30     typedef class-name-type {
31         type union {
32             type string {
33                 // Note: leafref can't be used here due to part of union.
34                 //path "/ios:native/class-map/name";
35                 tailf:info "WORD;;class-map name";
36             }
37             type enumeration {
38                 enum class-default {
39                     tailf:info "System default class matching otherwise "+
40                     "unclassified packet";
41                 }
42             }
43         }
44     }
45
46     typedef cos_value-type {
47         type union {
48             type uint8 {
49                 tailf:info "<0-7>;;new cos value";
50                 range "0..7";
51             }
52             type enumeration {
53                 enum cos {
54                     tailf:info "Set packet cos from cos";
55                 }
56                 enum dscp {
57                     tailf:info "Set packet cos from dscp";
58                 }
59                 enum exp {
60                     tailf:info "Set packet cos from exp";
61                 }
62                 enum precedence {
63                     tailf:info "Set packet cos from precedence";
64                 }
65             }
66         }
67     }
68
69     typedef dscp-type {
70         type union {
71             type uint8 {
72                 tailf:info "<0-63>;;Differentiated services codepoint value";
73                 range "0..63";
74             }
75             type enumeration {
76                 enum af11 {
77                     tailf:info "Match packets with AF11 dscp (001010)";
78                     value 10;
79                 }
80                 enum af12 {
81                     tailf:info "Match packets with AF12 dscp (001100)";
82                     value 12;
83                 }
84                 enum af13 {
85                     tailf:info "Match packets with AF13 dscp (001110)";
86                     value 14;
87                 }
88                 enum af21 {
89                     tailf:info "Match packets with AF21 dscp (010010)";
90                     value 18;
91                 }
92                 enum af22 {
93                     tailf:info "Match packets with AF22 dscp (010100)";
94                     value 20;
95                 }
96                 enum af23 {
97                     tailf:info "Match packets with AF23 dscp (010110)";
98                     value 22;
99                 }
100                 enum af31 {
101                     tailf:info "Match packets with AF31 dscp (011010)";
102                     value 26;
103                 }
104                 enum af32 {
105                     tailf:info "Match packets with AF32 dscp (011100)";
106                     value 28;
107                 }
108                 enum af33 {
109                     tailf:info "Match packets with AF33 dscp (011110)";
110                     value 30;
111                 }
112                 enum af41 {
113                     tailf:info "Match packets with AF41 dscp (100010)";
114                     value 34;
115                 }
116                 enum af42 {
117                     tailf:info "Match packets with AF42 dscp (100100)";
118                     value 36;
119                 }
120                 enum af43 {
121                     tailf:info "Match packets with AF43 dscp (100110)";
122                     value 38;
123                 }
124                 enum cs1 {
125                     tailf:info "Match packets with CS1(precedence 1) dscp" +
126                     " (001000)";
127                     value 8;
128                 }
129                 enum cs2 {
130                     tailf:info "Match packets with CS2(precedence 2) dscp" +
131                     " (010000)";
132                     value 16;
133                 }
134                 enum cs3 {
135                     tailf:info "Match packets with CS3(precedence 3) dscp" +
136                     " (011000)";
137                     value 24;
138                 }
139                 enum cs4 {
140                     tailf:info "Match packets with CS4(precedence 4) dscp" +
141                     " (100000)";
142                     value 32;
143                 }
144                 enum cs5 {
145                     tailf:info "Match packets with CS5(precedence 5) dscp" +
146                     " (101000)";
147                     value 40;
148                 }
149                 enum cs6 {
150                     tailf:info "Match packets with CS6(precedence 6) dscp" +
151                     " (110000)";
152                     value 48;
153                 }
154                 enum cs7 {
155                     tailf:info "Match packets with CS7(precedence 7) dscp" +
156                     " (111000)";
157                     value 56;
158                 }
159                 enum "default" {
160                     tailf:code-name "dscp_default";
161                     tailf:info "Match packets with default dscp (000000)";
162                     value 0;
163                 }
164                 enum dscp {
165                     tailf:info "Set packet dscp from dscp";
166                 }
167                 enum ef {
168                     tailf:info "Match packets with EF dscp (101110)";
169                     value 46;
170                 }
171                 enum precedence {
172                     tailf:info "Set packet dscp from precedence";
173                 }
174             }
175         }
176     }
177
178     typedef exp_value-type {
179         type union {
180             type uint8 {
181                 tailf:info "<0-7>;;new exp";
182                 range "0..7";
183             }
184             type enumeration {
185                 enum cos {
186                     tailf:info "Set packet exp from cos";
187                 }
188                 enum dscp {
189                     tailf:info "Set packet exp from dscp";
190                 }
191                 enum exp {
192                     tailf:info "Set packet exp from exp";
193                 }
194                 enum precedence {
195                     tailf:info "Set packet exp from precedence";
196                 }
197             }
198         }
199     }
200
201     typedef percentage-type {
202         type uint8 {
203             tailf:info "<1-100>;;Percentage";
204             range "1..100";
205         }
206     }
207
208     typedef police-bps-type {
209         type uint64 {
210             tailf:info "<8000-64000000000>;;Bits per second";
211             range "8000..64000000000";
212         }
213     }
214
215     typedef police-burst-type {
216         type uint32 {
217             tailf:info "<1000-512000000>;;Burst bytes";
218             range "1000..512000000";
219         }
220     }
221
222     typedef police-packets-bytes-type {
223         type enumeration {
224             enum packets {
225                 tailf:info "Treat 'burst' value as packets";
226             }
227             enum bytes {
228                 tailf:info "Treat 'burst' value as bytes";
229             }
230         }
231     }
232
233     typedef police-pps-bps-type {
234         type enumeration {
235             enum pps {
236                 tailf:info "pps  Treat 'rate' value in "+
237                 "packets-per-second";
238             }
239             enum bps {
240                 tailf:info "pps  Treat 'rate' value in "+
241                 "bytes-per-second";
242             }
243         }
244     }
245
246     typedef policy-action-type {
247         type enumeration {
248             enum bandwidth  {
249                 tailf:code-name policy_bandwidth;
250                 tailf:info "Bandwidth";
251             }
252             enum compression  {
253                 tailf:info "Activate Compression";
254             }
255             enum dbl {
256                 tailf:info "Dynamic buffer limiting";
257             }
258             enum drop  {
259                 tailf:info "Drop all packets";
260             }
261             enum estimate {
262                 tailf:info "Estimate resources required for this class";
263             }
264             enum fair-queue  {
265                 tailf:info "Enable Flow-based Fair Queuing in this Class";
266             }
267             enum forward {
268                 tailf:info "Forward service-path action";
269             }
270             enum netflow-sampler {
271                 tailf:info "NetFlow action";
272             }
273             enum police  {
274                 tailf:info "Police";
275             }
276             enum priority {
277                 tailf:code-name policy_priority;
278                 tailf:info "Strict Scheduling Priority for this Class";
279             }
280             enum queue-limit  {
281                 tailf:info "Queue Max Threshold for Tail Drop";
282             }
283             enum random-detect {
284                 tailf:info "Enable Random Early Detection as drop policy";
285             }
286             enum service-policy {
287                 tailf:info "Configure Flow Next";
288             }
289             enum set {
290                 tailf:info "Set QoS values";
291             }
292             enum shape {
293                 tailf:code-name policy_shape;
294                 tailf:info "Traffic Shaping";
295             }
296             enum trust {
297                 tailf:info "Set trust value for the class";
298             }
299             enum queue-buffers {
300                tailf:info "queue buffer";
301             }
302         }
303     }
304
305     typedef prec_value-type {
306         type union {
307             type uint8 {
308                 tailf:info "<0-7>;;new precedence";
309                 range "0..7";
310             }
311             type enumeration {
312                 enum cos {
313                     tailf:info "Set packet precedence from cos";
314                 }
315                 enum dscp {
316                     tailf:info "Set packet precedence from dscp";
317                 }
318                 enum exp {
319                     tailf:info "Set packet precedence from exp";
320                 }
321                 enum precedence {
322                     tailf:info "Set packet precedence from precedence";
323                 }
324             }
325         }
326     }
327
328     typedef precedence-type {
329         type union {
330             type uint8 {
331                 tailf:info "<0-7>;;Precedence value";
332                 range "0..7";
333             }
334             type enumeration {
335                 enum critical {
336                     tailf:info "Set packets with critical precedence (5)";
337                 }
338                 enum flash {
339                     tailf:info "Set packets with flash precedence (3)";
340                 }
341                 enum flash-override {
342                     tailf:info "Set packets with flash override precedence (4)";
343                 }
344                 enum immediate {
345                     tailf:info "Set packets with immediate precedence (2)";
346                 }
347                 enum internet {
348                     tailf:code-name "prec_internet";
349                     tailf:info "Set packets with internetwork control"+
350                     " precedence (6)";
351                 }
352                 enum network {
353                     tailf:info "Set packets with network control precedence"+
354                     " (7)";
355                 }
356                 enum priority {
357                     tailf:code-name "prec_priority";
358                     tailf:info "Set packets with priority precedence (1)";
359                 }
360                 enum routine {
361                     tailf:info "Set packets with routine precedence (0)";
362                 }
363             }
364         }
365     }
366
367     typedef precedence-type2 {
368         type union {
369             type uint8 {
370                 tailf:info "<0-7>;;IP precedence";
371                 range "0..7";
372             }
373             type enumeration {
374                 enum rsvp {
375                     tailf:code-name "prec_rsvp";
376                     tailf:info "rsvp traffic";
377                 }
378             }
379         }
380     }
381
382     typedef qos_value-type {
383         type union {
384             type uint8 {
385                 tailf:info "<0-99>;;new qos-group";
386                 range "0..99";
387             }
388             type enumeration {
389                 enum cos {
390                     tailf:info "Set packet qos from cos";
391                 }
392                 enum dscp {
393                     tailf:info "Set packet qos from dscp";
394                 }
395                 enum exp {
396                     tailf:info "Set packet qos from exp";
397                 }
398                 enum precedence {
399                     tailf:info "Set packet qos from precedence";
400                 }
401             }
402         }
403     }
404
405 /// ========================================================================
406 /// groupings
407 /// ========================================================================
408
409     grouping class-map-appnav-not-match-grouping {
410         // class-map * / peer
411         leaf peer {
412         when "../../../type = 'appnav'";
413         tailf:info "APPNAV Peer Filter";
414         description "APPNAV Peer Filter";
415         type string {
416             tailf:info "H.H.H;;Device ID";
417             }
418         }
419     }
420
421     grouping class-map-appnav-match-grouping {
422         // class-map * / peer
423         leaf peer {
424             when "../../type = 'appnav'";
425             tailf:info "APPNAV Peer Filter";
426             description "APPNAV Peer Filter";
427             type string {
428                 tailf:info "H.H.H;;Device ID";
429             }
430         }
431     }
432
433     grouping class-map-match-grouping {
434         // class-map * / match application
435         container application {
436             tailf:info "Application to match";
437             description "Application to match";
438             container application-group {
439                 tailf:info "Application Group to match";
440                 description "Application Group to match";
441                 leaf telepresence-group {
442                     tailf:info "Telepresence Group";
443                     description "Telepresence Group";
444                     tailf:cli-full-command;
445                     type empty;
446                 }
447                 leaf vmware-group {
448                     tailf:info "VMWARE Group";
449                     description "VMWARE Group";
450                     tailf:cli-full-command;
451                     type empty;
452                 }
453                 leaf webex-group {
454                     tailf:info "WebEx Group";
455                     description "WebEx Group";
456                     tailf:cli-full-command;
457                     type empty;
458                 }
459             }
460             container attribute {
461                 tailf:info "Application attribute to match";
462                 description "Application attribute to match";
463                 leaf media-type {
464                     tailf:info "Media type attribute to match";
465                     description "Media type attribute to match";
466                     type enumeration {
467                         enum audio {
468                             tailf:info "Audio";
469                         }
470                         enum audio-video {
471                             tailf:info "Audio Video";
472                         }
473                         enum control {
474                             tailf:info "Control";
475                         }
476                         enum data {
477                             tailf:info "Data";
478                         }
479                         enum video {
480                             tailf:info "Video";
481                         }
482                     }
483                 }
484             }
485         }
486         // class-map * / match access-group
487         container access-group {
488             tailf:info "Access group";
489             description "Access group";
490             leaf index {
491                 tailf:cli-drop-node-name;
492                 type uint32 {
493                     range "1..2699" {
494                         tailf:info "<1-2699>;;Access list index";
495                     }
496                 }
497             }
498             leaf-list name {
499                 tailf:info "Named Access List";
500                 description "Named Access List";
501                 tailf:cli-list-syntax;
502                 type string {
503                     tailf:info "WORD;;Access List name";
504                 }
505             }
506         }
507         // class-map * / match any
508         leaf any {
509             tailf:info "Any packets";
510             description "Any packets";
511             type empty;
512         }
513         // class-map * / match class-map
514         leaf-list class-map {
515             tailf:info "Class map";
516             description "Class map";
517             tailf:cli-list-syntax;
518             type leafref {
519                 path "/ios:native/class-map/name";
520                 // tailf:info "WORD;;Match class-map name";
521             }
522         }
523         // class-map * / match cos
524         leaf-list cos {
525             tailf:info "IEEE 802.1Q/ISL class of service/user priority values";
526             description "IEEE 802.1Q/ISL class of service/user priority values";
527             tailf:cli-flat-list-syntax;
528             type uint8 {
529                 range "0..7";
530                 tailf:info "<0-7>;;Enter up to 4 class-of-service values"+
531                     " separated by white-spaces";
532             }
533         }
534         // class-map * / match destination-address
535         container destination-address {
536             tailf:info "Destination address";
537             description "Destination address";
538             leaf-list mac {
539                 tailf:info "MAC address";
540                 description "MAC address";
541                 tailf:cli-list-syntax;
542                 type yang:mac-address {
543                     tailf:info "H.H.H;;MAC address";
544                 }
545             }
546         }
547         // class-map * / discard-class
548         leaf-list discard-class {
549             tailf:info "Discard behavior identifier";
550             description "Discard behavior identifier";
551             tailf:cli-list-syntax;
552             type uint8 {
553                 range "0..7";
554                 tailf:info "<0-7>;;Discard Class value";
555             }
556         }
557         // class-map * / dscp
558         leaf-list dscp {
559             tailf:info "Match DSCP in IP(v4) and IPv6 packets";
560             description "Match DSCP in IP(v4) and IPv6 packets";
561             tailf:cli-flat-list-syntax;
562             tailf:cli-list-syntax;
563             type dscp-type;
564         }
565         // class-map * / fr-de
566         leaf fr-de {
567             tailf:info "Match on Frame-relay DE bit";
568             description "Match on Frame-relay DE bit";
569             type empty;
570         }
571         // class-map * / fr-dlci
572         leaf-list fr-dlci {
573             tailf:info "Match on fr-dlci";
574             description "Match on fr-dlci";
575             tailf:cli-list-syntax;
576             type uint16 {
577                 range "16..1007";
578                 tailf:info "<16-1007>;;frame-relay dlci number";
579             }
580         }
581         // class-map * / input-interface
582         leaf-list input-interface {
583             tailf:info "Select an input interface to match";
584             description "Select an input interface to match";
585             tailf:cli-list-syntax;
586             //FIXME: interface dependency
587             type string;
588         }
589         // class-map * / ip
590         container ip {
591             tailf:info "IP specific values";
592             description "IP specific values";
593             // class-map * / ip dscp
594             leaf-list dscp {
595                 tailf:info "Match IP DSCP (DiffServ CodePoints)";
596                 description "Match IP DSCP (DiffServ CodePoints)";
597                 tailf:cli-flat-list-syntax;
598                 tailf:cli-list-syntax;
599                 type dscp-type;
600             }
601             // class-map * / ip precedence
602             leaf-list precedence {
603                 tailf:info "Match IP precedence";
604                 description "Match IP precedence";
605                 tailf:cli-flat-list-syntax;
606                 type precedence-type;
607             }
608             // class-map * / ip rtp
609             list rtp {
610                 tailf:info "Match RTP port nos";
611                 description "Match RTP port nos";
612                 key "port1 port2";
613                 leaf port1 {
614                     type uint16 {
615                         range "2000..65535";
616                         tailf:info "<2000-65535>;;Lower bound of UDP"+
617                             " destination port";
618                     }
619                 }
620                 leaf port2 {
621                     type uint16 {
622                         range "0..16383";
623                         tailf:info "<0-16383>;;Range of UDP ports";
624                     }
625                 }
626             }
627         }
628         // class-map * / non-client-nrt
629         leaf non-client-nrt {
630             tailf:cli-full-command;
631             type empty;
632         }
633         // class-map * / mpls
634         container mpls {
635             tailf:info "Multi Protocol Label Switching specific values";
636             description "Multi Protocol Label Switching specific values";
637             container experimental {
638                 tailf:info "Match MPLS experimental";
639                 description "Match MPLS experimental";
640                 leaf-list topmost {
641                     tailf:info "Match MPLS experimental value on topmost label";
642                     description "Match MPLS experimental value on topmost label";
643                     tailf:cli-flat-list-syntax;
644                     type uint8 {
645                     range "0..7";
646                     tailf:info "<0-7>;;Enter up to 8 experimental values "+
647                         "separated by white-spaces";
648                     }
649                 }
650             }
651         }
652         // class-map * / packet
653         container packet {
654             tailf:info "Layer 3 Packet length";
655             description "Layer 3 Packet length";
656             container "length" {
657                 tailf:info "Layer 3 Packet length";
658                 description "Layer 3 Packet length";
659                 leaf max {
660                     tailf:info "Maximum length of packet";
661                     description "Maximum length of packet";
662                     type uint16 {
663                         range "1..2000";
664                         tailf:info "<1-2000>;;Packet length in bytes";
665                     }
666                 }
667                 leaf min {
668                     tailf:info "Minimum length of packet";
669                     description "Minimum length of packet";
670                     type uint16 {
671                         range "1..2000";
672                         tailf:info "<1-2000>;;Packet length in bytes";
673                     }
674                 }
675             }
676         }
677         // class-map * / precedence
678         leaf-list precedence {
679             tailf:info "Match Precedence in IP(v4) and IPv6 packets";
680             description "Match Precedence in IP(v4) and IPv6 packets";
681             tailf:cli-flat-list-syntax;
682             type precedence-type;
683         }
684         // class-map * / protocol
685         container protocol {
686             tailf:info "Protocol";
687             description "Protocol";
688             leaf protocols {
689                 tailf:cli-drop-node-name;
690                 type enumeration {
691                     enum x802-11-iapp {
692                         tailf:info "IEEE 802.11 WLANs WG IAPP";
693                     }
694                     enum ace-svr {
695                         tailf:info "ACE Server/Propagation";
696                     }
697                     enum aol {
698                         tailf:info "America-Online Instant Messenger";
699                     }
700                     enum appleqtc {
701                         tailf:info "Apple QuickTime";
702                     }
703                     enum biff {
704                         tailf:info "Bliff mail notification";
705                     }
706                     enum bittorrent {
707                         tailf:info "bittorrent";
708                     }
709                     enum bootpc {
710                         tailf:info "Bootstrap Protocol Client";
711                     }
712                     enum bootps {
713                         tailf:info "Bootstrap Protocol Server";
714                     }
715                     enum cddbp {
716                         tailf:info "CD Database Protocol";
717                     }
718                     enum cifs {
719                         tailf:info "CIFS";
720                     }
721                     enum cisco-fna {
722                         tailf:info "Cisco FNATIVE";
723                     }
724                     enum cisco-net-mgmt {
725                         tailf:info "cisco-net-mgmt";
726                     }
727                     enum cisco-svcs {
728                         tailf:info "cisco license/perf/GDP/X.25/ident svcs";
729                     }
730                     enum cisco-sys {
731                         tailf:info "Cisco SYSMAINT";
732                     }
733                     enum cisco-tdp {
734                         tailf:info "Cisco TDP";
735                     }
736                     enum cisco-tna {
737                         tailf:info "Cisco TNATIVE";
738                     }
739                     enum citriximaclient {
740                         tailf:info "Citrix IMA Client";
741                     }
742                     enum clp {
743                         tailf:info "Cisco Line Protocol";
744                     }
745                     enum creativepartnr {
746                         tailf:info "Creative Partnr";
747                     }
748                     enum creativeserver {
749                         tailf:info "Creative Server";
750                     }
751                     enum daytime {
752                         tailf:info "Daytime (RFC 867)";
753                     }
754                     enum dbase {
755                         tailf:info "dBASE Unix";
756                     }
757                     enum dbcontrol_agent {
758                         tailf:info "Oracle dbControl Agent po";
759                     }
760                     enum ddns-v3 {
761                         tailf:info "Dynamic DNS Version 3";
762                     }
763                     enum dhcp-failover {
764                         tailf:info "DHCP Failover";
765                     }
766                     enum directconnect {
767                         tailf:info "Direct Connect Version 2.0";
768                     }
769                     enum discard {
770                         tailf:info "Discard port";
771                     }
772                     enum dnsix {
773                         tailf:info "DNSIX Securit Attribute Token Map";
774                     }
775                     enum echo {
776                         tailf:info "Echo port";
777                     }
778                     enum entrust-svc-hdlr {
779                         tailf:info "Entrust KM/Admin Service Handler";
780                     }
781                     enum entrust-svcs {
782                         tailf:info "Entrust sps/aaas/aams";
783                     }
784                     enum exec {
785                         tailf:info "Remote Process Execution";
786                     }
787                     enum fcip-port {
788                         tailf:info "FCIP";
789                     }
790                     enum ftps {
791                         tailf:info "FTP over TLS/SSL";
792                     }
793                     enum gdoi {
794                         tailf:info "GDOI";
795                     }
796                     enum giop {
797                         tailf:info "Oracle GIOP/SSL";
798                     }
799                     enum gtpv0 {
800                         tailf:info "GPRS Tunneling Protocol Version 0";
801                     }
802                     enum gtpv1 {
803                         tailf:info "GPRS Tunneling Protocol Version 1";
804                     }
805                     enum h225ras {
806                         tailf:info "H225 RAS over Unicast";
807                     }
808                     enum h323callsigalt {
809                         tailf:info "h323 Call Signal Alternate";
810                     }
811                     enum hp-alarm-mgr {
812                         tailf:info "HP Performance data alarm manager";
813                     }
814                     enum hp-collector {
815                         tailf:info "HP Performance data collector";
816                     }
817                     enum hp-managed-node {
818                         tailf:info "HP Performance data managed node";
819                     }
820                     enum hsrp {
821                         tailf:info "Hot Standby Router Protocol";
822                     }
823                     enum https {
824                         tailf:info "Secure Hypertext Transfer Protocol";
825                     }
826                     enum ica {
827                         tailf:info "ica (Citrix)";
828                     }
829                     enum icabrowser {
830                         tailf:info "icabrowser (Citrix)";
831                     }
832                     enum ident {
833                         tailf:info "Authentication Service";
834                     }
835                     enum igmpv3lite {
836                         tailf:info "IGMP over UDP for SSM";
837                     }
838                     enum imap3 {
839                         tailf:info "Interactive Mail Access Protocol 3";
840                     }
841                     enum imaps {
842                         tailf:info "IMAP over TLS/SSL";
843                     }
844                     enum ipass {
845                         tailf:info "IPASS";
846                     }
847                     enum ipsec-msft {
848                         tailf:info "Microsoft IPsec NAT-T";
849                     }
850                     enum irc-serv {
851                         tailf:info "IRC-SERV";
852                     }
853                     enum ircs {
854                         tailf:info "IRC over TLS/SSL";
855                     }
856                     enum ircu {
857                         tailf:info "IRCU";
858                     }
859                     enum isakmp {
860                         tailf:info "ISAKMP";
861                     }
862                     enum iscsi {
863                         tailf:info "iSCSI";
864                     }
865                     enum iscsi-target {
866                         tailf:info "iSCSI port";
867                     }
868                     enum kermit {
869                         tailf:info "kermit";
870                     }
871                     enum ldap-admin {
872                         tailf:info "LDAP admin server port";
873                     }
874                     enum ldaps {
875                         tailf:info "LDAP over TLS/SSL";
876                     }
877                     enum login {
878                         tailf:info "Remote login";
879                     }
880                     enum lotusmtap {
881                         tailf:info "Lotus Mail Tracking Agent Protocol";
882                     }
883                     enum lotusnote {
884                         tailf:info "Lotus Note";
885                     }
886                     // AppNav match protocol
887                     enum mapi {
888                         tailf:info "MAPI";
889                     }
890                     enum ms-ad-rep {
891                         tailf:info "MS-AD-REP";
892                     }
893                     enum ms-exch-nspi {
894                         tailf:info "MS-EXCH-NSPI";
895                     }
896                     enum ms-frs {
897                         tailf:info "MS-FRS";
898                     }
899                     enum ms-frsapi {
900                         tailf:info "MS-FRSAPI";
901                     }
902                     enum ms-rfr {
903                         tailf:info "MS-RFR";
904                     }
905                     //ms-sql         MS-SQL
906                     enum msn-messenger {
907                         tailf:info "MSN-MESSENGER";
908                     }
909                     enum netlogon {
910                         tailf:info "NETLOGON";
911                     }
912                     enum microsoft-ds {
913                         tailf:info "Microsoft-DS";
914                     }
915                     enum ms-cluster-net {
916                         tailf:info "MS Cluster Net";
917                     }
918                     enum ms-dotnetster {
919                         tailf:info "Microsoft .NETster Port";
920                     }
921                     enum ms-sna {
922                         tailf:info "Microsoft SNA Server/Base";
923                     }
924                     enum ms-sql {
925                         tailf:info "Microsoft SQL";
926                     }
927                     enum ms-sql-m {
928                         tailf:info "Microsoft SQL Monitor";
929                     }
930                     enum msexch-routing {
931                         tailf:info "Microsoft Exchange Routing";
932                     }
933                     enum msnmsgr {
934                         tailf:info "MSN Instant Messenger";
935                     }
936                     enum msrpc {
937                         tailf:info "Microsoft Remote Procedure Call";
938                     }
939                     enum mysql {
940                         tailf:info "MySQL";
941                     }
942                     enum n2h2server {
943                         tailf:info "N2H2 Filter Service Port";
944                     }
945                     enum ncp {
946                         tailf:info "NCP (Novell)";
947                     }
948                     enum net8-cman {
949                         tailf:info "Oracle Net8 Cman/Admin";
950                     }
951                     enum netbios-dgm {
952                         tailf:info "NETBIOS Datagram Service";
953                     }
954                     enum netbios-ns {
955                         tailf:info "NETBIOS Name Service";
956                     }
957                     enum netbios-ssn {
958                         tailf:info "NETBIOS Session Service";
959                     }
960                     enum netstat {
961                         tailf:info "Variant of systat";
962                     }
963                     enum oem-agent {
964                         tailf:info "OEM Agent (Oracle)";
965                     }
966                     enum oracle {
967                         tailf:info "Oracle";
968                     }
969                     enum oracle-em-vp {
970                         tailf:info "Oracle EM/VP";
971                     }
972                     enum oraclenames {
973                         tailf:info "Oracle Names";
974                     }
975                     enum orasrv {
976                         tailf:info "Oracle SQL*Net v1/v2";
977                     }
978                     enum pcanywheredata {
979                         tailf:info "pcANYWHEREdata";
980                     }
981                     enum pcanywherestat {
982                         tailf:info "pcANYWHEREstat";
983                     }
984                     enum pop3s {
985                         tailf:info "POP3 over TLS/SSL";
986                     }
987                     enum pwdgen {
988                         tailf:info "Password  Generator Protocol";
989                     }
990                     enum qmtp {
991                         tailf:info "Quick Mail Transfer Protocol";
992                     }
993                     enum r-winsock {
994                         tailf:info "remote-winsock";
995                     }
996                     enum radius {
997                         tailf:info "RADIUS & Accounting";
998                     }
999                     enum rdb-dbs-disp {
1000                         tailf:info "Oracle RDB";
1001                     }
1002                     enum realmedia {
1003                         tailf:info "RealNetwork's Realmedia Protocol";
1004                     }
1005                     enum realsecure {
1006                         tailf:info "ISS Real Secure Console Service Port";
1007                     }
1008                     enum router {
1009                         tailf:info "Local Routing Process";
1010                     }
1011                     enum rsvp-encap {
1012                         tailf:info "RSVP ENCAPSULATION-1/2";
1013                     }
1014                     enum rsvp_tunnel {
1015                         tailf:info "RSVP Tunnel";
1016                     }
1017                     enum rtc-pm-port {
1018                         tailf:info "Oracle RTC-PM port";
1019                     }
1020                     enum rtelnet {
1021                         tailf:info "Remote Telnet Service";
1022                     }
1023                     enum send {
1024                         tailf:info "SEND";
1025                     }
1026                     enum shell {
1027                         tailf:info "Remote command";
1028                     }
1029                     enum sip-tls {
1030                         tailf:info "SIP-TLS";
1031                     }
1032                     enum sms {
1033                         tailf:info "SMS RCINFO/XFER/CHAT";
1034                     }
1035                     enum snmptrap {
1036                         tailf:info "SNMP Trap";
1037                     }
1038                     enum sql-net {
1039                         tailf:info "SQL-NET";
1040                     }
1041                     enum sqlserv {
1042                         tailf:info "SQL Services";
1043                     }
1044                     enum sqlsrv {
1045                         tailf:info "SQL Service";
1046                     }
1047                     enum sshell {
1048                         tailf:info "SSLshell";
1049                     }
1050                     enum ssp {
1051                         tailf:info "State Sync Protocol";
1052                     }
1053                     enum syslog-conn {
1054                         tailf:info "Reliable Syslog Service";
1055                     }
1056                     enum tacacs {
1057                         tailf:info "Login Host Protocol (TACACS)";
1058                     }
1059                     enum tacacs-ds {
1060                         tailf:info "TACACS-Database Service";
1061                     }
1062                     enum tarantella {
1063                         tailf:info "Tarantella";
1064                     }
1065                     enum tcp {
1066                         tailf:info "TCP";
1067                     }
1068                     enum telnets {
1069                         tailf:info "Telnet over TLS/SSL";
1070                     }
1071                     enum time {
1072                         tailf:info "Time";
1073                     }
1074                     enum timed {
1075                         tailf:info "Time server";
1076                     }
1077                     enum tr-rsrb {
1078                         tailf:info "cisco RSRB";
1079                     }
1080                     enum ttc {
1081                         tailf:info "Oracle TTC/SSL";
1082                     }
1083                     enum udp {
1084                         tailf:info "UDP";
1085                     }
1086                     enum uucp {
1087                         tailf:info "UUCPD/UUCP-RLOGIN";
1088                     }
1089                     enum vqp {
1090                         tailf:info "VQP";
1091                     }
1092                     enum webster {
1093                         tailf:info "Network Disctionary";
1094                     }
1095                     enum who {
1096                       tailf:info "Who's service";
1097                     }
1098                     enum wins {
1099                       tailf:info "Microsoft WINS";
1100                     }
1101                     enum x11 {
1102                        tailf:info "X Window System";
1103                     }
1104                     enum xdmcp {
1105                       tailf:info "XDM Control Protocol";
1106                     }
1107                     enum ymsgr {
1108                       tailf:info "Yahoo! Instant Messenger";
1109                     }
1110                     enum aarp {
1111                       tailf:info "AppleTalk ARP";
1112                     }
1113                     enum appletalk {
1114                        tailf:info "AppleTalk";
1115                     }
1116                     enum arp {
1117                        tailf:info "IP ARP";
1118                     }
1119                     enum bgp {
1120                       tailf:info "Border Gateway Protocol";
1121                     }
1122                     enum bridge {
1123                         tailf:info "Bridging";
1124                     }
1125                     enum bstun {
1126                         tailf:info "Block Serial Tunnel";
1127                     }
1128                     enum cdp {
1129                         tailf:info "Cisco Discovery Protocol";
1130                     }
1131                 }
1132             }
1133             container citrix {
1134                 tailf:info "Citrix Systems ICA protocol";
1135                 description "Citrix Systems ICA protocol";
1136                 presence "enable citrix system protocol matching";
1137                 leaf ica-tag {
1138                     tailf:info "Citrix ICA tag 0-high 1-medium 2-low "+
1139                         "3-background";
1140                     description "Citrix ICA tag 0-high 1-medium 2-low "+
1141                         "3-background";
1142                     type string {
1143                         tailf:info "WORD;;Enter a string as the sub-protocol "+
1144                         "parameter";
1145                     }
1146                 }
1147             }
1148             leaf clns {
1149                 tailf:info "ISO CLNS";
1150                 description "ISO CLNS";
1151                 type empty;
1152             }
1153             leaf clns_es {
1154                 tailf:info "ISO CLNS End System";
1155                 description "ISO CLNS End System";
1156                 type empty;
1157             }
1158             leaf clns_is {
1159                 tailf:info "ISO CLNS Intermediate System";
1160                 description "ISO CLNS Intermediate System";
1161                 type empty;
1162             }
1163             leaf cmns {
1164                 tailf:info "ISO CMNS";
1165                 description "ISO CMNS";
1166                 type empty;
1167             }
1168             leaf compressedtcp {
1169                 tailf:info "Compressed TCP (VJ";
1170                 description "Compressed TCP (VJ";
1171                 type empty;
1172             }
1173             leaf cuseeme {
1174                 tailf:info "CU-SeeMe desktop video conference";
1175                 description "CU-SeeMe desktop video conference";
1176                 type empty;
1177             }
1178             leaf decnet {
1179                 tailf:info "DECnet";
1180                 description "DECnet";
1181                 type empty;
1182             }
1183             leaf decnet_node {
1184                 tailf:info "DECnet Node";
1185                 description "DECnet Node";
1186                 type empty;
1187             }
1188             leaf decnet_router-l1 {
1189                 tailf:info "DECnet Router L1";
1190                 description "DECnet Router L1";
1191                 type empty;
1192             }
1193             leaf decnet_router-l2 {
1194                 tailf:info "DECnet Router L2";
1195                 description "DECnet Router L2";
1196                 type empty;
1197             }
1198             leaf dhcp {
1199                 tailf:info "Dynamic Host Configuration";
1200                 description "Dynamic Host Configuration";
1201                 type empty;
1202             }
1203             leaf dlsw {
1204                 type empty;
1205                 tailf:info "Data Link Switching (Direct encapsulation only";
1206             }
1207             leaf dns {
1208                 type empty;
1209                 tailf:info "Domain Name Server lookup";
1210             }
1211             leaf edonkey {
1212                 type empty;
1213                 tailf:info "eDonkey";
1214             }
1215             leaf egp {
1216                 type empty;
1217                 tailf:info "Exterior Gateway Protocol";
1218             }
1219             leaf eigrp {
1220                 type empty;
1221                 tailf:info "Enhanced Interior Gateway Routing Protocol";
1222             }
1223             leaf exchange {
1224                 type empty;
1225                 tailf:info "MS-RPC for Exchange";
1226             }
1227             container fasttrack {
1228                 tailf:info "FastTrack Traffic - KaZaA, Morpheus, Grokster";
1229                 description "FastTrack Traffic - KaZaA, Morpheus, Grokster";
1230                 presence "enable fasttrack matching";
1231                 leaf file-transfer {
1232                     tailf:info "File transfer stream";
1233                     description "File transfer stream";
1234                     type string {
1235                         tailf:info "WORD;;Enter a string as the sub-protocol "+
1236                         "parameter";
1237                     }
1238                 }
1239             }
1240             leaf finger {
1241                 type empty;
1242                 tailf:info "Finger";
1243             }
1244             leaf ftp {
1245                 type empty;
1246                 tailf:info "File Transfer Protocol";
1247             }
1248             container gnutella {
1249                 tailf:info "Gnutella Version2 Traffic - BearShare, Shareeza, "+
1250                     "Morpheus";
1251                 description "Gnutella Version2 Traffic - BearShare, Shareeza, "+
1252                     "Morpheus";
1253                 presence "enable gnutella matching";
1254                 leaf file-transfer {
1255                     tailf:info "File transfer stream";
1256                     description "File transfer stream";
1257                     type string {
1258                         tailf:info "WORD;;Enter a string as the sub-protocol "+
1259                             "parameter";
1260                     }
1261                 }
1262             }
1263             leaf gopher {
1264                 type empty;
1265                 tailf:info "Gopher";
1266             }
1267             leaf gre {
1268                 type empty;
1269                 tailf:info "Generic Routing Encapsulation";
1270             }
1271             leaf h323 {
1272                 type empty;
1273                 tailf:info "H323 Protocol";
1274             }
1275             container http {
1276                 tailf:info "World Wide Web traffic";
1277                 description "World Wide Web traffic";
1278                 presence "enable http traffic matching";
1279                 leaf c-header-field {
1280                 tailf:info "Client general Header Field";
1281                 description "Client general Header Field";
1282                 type string {
1283                     tailf:info "WORD;;Enter a string as the sub-protocol "+
1284                         "parameter";
1285                 }
1286             }
1287             leaf host {
1288                 tailf:info "Server Host Name";
1289                 description "Server Host Name";
1290                 type string {
1291                     tailf:info "WORD;;Enter a string as the sub-protocol "+
1292                         "parameter";
1293                 }
1294             }
1295             leaf mime {
1296                 tailf:info "Match MIME Type";
1297                 description "Match MIME Type";
1298                 type string {
1299                     tailf:info "WORD;;Enter a string as the sub-protocol "+
1300                         "parameter";
1301                 }
1302             }
1303             leaf s-header-field {
1304                 tailf:info "Server general Header Field";
1305                 description "Server general Header Field";
1306                 type string {
1307                     tailf:info "WORD;;Enter a string as the sub-protocol "+
1308                         "parameter";
1309                 }
1310             }
1311             leaf url {
1312                 tailf:info "Match URL String";
1313                 description "Match URL String";
1314                     type string {
1315                         tailf:info "WORD;;Enter a string as the sub-protocol "+
1316                             "parameter";
1317                     }
1318                 }
1319             }
1320             leaf icmp {
1321                 tailf:info "Internet Control Message";
1322                 description "Internet Control Message";
1323                 type empty;
1324             }
1325             leaf imap {
1326                 tailf:info "Internet Message Access Protocol";
1327                 description "Internet Message Access Protocol";
1328                 type empty;
1329             }
1330             leaf ip {
1331                 tailf:info "IP";
1332                 description "IP";
1333                 type empty;
1334             }
1335             leaf ipinip {
1336                 tailf:info "IP in IP (encapsulation";
1337                 description "IP in IP (encapsulation";
1338                 type empty;
1339             }
1340             leaf ipsec {
1341                 tailf:info "IP Security Protocol (ESP/AH";
1342                 description "IP Security Protocol (ESP/AH";
1343                 type empty;
1344             }
1345             leaf ipv6 {
1346                 tailf:info "IPV6";
1347                 description "IPV6";
1348                 type empty;
1349             }
1350             leaf ipx {
1351                 tailf:info "Novell IPX";
1352                 description "Novell IPX";
1353                 type empty;
1354             }
1355             leaf irc {
1356                 type empty;
1357                 tailf:info "Internet Relay Chat";
1358                 description "Internet Relay Chat";
1359             }
1360             container kazaa2 {
1361                 tailf:info "Kazaa Version 2";
1362                 description "Kazaa Version 2";
1363                 presence "enable kazaa version 2 matching";
1364                 leaf file-transfer {
1365                     tailf:info "File transfer stream";
1366                     description "File transfer stream";
1367                     type string {
1368                         tailf:info "WORD;;Enter a string as the sub-protocol "+
1369                             "parameter";
1370                     }
1371                 }
1372             }
1373             leaf kerberos {
1374                 tailf:info "Kerberos";
1375                 description "Kerberos";
1376                 type empty;
1377             }
1378             leaf l2tp {
1379                 tailf:info "L2F/L2TP tunnel";
1380                 description "L2F/L2TP tunnel";
1381                 type empty;
1382             }
1383             leaf ldap {
1384                 tailf:info "Lightweight Directory Access Protocol";
1385                 description "Lightweight Directory Access Protocol";
1386                 type empty;
1387             }
1388             leaf llc2 {
1389                 tailf:info "llc2";
1390                 description "llc2";
1391                 type empty;
1392             }
1393             leaf mgcp {
1394                 tailf:info "Media Gateway Control Protocol";
1395                 description "Media Gateway Control Protocol";
1396                 type empty;
1397             }
1398             container napster {
1399                 tailf:info "Napster Traffic";
1400                 description "Napster Traffic";
1401                 presence "enable napster matching";
1402                 leaf non-std {
1403                     tailf:info "Non-standard port advertizements";
1404                     description "Non-standard port advertizements";
1405                     type empty;
1406                 }
1407             }
1408             leaf netbios {
1409                 tailf:info "NetBIOS";
1410                 description "NetBIOS";
1411                 type empty;
1412             }
1413             leaf netshow {
1414                 tailf:info "Microsoft Netshow";
1415                 description "Microsoft Netshow";
1416                 type empty;
1417             }
1418             leaf nfs {
1419                 tailf:info "Network File System";
1420                 description "Network File System";
1421                 type empty;
1422             }
1423             leaf nntp {
1424                 tailf:info "Network News Transfer Protocol";
1425                 description "Network News Transfer Protocol";
1426                 type empty;
1427             }
1428             leaf notes {
1429                 tailf:info "Lotus Notes(R";
1430                 description "Lotus Notes(R";
1431                 type empty;
1432             }
1433             leaf novadigm {
1434                 tailf:info "Novadigm EDM";
1435                 description "Novadigm EDM";
1436                 type empty;
1437             }
1438             leaf ntp {
1439                 tailf:info "Network Time Protocol";
1440                 description "Network Time Protocol";
1441                 type empty;
1442             }
1443             leaf ospf {
1444                 tailf:info "Open Shortest Path First";
1445                 description "Open Shortest Path First";
1446                 type empty;
1447             }
1448             leaf pad {
1449                 tailf:info "PAD links";
1450                 description "PAD links";
1451                 type empty;
1452             }
1453             leaf pcanywhere {
1454                 tailf:info "Symantec pcANYWHERE";
1455                 description "Symantec pcANYWHERE";
1456                 type empty;
1457             }
1458             leaf pop3 {
1459                 tailf:info "Post Office Protocol";
1460                 description "Post Office Protocol";
1461                 type empty;
1462             }
1463             leaf pppoe {
1464                 tailf:info "PPP over Ethernet";
1465                 description "PPP over Ethernet";
1466                 type empty;
1467             }
1468             leaf pptp {
1469                 tailf:info "Point-to-Point Tunneling Protocol";
1470                 description "Point-to-Point Tunneling Protocol";
1471                 type empty;
1472             }
1473             leaf printer {
1474                 tailf:info "print spooler/lpd";
1475                 description "print spooler/lpd";
1476                 type empty;
1477             }
1478             leaf qllc {
1479                 tailf:info "qllc protocol";
1480                 description "qllc protocol";
1481                 type empty;
1482             }
1483             leaf rcmd {
1484                 tailf:info "BSD r-commands (rsh, rlogin, rexec";
1485                 description "BSD r-commands (rsh, rlogin, rexec";
1486                 type empty;
1487             }
1488             leaf rip {
1489                 tailf:info "Routing Information Protocol";
1490                 description "Routing Information Protocol";
1491                 type empty;
1492             }
1493             leaf rsrb {
1494                 tailf:info "Remote Source-Route Bridging";
1495                 description "Remote Source-Route Bridging";
1496                 type empty;
1497             }
1498             leaf rsvp {
1499                 tailf:info "Resource Reservation Protocol";
1500                 description "Resource Reservation Protocol";
1501                 type empty;
1502             }
1503             leaf rtcp {
1504                 tailf:info "Real Time Control Protocol";
1505                 description "Real Time Control Protocol";
1506                 type empty;
1507             }
1508             container rtp {
1509                 tailf:info "Real Time Protocol";
1510                 description "Real Time Protocol";
1511                 presence "enable rtp matching";
1512                 leaf audio {
1513                     tailf:info "Match voice packets";
1514                     description "Match voice packets";
1515                     type empty;
1516                 }
1517                 leaf payload-type {
1518                     tailf:info "Match an explicit PT";
1519                     description "Match an explicit PT";
1520                     type string {
1521                         tailf:info "WORD;;Enter a string as the sub-protocol "+
1522                                 "parameter";
1523                     }
1524                 }
1525                 leaf video {
1526                     tailf:info "Match video packets";
1527                     description "Match video packets";
1528                     type empty;
1529                 }
1530             }
1531             leaf rtsp {
1532                 tailf:info "Real Time Streaming Protocol";
1533                 description "Real Time Streaming Protocol";
1534                 type empty;
1535             }
1536             leaf secure-ftp {
1537                 tailf:info "FTP over TLS/SSL";
1538                 description "FTP over TLS/SSL";
1539                 type empty;
1540             }
1541             leaf secure-http {
1542                 tailf:info "Secured HTTP";
1543                 description "Secured HTTP";
1544                 type empty;
1545             }
1546             leaf secure-imap {
1547                 tailf:info "Internet Message Access Protocol over TLS/SSL";
1548                 description "Internet Message Access Protocol over TLS/SSL";
1549                 type empty;
1550             }
1551             leaf secure-irc {
1552                 tailf:info "Internet Relay Chat over TLS/SSL";
1553                 description "Internet Relay Chat over TLS/SSL";
1554                 type empty;
1555             }
1556             leaf secure-ldap {
1557                 tailf:info "Lightweight Directory Access Protocol over TLS/SSL";
1558                 description "Lightweight Directory Access Protocol over TLS/SSL";
1559                 type empty;
1560             }
1561             leaf secure-nntp {
1562                 tailf:info "Network News Transfer Protocol over TLS/SSL";
1563                 description "Network News Transfer Protocol over TLS/SSL";
1564                 type empty;
1565             }
1566             leaf secure-pop3 {
1567                 tailf:info "Post Office Protocol over TLS/SSL";
1568                 description "Post Office Protocol over TLS/SSL";
1569                 type empty;
1570             }
1571             leaf secure-telnet {
1572                 tailf:info "Telnet over TLS/SSL";
1573                 description "Telnet over TLS/SSL";
1574                 type empty;
1575             }
1576             leaf sip {
1577                 tailf:info "Session Initiation Protocol";
1578                 description "Session Initiation Protocol";
1579                 type empty;
1580             }
1581             leaf skinny {
1582                 tailf:info "Skinny Protocol";
1583                 description "Skinny Protocol";
1584                 type empty;
1585             }
1586             container smtp {
1587                 tailf:info "Simple Mail Transfer Protocol";
1588                 description "Simple Mail Transfer Protocol";
1589                 leaf extended {
1590                     type empty;
1591                 }
1592             }
1593             leaf snapshot {
1594                 tailf:info "Snapshot routing support";
1595                 description "Snapshot routing support";
1596                 type empty;
1597             }
1598             leaf snmp {
1599                 tailf:info "Simple Network Management Protocol";
1600                 description "Simple Network Management Protocol";
1601                 type empty;
1602             }
1603             leaf socks {
1604                 tailf:info "SOCKS";
1605                 description "SOCKS";
1606                 type empty;
1607             }
1608             leaf sqlnet {
1609                 tailf:info "SQL*NET for Oracle";
1610                 description "SQL*NET for Oracle";
1611                 type empty;
1612                 }
1613             leaf sqlserver {
1614                 tailf:info "MS SQL Server";
1615                 description "MS SQL Server";
1616                 type empty;
1617             }
1618             leaf ssh {
1619                 tailf:info "Secured Shell";
1620                 description "Secured Shell";
1621                 type empty;
1622             }
1623             leaf streamwork {
1624                 tailf:info "Xing Technology StreamWorks player";
1625                 description "Xing Technology StreamWorks player";
1626                 type empty;
1627             }
1628             leaf stun {
1629                 tailf:info "Serial Tunnel";
1630                 description "Serial Tunnel";
1631                 type empty;
1632             }
1633             leaf sunrpc {
1634                 tailf:info "Sun RPC";
1635                 description "Sun RPC";
1636                 type empty;
1637             }
1638             leaf syslog {
1639                 tailf:info "WORD;;Enter a string as the sub-protocol "+
1640                   "parameter";       tailf:info "System Logging Utility";
1641                 description "System Logging Utility";
1642                 type empty;
1643             }
1644             leaf telnet {
1645                 tailf:info "Telnet";
1646                 description "Telnet";
1647                 type empty;
1648             }
1649             leaf tftp {
1650                 tailf:info "Trivial File Transfer Protocol";
1651                 description "Trivial File Transfer Protocol";
1652                 type empty;
1653             }
1654             leaf vdolive {
1655                 tailf:info "VDOLive streaming video";
1656                 description "VDOLive streaming video";
1657                 type empty;
1658             }
1659             leaf vofr {
1660                 tailf:info "voice over Frame Relay packets";
1661                 description "voice over Frame Relay packets";
1662                 type empty;
1663             }
1664             leaf winmx {
1665                 tailf:info "WinMx file-sharing application";
1666                 description "WinMx file-sharing application";
1667                 type empty;
1668             }
1669             leaf xwindows {
1670                 tailf:info "X-Windows remote access";
1671                 description "X-Windows remote access";
1672                 type empty;
1673             }
1674         }
1675         // class-map * / qos-group
1676         leaf-list qos-group {
1677             tailf:info "Qos-group";
1678             description "Qos-group";
1679             tailf:cli-list-syntax;
1680             type uint16 {
1681                 tailf:info "<0-99>;;Qos Group value";
1682                 range "0..99";
1683             }
1684         }
1685         // class-map * / match security-group
1686         container security-group {
1687             tailf:info "Security group";
1688             description "Security group";
1689             container destination {
1690                 tailf:info "Destination security group";
1691                 description "Destination security group";
1692                 leaf tag {
1693                     tailf:info "Security group tag";
1694                     description "Security group tag";
1695                     type uint16 {
1696                         tailf:info "<1-65533>;;Security group tag id";
1697                     }
1698                 }
1699             }
1700             container source {
1701                 tailf:info "Source security group";
1702                 description "Source security group";
1703                 leaf tag {
1704                     tailf:info "Security group tag";
1705                     description "Security group tag";
1706                     type uint16 {
1707                         tailf:info "<1-65533>;;Security group tag id";
1708                     }
1709                 }
1710             }
1711         }
1712         // class-map * / source-address
1713         container source-address {
1714             tailf:info "Source address";
1715             description "Source address";
1716             leaf-list mac {
1717                 tailf:info "MAC address";
1718                 description "MAC address";
1719                 tailf:cli-list-syntax;
1720                 type yang:mac-address {
1721                     tailf:info "H.H.H;;MAC address";
1722                 }
1723             }
1724         }
1725         // class-map * / match vlan
1726         leaf-list vlan {
1727             tailf:info "VLANs to match";
1728             description "VLANs to match";
1729             tailf:cli-range-list-syntax;
1730             tailf:cli-list-syntax;
1731             type uint16 {
1732                 tailf:info "<1-4094>;;VLAN id";
1733                 range "1..4094";
1734             }
1735         }
1736     }
1737
1738     grouping config-service-chain-grouping {
1739         leaf description {
1740             tailf:info "Service function forwarder description";
1741             description "Service function forwarder description";
1742             tailf:cli-multi-value;
1743             type string {
1744                 tailf:info "LINE;;Up to 256 characters describing this " + "service function forwarder";
1745                 length "1..256";
1746             }
1747         }
1748         container ip {
1749             tailf:info "IP address for Service Function Forwarder";
1750             description "IP address for Service Function Forwarder";
1751             leaf address {
1752                 tailf:info "Set IPv4 address";
1753                 description "Set IPv4 address";
1754                 type inet:ipv4-address {
1755                     tailf:info "A.B.C.D;;IP address of Service Function Forwarder";
1756                 }
1757             }
1758         }
1759     }
1760
1761     grouping police-action-drop-grouping {
1762         leaf drop {
1763             tailf:info "drop packet";
1764             description "drop packet";
1765             type empty;
1766         }
1767     }
1768
1769     grouping police-action-grouping {
1770         container actions {
1771             tailf:cli-break-sequence-commands;
1772             tailf:cli-no-keyword;
1773             tailf:cli-drop-node-name;
1774             tailf:cli-flatten-container;
1775             // policy-map * / class * / police ? / conform-action
1776             uses police-conform-action-grouping;
1777             // policy-map * / class * / police ? / exceed-action
1778             uses police-exceed-action-grouping;
1779             // policy-map * / class * / police ? / violate-action
1780             uses police-violate-action-grouping;
1781         }
1782     }
1783
1784     grouping police-conform-action-grouping {
1785         container conform-set-clp-transmit {
1786             tailf:cli-no-keyword;
1787             tailf:cli-drop-node-name;
1788             tailf:cli-flatten-container;
1789             container conform-action {
1790                 tailf:info "action when rate is less than conform burst";
1791                 description "action when rate is less than conform burst";
1792                 tailf:cli-flatten-container;
1793                 leaf set-clp-transmit {
1794                     tailf:info "set atm clp and send it";
1795                     description "set atm clp and send it";
1796                     type empty;
1797                 }
1798             }
1799         }
1800         container conform-set-cos-transmit {
1801             tailf:cli-no-keyword;
1802             tailf:cli-drop-node-name;
1803             tailf:cli-flatten-container;
1804             container conform-action {
1805                 tailf:info "action when rate is less than conform burst";
1806                 description "action when rate is less than conform burst";
1807                 tailf:cli-flatten-container;
1808                 leaf set-cos-transmit {
1809                     tailf:info "rewrite packet cos and send it";
1810                     description "rewrite packet cos and send it";
1811                     type cos_value-type;
1812                 }
1813             }
1814         }
1815         container conform-set-cos-transmit-table {
1816             tailf:cli-no-keyword;
1817             tailf:cli-drop-node-name;
1818             tailf:cli-flatten-container;
1819             container conform-action {
1820                 tailf:info "action when rate is less than conform burst";
1821                 description "action when rate is less than conform burst";
1822                 tailf:cli-compact-syntax;
1823                 tailf:cli-flatten-container;
1824                 tailf:cli-sequence-commands;
1825                 leaf set-cos-transmit {
1826                     tailf:info "rewrite packet cos and send it";
1827                     description "rewrite packet cos and send it";
1828                     type cos_value-type;
1829                 }
1830                 leaf table {
1831                     tailf:info "Specify table-map";
1832                     description "Specify table-map";
1833                     type leafref {
1834                         path "/ios:native/table-map/name";
1835                     }
1836                 }
1837             }
1838         }
1839         container conform-set-discard-class-transmit {
1840             tailf:cli-no-keyword;
1841             tailf:cli-drop-node-name;
1842             tailf:cli-flatten-container;
1843             container conform-action {
1844                 tailf:info "action when rate is less than conform burst";
1845                 description "action when rate is less than conform burst";
1846                 tailf:cli-flatten-container;
1847                 leaf set-discard-class-transmit {
1848                     tailf:info "set discard-class and send it";
1849                     description "set discard-class and send it";
1850                     type uint8 {
1851                         tailf:info "<0-7>;;new discard-class";
1852                         range "0..7";
1853                     }
1854                 }
1855             }
1856         }
1857         container conform-set-dscp-transmit {
1858             tailf:cli-no-keyword;
1859             tailf:cli-drop-node-name;
1860             tailf:cli-flatten-container;
1861             container conform-action {
1862                 tailf:info "action when rate is less than conform burst";
1863                 description "action when rate is less than conform burst";
1864                 tailf:cli-flatten-container;
1865                 leaf set-dscp-transmit {
1866                     tailf:info "set dscp and send it";
1867                     description "set dscp and send it";
1868                     type dscp-type;
1869                 }
1870             }
1871         }
1872         container conform-set-dscp-transmit-table {
1873             tailf:cli-no-keyword;
1874             tailf:cli-drop-node-name;
1875             tailf:cli-flatten-container;
1876             container conform-action {
1877                 tailf:info "action when rate is less than conform burst";
1878                 description "action when rate is less than conform burst";
1879                 tailf:cli-compact-syntax;
1880                 tailf:cli-flatten-container;
1881                 tailf:cli-sequence-commands;
1882                 leaf set-dscp-transmit {
1883                     tailf:info "set dscp and send it";
1884                     description "set dscp and send it";
1885                     type dscp-type;
1886                 }
1887                 leaf table {
1888                     tailf:info "Specify table-map";
1889                     description "Specify table-map";
1890                     type leafref {
1891                         path "/ios:native/table-map/name";
1892                     }
1893                 }
1894             }
1895         }
1896         container conform-set-frde-transmit {
1897             tailf:cli-no-keyword;
1898             tailf:cli-drop-node-name;
1899             tailf:cli-flatten-container;
1900             container conform-action {
1901                 tailf:info "action when rate is less than conform burst";
1902                 description "action when rate is less than conform burst";
1903                 tailf:cli-flatten-container;
1904                 leaf set-frde-transmit {
1905                     tailf:info "set FR DE and send it";
1906                     description "set FR DE and send it";
1907                     type empty;
1908                 }
1909             }
1910         }
1911         container conform-set-mpls-exp-imposition-transmit {
1912             tailf:cli-no-keyword;
1913             tailf:cli-drop-node-name;
1914             tailf:cli-flatten-container;
1915             container conform-action {
1916                 tailf:info "action when rate is less than conform burst";
1917                 description "action when rate is less than conform burst";
1918                 tailf:cli-flatten-container;
1919                 leaf set-mpls-exp-imposition-transmit {
1920                     tailf:info "set exp at tag imposition and send it";
1921                     description "set exp at tag imposition and send it";
1922                     type exp_value-type;
1923                 }
1924             }
1925         }
1926         container conform-set-mpls-exp-imposition-transmit-table {
1927             tailf:cli-no-keyword;
1928             tailf:cli-drop-node-name;
1929             tailf:cli-flatten-container;
1930             container conform-action {
1931                 tailf:info "action when rate is less than conform burst";
1932                 description "action when rate is less than conform burst";
1933                 tailf:cli-compact-syntax;
1934                 tailf:cli-flatten-container;
1935                 tailf:cli-sequence-commands;
1936                 leaf set-mpls-exp-imposition-transmit {
1937                     tailf:info "set exp at tag imposition and send it";
1938                         description "set exp at tag imposition and send it";
1939                         type exp_value-type;
1940                     }
1941                 leaf table {
1942                     tailf:info "Specify table-map";
1943                     description "Specify table-map";
1944                     type leafref {
1945                         path "/ios:native/table-map/name";
1946                     }
1947                 }
1948             }
1949         }
1950         container conform-set-mpls-exp-topmost-transmit {
1951             tailf:cli-no-keyword;
1952             tailf:cli-drop-node-name;
1953             tailf:cli-flatten-container;
1954             container conform-action {
1955                 tailf:info "action when rate is less than conform burst";
1956                 description "action when rate is less than conform burst";
1957                 tailf:cli-flatten-container;
1958                 leaf set-mpls-exp-topmost-transmit {
1959                     tailf:info "set exp on topmost label and send it";
1960                     description "set exp on topmost label and send it";
1961                     type exp_value-type;
1962                 }
1963             }
1964         }
1965         container conform-set-mpls-exp-topmost-transmit-table {
1966             tailf:cli-no-keyword;
1967             tailf:cli-drop-node-name;
1968             tailf:cli-flatten-container;
1969             container conform-action {
1970                 tailf:info "action when rate is less than conform burst";
1971                 description "action when rate is less than conform burst";
1972                 tailf:cli-compact-syntax;
1973                 tailf:cli-flatten-container;
1974                 tailf:cli-sequence-commands;
1975                 leaf set-mpls-exp-topmost-transmit {
1976                     tailf:info "set exp on topmost label and send it";
1977                     description "set exp on topmost label and send it";
1978                     type exp_value-type;
1979                 }
1980                 leaf table {
1981                     tailf:info "Specify table-map";
1982                     description "Specify table-map";
1983                     type leafref {
1984                         path "/ios:native/table-map/name";
1985                     }
1986                 }
1987             }
1988         }
1989         container conform-set-prec-transmit {
1990             tailf:cli-no-keyword;
1991             tailf:cli-drop-node-name;
1992             tailf:cli-flatten-container;
1993             container conform-action {
1994                 tailf:info "action when rate is less than conform burst";
1995                 description "action when rate is less than conform burst";
1996                 tailf:cli-flatten-container;
1997                 leaf set-prec-transmit {
1998                     tailf:info "rewrite packet precedence and send it";
1999                     description "rewrite packet precedence and send it";
2000                     type prec_value-type;
2001                 }
2002             }
2003         }
2004         container conform-set-prec-transmit-table {
2005             tailf:cli-no-keyword;
2006             tailf:cli-drop-node-name;
2007             tailf:cli-flatten-container;
2008             container conform-action {
2009                 tailf:info "action when rate is less than conform burst";
2010                 description "action when rate is less than conform burst";
2011                 tailf:cli-compact-syntax;
2012                 tailf:cli-flatten-container;
2013                 tailf:cli-sequence-commands;
2014                 leaf set-prec-transmit {
2015                     tailf:info "rewrite packet precedence and send it";
2016                     description "rewrite packet precedence and send it";
2017                     type prec_value-type;
2018                 }
2019                 leaf table {
2020                     tailf:info "Specify table-map";
2021                     description "Specify table-map";
2022                     type leafref {
2023                         path "/ios:native/table-map/name";
2024                     }
2025                 }
2026             }
2027         }
2028         container conform-set-qos-transmit {
2029             tailf:cli-no-keyword;
2030             tailf:cli-drop-node-name;
2031             tailf:cli-flatten-container;
2032             container conform-action {
2033                 tailf:info "action when rate is less than conform burst";
2034                 description "action when rate is less than conform burst";
2035                 tailf:cli-flatten-container;
2036                 leaf set-qos-transmit {
2037                     tailf:info "set qos-group and send it";
2038                     description "set qos-group and send it";
2039                     type qos_value-type;
2040                 }
2041             }
2042         }
2043         container conform-set-qos-transmit-table {
2044         tailf:cli-no-keyword;
2045         tailf:cli-drop-node-name;
2046         tailf:cli-flatten-container;
2047             container conform-action {
2048                 tailf:info "action when rate is less than conform burst";
2049                 description "action when rate is less than conform burst";
2050                 tailf:cli-compact-syntax;
2051                 tailf:cli-flatten-container;
2052                 tailf:cli-sequence-commands;
2053                 leaf set-qos-transmit {
2054                     tailf:info "set qos-group and send it";
2055                     description "set qos-group and send it";
2056                     type qos_value-type;
2057                 }
2058                 leaf table {
2059                     tailf:info "Specify table-map";
2060                     description "Specify table-map";
2061                     type leafref {
2062                         path "/ios:native/table-map/name";
2063                     }
2064                 }
2065             }
2066         }
2067         container conform-transmit {
2068             tailf:cli-no-keyword;
2069             tailf:cli-drop-node-name;
2070             tailf:cli-flatten-container;
2071             container conform-action {
2072                 tailf:info "action when rate is less than conform burst";
2073                 description "action when rate is less than conform burst";
2074                 tailf:cli-flatten-container;
2075                 uses police-action-transmit-grouping;
2076             }
2077         }
2078         container conform-drop {
2079             tailf:cli-no-keyword;
2080             tailf:cli-drop-node-name;
2081             tailf:cli-flatten-container;
2082             container conform-action {
2083                 tailf:info "action when rate is less than conform burst";
2084                 description "action when rate is less than conform burst";
2085                 tailf:cli-flatten-container;
2086                 uses police-action-drop-grouping;
2087             }
2088         }
2089     }
2090
2091     grouping police-action-transmit-grouping {
2092         leaf transmit {
2093             tailf:info "transmit packet";
2094             description "transmit packet";
2095             type empty;
2096         }
2097     }
2098
2099     grouping police-exceed-action-grouping {
2100         container exceed-dscp {
2101             tailf:cli-no-keyword;
2102             tailf:cli-drop-node-name;
2103             tailf:cli-flatten-container;
2104             container exceed-action {
2105                 tailf:info "action when rate is within conform and "+
2106                 "conform + exceed burst";
2107                 description "action when rate is within conform and "+
2108                     "conform + exceed burst";
2109                 tailf:cli-flatten-container;
2110                 leaf dscp {
2111                     //tailf:info
2112                     type dscp-type;
2113                 }
2114             }
2115         }
2116         container exceed-set-clp-transmit {
2117             tailf:cli-no-keyword;
2118             tailf:cli-drop-node-name;
2119             tailf:cli-flatten-container;
2120             container exceed-action {
2121                 tailf:info "action when rate is within conform and "+
2122                 "conform + exceed burst";
2123                 description "action when rate is within conform and "+
2124                     "conform + exceed burst";
2125                 tailf:cli-flatten-container;
2126                     leaf set-clp-transmit {
2127                     tailf:info "set atm clp and send it";
2128                     description "set atm clp and send it";
2129                     type empty;
2130                 }
2131             }
2132         }
2133         container exceed-set-cos-transmit {
2134             tailf:cli-no-keyword;
2135             tailf:cli-drop-node-name;
2136             tailf:cli-flatten-container;
2137             container exceed-action {
2138                 tailf:info "action when rate is within conform and "+
2139                 "conform + exceed burst";
2140                 description "action when rate is within conform and "+
2141                     "conform + exceed burst";
2142                 tailf:cli-flatten-container;
2143                 leaf set-cos-transmit {
2144                     tailf:info "rewrite packet cos and send it";
2145                     description "rewrite packet cos and send it";
2146                     type cos_value-type;
2147                 }
2148             }
2149         }
2150         container exceed-set-discard-class-transmit {
2151             tailf:cli-no-keyword;
2152             tailf:cli-drop-node-name;
2153             tailf:cli-flatten-container;
2154             container exceed-action {
2155                 tailf:info "action when rate is within conform and "+
2156                 "conform + exceed burst";
2157                 description "action when rate is within conform and "+
2158                     "conform + exceed burst";
2159                 tailf:cli-flatten-container;
2160                 leaf set-discard-class-transmit {
2161                     tailf:info "set discard-class and send it";
2162                     description "set discard-class and send it";
2163                     type uint8 {
2164                         tailf:info "<0-7>;;new discard-class";
2165                         range "0..7";
2166                     }
2167                 }
2168             }
2169         }
2170         container exceed-set-dscp-transmit {
2171             tailf:cli-no-keyword;
2172             tailf:cli-drop-node-name;
2173             tailf:cli-flatten-container;
2174             container exceed-action {
2175                 tailf:info "action when rate is within conform and "+
2176                 "conform + exceed burst";
2177                 description "action when rate is within conform and "+
2178                     "conform + exceed burst";
2179                 tailf:cli-flatten-container;
2180                 leaf set-dscp-transmit {
2181                     tailf:info "set dscp and send it";
2182                     description "set dscp and send it";
2183                     type dscp-type;
2184                 }
2185                 container set-dscp-transmit-c {
2186                     tailf:alt-name "set-dscp-transmit";
2187                     container dscp {
2188                         leaf table {
2189                             type enumeration {
2190                                 enum policed-dscp;
2191                             }
2192                         }
2193                     }
2194                 }
2195             }
2196         }
2197         container exceed-set-frde-transmit {
2198             tailf:cli-no-keyword;
2199             tailf:cli-drop-node-name;
2200             tailf:cli-flatten-container;
2201             container exceed-action {
2202                 tailf:info "action when rate is within conform and "+
2203                 "conform + exceed burst";
2204                 description "action when rate is within conform and "+
2205                 "conform + exceed burst";
2206                 tailf:cli-flatten-container;
2207                 leaf set-frde-transmit {
2208                     tailf:info "set FR DE and send it";
2209                     description "set FR DE and send it";
2210                     type empty;
2211                 }
2212             }
2213         }
2214         container exceed-set-mpls-exp-imposition-transmit {
2215             tailf:cli-no-keyword;
2216             tailf:cli-drop-node-name;
2217             tailf:cli-flatten-container;
2218             container exceed-action {
2219                 tailf:info "action when rate is within conform and "+
2220                     "conform + exceed burst";
2221                 description "action when rate is within conform and "+
2222                     "conform + exceed burst";
2223                 tailf:cli-flatten-container;
2224                 leaf set-mpls-exp-imposition-transmit {
2225                     tailf:info "set exp at tag imposition and send it";
2226                     description "set exp at tag imposition and send it";
2227                     type exp_value-type;
2228                 }
2229             }
2230         }
2231         container exceed-set-mpls-exp-topmost-transmit {
2232             tailf:cli-no-keyword;
2233             tailf:cli-drop-node-name;
2234             tailf:cli-flatten-container;
2235             container exceed-action {
2236                 tailf:info "action when rate is within conform and "+
2237                     "conform + exceed burst";
2238                 description "action when rate is within conform and "+
2239                 "conform + exceed burst";
2240                 tailf:cli-flatten-container;
2241                 leaf set-mpls-exp-topmost-transmit {
2242                     tailf:info "set exp on topmost label and send it";
2243                     description "set exp on topmost label and send it";
2244                     type exp_value-type;
2245                 }
2246             }
2247         }
2248         container exceed-set-prec-transmit {
2249             tailf:cli-no-keyword;
2250             tailf:cli-drop-node-name;
2251             tailf:cli-flatten-container;
2252             container exceed-action {
2253                 tailf:info "action when rate is within conform and "+
2254                     "conform + exceed burst";
2255                 description "action when rate is within conform and "+
2256                     "conform + exceed burst";
2257                 tailf:cli-flatten-container;
2258                 leaf set-prec-transmit {
2259                     tailf:info "rewrite packet precedence and send it";
2260                     description "rewrite packet precedence and send it";
2261                     type prec_value-type;
2262                 }
2263             }
2264         }
2265         container exceed-set-qos-transmit {
2266             tailf:cli-no-keyword;
2267             tailf:cli-drop-node-name;
2268             tailf:cli-flatten-container;
2269             container exceed-action {
2270                 tailf:info "action when rate is within conform and "+
2271                         "conform + exceed burst";
2272                 description "action when rate is within conform and "+
2273                         "conform + exceed burst";
2274                 tailf:cli-flatten-container;
2275                 leaf set-qos-transmit {
2276                     tailf:info "set qos-group and send it";
2277                     description "set qos-group and send it";
2278                     type qos_value-type;
2279                 }
2280             }
2281         }
2282         container exceed-transmit {
2283             tailf:cli-no-keyword;
2284             tailf:cli-drop-node-name;
2285             tailf:cli-flatten-container;
2286             container exceed-action {
2287                 tailf:info "action when rate is within conform and "+
2288                         "conform + exceed burst";
2289                 description "action when rate is within conform and "+
2290                         "conform + exceed burst";
2291                 tailf:cli-flatten-container;
2292                 uses police-action-transmit-grouping;
2293             }
2294         }
2295         container exceed-drop {
2296             tailf:cli-no-keyword;
2297             tailf:cli-drop-node-name;
2298             tailf:cli-flatten-container;
2299             container exceed-action {
2300                 tailf:info "action when rate is within conform and "+
2301                         "conform + exceed burst";
2302                 description "action when rate is within conform and "+
2303                         "conform + exceed burst";
2304                 tailf:cli-flatten-container;
2305                 uses police-action-drop-grouping;
2306             }
2307         }
2308     }
2309
2310     grouping police-violate-action-grouping {
2311         container violate-set-clp-transmit {
2312             tailf:cli-no-keyword;
2313             tailf:cli-drop-node-name;
2314             tailf:cli-flatten-container;
2315             container violate-action {
2316                 tailf:info "action when rate is greater than conform + "+
2317                         "exceed burst";
2318                 description "action when rate is greater than conform + "+
2319                         "exceed burst";
2320                 tailf:cli-flatten-container;
2321                 leaf set-clp-transmit {
2322                   tailf:info "set atm clp and send it";
2323                   description "set atm clp and send it";
2324                   type empty;
2325                 }
2326             }
2327         }
2328         container violate-set-cos-transmit {
2329             tailf:cli-no-keyword;
2330             tailf:cli-drop-node-name;
2331             tailf:cli-flatten-container;
2332             container violate-action {
2333                 tailf:info "action when rate is greater than conform + "+
2334                         "exceed burst";
2335                 description "action when rate is greater than conform + "+
2336                         "exceed burst";
2337                 tailf:cli-flatten-container;
2338                 leaf set-cos-transmit {
2339                   tailf:info "rewrite packet cos and send it";
2340                   description "rewrite packet cos and send it";
2341                   type cos_value-type;
2342                 }
2343             }
2344         }
2345         container violate-set-discard-class-transmit {
2346             tailf:cli-no-keyword;
2347             tailf:cli-drop-node-name;
2348             tailf:cli-flatten-container;
2349             container violate-action {
2350                 tailf:info "action when rate is greater than conform + "+
2351                         "exceed burst";
2352                 description "action when rate is greater than conform + "+
2353                         "exceed burst";
2354                 tailf:cli-flatten-container;
2355                 leaf set-discard-class-transmit {
2356                     tailf:info "set discard-class and send it";
2357                     description "set discard-class and send it";
2358                     type uint8 {
2359                         tailf:info "<0-7>;;new discard-class";
2360                         range "0..7";
2361                     }
2362                 }
2363             }
2364         }
2365         container violate-set-dscp-transmit {
2366             tailf:cli-no-keyword;
2367             tailf:cli-drop-node-name;
2368             tailf:cli-flatten-container;
2369             container violate-action {
2370                 tailf:info "action when rate is greater than conform + "+
2371                         "exceed burst";
2372                 description "action when rate is greater than conform + "+
2373                         "exceed burst";
2374                 tailf:cli-flatten-container;
2375                 leaf set-dscp-transmit {
2376                     tailf:info "set dscp and send it";
2377                     description "set dscp and send it";
2378                     type dscp-type;
2379                 }
2380             }
2381         }
2382         container violate-set-frde-transmit {
2383             tailf:cli-no-keyword;
2384             tailf:cli-drop-node-name;
2385             tailf:cli-flatten-container;
2386             container violate-action {
2387                 tailf:info "action when rate is greater than conform + "+
2388                         "exceed burst";
2389                 description "action when rate is greater than conform + "+
2390                         "exceed burst";
2391                 tailf:cli-flatten-container;
2392                 leaf set-frde-transmit {
2393                     tailf:info "set FR DE and send it";
2394                     description "set FR DE and send it";
2395                     type empty;
2396                 }
2397             }
2398         }
2399         container violate-set-mpls-exp-imposition-transmit {
2400             tailf:cli-no-keyword;
2401             tailf:cli-drop-node-name;
2402             tailf:cli-flatten-container;
2403             container violate-action {
2404                 tailf:info "action when rate is greater than conform + "+
2405                         "exceed burst";
2406                 description "action when rate is greater than conform + "+
2407                         "exceed burst";
2408                 tailf:cli-flatten-container;
2409                 leaf set-mpls-exp-imposition-transmit {
2410                     tailf:info "set exp at tag imposition and send it";
2411                     description "set exp at tag imposition and send it";
2412                     type exp_value-type;
2413                 }
2414             }
2415         }
2416         container violate-set-mpls-exp-topmost-transmit {
2417             tailf:cli-no-keyword;
2418             tailf:cli-drop-node-name;
2419             tailf:cli-flatten-container;
2420             container violate-action {
2421                 tailf:info "action when rate is greater than conform + "+
2422                         "exceed burst";
2423                 description "action when rate is greater than conform + "+
2424                         "exceed burst";
2425                 tailf:cli-flatten-container;
2426                 leaf set-mpls-exp-topmost-transmit {
2427                     tailf:info "set exp on topmost label and send it";
2428                     description "set exp on topmost label and send it";
2429                     type exp_value-type;
2430                 }
2431             }
2432         }
2433         container violate-set-prec-transmit {
2434             tailf:cli-no-keyword;
2435             tailf:cli-drop-node-name;
2436             tailf:cli-flatten-container;
2437             container violate-action {
2438                 tailf:info "action when rate is greater than conform + "+
2439                         "exceed burst";
2440                 description "action when rate is greater than conform + "+
2441                         "exceed burst";
2442                 tailf:cli-flatten-container;
2443                 leaf set-prec-transmit {
2444                     tailf:info "rewrite packet precedence and send it";
2445                     description "rewrite packet precedence and send it";
2446                     type prec_value-type;
2447                 }
2448             }
2449         }
2450         container violate-set-qos-transmit {
2451             tailf:cli-no-keyword;
2452             tailf:cli-drop-node-name;
2453             tailf:cli-flatten-container;
2454             container violate-action {
2455                 tailf:info "action when rate is greater than conform + "+
2456                         "exceed burst";
2457                 description "action when rate is greater than conform + "+
2458                         "exceed burst";
2459                 tailf:cli-flatten-container;
2460                 leaf set-qos-transmit {
2461                     tailf:info "set qos-group and send it";
2462                     description "set qos-group and send it";
2463                     type qos_value-type;
2464                 }
2465             }
2466         }
2467         container violate-transmit {
2468             tailf:cli-no-keyword;
2469             tailf:cli-drop-node-name;
2470             tailf:cli-flatten-container;
2471             container violate-action {
2472                 tailf:info "action when rate is greater than conform + "+
2473                         "exceed burst";
2474                 description "action when rate is greater than conform + "+
2475                         "exceed burst";
2476                 tailf:cli-flatten-container;
2477                 uses police-action-transmit-grouping;
2478             }
2479         }
2480             container violate-drop {
2481             tailf:cli-no-keyword;
2482             tailf:cli-drop-node-name;
2483             tailf:cli-flatten-container;
2484             container violate-action {
2485                 tailf:info "action when rate is greater than conform + "+
2486                         "exceed burst";
2487                 description "action when rate is greater than conform + "+
2488                         "exceed burst";
2489                 tailf:cli-flatten-container;
2490                 uses police-action-drop-grouping;
2491             }
2492         }
2493     }
2494
2495     grouping random-detect-grouping {
2496         leaf min-threshold {
2497             tailf:cli-drop-node-name;
2498             tailf:cli-incomplete-command;
2499             type uint16 {
2500                 range "1..4096";
2501                 tailf:info "<1-4096>;;minimum threshold (number of packets)";
2502             }
2503         }
2504         leaf max-threshold {
2505             tailf:cli-drop-node-name;
2506             tailf:cli-incomplete-command;
2507             type uint16 {
2508                 range "1..4096";
2509                 tailf:info "<1-4096>;;maximum threshold (number of packets)";
2510             }
2511         }
2512         leaf denominator {
2513             tailf:cli-drop-node-name;
2514             type uint32 {
2515                 range "1..65535";
2516                 tailf:info "<1-65535>;;mark probability denominator";
2517             }
2518         }
2519     }
2520
2521 /// ========================================================================
2522 /// native
2523 /// ========================================================================
2524
2525     container native {
2526         tailf:cli-drop-node-name;
2527         container table-map {
2528             tailf:info "Map external entry attributes into routing table";
2529             tailf:cli-full-command;
2530             description "Map external entry attributes into routing table";
2531             tailf:display-when "ipv4 or ../../ipv4 or ../ipv4 " +
2532                 " or ipv6 or ../../ipv6 or ../ipv6 ";
2533             leaf name {
2534                 description "route-map name";
2535                 tailf:cli-drop-node-name;
2536                 type string {
2537                     tailf:info "WORD;;route-map name";
2538                 }
2539             }
2540             leaf filter {
2541                 tailf:info "Selective route download";
2542                 type empty;
2543             }
2544         }
2545
2546 /// ========================================================================
2547 /// mls
2548 /// ========================================================================
2549 /// Note: must come before class-map and policy-map.
2550
2551         container mls {
2552             tailf:info "mls global commands";
2553             description "mls global commands";
2554             tailf:cli-incomplete-no;
2555
2556             // mls acl
2557             container acl {
2558                 tailf:info "MLS ACL operation";
2559                 description "MLS ACL operation";
2560                 // mls acl tcam
2561                 container tcam {
2562                     tailf:info "ACL TCAM";
2563                     description "ACL TCAM";
2564                     leaf default-result {
2565                         tailf:info "Default result to be used during tcam programming";
2566                         description "Default result to be used during tcam programming";
2567                         type enumeration {
2568                             enum bridge {
2569                                 tailf:info "Bridge result";
2570                             }
2571                             enum deny {
2572                                 tailf:info "Deny result";
2573                             }
2574                             enum permit {
2575                                 tailf:info "Permit result";
2576                             }
2577                         }
2578                     }
2579                     container log-update {
2580                         tailf:info "Log TCAM updates";
2581                         description "Log TCAM updates";
2582                         presence true;
2583                         leaf rate-limit-msg {
2584                             tailf:info "Enable/Disable syslog ratelimiting";
2585                             description "Enable/Disable syslog ratelimiting";
2586                             type enumeration {
2587                                 enum disable {
2588                                     tailf:info "Disable ratelimiting syslog";
2589                                 }
2590                                 enum enable {
2591                                     tailf:info "Enable syslog ratelimiting at 1 per second";
2592                                 }
2593                             }
2594                         }
2595                     }
2596                     leaf share-global {
2597                         tailf:info "share global deny or permit any entries";
2598                         description "share global deny or permit any entries";
2599                         tailf:cli-boolean-no;
2600                         tailf:cli-trim-default;
2601                         type boolean;
2602                         default true;
2603                     }
2604                 }
2605             }
2606
2607             //  aging L3 aging
2608             // mls cef
2609             container cef {
2610                 tailf:info "cef keyword";
2611                 description "cef keyword";
2612                 container error {
2613                     leaf action {
2614                         type enumeration {
2615                             enum reset;
2616                         }
2617                     }
2618                 }
2619                //  maximum-routes  Configure route allocation for protocols
2620                //  tunnel          Allow tunnel fragmentation
2621             }
2622             //  erm         FIB Exception Recovery Manager
2623             //  exclude     exclude keyword
2624             // mls flow
2625             container flow {
2626                 tailf:info "flowmask keyword";
2627                 description "flowmask keyword";
2628                 leaf ip {
2629                     tailf:info "flowmask ip keyword";
2630                     description "flowmask ip keyword";
2631                     type enumeration {
2632                         enum interface-destination {
2633                             tailf:info "interface-destination flow keyword";
2634                         }
2635                         enum interface-destination-source {
2636                             tailf:info "interface-destination-source flow keyword";
2637                         }
2638                         enum interface-full {
2639                             tailf:info "interface-full flow keyword";
2640                         }
2641                         enum interface-source {
2642                             tailf:info "interface-source only flow keyword";
2643                         }
2644                     }
2645                 }
2646             }
2647             // mls ip
2648             container ip {
2649                 tailf:info "ip keyword";
2650                 description "ip keyword";
2651                 //  cef        cef keyword
2652                 //  inspect    inspect
2653                 // mls ip multicast
2654                 container multicast {
2655                     tailf:info "multicast keyword";
2656                     description "multicast keyword";
2657                     tailf:cli-display-separated;
2658                     presence true;
2659                     //  bidir              Bidir commands
2660                     //  connected          Enable download of interface/mask entry
2661                     container consistency-check {
2662                         tailf:info "Set consistency checking characteristics";
2663                         description "Set consistency checking characteristics";
2664                         presence true;
2665                         leaf settle-time {
2666                             tailf:info "Settle time for entry/oif for consistancy-checker";
2667                             description "Settle time for entry/oif for consistancy-checker";
2668                             type uint16 {
2669                                 tailf:info "<2-3600>;;Settle time for entry/oif in seconds";
2670                                 range "2..3600";
2671                             }
2672                         }
2673                         //  type         Set consistency checker type
2674                     }
2675                     //  egress             Set egress replication options
2676                     leaf flow-stat-timer {
2677                         tailf:info "timer for flow statistic used by mls-msc and mlsm";
2678                         description "timer for flow statistic used by mls-msc and mlsm";
2679                         type uint8 {
2680                             tailf:info "<1-100>;;#seconds between one batch and another";
2681                             range "1..100";
2682                         }
2683                     }
2684                     //  met-optimization   Enable or disable met optimisation
2685                     //  non-rpf            Enable rate-limiting of non-RPF traffic
2686                     //  replication-mode   Disable auto-detection mode for egress
2687                     //  sso                Stateful switchover parameters
2688                     //  threshold          Threshold rate for installing h/w shortcuts
2689                 }
2690                 //  nat        nat keyword
2691                 //  slb        Server Load Balancing
2692             }
2693             //  nde         netflow data export (nde) keyword
2694             //  netflow     netflow keyword
2695             // mls qos
2696             container mls-qos-conf {
2697                 tailf:cli-no-keyword;
2698                 tailf:cli-drop-node-name;
2699                 leaf qos {
2700                     type empty;
2701                 }
2702             }
2703             // mls qos
2704             container qos {
2705                 tailf:info "QoS parameters";
2706                 description "QoS parameters";
2707                 tailf:cli-incomplete-command;
2708                 tailf:cli-incomplete-no;
2709                 // mls qos aggregate-policer *
2710                 list aggregate-policer {
2711                     tailf:info "Assign aggregate policer";
2712                     description "Assign aggregate policer";
2713                     tailf:cli-suppress-mode;
2714                     tailf:cli-delete-when-empty;
2715                     tailf:cli-compact-syntax;
2716                     tailf:cli-sequence-commands {
2717                         tailf:cli-reset-all-siblings;
2718                     }
2719                     key name;
2720                     leaf name {
2721                         type string {
2722                            tailf:info "WORD;;aggregate policer name";
2723                         }
2724                     }
2725                     leaf target-bit-rate {
2726                         tailf:cli-drop-node-name;
2727                         type uint64 {
2728                             tailf:info "<32000-60000000000>;;Target Bit Rate (bits per "
2729                              +"second) (postfix k, m, g optional; decimal point allowed)";
2730                             range "32000..60000000000";
2731                         }
2732                     }
2733                     leaf burst-normal {
2734                         tailf:cli-drop-node-name;
2735                         tailf:cli-optional-in-sequence;
2736                         type uint32 {
2737                          tailf:info "<1000-31250000>;;Normal burst bytes";
2738                          range "1000..31250000";
2739                        }
2740                     }
2741                     leaf burst-max {
2742                         tailf:cli-drop-node-name;
2743                         tailf:cli-optional-in-sequence;
2744                         when "../burst-normal" {
2745                             tailf:dependency "../burst-normal";
2746                         }
2747                         type uint32 {
2748                             tailf:info "<1000-31250000>;;Maximum burst bytes";
2749                             range "1000..31250000";
2750                         }
2751                     }
2752                     leaf pir {
2753                         tailf:info "PIR";
2754                         description "PIR";
2755                         tailf:cli-optional-in-sequence;
2756                         type uint64 {
2757                             tailf:info "<32000-60000000000>;;Target Bit Rate (bits per "
2758                             +"second) (postfix k, m, g optional; decimal point allowed)";
2759                             range "32000..60000000000";
2760                         }
2761                     }
2762                     container conform-action {
2763                         tailf:info "action when rate is not exceeded";
2764                         description "action when rate is not exceeded";
2765                         tailf:cli-optional-in-sequence;
2766                         tailf:cli-compact-syntax;
2767                         tailf:cli-flatten-container;
2768                         choice action-choice {
2769                             leaf drop {
2770                                 tailf:info "drop packet";
2771                                 description "drop packet";
2772                                 type empty;
2773                             }
2774                             leaf set-dscp-transmit {
2775                                 tailf:info "set dscp and send it";
2776                                 description "set dscp and send it";
2777                                 type dscp-type;
2778                             }
2779                             leaf set-mpls-exp-imposition-transmit {
2780                                 tailf:info "set exp at tag imposition and send it";
2781                                 description "set exp at tag imposition and send it";
2782                                 type uint8 {
2783                                     tailf:info "<0-7>;;new exp";
2784                                     range "0..7";
2785                                 }
2786                             }
2787                             leaf set-prec-transmit {
2788                                 tailf:info "rewrite packet precedence and send it";
2789                                 description "rewrite packet precedence and send it";
2790                                 type uint8 {
2791                                     tailf:info "<0-7>;;new precedence";
2792                                     range "0..7";
2793                                 }
2794                             }
2795                             leaf transmit {
2796                                 tailf:info "transmit packet";
2797                                 description "transmit packet";
2798                                 type empty;
2799                             }
2800                         }
2801                     }
2802                     leaf exceed-action {
2803                         tailf:info "action when rate is exceeded";
2804                         description "action when rate is exceeded";
2805                         tailf:cli-optional-in-sequence;
2806                         type enumeration {
2807                             enum drop {
2808                                 tailf:info "drop packet";
2809                             }
2810                             enum policed-dscp-transmit {
2811                                 tailf:info "change dscp per policed-dscp map and send it";
2812                             }
2813                             enum transmit {
2814                                 tailf:info "transmit packet";
2815                             }
2816                         }
2817                     }
2818                     leaf violate-action {
2819                         tailf:info "action when rate violated";
2820                         description "action when rate violated";
2821                         type enumeration {
2822                             enum drop {
2823                                 tailf:info "drop packet";
2824                             }
2825                             enum policed-dscp-transmit {
2826                                 tailf:info "change dscp per policed-dscp map and send it";
2827                             }
2828                             enum transmit {
2829                                 tailf:info "transmit packet";
2830                             }
2831                         }
2832                     }
2833                 }
2834                 //  map                Define QoS mapping
2835                 //  mls qos map
2836                 container map {
2837                     tailf:info "qos map keyword";
2838                     description "qos map keyword";
2839                     leaf-list cos-dscp {
2840                         tailf:info "cos-dscp map: eight dscp values for cos 0-7";
2841                         description "cos-dscp map: eight dscp values for cos 0-7";
2842                         tailf:cli-flat-list-syntax;
2843                         //max-elements 8;
2844                         type uint8 {
2845                             tailf:info "<0-63>;;CoS values separated by spaces (up to 8 values total)";
2846                             range "0..63";
2847                         }
2848                     }
2849                     leaf-list policed-dscp {
2850                         tailf:info "policed-dscp map keyword";
2851                         description  "policed-dscp map keyword";
2852                         ordered-by user;
2853                         tailf:cli-flat-list-syntax;
2854                         type union {
2855                             type uint8 {
2856                                 tailf:info "<0-63>;;DSCP values separated by spaces (up to 8 values total)";
2857                                 range "0..63";
2858                             }
2859                             type enumeration {
2860                                 enum to {
2861                                     tailf:info "to keyword";
2862                                 }
2863                             }
2864                         }
2865                     }
2866                 }
2867                 //  marking            marking keyword
2868                 //  police             police keyword
2869                 //  protocol           protocol keyword
2870                 //  queueing-only      queueing-only (no QoS rewrite,  no policing)
2871                 //  recirc             recirculate path
2872                 //  mls qos rewrite
2873                 container rewrite {
2874                     tailf:info "packet qos rewrite enable/disable";
2875                     description "packet qos rewrite enable/disable";
2876                     container ip {
2877                         tailf:info "ip packet qos rewrite enable/disable";
2878                         description "ip packet qos rewrite enable/disable";
2879                         container dscp {
2880                             tailf:info "packet ip dscp rewrite enable/disable";
2881                             description "packet ip dscp rewrite enable/disable";
2882                             presence true;
2883                             leaf slot {
2884                                 tailf:info "slot number";
2885                                 description "slot number";
2886                                 type string {
2887                                     tailf:info "WORD;;Slots seperated by commas. Valid slots: 1,2,"
2888                                     +"3,4,5,6,7,8,9";
2889                                 }
2890                             }
2891                         }
2892                     }
2893                 }
2894                 // mls qos queue-set
2895                 container queue-set {
2896                     tailf:info "Choose a queue set for this queue";
2897                     description "Choose a queue set for this queue";
2898                     container output {
2899                         tailf:info "Direction the command applies for this command";
2900                         description "Direction the command applies for this command";
2901                         tailf:cli-sequence-commands;
2902                         tailf:cli-compact-syntax;
2903                         leaf queue-set-id {
2904                             tailf:cli-drop-node-name;
2905                             type uint8 {
2906                                 tailf:info "<1-2>;;queue-set id";
2907                                 range "1..2";
2908                             }
2909                         }
2910                         list threshold {
2911                             tailf:info "Assign threshold values to a queue";
2912                             description "Assign threshold values to a queue";
2913                             tailf:cli-suppress-mode;
2914                             tailf:cli-break-sequence-commands;
2915                             tailf:cli-compact-syntax;
2916                             tailf:cli-sequence-commands;
2917                             key queue-id;
2918                             leaf queue-id {
2919                                 type uint8 {
2920                                     tailf:info "<1-4>;;enter queue id in this queue set";
2921                                     range "1..4";
2922                                 }
2923                             }
2924                             leaf drop1 {
2925                                 tailf:cli-drop-node-name;
2926                                 description "drop threshold1 1-3200";
2927                                 type uint32 {
2928                                     tailf:info "<1-3200>;;enter drop threshold1 1-3200";
2929                                     range "1..3200";
2930                                 }
2931                             }
2932                             leaf drop2 {
2933                                 tailf:cli-drop-node-name;
2934                                 description "drop threshold2 1-3200";
2935                                 type uint32 {
2936                                     tailf:info "<1-3200>;;enter drop threshold2 1-3200";
2937                                     range "1..3200";
2938                                 }
2939                             }
2940                             leaf reserved {
2941                                 tailf:cli-drop-node-name;
2942                                 description "reserved threshold 1-100";
2943                                 type uint32 {
2944                                     tailf:info "<1-3200>;;enter drop threshold2 1-3200";
2945                                     range "1..3200";
2946                                 }
2947                             }
2948                             leaf maximum {
2949                                 tailf:cli-drop-node-name;
2950                                 description "maximum threshold1 1-3200";
2951                                 type uint32 {
2952                                     tailf:info "<1-3200>;;enter maximum threshold1 1-3200";
2953                                     range "1..3200";
2954                                 }
2955                             }
2956                         }
2957                         leaf-list buffers {
2958                             tailf:info "assign buffers to each egress queue";
2959                             description "assign buffers to each egress queue";
2960                             tailf:cli-flat-list-syntax;
2961                             type uint16 {
2962                                 tailf:info "<0-99>/<1-100>;;enter buffer percentage for queue x 0-99/2 1-100";
2963                                 range "0..100";
2964                             }
2965                         }
2966                     }
2967                 }
2968                 // mls qos srr-queue
2969                 container srr-queue {
2970                     tailf:info "Configure SRR receive queues";
2971                     description "Configure SRR receive queues";
2972                     container input {
2973                         tailf:info "input keyword";
2974                         description "input keyword";
2975                         leaf-list bandwidth {
2976                             tailf:info "Configure SRR bandwidth";
2977                             description "Configure SRR bandwidth";
2978                             tailf:cli-flat-list-syntax;
2979                             type uint8 {
2980                                 tailf:info "<1-100>;;enter bandwidth weight for queue id x";
2981                                 range "1..100";
2982                             }
2983                         }
2984                         list threshold {
2985                             tailf:info "Configure queue tail-drop thresholds";
2986                             description "Configure queue tail-drop thresholds";
2987                             tailf:cli-suppress-mode;
2988                             key queue-id;
2989                             leaf queue-id {
2990                                 type uint8 {
2991                                     tailf:info "<1-2>;;enter threshold queue id (1-2)";
2992                                     range "1..2";
2993                                 }
2994                             }
2995                             leaf-list queue-size-percent {
2996                                 tailf:cli-drop-node-name;
2997                                 tailf:cli-flat-list-syntax;
2998                                 type uint8 {
2999                                     tailf:info "<1-100>;;enter percent of queue size for threshold x";
3000                                     range "1..100";
3001                                 }
3002                             }
3003                         }
3004                         list priority-queue {
3005                             tailf:info "Configure priority scheduling";
3006                             description "Configure priority scheduling";
3007                             tailf:cli-suppress-mode;
3008                             key queue-number;
3009                             leaf queue-number {
3010                                 type uint8 {
3011                                     tailf:info "<1-2>;;enter priority queue number [1-2]";
3012                                 }
3013                             }
3014                             leaf bandwidth {
3015                                 tailf:info "ingress priority queue bandwidth % of stack ring";
3016                                 description "ingress priority queue bandwidth % of stack ring";
3017                                 type uint8 {
3018                                     tailf:info "<0-40>;;enter bandwidth number [0-40]";
3019                                     range "0..40";
3020                                 }
3021                             }
3022                         }
3023                         list cos-map {
3024                             tailf:info "Configure cos-map for a queue id";
3025                             description "Configure cos-map for a queue id";
3026                             tailf:cli-suppress-mode;
3027                             key "queue threshold";
3028                             leaf queue {
3029                                 tailf:info "Assign COS values to a queue";
3030                                 description "Assign COS values to a queue";
3031                                 tailf:cli-expose-key-name;
3032                                 type uint8 {
3033                                     tailf:info "<1-4>;;enter cos-map output queue id";
3034                                     range "1..4";
3035                                 }
3036                             }
3037                             leaf threshold {
3038                                 tailf:info "Assign COS values to a queue threshold";
3039                                 description "Assign COS values to a queue threshold";
3040                                 tailf:cli-expose-key-name;
3041                                 type uint8 {
3042                                     tailf:info "<1-3>;;enter cos-map threshold id";
3043                                     range "1..3";
3044                                 }
3045                             }
3046                             leaf-list cos {
3047                                 tailf:cli-drop-node-name;
3048                                 tailf:cli-flat-list-syntax;
3049                                 max-elements 8;
3050                                 type uint8 {
3051                                     tailf:info "<0-7>;;8 cos values separated by spaces";
3052                                     range "0..7";
3053                                 }
3054                             }
3055                         }
3056                         list dscp-map {
3057                             tailf:info "Configure dscp-map for a queue id";
3058                             description "Configure dscp-map for a queue id";
3059                             tailf:cli-suppress-mode;
3060                             key "queue threshold";
3061                             leaf queue {
3062                                 tailf:info "Assign DSCP values to a queue";
3063                                 description "Assign DSCP values to a queue";
3064                                 tailf:cli-expose-key-name;
3065                                 type uint8 {
3066                                     tailf:info "<1-4>;;enter dscp-map output queue id";
3067                                     range "1..4";
3068                                 }
3069                             }
3070                             leaf threshold {
3071                                 tailf:info "Assign DSCP values to a queue threshold";
3072                                 description "Assign DSCP values to a queue threshold";
3073                                 tailf:cli-expose-key-name;
3074                                 type uint8 {
3075                                     tailf:info "<1-3>;;enter dscp-map threshold id";
3076                                     range "1..3";
3077                                 }
3078                             }
3079                             leaf-list dscp {
3080                                 tailf:cli-drop-node-name;
3081                                 tailf:cli-flat-list-syntax;
3082                                 max-elements 8;
3083                                 type uint8 {
3084                                     tailf:info "<0-63>;;dscp values separated by spaces (up to 8 values total)";
3085                                     range "0..63";
3086                                 }
3087                             }
3088                         }
3089                     }
3090                     container output {
3091                         tailf:info "output keyword";
3092                         description "output keyword";
3093                         list cos-map {
3094                             tailf:info "Configure cos-map for a queue id";
3095                             description "Configure cos-map for a queue id";
3096                             tailf:cli-suppress-mode;
3097                             key "queue threshold";
3098                             leaf queue {
3099                                 tailf:info "Assign COS values to a queue";
3100                                 description "Assign COS values to a queue";
3101                                 tailf:cli-expose-key-name;
3102                                 type uint8 {
3103                                     tailf:info "<1-4>;;enter cos-map output queue id";
3104                                     range "1..4";
3105                                 }
3106                             }
3107                             leaf threshold {
3108                                 tailf:info "Assign COS values to a queue threshold";
3109                                 description "Assign COS values to a queue threshold";
3110                                 tailf:cli-expose-key-name;
3111                                 type uint8 {
3112                                     tailf:info "<1-3>;;enter cos-map threshold id";
3113                                     range "1..3";
3114                                 }
3115                             }
3116                             leaf-list cos {
3117                                 tailf:cli-drop-node-name;
3118                                 tailf:cli-flat-list-syntax;
3119                                 max-elements 8;
3120                                 type uint8 {
3121                                     tailf:info "<0-7>;;8 cos values separated by spaces";
3122                                     range "0..7";
3123                                 }
3124                             }
3125                         }
3126                         list dscp-map {
3127                             tailf:info "Configure dscp-map for a queue id";
3128                             description "Configure dscp-map for a queue id";
3129                             tailf:cli-suppress-mode;
3130                             key "queue threshold";
3131                             leaf queue {
3132                                 tailf:info "Assign DSCP values to a queue";
3133                                 description "Assign DSCP values to a queue";
3134                                 tailf:cli-expose-key-name;
3135                                 type uint8 {
3136                                     tailf:info "<1-4>;;enter dscp-map output queue id";
3137                                     range "1..4";
3138                                 }
3139                             }
3140                             leaf threshold {
3141                                 tailf:info "Assign DSCP values to a queue threshold";
3142                                 description "Assign DSCP values to a queue threshold";
3143                                 tailf:cli-expose-key-name;
3144                                 type uint8 {
3145                                     tailf:info "<1-3>;;enter dscp-map threshold id";
3146                                     range "1..3";
3147                                 }
3148                             }
3149                             leaf-list dscp {
3150                                 tailf:cli-drop-node-name;
3151                                 tailf:cli-flat-list-syntax;
3152                                 max-elements 8;
3153                                 type uint8 {
3154                                     tailf:info "<0-63>;;dscp values separated by spaces (up to 8 values total)";
3155                                     range "0..63";
3156                                 }
3157                             }
3158                         }
3159                     }
3160                 }
3161             }
3162             //  statistics-export  qos statistics data export
3163             // mls rate-limit
3164             container rate-limit {
3165                 tailf:info "Rate limit different behaviors";
3166                 description "Rate limit different behaviors";
3167                 //  all        Rate Limiting for both Unicast and Multicast packets
3168                 container layer2 {
3169                     tailf:info "layer2 protocol cases";
3170                     description "layer2 protocol cases";
3171                     //  ip-admission   IP admission on Layer2 ports
3172                     container l2pt {
3173                         tailf:cli-compact-syntax;
3174                         tailf:cli-sequence-commands {
3175                             tailf:cli-reset-siblings;
3176                         }
3177                         tailf:info "layer2 protocol tunnelling packets";
3178                         leaf packets-per-second {
3179                             description "layer2 protocol tunnelling packets";
3180                             tailf:cli-drop-node-name;
3181                             type uint32 {
3182                                  tailf:info "<10-1000000>;;packets per second";
3183                                  range "10..1000000";
3184                             }
3185                         }
3186                         leaf packets-in-burst {
3187                             tailf:cli-drop-node-name;
3188                             type uint32 {
3189                                 tailf:info "<1-255>;;packets in burst";
3190                                 range "1..255";
3191                             }
3192                         }
3193                     }
3194                     //  mac-security   Mac security traffics
3195                     container pdu {
3196                         tailf:info "layer2 protocol data unit packets";
3197                         description "layer2 protocol data unit packets";
3198                         tailf:cli-compact-syntax;
3199                         tailf:cli-sequence-commands {
3200                             tailf:cli-reset-siblings;
3201                         }
3202                         leaf packets-per-second {
3203                             tailf:cli-drop-node-name;
3204                             type uint32 {
3205                                tailf:info "<10-1000000>;;packets per second";
3206                                range "10..1000000";
3207                             }
3208                         }
3209                         leaf packets-in-burst {
3210                             tailf:cli-drop-node-name;
3211                             type uint32 {
3212                                 tailf:info "<1-255>;;packets in burst";
3213                                 range "1..255";
3214                             }
3215                         }
3216                     }
3217                     //  port-security  Port security traffics
3218                 }
3219                 //  multicast  Rate limiting for Multicast packets
3220                 //  unicast    Rate limiting for Unicast packets
3221             }
3222             //  rp          rp
3223             //  sampling    sampling keyword
3224             // mls verify
3225             container verify {
3226                 tailf:info "enable hardware packet parsing error checks";
3227                 description "enable hardware packet parsing error checks";
3228                 container ip {
3229                     tailf:info "check on IP packets";
3230                     description "check on IP packets";
3231                     leaf checksum {
3232                         tailf:info "check for packet checksum errors";
3233                         description "check for packet checksum errors";
3234                         tailf:cli-boolean-no;
3235                         tailf:cli-trim-default;
3236                         type boolean;
3237                         default true;
3238                     }
3239                     container "length" {
3240                        tailf:info "check for packet length errors";
3241                         description "check for packet length errors";
3242                         leaf consistent {
3243                             tailf:info "check length in header against physical frame length";
3244                             description "check length in header against physical frame length";
3245                             tailf:cli-boolean-no;
3246                             tailf:cli-trim-default;
3247                             type boolean;
3248                             default true;
3249                         }
3250                         leaf minimum {
3251                             tailf:info "check for minimum packet length";
3252                             description "check for minimum packet length";
3253                             tailf:cli-boolean-no;
3254                             tailf:cli-trim-default;
3255                             type boolean;
3256                             default true;
3257                         }
3258                     }
3259                     leaf same-address {
3260                         tailf:info "check for packet having equal source and destination IP "
3261                         +"addresses";
3262                         description "check for packet having equal source and destination IP "
3263                         +"addresses";
3264                         type empty;
3265                     }
3266                     leaf syslog {
3267                         tailf:info "syslog packet parse errors";
3268                         description "syslog packet parse errors";
3269                         type empty;
3270                     }
3271                 }
3272             }
3273         }
3274
3275 /// ========================================================================
3276 /// policer
3277 /// ========================================================================
3278 // Note: must come before class-map and policy-map.
3279
3280         container policer {
3281             tailf:info "Switch policer";
3282             description "Switch policer";
3283             // policer aggregate *
3284             list aggregate {
3285                 tailf:info "Named aggregate policer";
3286                 description "Named aggregate policer";
3287                 tailf:cli-suppress-mode;
3288                 tailf:cli-delete-when-empty;
3289                 tailf:cli-compact-syntax;
3290                 tailf:cli-reset-container;
3291                 tailf:cli-sequence-commands {
3292                     tailf:cli-reset-siblings;
3293                 }
3294                 key name;
3295                 leaf name {
3296                     type string {
3297                         tailf:info "WORD;;aggregate policer Name";
3298                     }
3299                 }
3300                 // cir <cir-bps>
3301                 leaf cir {
3302                     tailf:info "Committed information rate";
3303                     description "Committed information rate";
3304                     type uint32 {
3305                         tailf:info "<8000-1000000000>;;Bits per second";
3306                         range "8000..1000000000";
3307                     }
3308                 }
3309                 // bc <burst>
3310                 leaf bc {
3311                     tailf:info "Conform burst";
3312                     description "Conform burst";
3313                     tailf:cli-optional-in-sequence;
3314                     type uint32 {
3315                         tailf:info "<8000-1000000000>;;Burst bytes";
3316                         range "8000..1000000000";
3317                     }
3318                 }
3319                 // conform-action
3320                 leaf conform-action {
3321                     tailf:info "action when rate is within conform and conform + "+
3322                         "exceed burst";
3323                     description "action when rate is within conform and conform + "+
3324                         "exceed burst";
3325                     tailf:cli-optional-in-sequence;
3326                     type empty;
3327                 }
3328                 leaf set-qos-transmit {
3329                     tailf:info "set qos-group and send it";
3330                     description "set qos-group and send it";
3331                     when "../conform-action";
3332                     tailf:cli-optional-in-sequence;
3333                     type uint8 {
3334                         tailf:info "<0-99>;;new qos-group";
3335                         range "0..99";
3336                     }
3337                 }
3338                 leaf set-dot1ad-dei-transmit {
3339                     tailf:info "set dei and send it";
3340                     description "set dei and send it";
3341                     when "../conform-action";
3342                     tailf:cli-optional-in-sequence;
3343                     type uint8 {
3344                         tailf:info "<0-1>;;new dei value";
3345                         range "0..1";
3346                     }
3347                 }
3348                 leaf set-prec-transmit {
3349                     tailf:info "rewrite packet precedence and send it";
3350                     description "rewrite packet precedence and send it";
3351                     when "../conform-action";
3352                     tailf:cli-optional-in-sequence;
3353                     type prec_value-type;
3354                 }
3355                 container set-prec-transmit-table {
3356                     when "../set-prec-transmit";
3357                     tailf:cli-no-keyword;
3358                     tailf:cli-drop-node-name;
3359                     tailf:cli-optional-in-sequence;
3360                     tailf:cli-flatten-container;
3361                     leaf table {
3362                         tailf:info "Set packet cos from cos based on table map";
3363                         description "Set packet cos from cos based on table map";
3364                         tailf:cli-optional-in-sequence;
3365                         type string;
3366                         tailf:non-strict-leafref {
3367                             path "/ios:native/table-map/name";
3368                         }
3369                     }
3370                 }
3371                 leaf set-dscp-transmit {
3372                     tailf:info "set dscp and send it";
3373                     description "set dscp and send it";
3374                     when "../conform-action";
3375                     tailf:cli-optional-in-sequence;
3376                     type dscp-type;
3377                 }
3378                 container set-dscp-transmit-table {
3379                     when "../set-dscp-transmit";
3380                     tailf:cli-no-keyword;
3381                     tailf:cli-drop-node-name;
3382                     tailf:cli-optional-in-sequence;
3383                     tailf:cli-flatten-container;
3384                     leaf table {
3385                         tailf:info "Set packet cos from cos based on table map";
3386                         description "Set packet cos from cos based on table map";
3387                         tailf:cli-optional-in-sequence;
3388                         type string;
3389                         tailf:non-strict-leafref {
3390                             path "/ios:native/table-map/name";
3391                         }
3392                     }
3393                 }
3394                 leaf set-cos-transmit {
3395                     tailf:info "set cos and send it";
3396                     description "set cos and send it";
3397                     when "../conform-action";
3398                     tailf:cli-optional-in-sequence;
3399                     type cos_value-type;
3400                 }
3401                 container set-cos-transmit-table {
3402                     when "../set-cos-transmit";
3403                     tailf:cli-no-keyword;
3404                     tailf:cli-drop-node-name;
3405                     tailf:cli-optional-in-sequence;
3406                     tailf:cli-flatten-container;
3407                     leaf table {
3408                         tailf:info "Set packet cos from cos based on table map";
3409                         description "Set packet cos from cos based on table map";
3410                         tailf:cli-optional-in-sequence;
3411                         type string;
3412                         tailf:non-strict-leafref {
3413                             path "/ios:native/table-map/name";
3414                         }
3415                     }
3416                 }
3417                 leaf transmit {
3418                     tailf:info "transmit packet";
3419                     description "transmit packet";
3420                     when "../conform-action";
3421                     tailf:cli-optional-in-sequence;
3422                     type empty;
3423                 }
3424                 // exceed-action
3425                 leaf exceed-action {
3426                     tailf:info "action when rate is within conform and conform + "+
3427                         "exceed burst";
3428                     description "action when rate is within conform and conform + "+
3429                         "exceed burst";
3430                     type empty;
3431                 }
3432                 leaf drop {
3433                     tailf:info "drop packet";
3434                     description "drop packet";
3435                     when "../exceed-action";
3436                     tailf:cli-optional-in-sequence;
3437                     tailf:cli-full-command;
3438                     type empty;
3439                 }
3440                 container exceed-transmit {
3441                     tailf:cli-no-keyword;
3442                     tailf:cli-drop-node-name;
3443                     tailf:cli-optional-in-sequence;
3444                     tailf:cli-flatten-container;
3445                     leaf transmit {
3446                         tailf:info "transmit packet";
3447                         description "transmit packet";
3448                         when "../../exceed-action";
3449                         tailf:cli-optional-in-sequence;
3450                         type empty;
3451                     }
3452                 }
3453             }
3454         }
3455
3456 /// ========================================================================
3457 /// class-map
3458 /// ========================================================================
3459
3460         list class-map {
3461             tailf:info "Configure QoS Class Map";
3462             description "Configure QoS Class Map";
3463             tailf:cli-mode-name "config-cmap";
3464             tailf:cli-suppress-list-no;
3465             tailf:cli-delete-when-empty;
3466             tailf:cli-no-key-completion;
3467             // class-map *
3468             key name;
3469             leaf name {
3470                 type string {
3471                     tailf:info "WORD;;class-map name";
3472                 }
3473                 tailf:cli-disallow-value "type";
3474             }
3475             // class-map * type inspect
3476             leaf "type" {
3477                 tailf:info "type of the class-map";
3478                 description "type of the class-map";
3479                 tailf:cli-prefix-key;
3480                 type enumeration {
3481                     enum access-control {
3482                             tailf:info "access-control specific class-map";
3483                         }
3484                     enum appnav {
3485                         tailf:info "Configure a APPNAV Class Map";
3486                     }
3487                     enum control {
3488                         tailf:info "Configure a control policy class-map";
3489                     }
3490                     enum inspect {
3491                         tailf:info "Configure Firewall Class Map";
3492                     }
3493                     enum multicast-flows {
3494                         tailf:info "multicast class-maps";
3495                     }
3496                     enum stack {
3497                         tailf:info "class-map for protocol header stack specification";
3498                     }
3499                     enum traffic {
3500                         tailf:info "Configure a subscriber policy traffic classmap";
3501                     }
3502                 }
3503             }
3504             // class-map * <protocol>
3505             leaf protocol {
3506                 when "../type = 'inspect'";
3507                 tailf:cli-drop-node-name;
3508                 tailf:cli-prefix-key;
3509                 type enumeration {
3510                     enum aol {
3511                         tailf:info "Configure CBAC class-map for IM-AOL protocol";
3512                     }
3513                     enum edonkey {
3514                         tailf:info "eDonkey";
3515                     }
3516                     enum fasttrack {
3517                         tailf:info "FastTrack Traffic - KaZaA, Morpheus, Grokster...";
3518                     }
3519                     enum gnutella {
3520                         tailf:info "Gnutella Version2 Traffic - BearShare, Shareeza, "
3521                         +"Morpheus ...";
3522                     }
3523                     enum http {
3524                         tailf:info "Configure CBAC class-map for HTTP protocol";
3525                     }
3526                     enum imap {
3527                         tailf:info "Configure CBAC class-map for IMAP protocol";
3528                     }
3529                     enum kazaa2 {
3530                         tailf:info "Kazaa Version 2";
3531                     }
3532                     enum msnmsgr {
3533                         tailf:info "Configure CBAC class-map for IM-MSN protocol";
3534                     }
3535                     enum pop3 {
3536                         tailf:info "Configure CBAC class-map for POP3 protocol";
3537                     }
3538                     enum smtp {
3539                         tailf:info "Configure CBAC class-map for SMTP protocol";
3540                     }
3541                     enum sunrpc {
3542                         tailf:info "Configure CBAC class-map for RPC protocol";
3543                     }
3544                     enum ymsgr {
3545                         tailf:info "Configure CBAC class-map for IM-YAHOO protocol";
3546                     }
3547                 }
3548             }
3549             // class-map * <match-any|match-all>
3550             leaf prematch {
3551                 tailf:cli-no-keyword;
3552                 tailf:cli-prefix-key;
3553                 tailf:cli-drop-node-name;
3554                 type enumeration {
3555                     enum match-all {
3556                         tailf:info "Logical-AND all matching statements under "+
3557                             "this classmap";
3558                     }
3559                     enum match-any {
3560                         tailf:info "Logical-OR all matching statements under this "+
3561                         "classmap";
3562                     }
3563                 }
3564                 mandatory true;
3565             }
3566             // class-map * / description
3567             leaf "description" {
3568                 tailf:info "Class-Map description";
3569                 description "Class-Map description";
3570                 tailf:cli-multi-value;
3571                 type string {
3572                     tailf:info "LINE;;Description of this class-map (up to 200 "+
3573                           "characters)";
3574                 }
3575             }
3576             // class-map * / match
3577             container match {
3578                 tailf:info "classification criteria";
3579                 description "classification criteria";
3580                 uses class-map-match-grouping;
3581                 uses class-map-appnav-match-grouping;
3582                 container not {
3583                     tailf:info "Negate this match result";
3584                     description "Negate this match result";
3585                     uses class-map-match-grouping;
3586                     uses class-map-appnav-not-match-grouping;
3587                 }
3588             }
3589         }
3590
3591 /// ========================================================================
3592 /// policy-map
3593 /// ========================================================================
3594
3595         list policy-map {
3596             tailf:info "Configure QoS Policy Map";
3597             description "Configure QoS Policy Map";
3598             tailf:cli-mode-name "config-pmap";
3599             tailf:cli-diff-dependency "/ios:native/class-map";
3600             tailf:cli-diff-dependency "/ios:native/table-map";
3601             tailf:cli-diff-dependency "/ios:native/mls/qos/aggregate-policer";
3602             tailf:cli-diff-dependency "/ios:native/policer/aggregate";
3603             key name;
3604             leaf name {
3605                 type string {
3606                     tailf:info "WORD;;policy-map name";
3607                 }
3608                 tailf:cli-disallow-value
3609                 "(type)|(http)|(im)|(imap)|(p2p)|(pop3)|(smtp)|(sunrpc)";
3610             }
3611             leaf "type" {
3612                 tailf:info "type of the policy-map";
3613                 description "type of the policy-map";
3614                 tailf:cli-prefix-key;
3615                 type enumeration {
3616                     enum access-control {
3617                         tailf:info "access-control specific policy-map";
3618                     }
3619                     enum appnav {
3620                         tailf:info "Configure a APPNAV Policy Map";
3621                     }
3622                     enum inspect {
3623                          tailf:info "Configure Firewall Policy Map";
3624                     }
3625                     enum packet-service {
3626                         tailf:info "Configure Packet Service Policy Map";
3627                     }
3628                     enum performance-monitor {
3629                         tailf:info "Performance monitoring policy-map type";
3630                     }
3631                     enum service {
3632                         tailf:info "policymap service configuration";
3633                     }
3634                     enum service-chain {
3635                         tailf:info "Configure Service Chain Policy Map";
3636                     }
3637                 }
3638             }
3639             leaf protocol {
3640                 when "../type = 'inspect'";
3641                 tailf:cli-drop-node-name;
3642                 tailf:cli-prefix-key;
3643                 type enumeration {
3644                     enum http {
3645                         tailf:info "Configure CBAC policy-map for HTTP protocol";
3646                     }
3647                     enum im {
3648                         tailf:info "Configure CBAC policy-map for IM protocol";
3649                     }
3650                     enum imap {
3651                         tailf:info "Configure CBAC policy-map for IMAP protocol";
3652                     }
3653                     enum p2p {
3654                         tailf:info "Configure CBAC policy-map for P2P protocols";
3655                     }
3656                     enum pop3 {
3657                         tailf:info "Configure CBAC policy-map for POP3 protocol";
3658                     }
3659                     enum smtp {
3660                         tailf:info "Configure CBAC policy-map for SMTP protocol";
3661                     }
3662                     enum sunrpc {
3663                         tailf:info "Configure CBAC policy-map for RPC protocol";
3664                     }
3665                 }
3666             }
3667             // policy-map * / class *
3668             list class {
3669                 tailf:info "policy criteria";
3670                 description "policy criteria";
3671                 tailf:cli-mode-name "config-pmap-c";
3672                 key name;
3673                 leaf name {
3674                     tailf:cli-disallow-value "type";
3675                     type class-name-type;
3676                 }
3677                 // policy-map * / class * / type
3678                 leaf "type" {
3679                     tailf:info "type of the class-map";
3680                     description "type of the class-map";
3681                     tailf:cli-prefix-key;
3682                     type enumeration {
3683                         enum inspect {
3684                             tailf:info "Configure CBAC Class Map";
3685                         }
3686                     }
3687                 }
3688                 leaf insert-before {
3689                     tailf:info "Insert the class before a specified class";
3690                     description "Insert the class before a specified class";
3691                     tailf:cli-hide-in-submode;
3692                     when "../../type = 'appnav'";
3693                     type string {
3694                         tailf:info "WORD;;Insert the class before a specified class";
3695                     }
3696                 }
3697                 // policy-map * / class * / appnav policy
3698                 container appnav-policy {
3699                     when "../../type = 'appnav'";
3700                     tailf:cli-drop-node-name;
3701                     list distribute {
3702                         tailf:info "Distribute action";
3703                         description "Distribute action";
3704                         tailf:cli-suppress-mode;
3705                         key service-node-group;
3706                         leaf service-node-group {
3707                             tailf:info "Distribute to service-node-group";
3708                             description "Distribute to service-node-group";
3709                             tailf:cli-expose-key-name;
3710                             type string {
3711                                 tailf:info "WORD;;service-node-group name";
3712                             }
3713                         }
3714                         leaf insert-before {
3715                             tailf:info "Insert before specific node";
3716                             description "Insert before specific node";
3717                             tailf:cli-optional-in-sequence;
3718                             type string {
3719                                 tailf:info "WORD;;service-node-group name";
3720                             }
3721                         }
3722                     }
3723                     leaf monitor-load {
3724                         tailf:info "Monitor AO";
3725                         description "Monitor AO";
3726                         when "../distribute";
3727                         type enumeration {
3728                             enum MS-port-mapper {
3729                                 tailf:info "Monitor Microsoft Endpoint Port Mapper load";
3730                             }
3731                             enum cifs {
3732                                 tailf:info "Monitor CIFS Accelerator load";
3733                             }
3734                             enum http {
3735                                 tailf:info "Monitor HTTP Accelerator load";
3736                             }
3737                             enum ica {
3738                                 tailf:info "Monitor ICA Accelerator load";
3739                             }
3740                             enum mapi {
3741                                 tailf:info "Monitor MAPI Accelerator load";
3742                             }
3743                             enum nfs {
3744                                 tailf:info "Monitor NFS Accelerator load";
3745                             }
3746                             enum ssl {
3747                                 tailf:info "Monitor SSL accelerator load";
3748                             }
3749                             enum video {
3750                                 tailf:info "Monitor Video Accelerator load";
3751                             }
3752                         }
3753                     }
3754                     leaf pass-through {
3755                         tailf:info "pass-through action";
3756                         description "pass-through action";
3757                         type empty;
3758                     }
3759                 }
3760                 // policy-map * / class * / inspect policy
3761                 container policy {
3762                     when "../../type = 'inspect'";
3763                     tailf:cli-drop-node-name;
3764                     tailf:cli-sequence-commands {
3765                         tailf:cli-reset-siblings;
3766                     }
3767                     leaf action {
3768                         tailf:cli-drop-node-name;
3769                         tailf:cli-remove-before-change;
3770                         type enumeration {
3771                             enum cxsc {
3772                                 tailf:info "CXSC Inspection";
3773                             }
3774                             enum drop {
3775                                 tailf:info "Drop the packet";
3776                             }
3777                             enum inspect {
3778                                 tailf:info "Context-based Access Control Engine";
3779                             }
3780                             enum pass {
3781                                 tailf:info "Pass the packet";
3782                             }
3783                             enum service-policy {
3784                                 tailf:info "Deep Packet Inspection Engine";
3785                             }
3786                         }
3787                     }
3788                     leaf log {
3789                         tailf:info "Send logging message for drop or pass";
3790                         description "Send logging message for drop or pass";
3791                         when "../action = 'drop'or ../action = 'pass'";
3792                         type empty;
3793                     }
3794                     leaf parameter-map {
3795                         tailf:cli-drop-node-name;
3796                         when "../action = 'inspect' or ../action = 'cxsc'";
3797                         type string;
3798                         tailf:non-strict-leafref {
3799                             path "/ios:native/parameter-map/name";
3800                         }
3801                     }
3802                     container dpi {
3803                         tailf:cli-drop-node-name;
3804                         when "../action = 'service-policy'";
3805                         tailf:cli-sequence-commands;
3806                         tailf:cli-compact-syntax;
3807                         leaf type {
3808                             tailf:cli-drop-node-name;
3809                             type enumeration {
3810                                 enum gtpv0 {
3811                                     tailf:info "GTPv0 DPI";
3812                                 }
3813                                 enum gtpv1 {
3814                                     tailf:info "GTPv1 DPI";
3815                                 }
3816                                 enum imap {
3817                                     tailf:info "IMAP DPI";
3818                                 }
3819                                 enum pop3 {
3820                                     tailf:info "POP3 DPI";
3821                                 }
3822                                 enum smtp {
3823                                     tailf:info "SMTP DPI";
3824                                 }
3825                                 enum sunrpc {
3826                                     tailf:info "RPC DPI";
3827                                 }
3828                             }
3829                         }
3830                         leaf policy-map {
3831                             tailf:cli-drop-node-name;
3832                             type string {
3833                                 tailf:info "WORD;;DPI policy-map name";
3834                             }
3835                         }
3836                     }
3837                 }
3838                 // policy-map * / class * / performance-monitor policy
3839                 container pm-policy {
3840                     when "../../type = 'performance-monitor'";
3841                         tailf:cli-drop-node-name;
3842                     container flow {
3843                         tailf:info "Flow subcommands";
3844                         description "Flow subcommands";
3845                         leaf monitor {
3846                             tailf:info "Apply a Flow Monitor";
3847                             description "Apply a Flow Monitor";
3848                             type string {
3849                                 tailf:info "WORD;;Flow monitor name";
3850                             }
3851                         }
3852                     }
3853                     container monitor {
3854                         tailf:info "Monitor related parameters";
3855                         description "Monitor related parameters";
3856                         container metric {
3857                             tailf:info "Monitor metric";
3858                             description "Monitor metric";
3859                             container rtp {
3860                                 tailf:info "RTP metrics parameters";
3861                                 description "RTP metrics parameters";
3862                                 tailf:cli-add-mode;
3863                                 tailf:cli-mode-name "config-pmap-c-mrtp";
3864                                 list clock-rate {
3865                                     tailf:info "RTP timestamp field's sampling frequency";
3866                                     description "RTP timestamp field's sampling frequency";
3867                                     tailf:cli-suppress-mode;
3868                                     tailf:cli-sequence-commands;
3869                                     tailf:cli-compact-syntax;
3870                                     key number;
3871                                     leaf number {
3872                                         type union {
3873                                             type uint8 {
3874                                                 tailf:info "<0-127>;;payload type number";
3875                                                 range "0..127";
3876                                             }
3877                                             type enumeration {
3878                                                 enum celb {
3879                                                     tailf:info "CELB(25)";
3880                                                 }
3881                                                 enum cn {
3882                                                     tailf:info "CN(13)";
3883                                                 }
3884                                                 enum default {
3885                                                     tailf:info "Change the default clock rate for all the dynamic payload type";
3886                                                 }
3887                                                 enum dvi4 {
3888                                                     tailf:info "DVI4 RFC-3551 8000Hz(5)";
3889                                                 }
3890                                                 enum dvi4-2 {
3891                                                     tailf:info "DVI4 RFC-3551 16000Hz(6)";
3892                                                 }
3893                                                 enum dvi4-3 {
3894                                                     tailf:info "DVI4 Dipol 11025Hz(16)";
3895                                                 }
3896                                                 enum dvi4-4 {
3897                                                     tailf:info "DVI4 Dipol 22050Hz(17)";
3898                                                 }
3899                                                 enum g722 {
3900                                                     tailf:info "G722(9)";
3901                                                 }
3902                                                 enum g723 {
3903                                                     tailf:info "G723(4)";
3904                                                 }
3905                                                 enum g728 {
3906                                                     tailf:info "G728(15)";
3907                                                 }
3908                                                 enum g729 {
3909                                                     tailf:info "G729(18)";
3910                                                 }
3911                                                 enum gsm {
3912                                                     tailf:info "GSM(3)";
3913                                                 }
3914                                                 enum h261 {
3915                                                     tailf:info "H261(31)";
3916                                                 }
3917                                                 enum h263 {
3918                                                     tailf:info "H263(34)";
3919                                                 }
3920                                                 enum jpeg {
3921                                                     tailf:info "JPEG(26)";
3922                                                 }
3923                                                 enum l16 {
3924                                                     tailf:info "L16 channel 1(11)";
3925                                                 }
3926                                                 enum l16-2 {
3927                                                     tailf:info "L16 channel 2(10)";
3928                                                 }
3929                                                 enum lpc {
3930                                                     tailf:info "LPC(7)";
3931                                                 }
3932                                                 enum mp2t {
3933                                                     tailf:info "MP2T(33)";
3934                                                 }
3935                                                 enum mpa {
3936                                                     tailf:info "MPA(14)";
3937                                                 }
3938                                                 enum mpv {
3939                                                     tailf:info "MPV(32)";
3940                                                 }
3941                                                 enum nv {
3942                                                     tailf:info "NV(28)";
3943                                                 }
3944                                                 enum pcma {
3945                                                     tailf:info "PCMA(8)";
3946                                                 }
3947                                                 enum pcmu {
3948                                                     tailf:info "PCMU(0)";
3949                                                 }
3950                                                 enum qcelp {
3951                                                     tailf:info "QCELP(12)";
3952                                                 }
3953                                             }
3954                                         }
3955                                     }
3956                                     leaf frequency {
3957                                         tailf:cli-drop-node-name;
3958                                         type uint32 {
3959                                             tailf:info "<1000-192000>;;frequency in Hz";
3960                                             range "1000..192000";
3961                                         }
3962                                     }
3963                                 }
3964                             }
3965                         }
3966                     }
3967                     list react {
3968                         tailf:info "Configure threshold crossing actions";
3969                         description "Configure threshold crossing actions";
3970                         tailf:cli-mode-name "config-pmap-c-react";
3971                         key id;
3972                         leaf id {
3973                             type uint16 {
3974                                 tailf:info "<1-65535>  React instance id";
3975                             }
3976                         }
3977                         leaf mode {
3978                             tailf:cli-drop-node-name;
3979                             tailf:cli-hide-in-submode;
3980                             type enumeration {
3981                                 enum media-stop {
3982                                     tailf:info "Media stream stopped";
3983                                 }
3984                                 enum  mrv {
3985                                     tailf:info "Variation in packet rate from configured expected rate";
3986                                 }
3987                                 enum rtp-jitter-average {
3988                                     tailf:info "Mean jitter for the RTP stream";
3989                                 }
3990                                 enum transport-packets-lost-rate {
3991                                     tailf:info "Ratio of lost packets to total reaceived packets";
3992                                 }
3993                             }
3994                         }
3995                         leaf description {
3996                             tailf:info "Description for threshold crossing action instance";
3997                             description "Description for the instance";
3998                             tailf:cli-multi-value;
3999                             type string;
4000                         }
4001                         container action {
4002                             tailf:info "Config react action";
4003                             description "Config react action";
4004                             leaf snmp {
4005                                 tailf:info "SNMP is notified of the event";
4006                                 description "SNMP is notified of the event";
4007                                 tailf:cli-full-command;
4008                                 type empty;
4009                             }
4010                             leaf syslog {
4011                                 tailf:info "The threshold-crossing event is logged to syslog";
4012                                 description "The threshold-crossing event is logged to syslog";
4013                                 tailf:cli-full-command;
4014                                 type empty;
4015                              }
4016                         }
4017                         container alarm {
4018                             tailf:info "Config react alarm";
4019                             description "Config react alarm";
4020                             leaf severity {
4021                                 tailf:info "Alarm severity - default level none";
4022                                 description "Alarm severity - default level none";
4023                                 type enumeration {
4024                                     enum alert {
4025                                         tailf:info "TCA severity level critical (severity = 2)";
4026                                     }
4027                                     enum critical {
4028                                         tailf:info "TCA severity level major (severity = 3)";
4029                                     }
4030                                     enum emergency {
4031                                         tailf:info "TCA severity level critical (severity = 1)";
4032                                     }
4033                                     enum error {
4034                                         tailf:info "TCA severity level minor (severity = 4)";
4035                                     }
4036                                     enum info {
4037                                         tailf:info "TCA severity level default (severity = 5)";
4038                                     }
4039                                 }
4040                             }
4041                             container type {
4042                                 tailf:info "Alarm raised type - for each flow or a group";
4043                                 description "Alarm raised type - for each flow or a group";
4044                                 leaf discrete {
4045                                     tailf:info "Alert for each flow within the class";
4046                                     description "Alert for each flow within the class";
4047                                     tailf:cli-full-command;
4048                                     type empty;
4049                                 }
4050                                 container grouped {
4051                                     tailf:info "Alert if more than one flow cross the threshold";
4052                                     description "Alert if more than one flow cross the threshold";
4053                                     leaf count {
4054                                         tailf:info "Number of flows in the group cross the threshold";
4055                                         description "Number of flows in the group cross the threshold";
4056                                         tailf:cli-full-command;
4057                                         type uint16 {
4058                                             tailf:info "<1-65535>;;Number of flows";
4059                                         }
4060                                     }
4061                                    leaf percent {
4062                                         tailf:info "Percent of flows in the group cross the threshold";
4063                                         description "Percent of flows in the group cross the threshold";
4064                                         tailf:cli-full-command;
4065                                         type uint8 {
4066                                             tailf:info "<1-100>;;Percent of flows";
4067                                             range "1..100";
4068                                         }
4069                                     }
4070                                 }
4071                             }
4072                         }
4073                         container threshold {
4074                             tailf:info "Config react threshold";
4075                             description "Config react threshold";
4076                             container value {
4077                                 tailf:info "Range of percentage loss that would trigger the alarm";
4078                                 description "Range of percentage loss that would trigger the alarm";
4079                                 leaf ge {
4080                                     tailf:info "greater and equal to";
4081                                     description "greater and equal to";
4082                                     tailf:cli-full-command;
4083                                     type string {
4084                                         tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
4085                                     }
4086                                 }
4087                                 leaf gt {
4088                                     tailf:info "greater than";
4089                                     description "greater than";
4090                                     tailf:cli-full-command;
4091                                     type string {
4092                                         tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
4093                                     }
4094                                 }
4095                                 leaf le {
4096                                     tailf:info "less and equal to";
4097                                     description "less and equal to";
4098                                     tailf:cli-full-command;
4099                                     type string {
4100                                         tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
4101                                     }
4102                                 }
4103                                 leaf lt {
4104                                     tailf:info "less than";
4105                                     description "less than";
4106                                     tailf:cli-full-command;
4107                                     type string {
4108                                         tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
4109                                     }
4110                                 }
4111                                 container range {
4112                                     tailf:info "threshold within the range of";
4113                                     description "threshold within the range of";
4114                                     tailf:cli-sequence-commands;
4115                                     tailf:cli-compact-syntax;
4116                                     leaf low {
4117                                         tailf:cli-drop-node-name;
4118                                         type string {
4119                                             tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
4120                                         }
4121                                     }
4122                                     leaf high {
4123                                         tailf:cli-drop-node-name;
4124                                         type string {
4125                                             tailf:info "WORD;;rtp lost fraction threshold 0.05 - 100 (% in precision of 0.01)";
4126                                         }
4127                                     }
4128                                 }
4129                             }
4130                         }
4131                     }
4132                 }
4133                 // policy-map * / class * / inspect-police
4134                 container inspect-police {
4135                     when "../policy/action = 'inspect'";
4136                     tailf:cli-drop-node-name;
4137                     container police {
4138                         tailf:info "Police";
4139                         description "Police";
4140                         tailf:cli-sequence-commands {
4141                             tailf:cli-reset-siblings;
4142                         }
4143                         tailf:cli-compact-syntax;
4144                         leaf rate {
4145                             tailf:info "Specify police rate";
4146                             description "Specify police rate";
4147                             type uint32 {
4148                                 tailf:info "<8000-2000000000>;;Rate value in bps";
4149                                 range "8000..2000000000";
4150                             }
4151                         }
4152                         leaf burst {
4153                             tailf:info "Specify 'burst' parameter";
4154                             description "Specify 'burst' parameter";
4155                             type uint32 {
4156                                 tailf:info "<1000-512000000>;;Burst value in bytes";
4157                                 range "1000..512000000";
4158                             }
4159                         }
4160                     }
4161                 }
4162                 list action-list {
4163                     tailf:cli-drop-node-name;
4164                     tailf:cli-suppress-mode;
4165                     key action-type;
4166                     ordered-by user;
4167                     leaf action-type {
4168                         type policy-action-type;
4169                     }
4170                     choice action-param {
4171                         case bandwidth-case {
4172                             // policy-map * / class * / bandwidth
4173                             container bandwidth {
4174                                 //tailf:info "Bandwidth";
4175                                 tailf:cli-drop-node-name;
4176                                 when "../action-type = 'bandwidth'";
4177                                 leaf bits {
4178                                     tailf:cli-drop-node-name;
4179                                     type uint32 {
4180                                         range "8..2000000";
4181                                         tailf:info "<8-2000000>;;Kilo Bits per second";
4182                                     }
4183                                 }
4184                                 leaf percent {
4185                                     tailf:info "% of total Bandwidth";
4186                                     description "% of total Bandwidth";
4187                                     type percentage-type;
4188                                 }
4189                                 container remaining {
4190                                     tailf:info "% of the remaining bandwidth";
4191                                     description "% of the remaining bandwidth";
4192                                     leaf percent {
4193                                         tailf:info "% of the remaining bandwidth";
4194                                         description "% of the remaining bandwidth";
4195                                         type percentage-type;
4196                                     }
4197                                     leaf ratio {
4198                                         tailf:info "ratio for sharing excess bandwidth";
4199                                         description "ratio for sharing excess bandwidth";
4200                                         type uint16 {
4201                                             tailf:info "<1-65536>;;Ratio";
4202                                         }
4203                                     }
4204                                 }
4205                             }
4206                         }
4207                         case compression-case {
4208                             // policy-map * / class * / compression
4209                             container compression {
4210                                 //tailf:info "Activate Compression";
4211                                 tailf:cli-drop-node-name;
4212                                 //presence "Activate Compression";
4213                                 when "../action-type = 'compression'";
4214                                 container header {
4215                                     tailf:info "configure header compression";
4216                                     description "configure header compression";
4217                                     presence "configure header compression";
4218                                     leaf ip {
4219                                         tailf:info "configure ip header compression";
4220                                         description "configure ip header compression";
4221                                         type enumeration {
4222                                             enum rtp {
4223                                                 tailf:code-name "header_rtp";
4224                                                 tailf:info "configure rtp header compression";
4225                                             }
4226                                             enum tcp {
4227                                                 tailf:info "configure tcp header compression";
4228                                             }
4229                                         }
4230                                     }
4231                                 }
4232                             }
4233                         }
4234                         //case drop-case {
4235                             // policy-map * / class * / drop
4236                             //leaf drop {
4237                                 //tailf:info "Drop all packets";
4238                                 // tailf:cli-full-command;
4239                                 //type empty;
4240                             //}
4241                         //}
4242                         case estimate-case {
4243                             // policy-map * / class * / estimate
4244                             container estimate {
4245                                 //tailf:info "estimate resources required for this class";
4246                                 tailf:cli-drop-node-name;
4247                                 when "../action-type = 'estimate'";
4248                                 container bandwidth {
4249                                     presence "bandwidth required to service this class";
4250                                     tailf:info "bandwidth required to service this class";
4251                                     description "bandwidth required to service this class";
4252                                     tailf:cli-sequence-commands;
4253                                     tailf:cli-compact-syntax;
4254                                     container delay-one-in {
4255                                         tailf:info "specify QoS target delay";
4256                                         description "specify QoS target delay";
4257                                         tailf:cli-compact-syntax;
4258                                         tailf:cli-sequence-commands;
4259                                         leaf doi {
4260                                             tailf:cli-drop-node-name;
4261                                             tailf:cli-incomplete-command;
4262                                             type uint32 {
4263                                                 range "50..1000000";
4264                                                 tailf:info "<50-1000000>;;delay one packet "+
4265                                                     "of N";
4266                                             }
4267                                         }
4268                                         leaf milliseconds {
4269                                             type uint32 {
4270                                                 range "8..1000" {
4271                                                     tailf:info "<8-1000>;;worst-case "+
4272                                                         "milliseconds of delay";
4273                                                 }
4274                                             }
4275                                         }
4276                                     }
4277                                     leaf drop-one-in {
4278                                         tailf:info "specify QoS target loss rate";
4279                                         description "specify QoS target loss rate";
4280                                         type uint32 {
4281                                             tailf:info "<50-1000000>;;drop one packet of N";
4282                                         }
4283                                     }
4284                                 }
4285                             }
4286                         }
4287                         case forward-case {
4288                             //policy-map * / class * / forward service-path
4289                             container forward {
4290                                 //tailf:info "forward service-path action";
4291                                 tailf:cli-reset-container;
4292                                 tailf:cli-drop-node-name;
4293                                 when "../action-type = 'forward'";
4294                                 list service-path {
4295                                     tailf:info "Service Path Entries";
4296                                     description "Service Path Entries";
4297                                     tailf:cli-suppress-mode;
4298                                     key "service-path-id";
4299                                     leaf service-path-id {
4300                                         type uint32 {
4301                                             range "0..16777215";
4302                                             tailf:info "<0-16777215>;;Service Path ID";
4303                                         }
4304                                     }
4305                                     leaf service-index {
4306                                         tailf:info "Service Index";
4307                                         description "Service Index";
4308                                         type uint8 {
4309                                             range "2..255";
4310                                             tailf:info "<2-255>;;Service Index ID";
4311                                         }
4312                                     }
4313                                 }
4314                             }
4315                         }
4316                         case fair-queue-case {
4317                             // policy-map * / class * / fair-queue
4318                             // class-default: fair-queue [number-of-dynamic-queues]
4319                             // DWFQ: fair-queue
4320                             // policy-map: fair-queue [queue-limit queue-value]
4321                             // NOT SUPPORTED:
4322                             // air-queue [congestive-discard-threshold [dynamic-q [reservable-q]]]
4323                             container fair-queue {
4324                                 //tailf:info "Enable Flow-based Fair Queuing in this Class";
4325                                 tailf:cli-reset-container;
4326                                 tailf:cli-drop-node-name;
4327                                 when "../action-type = 'fair-queue'";
4328                                 leaf dynamic-queues {
4329                                     tailf:cli-drop-node-name;
4330                                     tailf:cli-full-command;
4331                                     type uint32 {
4332                                         range "16|32|64|128|256|512|1024|2048|4096" {
4333                                         tailf:info "<16-4096>;;Number Dynamic Conversation "+
4334                                             "Queues";
4335                                         }
4336                                     }
4337                                 }
4338                                 leaf queue-limit {
4339                                     tailf:info "per flow queue limit";
4340                                     description "per flow queue limit";
4341                                     tailf:cli-full-command;
4342                                     type uint16 {
4343                                         tailf:info "<1-32768>;;packets";
4344                                         range "1..32768";
4345                                     }
4346                                 }
4347                             }
4348                         }
4349                         case netflow-sampler-case {
4350                             // policy-map * / class * / netflow-sampler
4351                             leaf netflow-sampler {
4352                                 //tailf:info "NetFlow action";
4353                                 tailf:cli-drop-node-name;
4354                                 tailf:cli-full-command;
4355                                 when "../action-type = 'netflow-sampler'";
4356                                 // should be leafref to sampler
4357                                 type string {
4358                                     tailf:info "WORD;;Name of the flow sampler";
4359                                 }
4360                             }
4361                         }
4362                         case police-case {
4363                             // policy-map * / class * / police ?
4364                             choice police-choice {
4365                                 // policy-map * / class * / police aggregate
4366                                 case police-aggregate-case {
4367                                     container police-aggregate {
4368                                         tailf:cli-no-keyword;
4369                                         tailf:cli-drop-node-name;
4370                                         container police {
4371                                             //tailf:info "Police";
4372                                             tailf:cli-drop-node-name;
4373                                             when "../../action-type = 'police'" {
4374                                                 tailf:dependency "../../action-type";
4375                                             }
4376                                             leaf aggregate {
4377                                                 tailf:info "Choose aggregate policer for current class";
4378                                                 description "Choose aggregate policer for current class";
4379                                                 type string {
4380                                                     tailf:info "WORD;;enter aggregate-policer name";
4381                                                 }
4382                                             }
4383                                         }
4384                                     }
4385                                 }
4386                                 // police (policy-map)
4387                                 // police cir <bps> [[bc <burst-normal>] [be <burst-max>]]
4388                                 //        [pir <bps> [be <burst-bytes>]] ACTIONS
4389                                 // NOTE: cir, bc & be keywords are mandatory in this model.
4390                                 //       Java code will add missing cir,bc and be in show().
4391                                 case police-policy-map-case {
4392                                     container police-policy-map {
4393                                         tailf:cli-no-keyword;
4394                                         tailf:cli-drop-node-name;
4395                                         container police {
4396                                             tailf:cli-add-mode;
4397                                             tailf:cli-mode-name "config-pmap-c-police";
4398                                             tailf:cli-flatten-container;
4399                                             tailf:cli-sequence-commands {
4400                                                 tailf:cli-reset-siblings;
4401                                             }
4402                                             tailf:cli-drop-node-name;
4403                                             when "../../action-type = 'police'" {
4404                                                 tailf:dependency "../../action-type";
4405                                             }
4406                                             // cir <bps>
4407                                             leaf cir {
4408                                                 tailf:info "Committed information rate";
4409                                                 description "Committed information rate";
4410                                                 tailf:cli-hide-in-submode;
4411                                                 type police-bps-type;
4412                                             }
4413                                             // [bc <burst-normal>]
4414                                             leaf bc {
4415                                                 tailf:info "Conform burst";
4416                                                 description "Conform burst";
4417                                                 tailf:cli-optional-in-sequence;
4418                                                 tailf:cli-hide-in-submode;
4419                                                 type police-burst-type;
4420                                             }
4421                                             // [be <burst-max>]
4422                                             leaf be {
4423                                                 when "../bc";
4424                                                 tailf:info "Excess burst";
4425                                                 description "Excess burst";
4426                                                 tailf:cli-optional-in-sequence;
4427                                                 tailf:cli-hide-in-submode;
4428                                                 type police-burst-type;
4429                                             }
4430                                              // [pir <bps> [be <burst-bytes>]]
4431                                             leaf pir {
4432                                                 tailf:info "Peak Information Rate";
4433                                                 description "Peak Information Rate";
4434                                                 tailf:cli-optional-in-sequence;
4435                                                 tailf:cli-hide-in-submode;
4436                                                 type police-bps-type;
4437                                             }
4438                                             container pir-be {
4439                                                 when "../pir";
4440                                                 tailf:cli-no-keyword;
4441                                                 tailf:cli-drop-node-name;
4442                                                 tailf:cli-optional-in-sequence;
4443                                                 tailf:cli-flatten-container;
4444                                                 tailf:cli-hide-in-submode;
4445                                                 leaf be {
4446                                                     tailf:info "Excess burst";
4447                                                     description "Excess burst";
4448                                                     type police-burst-type;
4449                                                 }
4450                                             }
4451                                             // conform-action | exceed-action | violate-action
4452                                             uses police-action-grouping;
4453                                         }
4454                                     }
4455                                 }
4456                                 // police cir percent (combo of percent & policy-map versions)
4457                                 // police cir percent <percentage>
4458                                 //    [bc] <burst> ms] [be [<burst> ms]
4459                                 //    [pir percent <percentage> [be <burst> ms]] ACTIONS
4460                                 case police-cir-percent-case {
4461                                     container police-cir-percent {
4462                                         tailf:cli-no-keyword;
4463                                         tailf:cli-drop-node-name;
4464                                         container police {
4465                                             tailf:cli-drop-node-name;
4466                                             when "../../action-type = 'police'" {
4467                                                 tailf:dependency "../../action-type";
4468                                             }
4469                                             container cir {
4470                                                 tailf:info "Committed information rate";
4471                                                 description "Committed information rate";
4472                                                 container percent {
4473                                                     tailf:info "% of interface bandwidth for Committed "+
4474                                                      "information rate";
4475                                                     description "% of interface bandwidth for Committed "+
4476                                                     "information rate";
4477                                                     tailf:cli-add-mode;
4478                                                     tailf:cli-mode-name "config-pmap-c-police";
4479                                                     tailf:cli-incomplete-command;
4480                                                     tailf:cli-flatten-container;
4481                                                     tailf:cli-sequence-commands {
4482                                                         tailf:cli-reset-siblings;
4483                                                     }
4484                                                     // percent <percentage>
4485                                                     leaf percentage {
4486                                                         tailf:cli-drop-node-name;
4487                                                         tailf:cli-hide-in-submode;
4488                                                         type percentage-type;
4489                                                     }
4490                                                     // [bc <burst> ms]
4491                                                     leaf bc {
4492                                                         tailf:info "Conform burst";
4493                                                         description "Conform burst";
4494                                                         tailf:cli-optional-in-sequence;
4495                                                         tailf:cli-hide-in-submode;
4496                                                         type uint16 {
4497                                                             tailf:info "<1-2000>;;Burst ms";
4498                                                         }
4499                                                     }
4500                                                     container bc-ms {
4501                                                         when "../bc";
4502                                                         tailf:cli-no-keyword;
4503                                                         tailf:cli-drop-node-name;
4504                                                         tailf:cli-optional-in-sequence;
4505                                                         tailf:cli-hide-in-submode;
4506                                                         tailf:cli-compact-syntax;
4507                                                         tailf:cli-flatten-container;
4508                                                         leaf ms {
4509                                                             tailf:info "Milli seconds";
4510                                                             description "Milli seconds";
4511                                                             tailf:cli-no-keyword;
4512                                                             type empty;
4513                                                         }
4514                                                     }
4515                                                     // [be [<burst> ms]
4516                                                     leaf be {
4517                                                         when "../bc-ms/ms" {
4518                                                             tailf:dependency "../bc-ms/ms";
4519                                                         }
4520                                                         tailf:info "Excess burst";
4521                                                         tailf:cli-optional-in-sequence;
4522                                                         tailf:cli-hide-in-submode;
4523                                                         type uint16 {
4524                                                             tailf:info "<1-2000>;;Burst ms";
4525                                                         }
4526                                                     }
4527                                                     container be-ms {
4528                                                         when "../be";
4529                                                         tailf:cli-no-keyword;
4530                                                         tailf:cli-drop-node-name;
4531                                                         tailf:cli-hide-in-submode;
4532                                                         tailf:cli-compact-syntax;
4533                                                         tailf:cli-flatten-container;
4534                                                         leaf ms {
4535                                                             tailf:info "Milli seconds";
4536                                                             description "Milli seconds";
4537                                                             tailf:cli-no-keyword;
4538                                                             type empty;
4539                                                         }
4540                                                     }
4541                                                     // [pir percent <percentage> [be <burst> ms]]
4542                                                     container pir {
4543                                                         tailf:info "Peak Information Rate";
4544                                                         description "Peak Information Rate";
4545                                                         tailf:cli-compact-syntax;
4546                                                         tailf:cli-flatten-container;
4547                                                         tailf:cli-hide-in-submode;
4548                                                         tailf:cli-optional-in-sequence;
4549                                                         leaf percent {
4550                                                             tailf:info "% of interface bandwidth for Peak "+
4551                                                                 "Information Rate";
4552                                                             description "% of interface bandwidth for Peak "+
4553                                                                 "Information Rate";
4554                                                             type percentage-type;
4555                                                         }
4556                                                     }
4557                                                     container pir-be {
4558                                                         when "../pir";
4559                                                         tailf:cli-no-keyword;
4560                                                         tailf:cli-drop-node-name;
4561                                                         tailf:cli-optional-in-sequence;
4562                                                         tailf:cli-flatten-container;
4563                                                         tailf:cli-hide-in-submode;
4564                                                         leaf be {
4565                                                             tailf:info "Excess burst";
4566                                                             description "Excess burst";
4567                                                             type uint16 {
4568                                                                 tailf:info "<1-2000>;;Burst ms";
4569                                                             }
4570                                                         }
4571                                                     }
4572                                                     container pir-be-ms {
4573                                                         when "../pir-be/be" {
4574                                                            tailf:dependency "../pir-be/be";
4575                                                         }
4576                                                         tailf:cli-no-keyword;
4577                                                         tailf:cli-drop-node-name;
4578                                                         tailf:cli-optional-in-sequence;
4579                                                         tailf:cli-hide-in-submode;
4580                                                         tailf:cli-flatten-container;
4581                                                         leaf ms {
4582                                                             tailf:info "Milli seconds";
4583                                                             description "Milli seconds";
4584                                                             tailf:cli-no-keyword;
4585                                                             type empty;
4586                                                         }
4587                                                     }
4588                                                     // conform-action | exceed-action | violate-action
4589                                                     uses police-action-grouping;
4590                                                 }
4591                                             }
4592                                         }
4593                                     }
4594                                 }
4595                                 // police rate (control-plane)
4596                                 // police rate <units> <pps|bps> [burst <burst-in-x> <packets|bytes>]
4597                                 //   [peak-rate <peak-rate-in-xps> <pps|bps>]
4598                                 //   [peak-burst <peak-burst-in-x> <packets|bytes>]
4599                                 //   [conform-action <action>]
4600                                 case police-rate-unit-case {
4601                                     container police-rate-unit {
4602                                         tailf:cli-no-keyword;
4603                                         tailf:cli-drop-node-name;
4604                                         container police {
4605                                             tailf:cli-drop-node-name;
4606                                             when "../../action-type = 'police'" {
4607                                                 tailf:dependency "../../action-type";
4608                                             }
4609                                             container rate {
4610                                                 tailf:info "Specify police rate";
4611                                                 description "Specify police rate";
4612                                                 tailf:cli-add-mode;
4613                                                 tailf:cli-mode-name "config-pmap-c-police";
4614                                                 tailf:cli-flatten-container;
4615                                                 tailf:cli-sequence-commands {
4616                                                     tailf:cli-reset-siblings;
4617                                                 }
4618                                                 // <units>
4619                                                 leaf "units" {
4620                                                     tailf:cli-drop-node-name;
4621                                                     tailf:cli-hide-in-submode;
4622                                                     type uint64 {
4623                                                     tailf:info "<1-2000000000>;;Rate value in the range "+
4624                                                          "8000-2,000,000,000 bps or 1-2,000,000 pps";
4625                                                     }
4626                                                 }
4627                                                 // <pps|bps>
4628                                                 leaf xps {
4629                                                     tailf:cli-no-keyword;
4630                                                     tailf:cli-drop-node-name;
4631                                                     tailf:cli-hide-in-submode;
4632                                                     type police-pps-bps-type;
4633                                                 }
4634                                                 // [burst <burst-in-x> <packets|bytes>]
4635                                                 container burst {
4636                                                     tailf:info "Specify 'burst' parameter";
4637                                                     description "Specify 'burst' parameter";
4638                                                     tailf:cli-optional-in-sequence;
4639                                                     tailf:cli-compact-syntax;
4640                                                     tailf:cli-hide-in-submode;
4641                                                     tailf:cli-flatten-container;
4642                                                     tailf:cli-sequence-commands;
4643                                                     leaf burst-value {
4644                                                         tailf:cli-no-keyword;
4645                                                         tailf:cli-drop-node-name;
4646                                                         tailf:cli-incomplete-command;
4647                                                         type uint32 {
4648                                                             tailf:info "<1-512000000>;;Burst value in "+
4649                                                                 "packets/bytes";
4650                                                         }
4651                                                     }
4652                                                     leaf burst-type {
4653                                                         tailf:cli-no-keyword;
4654                                                         tailf:cli-drop-node-name;
4655                                                         tailf:cli-hide-in-submode;
4656                                                         type police-packets-bytes-type;
4657                                                     }
4658                                                 }
4659                                                 // [peak-rate <peak-rate-in-xps> <pps|bps>]
4660                                                 container peak-rate {
4661                                                     tailf:info "Specify peak rate";
4662                                                     description "Specify peak rate";
4663                                                     tailf:cli-optional-in-sequence;
4664                                                     tailf:cli-compact-syntax;
4665                                                     tailf:cli-flatten-container;
4666                                                     tailf:cli-hide-in-submode;
4667                                                     tailf:cli-sequence-commands;
4668                                                     leaf peak-rate-value {
4669                                                         tailf:cli-no-keyword;
4670                                                         tailf:cli-drop-node-name;
4671                                                         tailf:cli-incomplete-command;
4672                                                         type uint32 {
4673                                                             tailf:info "<1-512000000>;;Peak-rate value in "+
4674                                                                 "packets or bytes per second";
4675                                                             range "1..512000000";
4676                                                         }
4677                                                     }
4678                                                     leaf xps {
4679                                                         tailf:cli-no-keyword;
4680                                                         tailf:cli-drop-node-name;
4681                                                         type police-pps-bps-type;
4682                                                     }
4683                                                 }
4684                                                 // [peak-burst <peak-burst-in-x> <packets|bytes>]
4685                                                 container peak-burst {
4686                                                     tailf:info "Specify 'peak-burst' parameter for peak-rate";
4687                                                     description "Specify 'peak-burst' parameter for peak-rate";
4688                                                     tailf:cli-optional-in-sequence;
4689                                                     tailf:cli-compact-syntax;
4690                                                     tailf:cli-flatten-container;
4691                                                     tailf:cli-hide-in-submode;
4692                                                     tailf:cli-sequence-commands;
4693                                                     leaf burst-value {
4694                                                         tailf:cli-no-keyword;
4695                                                         tailf:cli-drop-node-name;
4696                                                         tailf:cli-incomplete-command;
4697                                                         type uint32 {
4698                                                             tailf:info "<1-512000000>;;Burst value in "+
4699                                                                 "packets/bytes";
4700                                                         }
4701                                                     }
4702                                                     leaf burst-type {
4703                                                         tailf:cli-no-keyword;
4704                                                         tailf:cli-drop-node-name;
4705                                                         type police-packets-bytes-type;
4706                                                     }
4707                                                 }
4708                                                 // conform-action | exceed-action | violate-action
4709                                                 uses police-action-grouping;
4710                                             }
4711                                         }
4712                                     }
4713                                 }
4714                                 // police rate percent (control-plane)
4715                                 // police rate percent <percentage> [burst <ms> ms]
4716                                 //    [peak-rate percent <percentage>] [peak-burst <ms> ms]
4717                                 case police-rate-percent-case {
4718                                     container police-rate-percent {
4719                                         tailf:cli-no-keyword;
4720                                         tailf:cli-drop-node-name;
4721                                         container police {
4722                                             tailf:cli-drop-node-name;
4723                                             when "../../action-type = 'police'" {
4724                                                 tailf:dependency "../../action-type";
4725                                             }
4726                                             container rate {
4727                                                 tailf:info "Specify police rate";
4728                                                 description "Specify police rate";
4729                                                 container percent {
4730                                                     tailf:info "% of interface bandwidth for rate";
4731                                                     description "% of interface bandwidth for rate";
4732                                                     tailf:cli-add-mode;
4733                                                     tailf:cli-mode-name "config-pmap-c-police";
4734                                                     tailf:cli-flatten-container;
4735                                                     tailf:cli-sequence-commands {
4736                                                         tailf:cli-reset-siblings;
4737                                                     }
4738                                                     // <percentage>
4739                                                     leaf percentage {
4740                                                         tailf:cli-drop-node-name;
4741                                                         tailf:cli-hide-in-submode;
4742                                                         type percentage-type;
4743                                                     }
4744                                                     // [burst <ms> ms]
4745                                                     leaf burst {
4746                                                         tailf:info "Specify 'burst' parameter";
4747                                                         description "Specify 'burst' parameter";
4748                                                         tailf:cli-optional-in-sequence;
4749                                                         tailf:cli-hide-in-submode;
4750                                                         type uint16 {
4751                                                             tailf:info "<1-2000>;;Burst value in milliseconds";
4752                                                         }
4753                                                     }
4754                                                     leaf ms {
4755                                                         when "../burst";
4756                                                         tailf:info "Treat 'burst' value in milliseconds";
4757                                                         description "Treat 'burst' value in milliseconds";
4758                                                         tailf:cli-hide-in-submode;
4759                                                         type empty;
4760                                                     }
4761                                                     // [peak-rate percent <percentage>]
4762                                                     container peak-rate {
4763                                                         tailf:info "Specify peak rate";
4764                                                         description "Specify peak rate";
4765                                                         tailf:cli-hide-in-submode;
4766                                                         tailf:cli-optional-in-sequence;
4767                                                         tailf:cli-flatten-container;
4768                                                         leaf percent {
4769                                                             tailf:info "% of interface bandwidth for peak-rate";
4770                                                             description "% of interface bandwidth for peak-rate";
4771                                                             type percentage-type;
4772                                                         }
4773                                                     }
4774                                                     // [peak-burst <ms> ms]
4775                                                     leaf peak-burst {
4776                                                         tailf:info "Specify 'peak-burst' parameter for "+
4777                                                             "'peak-rate'";
4778                                                         description "Specify 'peak-burst' parameter for "+
4779                                                             "'peak-rate'";
4780                                                         tailf:cli-hide-in-submode;
4781                                                         tailf:cli-optional-in-sequence;
4782                                                         type uint16 {
4783                                                             tailf:info "<1-2000>;;Peak burst value in "+
4784                                                                 "milliseconds";
4785                                                         }
4786                                                     }
4787                                                     container peak-burst-ms {
4788                                                         when "../peak-burst";
4789                                                         tailf:cli-no-keyword;
4790                                                         tailf:cli-drop-node-name;
4791                                                         tailf:cli-optional-in-sequence;
4792                                                         tailf:cli-hide-in-submode;
4793                                                         tailf:cli-flatten-container;
4794                                                         leaf ms {
4795                                                             tailf:info "Milli seconds";
4796                                                             description "Milli seconds";
4797                                                             tailf:cli-no-keyword;
4798                                                             type empty;
4799                                                         }
4800                                                     }
4801                                                     // conform-action | exceed-action | violate-action
4802                                                     uses police-action-grouping;
4803                                                 }
4804                                             }
4805                                         }
4806                                     }
4807                                 }
4808                                 // police rate pdp
4809                                 // police rate pdp [burst <bytes>]
4810                                 //    [peak-rate pdp [peak-burst <bytes>]] ACTIONS
4811                                 case police-rate-pdp-case {
4812                                     container police-rate-pdp {
4813                                         tailf:cli-no-keyword;
4814                                         tailf:cli-drop-node-name;
4815                                         container police {
4816                                             tailf:cli-drop-node-name;
4817                                             when "../../action-type = 'police'" {
4818                                                 tailf:dependency "../../action-type";
4819                                             }
4820                                             container rate {
4821                                                 tailf:info "Specify police rate";
4822                                                 description "Specify police rate";
4823                                                 container pdp {
4824                                                     tailf:info "% of interface bandwidth for rate";
4825                                                     description "% of interface bandwidth for rate";
4826                                                     tailf:cli-add-mode;
4827                                                     tailf:cli-mode-name "config-pmap-c-police";
4828                                                     tailf:cli-flatten-container;
4829                                                     tailf:cli-sequence-commands {
4830                                                         tailf:cli-reset-siblings;
4831                                                     }
4832                                                     // [burst <bytes>]
4833                                                     leaf burst {
4834                                                         tailf:info "Conform burst";
4835                                                         description "Conform burst";
4836                                                         tailf:cli-hide-in-submode;
4837                                                         tailf:cli-optional-in-sequence;
4838                                                         type police-burst-type;
4839                                                     }
4840                                                     // [peak-rate pdp [peak-burst <bytes>]]
4841                                                     leaf peak-rate {
4842                                                         tailf:info "Specify peak rate";
4843                                                         description "Specify peak rate";
4844                                                         tailf:cli-hide-in-submode;
4845                                                         tailf:cli-optional-in-sequence;
4846                                                         type enumeration {
4847                                                             enum "pdp" {
4848                                                             }
4849                                                         }
4850                                                     }
4851                                                     leaf peak-burst {
4852                                                         when "../peak-rate";
4853                                                         tailf:info "Specify 'peak-burst' parameter for "+
4854                                                             "'peak-rate'";
4855                                                         description "Specify 'peak-burst' parameter for "+
4856                                                             "'peak-rate'";
4857                                                         tailf:cli-hide-in-submode;
4858                                                         tailf:cli-optional-in-sequence;
4859                                                         type police-burst-type;
4860                                                     }
4861                                                     // conform-action | exceed-action | violate-action
4862                                                     uses police-action-grouping;
4863                                                 }
4864                                             }
4865                                         }
4866                                     }
4867                                 }
4868                                 // police target-bit-rate  <bits per second>
4869                                 case police-target-bitrate-case {
4870                                     container police-target-bitrate {
4871                                     tailf:cli-no-keyword;
4872                                     tailf:cli-drop-node-name;
4873                                     container police {
4874                                         tailf:cli-drop-node-name;
4875                                         when "../../action-type = 'police'" {
4876                                             tailf:dependency "../../action-type";
4877                                         }
4878                                         tailf:cli-add-mode;
4879                                         tailf:cli-mode-name "config-pmap-c-police";
4880                                         leaf bit-rate {
4881                                              tailf:info "Target bit rate (bits per second) (postfix k, m, g optional),
4882                                                  decimal point allowed";
4883                                              description "Target bit rate (bits per second) (postfix k, m, g optional),
4884                                                  decimal point allowed";
4885                                                  tailf:cli-no-keyword;
4886                                                  tailf:cli-drop-node-name;
4887                                                  tailf:cli-hide-in-submode;
4888                                                  type uint64 {
4889                                                      tailf:info "<8000-10000000000>;;Target bit rate (bits per second)";
4890                                                      range "8000..10000000000";
4891                                                  }
4892                                              }
4893                                              // conform-action | exceed-action | violate-action
4894                                              uses police-action-grouping;
4895                                         }
4896                                     }
4897                                 }
4898                                 // police flow (policy-map)
4899                                 // police flow [mask {dest-only | full-flow | src-only}]
4900                                 //    <bps> [<burst-normal>] ACTIONS
4901                                 case police-flow-case {
4902                                     container police-flow {
4903                                     tailf:cli-no-keyword;
4904                                     tailf:cli-drop-node-name;
4905                                     container police {
4906                                         tailf:cli-drop-node-name;
4907                                         when "../../action-type = 'police'" {
4908                                             tailf:dependency "../../action-type";
4909                                         }
4910                                         container flow {
4911                                             tailf:info "police each flow";
4912                                             description "police each flow";
4913                                             tailf:cli-add-mode;
4914                                             tailf:cli-mode-name "config-pmap-c-police";
4915                                             tailf:cli-flatten-container;
4916                                             tailf:cli-sequence-commands {
4917                                                 tailf:cli-reset-siblings;
4918                                             }
4919                                             // [mask {dest-only | full-flow | src-only}]
4920                                             leaf mask {
4921                                                 tailf:info "flow mask to be used for policing";
4922                                                 description "flow mask to be used for policing";
4923                                                 tailf:cli-hide-in-submode;
4924                                                 tailf:cli-optional-in-sequence;
4925                                                 type enumeration {
4926                                                     enum dest-only {
4927                                                         tailf:info "destination-address only flow mask";
4928                                                     }
4929                                                     enum full-flow {
4930                                                         tailf:info "full flow mask";
4931                                                     }
4932                                                     enum src-only {
4933                                                         tailf:info "source-address only flow mask";
4934                                                     }
4935                                                 }
4936                                             }
4937                                             // <bps>
4938                                             leaf bps {
4939                                                 tailf:cli-drop-node-name;
4940                                                 tailf:cli-hide-in-submode;
4941                                                 type police-bps-type;
4942                                             }
4943                                             // [<burst-normal>]
4944                                             leaf burst-normal {
4945                                                 when "../bps";
4946                                                 tailf:cli-drop-node-name;
4947                                                 tailf:cli-hide-in-submode;
4948                                                 tailf:cli-optional-in-sequence;
4949                                                 type police-burst-type;
4950                                             }
4951                                             // conform-action | exceed-action | violate-action
4952                                             uses police-action-grouping;
4953                                             }
4954                                         }
4955                                     }
4956                                 }
4957                                 // police (Catalyst 4500)
4958                                 // police <bps> bps <byte> byte ACTIONS
4959                                 case police-catalyst-case {
4960                                     container police-catalyst {
4961                                         tailf:cli-no-keyword;
4962                                         tailf:cli-drop-node-name;
4963                                         container police {
4964                                             tailf:cli-add-mode;
4965                                             tailf:cli-mode-name "config-pmap-c-police";
4966                                             tailf:cli-flatten-container;
4967                                             tailf:cli-drop-node-name;
4968                                             when "../../action-type = 'police'" {
4969                                                 tailf:dependency "../../action-type";
4970                                             }
4971                                             tailf:cli-sequence-commands {
4972                                                 tailf:cli-reset-siblings;
4973                                             }
4974                                             // <bps> bps
4975                                             leaf bps-value {
4976                                                 tailf:cli-no-keyword;
4977                                                 tailf:cli-drop-node-name;
4978                                                 tailf:cli-hide-in-submode;
4979                                                 tailf:cli-incomplete-command;
4980                                                 type string {
4981                                                     tailf:info "<32000-32000000000>;;Rate in bits per second "+
4982                                                         "(postfix k, m, g optional; decimal point allowed)";
4983                                                 }
4984                                             }
4985                                             leaf bps {
4986                                                 tailf:cli-hide-in-submode;
4987                                                 tailf:cli-incomplete-command;
4988                                                 type empty;
4989                                             }
4990                                             // <byte> byte
4991                                             leaf byte-value {
4992                                                 tailf:cli-no-keyword;
4993                                                 tailf:cli-drop-node-name;
4994                                                 tailf:cli-hide-in-submode;
4995                                                 tailf:cli-incomplete-command;
4996                                                 type string {
4997                                                     tailf:info "<32000-32000000000>;;(postfix k, m, g "+
4998                                                         "optional; decimal point allowed)";
4999                                                 }
5000                                             }
5001                                             leaf byte {
5002                                                 tailf:cli-hide-in-submode;
5003                                                 type empty;
5004                                             }
5005                                             // conform-action | exceed-action | violate-action
5006                                             container actions {
5007                                                 tailf:cli-no-keyword;
5008                                                 tailf:cli-break-sequence-commands;
5009                                                 tailf:cli-drop-node-name;
5010                                                 tailf:cli-flatten-container;
5011                                                 tailf:cli-hide-in-submode;
5012                                                 // policy-map * / class * / police ? / conform-action
5013                                                 uses police-conform-action-grouping;
5014                                                 // policy-map * / class * / police ? / exceed-action
5015                                                 uses police-exceed-action-grouping;
5016                                                 // policy-map * / class * / police ? / violate-action
5017                                                 uses police-violate-action-grouping;
5018                                             }
5019                                         }
5020                                     }
5021                                 }
5022                                 // police (Catalyst C3550)
5023                                 // police <bps> <burst> exceed-action {drop | policed-dscp-transmit}]
5024                                 case police-switch-case {
5025                                     container police-switch {
5026                                         tailf:cli-no-keyword;
5027                                         tailf:cli-drop-node-name;
5028                                         container police {
5029                                             tailf:cli-compact-syntax;
5030                                             tailf:cli-drop-node-name;
5031                                             when "../../action-type = 'police'" {
5032                                                 tailf:dependency "../../action-type";
5033                                             }
5034                                             tailf:cli-sequence-commands {
5035                                                 tailf:cli-reset-siblings;
5036                                             }
5037                                             // <cir>
5038                                             leaf cir {
5039                                                 tailf:cli-incomplete-command;
5040                                                 tailf:cli-drop-node-name;
5041                                                 type uint32 {
5042                                                     tailf:info "<8000-1000000000>;;Bits per second";
5043                                                     range "8000..1000000000";
5044                                                 }
5045                                             }
5046                                             // <bc>
5047                                             leaf bc {
5048                                                 tailf:cli-drop-node-name;
5049                                                 type uint32 {
5050                                                     tailf:info "<8000-2000000>;;Normal burst bytes";
5051                                                     range "8000..2000000";
5052                                                 }
5053                                             }
5054                                             // exceed-action
5055                                             leaf exceed-action {
5056                                                 tailf:info "action when rate is exceeded";
5057                                                 description "action when rate is exceeded";
5058                                                 type enumeration {
5059                                                     enum drop {
5060                                                         tailf:info "drop packet";
5061                                                     }
5062                                                     enum policed-dscp-transmit {
5063                                                         tailf:info "change dscp per policed-dscp map and send it";
5064                                                     }
5065                                                 }
5066                                             }
5067                                         }
5068                                     }
5069                                 }
5070                             }
5071                         }
5072                         case priority-case {
5073                             // policy-map * / class * / priority
5074                             container priority {
5075                                 //tailf:info "Strict Scheduling Priority for this Class";
5076                                 tailf:cli-compact-syntax;
5077                                 tailf:cli-sequence-commands;
5078                                 tailf:cli-drop-node-name;
5079                                 when "../action-type = 'priority'";
5080                                 leaf level {
5081                                     tailf:info "Multi-Level Priority Queue";
5082                                     description "Multi-Level Priority Queue";
5083                                     tailf:cli-optional-in-sequence;
5084                                     type uint8 {
5085                                         tailf:info "<1-2>;;Multi-Level Priority Queue";
5086                                         range "1..2";
5087                                     }
5088                                 }
5089                                 choice priority-type {
5090                                     leaf kilo-bits {
5091                                         tailf:cli-drop-node-name;
5092                                         type uint32 {
5093                                             range "8..2000000";
5094                                             tailf:info "<8-2000000>;;Kilo Bits per second";
5095                                         }
5096                                     }
5097                                     leaf percent {
5098                                         tailf:info "% of total bandwidth";
5099                                         description "% of total bandwidth";
5100                                         type uint16 {
5101                                             range "1..100";
5102                                             tailf:info "<1-100>;;percentage";
5103                                         }
5104                                     }
5105                                 }
5106                                 leaf burst {
5107                                     tailf:cli-drop-node-name;
5108                                     type uint32 {
5109                                         tailf:info "<32-64000000>;;Burst in bytes";
5110                                         range "32..64000000";
5111                                     }
5112                                 }
5113                             }
5114                         }
5115                         case queue-buffers-case {
5116                             // policy-map * / class * / queue-buffers
5117                             container queue-buffers {
5118                                 tailf:cli-drop-node-name;
5119                                 when "../action-type = 'queue-buffers'";
5120                                 leaf ratio {
5121                                     tailf:info "Relative buffer size for queue";
5122                                     description "Relative buffer size for queue";
5123                                     type uint8 {
5124                                         tailf:info "<0-100>;;Queue-buffers ratio limit";
5125                                         range "0..100";
5126                                     }
5127                                 }
5128                             }
5129                         }
5130                             case queue-limit-case {
5131                             // policy-map * / class * / queue-limit
5132                             container queue-limit {
5133                                 //tailf:info "Queue Max Threshold for Tail Drop";
5134                                 tailf:cli-compact-syntax;
5135                                 tailf:cli-sequence-commands {
5136                                     tailf:cli-reset-siblings;
5137                                 }
5138                                 tailf:cli-drop-node-name;
5139                                 when "../action-type = 'queue-limit'";
5140                                 leaf queue-limit-value {
5141                                     tailf:cli-drop-node-name;
5142                                     type uint32 {
5143                                         tailf:info "<1-8192000>  in bytes, <1-3400> in ms, "+
5144                                             "<1-32768> in packets by default";
5145                                         range "1..8192000";
5146                                     }
5147                                 }
5148                                 leaf queue-limit-type {
5149                                 tailf:cli-drop-node-name;
5150                                 type enumeration {
5151                                     enum bytes {
5152                                     tailf:info "in bytes";
5153                                 }
5154                                 enum ms {
5155                                     tailf:info "in milliseconds";
5156                                 }
5157                                 enum packets {
5158                                     tailf:info "in packets";
5159                                 }
5160                                 enum us {
5161                                     tailf:info "in microseconds";
5162                                 }
5163                             }
5164                         }
5165                     }
5166                     container queue-limit-dscp {
5167                         //tailf:info "Queue Max Threshold for Tail Drop";
5168                         tailf:cli-compact-syntax;
5169                         tailf:cli-drop-node-name;
5170                         when "../action-type = 'queue-limit'";
5171                         leaf dscp {
5172                             tailf:info "parameters for each dscp value";
5173                             description "parameters for each dscp value";
5174                             type empty;
5175                         }
5176                         leaf values {
5177                             tailf:info "dscp values";
5178                             description "dscp values";
5179                             type empty;
5180                         }
5181                         leaf-list sdcp-val {
5182                             tailf:cli-drop-node-name;
5183                             type dscp-type;
5184                         }
5185                         leaf percent {
5186                             tailf:info "% of threshold";
5187                             description "% of threshold";
5188                             type uint8 {
5189                                 tailf:info "<0-100>;;% of threshold";
5190                                 range "0..100";
5191                             }
5192                         }
5193                     }
5194                     }
5195                     case random-detect {
5196                     // policy-map * / class * / random-detect
5197                     container random-detect {
5198                         //tailf:info "Enable Random Early Detection as drop policy";
5199                         //presence true;
5200                         tailf:cli-drop-node-name;
5201                         when "../action-type = 'random-detect'";
5202                         container aggregate {
5203                             tailf:info "aggregate subclasses";
5204                             description "aggregate subclasses";
5205                             tailf:cli-compact-syntax;
5206                             tailf:cli-sequence-commands {
5207                                 tailf:cli-reset-siblings;
5208                             }
5209                             presence true;
5210                             leaf minimum-thresh {
5211                                 tailf:info "minimum threshold for red aggregate";
5212                                 description "minimum threshold for red aggregate";
5213                                 type uint32 {
5214                                     tailf:info "<0-1000000>;;minimum threshold (number of packets)";
5215                                     range "0..1000000";
5216                                 }
5217                             }
5218                             leaf maximum-thresh {
5219                                 tailf:info "maximum threshold for red aggregate";
5220                                 description "maximum threshold for red aggregate";
5221                                 type uint32 {
5222                                     tailf:info "<0-1000000>;;maximum threshold (number of packets)";
5223                                     range "0..1000000";
5224                                 }
5225                             }
5226                             leaf mark-probability {
5227                                 tailf:info "mark-probability for red aggregate";
5228                                 description "mark-probability for red aggregate";
5229                                 type empty;
5230                             }
5231                             leaf denominator {
5232                                 tailf:cli-drop-node-name;
5233                                 type uint32 {
5234                                     tailf:info "<0-65535>;;mark probability denominator";
5235                                     range "0..65535";
5236                                 }
5237                             }
5238                         }
5239                         container discard-class {
5240                             tailf:info "parameters for each discard-class value";
5241                             description "parameters for each discard-class value";
5242                             tailf:cli-compact-syntax;
5243                             tailf:cli-sequence-commands;
5244                             leaf dclass {
5245                                 tailf:cli-drop-node-name;
5246                                 tailf:cli-incomplete-command;
5247                                 type uint16 {
5248                                     range "0..7";
5249                                     tailf:info "<0-7>;;discard-class value";
5250                                 }
5251                             }
5252                             uses random-detect-grouping;
5253                         }
5254                         leaf discard-class-based {
5255                             tailf:info "Enable discard-class-based WRED as drop policy";
5256                             description "Enable discard-class-based WRED as drop policy";
5257                             tailf:cli-full-command;
5258                             type empty;
5259                         }
5260                         leaf dscp-based {
5261                             tailf:info "Enable dscp-based WRED as drop policy";
5262                             description "Enable dscp-based WRED as drop policy";
5263                             tailf:cli-full-command;
5264                             type empty;
5265                         }
5266                         list dscp {
5267                             tailf:info "parameters for each dscp value";
5268                             description "parameters for each dscp value";
5269                                     tailf:cli-suppress-mode;
5270                             tailf:cli-compact-syntax;
5271                             tailf:cli-sequence-commands;
5272                                     key dscp-val;
5273                             leaf dscp-val {
5274                                 type dscp-type;
5275                             }
5276                             uses random-detect-grouping;
5277                         }
5278                         leaf ecn {
5279                             tailf:info "explicit congestion notification";
5280                             description "explicit congestion notification";
5281                             tailf:cli-full-command;
5282                             type empty;
5283                         }
5284                         leaf exponential-weighting-constant {
5285                             tailf:info "weight for mean queue depth calculation";
5286                             description "weight for mean queue depth calculation";
5287                             tailf:cli-full-command;
5288                             type uint16 {
5289                                 range "1..16";
5290                                 tailf:info "<1-16>;;integer in 1..16 used in weighted "+
5291                                     "average to mean 2^number";
5292                             }
5293                         }
5294                         leaf prec-based {
5295                             tailf:info "Enable precedence-based WRED as drop policy";
5296                             description "Enable precedence-based WRED as drop policy";
5297                             tailf:cli-full-command;
5298                             type empty;
5299                         }
5300                         container precedence {
5301                             tailf:info "parameters for each precedence value";
5302                             description "parameters for each precedence value";
5303                             tailf:cli-sequence-commands;
5304                             tailf:cli-compact-syntax;
5305                             leaf prec {
5306                                 tailf:cli-drop-node-name;
5307                                 tailf:cli-incomplete-command;
5308                                 type precedence-type2;
5309                             }
5310                             uses random-detect-grouping;
5311                         }
5312                     }
5313                     }
5314                     case service-policy-case {
5315                       // policy-map * / class * / service-policy
5316                       leaf service-policy {
5317                         //tailf:info "Configure Flow Next";
5318                         tailf:cli-full-command;
5319                         tailf:cli-drop-node-name;
5320                         when "../action-type = 'service-policy'";
5321                         type string;
5322                         tailf:non-strict-leafref {
5323                             path "/ios:native/policy-map/name";
5324                         }
5325                     }
5326                     }
5327                     case set-case {
5328                     // policy-map * / class * / set
5329                     container set {
5330                         //tailf:info "Set QoS values";
5331                         tailf:cli-drop-node-name;
5332                         when "../action-type = 'set'";
5333                         // policy-map * / class * / set atm-clp
5334                         leaf atm-clp {
5335                             tailf:info "Set ATM CLP bit to 1";
5336                             description "Set ATM CLP bit to 1";
5337                             tailf:cli-full-command;
5338                             type empty;
5339                         }
5340                         // policy-map * / class * / set cos
5341                         container cos {
5342                         tailf:info "Set IEEE 802.1Q/ISL class of service/user "+
5343                             "priority";
5344                         description "Set IEEE 802.1Q/ISL class of service/user "+
5345                             "priority";
5346                         tailf:cli-compact-syntax;
5347                         tailf:cli-sequence-commands;
5348                         choice cos-type {
5349                             case a {
5350                                 leaf val {
5351                                     tailf:cli-drop-node-name;
5352                                     type uint16 {
5353                                         range "0..7";
5354                                         tailf:info "<0-7>;;cos value";
5355                                     }
5356                                 }
5357                             }
5358                             case b {
5359                                 leaf pack {
5360                                     tailf:cli-drop-node-name;
5361                                     type enumeration {
5362                                         enum dscp {
5363                                             tailf:code-name "pack_dscp";
5364                                             tailf:info "Set value from packet dscp";
5365                                         }
5366                                         enum precedence {
5367                                             tailf:code-name "pack_precedence";
5368                                             tailf:info "Set value from packet "+
5369                                                 "precedence.";
5370                                             }
5371                                         }
5372                                     }
5373                                     leaf table {
5374                                         tailf:info "Set codepoint value based on tablemap.";
5375                                         description "Set codepoint value based on tablemap.";
5376                                         type string {
5377                                             tailf:info "WORD;;table-map name";
5378                                         }
5379                                         tailf:non-strict-leafref {
5380                                         path "/ios:native/table-map/name";
5381                                     }
5382                                 }
5383                             }
5384                         }
5385                     }
5386                     // policy-map * / class * / set discard-class
5387                     leaf discard-class {
5388                         tailf:info "Discard behavior identifier";
5389                         description "Discard behavior identifier";
5390                         tailf:cli-full-command;
5391                         type uint16 {
5392                             range "0..7";
5393                             tailf:info "<0-7>;;Discard Class value";
5394                         }
5395                     }
5396                     // policy-map * / class * / set dscp
5397                     container dscp {
5398                         tailf:info "Set DSCP in IP(v4) and IPv6 packets";
5399                         description "Set DSCP in IP(v4) and IPv6 packets";
5400                         tailf:cli-compact-syntax;
5401                         leaf tunnel {
5402                             tailf:info "set tunnel packet dscp";
5403                             description "set tunnel packet dscp";
5404                             type empty;
5405                         }
5406                         leaf dscp-val {
5407                         tailf:cli-drop-node-name;
5408                         type dscp-type;
5409                     }
5410                 }
5411                 // policy-map * / class * / set fr-de
5412                 leaf fr-de {
5413                     tailf:info "Set FR DE bit to 1";
5414                     description "Set FR DE bit to 1";
5415                     tailf:cli-full-command;
5416                     type empty;
5417                 }
5418                 // policy-map * / class * / set ip
5419                 container ip {
5420                     tailf:info "Set IP specific values";
5421                     description "Set IP specific values";
5422                     choice ip-choice {
5423                         container dscp {
5424                             tailf:info "Set IP DSCP (DiffServ CodePointint)";
5425                             description "Set IP DSCP (DiffServ CodePointint)";
5426                             tailf:cli-compact-syntax;
5427                             leaf tunnel {
5428                                 tailf:info "set tunnel packet dscp";
5429                                 description "set tunnel packet dscp";
5430                                 type empty;
5431                             }
5432                             leaf dscp-val {
5433                                 tailf:cli-drop-node-name;
5434                                 type dscp-type;
5435                             }
5436                         }
5437                         container precedence {
5438                             tailf:info "Set IP precedence";
5439                             description "Set IP precedence";
5440                             presence "Set IP precedence";
5441                             leaf precedence-val {
5442                                 tailf:cli-drop-node-name;
5443                                 type precedence-type;
5444                             }
5445                         }
5446                     }
5447                 }
5448                 // policy-map * / class * / set mpls
5449                 container mpls {
5450                     tailf:info "Set MPLS specific values";
5451                     description "Set MPLS specific values";
5452                     container experimental {
5453                         tailf:info "Set Experimental value";
5454                         description "Set Experimental value";
5455                         // 0-7
5456                         container imposition {
5457                             tailf:info "Set Experimental value at tag imposition";
5458                             description "Set Experimental value at tag imposition";
5459                             leaf exp-value {
5460                                 tailf:cli-drop-node-name;
5461                                 tailf:cli-full-command;
5462                                 type uint8 {
5463                                     tailf:info "<0-7>;;Experimental value";
5464                                     range "0..7";
5465                                 }
5466                             }
5467                             // dscp
5468                             // precedence
5469                         }
5470                         // topmost
5471                         container topmost {
5472                             tailf:info "Set Experimental value  on topmost label";
5473                             description "Set Experimental value  on topmost label";
5474                             leaf exp-value {
5475                                 tailf:cli-drop-node-name;
5476                                 tailf:cli-full-command;
5477                                     type uint8 {
5478                                         tailf:info "<0-7>;;Experimental value";
5479                                         range "0..7";
5480                                     }
5481                                 }
5482                             }
5483                         }
5484                     }
5485                     // policy-map * / class * / set qos-group
5486                     container qos-group {
5487                         tailf:info "Set QoS Group";
5488                         description "Set QoS Group";
5489                         leaf qos-group-value {
5490                             tailf:cli-drop-node-name;
5491                             tailf:cli-full-command;
5492                             type uint8 {
5493                                 range "0..99";
5494                             }
5495                         }
5496                         // dscp
5497                         // mpls
5498                         // precedence
5499                     }
5500                 }
5501                 }
5502                 case shape-case {
5503                 // policy-map * / class * / shape
5504                 container shape {
5505                     //tailf:info "Traffic Shaping";
5506                     tailf:cli-drop-node-name;
5507                     when "../action-type = 'shape'";
5508                     // policy-map * / class * / shape adaptive
5509                     leaf adaptive {
5510                         tailf:info "Enable Traffic Shaping adaptation to BECN";
5511                         description "Enable Traffic Shaping adaptation to BECN";
5512                         tailf:cli-full-command;
5513                         type uint32 {
5514                             range "8000..154400000";
5515                             tailf:info "<8000-154400000>;;Lower Bound Target Bit "+
5516                                "Rate (bits per second)";
5517                         }
5518                     }
5519                     // policy-map * / class * / shape average
5520                     container average {
5521                     tailf:info "configure token bucket: CIR (bps) [Bc (bits) "+
5522                         "[Be (bits)]], send out Bc only per interval";
5523                     description "configure token bucket: CIR (bps) [Bc (bits) "+
5524                         "[Be (bits)]], send out Bc only per interval";
5525                     tailf:cli-sequence-commands;
5526                     tailf:cli-compact-syntax;
5527                     choice average-choice {
5528                         case a {
5529                             leaf bit-rate {
5530                                 tailf:cli-drop-node-name;
5531                                 type uint64 {
5532                                     //range "8000..154400000";
5533                                     //FIXME: what is range max?
5534                                     tailf:info "<8000-max>;;Target Bit "+
5535                                         "Rate (bits per second), the value "+
5536                                         "needs to be a multiple of 8000";
5537                                 }
5538                             }
5539                             leaf bits-per-interval-sustained {
5540                                 tailf:cli-drop-node-name;
5541                                 type uint32 {
5542                                     range "256..154400000";
5543                                     tailf:info "<256-154400000>;;bits per "+
5544                                         "interval, sustained. Needs to be "+
5545                                         "multiple of 128. Recommend not to "+
5546                                         "configure it, the algorithm will "+
5547                                         "find out the best value";
5548                                 }
5549                             }
5550                             leaf bits-per-interval-excess {
5551                                 tailf:cli-drop-node-name;
5552                                 type uint32 {
5553                                     range "0..154400000";
5554                                     tailf:info "<0-154400000>;;bits per "+
5555                                         "interval, excess. Needs to be "+
5556                                         "multiple of 128. Bc will be used if "+
5557                                         "you don't configure it.";
5558                                     }
5559                                 }
5560                             }
5561                             case b {
5562                                 leaf percent {
5563                                     tailf:info "% of interface bandwidth for "+
5564                                         "Committed information rate";
5565                                     description "% of interface bandwidth for "+
5566                                         "Committed information rate";
5567                                     type percentage-type;
5568                                 }
5569                                 leaf burst-size-sustained {
5570                                     tailf:cli-incomplete-command;
5571                                     tailf:cli-drop-node-name;
5572                                     type uint16 {
5573                                         range "10..2000";
5574                                         tailf:info "<10-2000>;;Sustained burst "+
5575                                             "size in msec";
5576                                         }
5577                                     }
5578                                     leaf ms {
5579                                         tailf:info "milliseconds";
5580                                         description "milliseconds";
5581                                         type empty;
5582                                     }
5583                                     container bse {
5584                                         tailf:cli-drop-node-name;
5585                                         tailf:cli-flatten-container;
5586                                         tailf:cli-sequence-commands;
5587                                         tailf:cli-compact-syntax;
5588                                         leaf burst-size-excess {
5589                                             tailf:cli-incomplete-command;
5590                                             type uint16 {
5591                                                 range "10..2000";
5592                                                 tailf:info "<10-2000>;;Excess burst "+
5593                                                     "size in msec";
5594                                             }
5595                                         }
5596                                         leaf ms {
5597                                             tailf:info "milliseconds";
5598                                             description "milliseconds";
5599                                             type empty;
5600                                         }
5601                                     }
5602                                 }
5603                             }
5604                         }
5605                         // policy-map * / class * / shape fecn-adapt
5606                         leaf fecn-adapt {
5607                             tailf:info "Enable Traffic Shaping reflection of FECN as "+
5608                                 "BECN";
5609                             description "Enable Traffic Shaping reflection of FECN as "+
5610                                 "BECN";
5611                             tailf:cli-full-command;
5612                             type empty;
5613                         }
5614                         // policy-map * / class * / shape fr-voice-adapt
5615                         container fr-voice-adapt {
5616                             tailf:info "Enable rate adjustment depending on voice "+
5617                                   "presence";
5618                             description "Enable rate adjustment depending on voice "+
5619                                 "presence";
5620                             presence "Enable rate adjustment depending on voice "+
5621                                 "presence" ;
5622                             leaf deactivation {
5623                                 type uint16 {
5624                                     range "1..10000";
5625                                     tailf:info "<1-10000>;;de-activation delay in "+
5626                                         "seconds";
5627                                     }
5628                                 }
5629                             }
5630                             // policy-map * / class * / shape max-buffers
5631                             leaf max-buffers {
5632                                 tailf:cli-full-command;
5633                                 tailf:info "Set Maximum Buffer Limit";
5634                                 description "Set Maximum Buffer Limit";
5635                                 type uint16 {
5636                                     range "1..4096";
5637                                     tailf:info "<1-4096>;;Maximum Buffer Limit";
5638                                 }
5639                             }
5640                         }
5641                         }
5642                         case trust-case {
5643                         // policy-map * / class * / trust
5644                         leaf trust {
5645                             //tailf:info "Set trust value for the class";
5646                             tailf:cli-drop-node-name;
5647                             when "../action-type = 'trust'";
5648                                 type enumeration {
5649                                     enum cos {
5650                                         tailf:info "trust value for the class";
5651                                     }
5652                                     enum dscp {
5653                                         tailf:info "trust value for the class";
5654                                     }
5655                                     enum ip-precedence {
5656                                         tailf:info "trust value for the class";
5657                                     }
5658                                 }
5659                             }
5660                         }
5661                     }
5662                 }
5663             }
5664             // policy-map * / description
5665             leaf "description" {
5666                 tailf:info "Policy-Map description";
5667                 description "Policy-Map description";
5668                 tailf:cli-multi-value;
5669                 type string {
5670                     length "1..200";
5671                     tailf:info "LINE;;Description of this policy-map (up to "
5672                     +"200 characters)";
5673                 }
5674             }
5675             // policy-map * /sequence-interval
5676             leaf sequence-interval {
5677                 tailf:info "Enable sequence number capability";
5678                 description "Enable sequence number capability";
5679                 when "../type = 'appnav'";
5680                 type uint16 {
5681                     tailf:info "<0-65535>;;Sequence Number Interval";
5682                 }
5683             }
5684         }
5685
5686 /// ========================================================================
5687 /// service-chain
5688 /// ========================================================================
5689
5690         container service-chain {
5691             tailf:info "Service Chain mode";
5692             description "Service Chain mode";
5693             list service-function {
5694                 tailf:info "Service function details";
5695                 description "Service function details";
5696                 tailf:cli-mode-name "config-service-chain-sf";
5697                 key "name";
5698                 leaf name {
5699                     tailf:info "WORD;;Service function name";
5700                     description "WORD;;Service function name";
5701                     type string;
5702                 }
5703                 container config-service-chain-sf-mode {
5704                     tailf:cli-drop-node-name;
5705                     leaf description {
5706                         tailf:info "Service function description";
5707                         description "Service function description";
5708                         tailf:cli-multi-value;
5709                         tailf:cli-full-command;
5710                         type string {
5711                             tailf:info "LINE;;Up to 256 characters describing this "
5712                              +"service function";
5713                             length "1..256";
5714                         }
5715                     }
5716                     container encapsulation {
5717                         tailf:info "Service node encapsulation";
5718                         description "Service node encapsulation";
5719                         container gre {
5720                             tailf:info "Service node encapsulation type";
5721                             description "Service node encapsulation type";
5722                             leaf enhanced {
5723                                 tailf:info "Add enhanced NSH TLV information";
5724                                 description "Add enhanced NSH TLV information";
5725                                 type enumeration {
5726                                     enum copy {
5727                                         tailf:info "Send a copy of the packet";
5728                                     }
5729                                     enum divert {
5730                                         tailf:info "Divert the packet (default)";
5731                                     }
5732                                 }
5733                             }
5734                         }
5735                         leaf none {
5736                             tailf:info "Service node encapsulation type";
5737                             description "Service node encapsulation type";
5738                             type empty;
5739                         }
5740                     }
5741                     container ip {
5742                         tailf:info "Service node";
5743                         description "Service node";
5744                         leaf address {
5745                             type inet:ipv4-address {
5746                                 tailf:info "A.B.C.D;;Service node";
5747                             }
5748                         }
5749                     }
5750                 }
5751             }
5752             container service-function-forwarder {
5753                 tailf:info "Service function forwarder details";
5754                 description "Service function forwarder details";
5755                 list service-ff-name {
5756                     tailf:cli-drop-node-name;
5757                     tailf:cli-mode-name "config-service-chain-sff";
5758                     key "name";
5759                     leaf name {
5760                         tailf:info "WORD;;Service function forwarder name";
5761                         description "WORD;;Service function forwarder name";
5762                         type string;
5763                     }
5764                     uses config-service-chain-grouping;
5765                 }
5766                 container local {
5767                     tailf:info "Local service function forwarder";
5768                     description "Local service function forwarder";
5769                     tailf:cli-add-mode;
5770                     tailf:cli-mode-name "config-service-chain-sff";
5771                     presence true;
5772                     uses config-service-chain-grouping;
5773                 }
5774             }
5775             list service-path {
5776                 tailf:info "Service Path Entries";
5777                 description "Service Path Entries";
5778                 tailf:cli-mode-name "config-service-chain-path";
5779                 key "service-path-id";
5780                 leaf service-path-id {
5781                     type uint32 {
5782                         range "0..16777215";
5783                         tailf:info "<0-16777215>;;Service Path ID";
5784                     }
5785                 }
5786                 container config-service-chain-path-mode {
5787                     tailf:cli-drop-node-name;
5788                     leaf description {
5789                         tailf:info "Path Description";
5790                         description "Path Description";
5791                         tailf:cli-multi-value;
5792                         tailf:cli-full-command;
5793                         type string {
5794                             tailf:info "LINE;;Up to 256 characters describing this "
5795                                 +"service path";
5796                             length "1..256";
5797                         }
5798                     }
5799                     container service-index {
5800                         tailf:info "Service Index";
5801                         description "Service Index";
5802                         list services {
5803                             tailf:cli-drop-node-name;
5804                             tailf:cli-suppress-mode;
5805                             key "service-index-id";
5806                             leaf service-index-id {
5807                                 type uint8 {
5808                                 range "2..255";
5809                                 tailf:info "<2-255>;;Service Index ID";
5810                             }
5811                         }
5812                         choice service-type-choice {
5813                             leaf service-function {
5814                                 tailf:info "Service Function name";
5815                                 description "Service Function name";
5816                                 type string {
5817                                     tailf:info "WORD;;Service Function name";
5818                                 }
5819                             }
5820                             leaf service-function-forwarder {
5821                                 tailf:info "Service Function Forwarder name";
5822                                 description "Service Function Forwarder name";
5823                                 type string {
5824                                     tailf:info "WORD;;Service Function Forwarder name";
5825                                 }
5826                             }
5827                             leaf terminate {
5828                                 tailf:info "Terminate(Proxy)";
5829                                 description "Terminate(Proxy)";
5830                                 type empty;
5831                                 }
5832                             }
5833                         }
5834                     }
5835                 }
5836             }
5837         }
5838     }
5839
5840 /// ========================================================================
5841 /// eof
5842 /// ========================================================================
5843
5844 }