;;
;; %CopyrightBegin%
;;
;; Transcribed from RFC 5777 by Pau Espin Pedrol <pespin@sysmocom.de>
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
;; You may obtain a copy of the License at
;;
;;     https://www.apache.org/licenses/LICENSE-2.0
;;
;; Unless required by applicable law or agreed to in writing, software
;; distributed under the License is distributed on an "AS IS" BASIS,
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;; See the License for the specific language governing permissions and
;; limitations under the License.
;;
;; %CopyrightEnd%
;;

;;
;; RFC 5777, Traffic Classification and Quality of Service (QoS) Attributes for Diameter
;;

@id 1

@inherits diameter_gen_base_rfc6733
;;@inherits diameter_rfc4004

;; ===========================================================================

@avp_types

QoS-Resources			508 	Grouped		-	;; 3.1
Filter-Rule			509 	Grouped		-	;; 3.2
Filter-Rule-Precedence		510 	Unsigned32	-	;; 3.3
Classifier			511 	Grouped		-	;; 4.1.1
Classifier-ID			512 	OctetString	-	;; 4.1.2
Protocol			513 	Enumerated	-	;; 4.1.3
Direction			514 	Enumerated	-	;; 4.1.4
From-Spec			515 	Grouped		-	;; 4.1.5
To-Spec				516 	Grouped		-	;; 4.1.6
Negated				517 	Enumerated	-	;; 4.1.7.1
IP-Address			518 	Address		-	;; 4.1.7.2
IP-Address-Range		519 	Grouped		-	;; 4.1.7.3
IP-Address-Start		520 	Address		-	;; 4.1.7.4
IP-Address-End			521 	Address		-	;; 4.1.7.5
IP-Address-Mask			522 	Grouped		-	;; 4.1.7.6
IP-Mask-Bit-Mask-Width		523 	Unsigned32 	-	;; 4.1.7.7
MAC-Address			524 	OctetString	-	;; 4.1.7.8
MAC-Address-Mask		525 	Grouped		-	;; 4.1.7.9
MAC-Address-Mask-Pattern	526	OctetString	-	;; 4.1.7.10
EUI64-Address			527	OctetString	-	;; 4.1.7.11
EUI64-Address-Mask		528	Grouped		-	;; 4.1.7.12
EUI64-Address-Mask-Pattern	529	OctetString	-	;; 4.1.7.13
Port				530	Integer32	-	;; 4.1.7.14
Port-Range			531	Grouped		-	;; 4.1.7.15
Port-Start			532	Integer32	-	;; 4.1.7.16
Port-End			533	Integer32	-	;; 4.1.7.17
Use-Assigned-Address		534	Enumerated	-	;; 4.1.7.18
Diffserv-Code-Point		535 	Enumerated	-	;; 4.1.8.1
Fragmentation-Flag		536 	Enumerated	-	;; 4.1.8.2
IP-Option			537 	Grouped		-	;; 4.1.8.3
IP-Option-Type			538 	Enumerated	-	;; 4.1.8.4
IP-Option-Value			539 	OctetString	-	;; 4.1.8.5
TCP-Option			540 	Grouped		-	;; 4.1.8.6
TCP-Option-Type			541 	Enumerated	-	;; 4.1.8.7
TCP-Option-Value		542 	OctetString	-	;; 4.1.8.8
TCP-Flags			543 	Grouped		-	;; 4.1.8.9

TCP-Flag-Type			544	Unsigned32	-	;; 4.1.8.10
ICMP-Type	 		545	Grouped 	-	;; 4.1.8.11
ICMP-Type-Number		546	Enumerated	-	;; 4.1.8.12
ICMP-Code			547	Enumerated	-	;; 4.1.8.13
ETH-Option			548	Grouped		-	;; 4.1.8.14
ETH-Proto-Type			549	Grouped		-	;; 4.1.8.15
ETH-Ether-Type			550	OctetString	-	;; 4.1.8.16
ETH-SAP				551	OctetString	-	;; 4.1.8.17
VLAN-ID-Range			552	Grouped		-	;; 4.1.8.18
S-VID-Start			553	Unsigned32	-	;; 4.1.8.19
S-VID-End			554	Unsigned32	-	;; 4.1.8.20
C-VID-Start			555	Unsigned32	-	;; 4.1.8.21
C-VID-End			556	Unsigned32	-	;; 4.1.8.22
User-Priority-Range		557	Grouped		-	;; 4.1.8.23
Low-User-Priority		558	Unsigned32	-	;; 4.1.8.24
High-User-Priority		559	Unsigned32	-	;; 4.1.8.25
Time-Of-Day-Condition		560	Grouped		-	;; 4.2.1
Time-Of-Day-Start		561	Unsigned32	-	;; 4.2.2
Time-Of-Day-End			562	Unsigned32	-	;; 4.2.3
Day-Of-Week-Mask		563	Unsigned32	-	;; 4.2.4
Day-Of-Month-Mask		564	Unsigned32	-	;; 4.2.5
Month-Of-Year-Mask		565	Unsigned32	-	;; 4.2.6
Absolute-Start-Time		566	Time		-	;; 4.2.7
Absolute-Start-Fractional-Seconds 567	Unsigned32	-	;; 4.2.8
Absolute-End-Time		568	Time		-	;; 4.2.9
Absolute-End-Fractional-Seconds	569	Unsigned32	-	;; 4.2.10
Timezone-Flag			570	Enumerated	-	;; 4.2.11
Timezone-Offset			571	Integer32	-	;; 4.2.12
Treatment-Action		572	Enumerated	-	;; 5.1, wrongly defined as Grouped in RFC table
QoS-Profile-Id			573	Unsigned32 	-	;; 5.2
QoS-Profile-Template		574	Grouped		-	;; 5.3
QoS-Semantics			575	Enumerated	-	;; 5.4
QoS-Parameters			576	Grouped		-	;; 5.5
Excess-Treatment		577	Grouped		-	;; 5.6
QoS-Capability			578	Grouped		-	;; 6

;; ===========================================================================

@grouped

;; 3.1
QoS-Resources ::= < AVP Header: 508 >
	1*{ Filter-Rule }
	*[ AVP ]

;; 3.2
Filter-Rule ::= < AVP Header: 509 >
		[ Filter-Rule-Precedence ]
;; Condition part of a Rule
;; ------------------------
		[ Classifier ]
		*[ Time-Of-Day-Condition ]
;; Action and Meta-Data
;; --------------------
		[ Treatment-Action ]

;; Info about QoS related Actions
;; ------------------------------
		[ QoS-Semantics ]
		[ QoS-Profile-Template ]
		[ QoS-Parameters ]
		[ Excess-Treatment ]
;; Extension Point
;; ---------------
		*[ AVP ]

;; 4.1.1.
Classifier ::= < AVP Header: 511 >
	{ Classifier-ID }
	[ Protocol ]
	[ Direction ]
	*[ From-Spec ]
	*[ To-Spec ]
	*[ Diffserv-Code-Point ]
	[ Fragmentation-Flag ]
	*[ IP-Option ]
	*[ TCP-Option ]
	[ TCP-Flags ]
	*[ ICMP-Type ]
	*[ ETH-Option ]
	*[ AVP ]

;; 4.1.5.
From-Spec ::= < AVP Header: 515 >
	*[ IP-Address ]
	*[ IP-Address-Range ]
	*[ IP-Address-Mask ]
	*[ MAC-Address ]
	*[ MAC-Address-Mask]
	*[ EUI64-Address ]
	*[ EUI64-Address-Mask]
	*[ Port ]
	*[ Port-Range ]
	[ Negated ]
	[ Use-Assigned-Address ]
	*[ AVP ]

;; 4.1.6
To-Spec ::= < AVP Header: 516 >
	*[ IP-Address ]
	*[ IP-Address-Range ]
	*[ IP-Address-Mask ]
	*[ MAC-Address ]
	*[ MAC-Address-Mask]
	*[ EUI64-Address ]
	*[ EUI64-Address-Mask]
	*[ Port ]
	*[ Port-Range ]
	[ Negated ]
	[ Use-Assigned-Address ]
	*[ AVP ]

;; 4.1.7.3.
IP-Address-Range ::= < AVP Header: 519 >
		[ IP-Address-Start ]
		[ IP-Address-End ]
		*[ AVP ]

;; 4.1.7.6
IP-Address-Mask ::= < AVP Header: 522 >
	{ IP-Address }
	{ IP-Mask-Bit-Mask-Width }
	*[ AVP ]

;; 4.1.7.9.
MAC-Address-Mask ::= < AVP Header: 525 >
	{ MAC-Address }
	{ MAC-Address-Mask-Pattern }
	*[ AVP ]

;; 4.1.7.12.
EUI64-Address-Mask ::= < AVP Header: 528 >
	{ EUI64-Address }
	{ EUI64-Address-Mask-Pattern }
	*[ AVP ]

;; 4.1.7.15.
Port-Range ::= < AVP Header: 531 >
	[ Port-Start ]
	[ Port-End ]
	*[ AVP ]

;; 4.1.8.3.
IP-Option ::= < AVP Header: 537 >
	{ IP-Option-Type }
	*[ IP-Option-Value ]
	[ Negated ]
	*[ AVP ]

;; 4.1.8.6.
TCP-Option ::= < AVP Header: 540 >
	{ TCP-Option-Type }
	*[ TCP-Option-Value ]
	[ Negated ]
	*[ AVP ]

;; 4.1.8.9.
TCP-Flags ::= < AVP Header: 543 >
	{ TCP-Flag-Type }
	[ Negated ]
	*[ AVP ]

;; 4.1.8.11
ICMP-Type ::= < AVP Header: 545 >
	{ ICMP-Type-Number }
	*[ ICMP-Code ]
	[ Negated ]
	*[ AVP ]

;; 4.1.8.14
ETH-Option ::= < AVP Header: 548 >
	{ ETH-Proto-Type }
	*[ VLAN-ID-Range ]
	*[ User-Priority-Range ]
	*[ AVP ]

;; 4.1.8.15
ETH-Proto-Type ::= < AVP Header: 549 >
	*[ ETH-Ether-Type ]
	*[ ETH-SAP ]
	*[ AVP ]

;; 4.1.8.18
VLAN-ID-Range ::= < AVP Header: 552 >
	[ S-VID-Start ]
	[ S-VID-End ]
	[ C-VID-Start ]
	[ C-VID-End ]
	*[ AVP ]

;; 4.1.8.23
User-Priority-Range ::= < AVP Header: 557 >
	*[ Low-User-Priority ]
	*[ High-User-Priority ]
	*[ AVP ]

;; 4.2.1
Time-Of-Day-Condition ::= < AVP Header: 560 >
		[ Time-Of-Day-Start ]
		[ Time-Of-Day-End ]
		[ Day-Of-Week-Mask ]
		[ Day-Of-Month-Mask ]
		[ Month-Of-Year-Mask ]
		[ Absolute-Start-Time ]
		[ Absolute-End-Time ]
		[ Timezone-Flag ]
		*[ AVP ]

;; 5.3
QoS-Profile-Template ::= < AVP Header: 574 >
	{ Vendor-Id }
	{ QoS-Profile-Id }
	*[ AVP ]

;; 5.5
QoS-Parameters  ::= < AVP Header: 576 >
	*[ AVP ]

;; 5.6
Excess-Treatment ::= < AVP Header: 577 >
	{ Treatment-Action }
	[ QoS-Profile-Template ]
	[ QoS-Parameters ]
	*[ AVP ]

;; 6.
QoS-Capability ::= < AVP Header: 578 >
	1*{ QoS-Profile-Template }
	*[ AVP ]

;; ===========================================================================

;; 4.1.3.
@enum Protocol
	PROTOCOL_TODO_CHECK_RFC2780	0

;; 4.1.4.
@enum Direction
	DIRECTION_IN	0
	DIRECTION_OUT	1
	DIRECTION_BOTH	2

;; 4.1.7.1.
@enum Negated
	NEGATED_FALSE	0
	NEGATED_TRUE	1

;; 4.1.7.18
@enum Use-Assigned-Address
	USE_ASSIGNED_ADDRESS_FALSE	0
	USE_ASSIGNED_ADDRESS_TRUE	1

;; 4.1.8.1.
@enum Diffserv-Code-Point
	DIFFSERV_CODE_POINT_TODO_CHECK_RFC2474	0

;; 4.1.8.2.
@enum Fragmentation-Flag
	FRAGMENTATION_FLAG_DF	0
	FRAGMENTATION_FLAG_MF	1

;; 4.1.8.4
@enum IP-Option-Type
	IP_OPTION_TYPE_TODO_CHECK_RFC2780	0

;; 4.1.8.7.
@enum TCP-Option-Type
	TCP_OPTION_TYPE_TODO_CHECK_RFC2780	0

;; 4.1.8.12.
@enum ICMP-Type-Number
	ICMP_TYPE_NUMBER_TODO_CHECK_RFC2780	0

;; 4.1.8.13.
@enum ICMP-Code
	ICMP_CODE_TODO_CHECK_RFC2780	0


;; 4.2.11.
@enum Timezone-Flag
	TIMEZOME_FLAG_UTC	0
	TIMEZOME_FLAG_LOCAL	1
	TIMEZOME_FLAG_OFFSET	2

;; 5.1.
@enum Treatment-Action
	TREATMENT_ACTION_DROP	0
	TREATMENT_ACTION_SHAPE	1
	TREATMENT_ACTION_MARK	2
	TREATMENT_ACTION_PERMIT	3

;; 5.4.
@enum QoS-Semantics
	QOS_SEMANTICS_DESIRED	0
	QOS_SEMANTICS_AVAILABLE	1
	QOS_SEMANTICS_DELIVERED	2
	QOS_SEMANTICS_MINIMUM	3
	QOS_SEMANTICS_AUTHORIZE	4