--- /dev/null
+module l-3vpn-profile-1-0 {\r
+ yang-version 1.1;\r
+ namespace "urn:onf:yang:l-3vpn-profile-1-0";\r
+ prefix l-3vpn-profile;\r
+\r
+ import ietf-yang-types {\r
+ prefix yang;\r
+ }\r
+ import core-model-1-4 {\r
+ prefix core-model;\r
+ }\r
+\r
+ organization\r
+ "openBackhaul.com proposal to Open Networking Foundation (ONF)";\r
+ contact\r
+ "WG Web : https://github.com/openBackhaul/Overview\r
+ WG List: L3vpnProfile@openBackhaul.com\r
+ Editor : Thorsten Heinze\r
+ Email : Thorsten.Heinze@openBackhaul.com";\r
+ description\r
+ "Technology specific profile definition for Layer 3 Virtual Private Networks\r
+\r
+ Copyright 2019 openBackhaul.com\r
+\r
+ Licensed under the Apache License, Version 2.0 (the 'License');\r
+ you may not use this file except in compliance with the License.\r
+ You may obtain a copy of the License at\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an 'AS IS' BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.";\r
+\r
+ revision 2020-01-27 {\r
+ description\r
+ "Model for the Transport SDN Pilot at Telefonica Germany.\r
+ Please view https://github.com/openBackhaul/l3vpnProfile/issues for changes.";\r
+ reference\r
+ "https://github.com/openBackhaul/l3vpnProfile/tree/tsp: Model definition\r
+ https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";\r
+ }\r
+ revision 2019-07-12 {\r
+ description\r
+ "Model for the Transport SDN Pilot at Telefonica Germany.\r
+ Please view https://github.com/openBackhaul/l3vpnProfile/issues for changes.";\r
+ reference\r
+ "https://github.com/openBackhaul/l3vpnProfile/tree/tsp: Model definition\r
+ https://github.com/openBackhaul/onfCoreIm/tree/tsp: ONF TR-512 Core IM incl. Profile and enhanced Equipment definition";\r
+ }\r
+\r
+ identity PROFILE_NAME_TYPE_L3VPN_PROFILE {\r
+ base core-model:PROFILE_NAME_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ augment "/core-model:control-construct/core-model:profile-collection/core-model:profile" {\r
+ when "derived-from-or-self(./core-model:profile-name, 'l-3vpn-profile:PROFILE_NAME_TYPE_L3VPN_PROFILE')";\r
+ uses l-3vpn-profile-spec;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ /****************************************\r
+ * package notifications\r
+ **************************************/ \r
+\r
+ notification object-creation-notification {\r
+ uses object-creation-notification;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ grouping object-creation-notification {\r
+ leaf counter {\r
+ type int32;\r
+ default "-1";\r
+ config false;\r
+ description\r
+ "Counts object creation notifications.";\r
+ }\r
+ leaf timestamp {\r
+ type yang:date-and-time;\r
+ default "2010-11-20T14:00:00+01:00";\r
+ config false;\r
+ description\r
+ "none";\r
+ }\r
+ leaf object-id-ref {\r
+ type leafref {\r
+ path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";\r
+ require-instance false;\r
+ }\r
+ config false;\r
+ description\r
+ "none";\r
+ }\r
+ leaf object-type {\r
+ type string;\r
+ default "Type of created object not specified.";\r
+ config false;\r
+ description\r
+ "none";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ notification object-deletion-notification {\r
+ uses object-deletion-notification;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ grouping object-deletion-notification {\r
+ leaf counter {\r
+ type int32;\r
+ default "-1";\r
+ config false;\r
+ description\r
+ "Counts object deletion notifications.";\r
+ }\r
+ leaf timestamp {\r
+ type yang:date-and-time;\r
+ default "2010-11-20T14:00:00+01:00";\r
+ config false;\r
+ description\r
+ "none";\r
+ }\r
+ leaf object-id-ref {\r
+ type leafref {\r
+ path "/core-model:control-construct/core-model:profile-collection/core-model:profile/core-model:uuid";\r
+ require-instance false;\r
+ }\r
+ config false;\r
+ description\r
+ "none";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ /****************************************\r
+ * grouping statements for object classes\r
+ **************************************/ \r
+\r
+ grouping l-3vpn-profile-spec {\r
+ container l-3vpn-pac {\r
+ uses l-3vpn-pac;\r
+ description\r
+ "none";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ grouping l-3vpn-pac {\r
+ container l-3vpn-capability {\r
+ config false;\r
+ uses l-3vpn-capability;\r
+ description\r
+ "none";\r
+ }\r
+ container l-3vpn-configuration {\r
+ config false;\r
+ uses l-3vpn-configuration;\r
+ description\r
+ "none";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ grouping l-3vpn-capability {\r
+ leaf profile-naming-is-avail {\r
+ type boolean;\r
+ default "false";\r
+ config false;\r
+ description\r
+ "1 = There is a free text field available for naming the profile.";\r
+ }\r
+ leaf l-3vpn-based-on-ip-v-6-is-avail {\r
+ type boolean;\r
+ default "false";\r
+ config false;\r
+ description\r
+ "1 = Virtual Private Networks based on IP v6 addresses is available at the device.";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ grouping l-3vpn-configuration {\r
+ leaf profile-name {\r
+ type string;\r
+ default "Name of profile not yet defined.";\r
+ description\r
+ "Identifier of the profile. Could be a name, could be a number. Free text field to be filled by the operator.";\r
+ }\r
+ leaf l-3vpn-description {\r
+ type string;\r
+ default "VPN description not yet defined.";\r
+ description\r
+ "Short description of the VPN.";\r
+ }\r
+ list l-3vpn-configuration-list {\r
+ key "label-mode";\r
+ min-elements 1;\r
+ max-elements 2;\r
+ uses l-3vpn-configuration-type;\r
+ description\r
+ "L3 VPN instance Configuration.";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ /****************************************\r
+ * typedef statements\r
+ **************************************/ \r
+\r
+ typedef label-mode-type {\r
+ type identityref {\r
+ base LABEL_MODE_TYPE;\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ typedef device-identifier-kind-type {\r
+ type identityref {\r
+ base DEVICE_IDENTIFIER_KIND_TYPE;\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ typedef address-family-type {\r
+ type identityref {\r
+ base ADDRESS_FAMILY_TYPE;\r
+ }\r
+ description\r
+ "Address family of the VRF IPv4/IPV6.";\r
+ }\r
+\r
+ typedef route-pritority-type {\r
+ type identityref {\r
+ base ROUTE_PRITORITY_TYPE;\r
+ }\r
+ description\r
+ "The priority of the Route";\r
+ }\r
+\r
+ typedef route-state-type {\r
+ type identityref {\r
+ base ROUTE_STATE_TYPE;\r
+ }\r
+ description\r
+ "The state of the route as per the routing table. It is a combination of the one or more of the following states: ADV, NOADV,ACTIVE, INACTIVE, RELIED.";\r
+ }\r
+\r
+ typedef route-flag-type {\r
+ type identityref {\r
+ base ROUTE_FLAG_TYPE;\r
+ }\r
+ description\r
+ "Indicates the route flag, that is, Route Flags in the heading of the routing table displayed. It is a combination of one or more of the following flags: D and,R Meaning of each of the flag is availble under corresponding flag value.";\r
+ }\r
+\r
+ /*********************************************\r
+ * grouping statements for complex data types\r
+ *******************************************/ \r
+\r
+ identity LABEL_MODE_TYPE {\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity LABEL_MODE_TYPE_PER_INSTANCE {\r
+ base LABEL_MODE_TYPE;\r
+ description\r
+ "Labels are assigned to VPN instances in one label per instance mode, that is, all routes in a VPN instance are assigned with the same label.";\r
+ }\r
+\r
+ identity LABEL_MODE_TYPE_PER_ROUTE {\r
+ base LABEL_MODE_TYPE;\r
+ description\r
+ "Labels are assigned to routes in the 'one label per route' mode, that is, each route is assigned with one label.";\r
+ }\r
+\r
+ identity DEVICE_IDENTIFIER_KIND_TYPE {\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity DEVICE_IDENTIFIER_KIND_TYPE_LOOP_BACK_IP_ADDRESS {\r
+ base DEVICE_IDENTIFIER_KIND_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity DEVICE_IDENTIFIER_KIND_TYPE_AS_NUMBER {\r
+ base DEVICE_IDENTIFIER_KIND_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity DEVICE_IDENTIFIER_KIND_TYPE_NOT_YET_DEFINED {\r
+ base DEVICE_IDENTIFIER_KIND_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ADDRESS_FAMILY_TYPE {\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ADDRESS_FAMILY_TYPE_IPV4-FAMILY {\r
+ base ADDRESS_FAMILY_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ADDRESS_FAMILY_TYPE_IPV6-FAMILY {\r
+ base ADDRESS_FAMILY_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ADDRESS_FAMILY_TYPE_UNKNOWN {\r
+ base ADDRESS_FAMILY_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ADDRESS_FAMILY_TYPE_NOT_YET_DEFINED {\r
+ base ADDRESS_FAMILY_TYPE;\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ROUTE_PRITORITY_TYPE {\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ROUTE_PRITORITY_TYPE_CRITICAL {\r
+ base ROUTE_PRITORITY_TYPE;\r
+ description\r
+ "Highest protocol priority.";\r
+ }\r
+\r
+ identity ROUTE_PRITORITY_TYPE_HIGH {\r
+ base ROUTE_PRITORITY_TYPE;\r
+ description\r
+ "High protocol priority";\r
+ }\r
+\r
+ identity ROUTE_PRITORITY_TYPE_MEDIUM {\r
+ base ROUTE_PRITORITY_TYPE;\r
+ description\r
+ "Medium protocol priority.";\r
+ }\r
+\r
+ identity ROUTE_PRITORITY_TYPE_LOW {\r
+ base ROUTE_PRITORITY_TYPE;\r
+ description\r
+ "Low protocol priority.";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE {\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE_ACTIVE_ADV {\r
+ base ROUTE_STATE_TYPE;\r
+ description\r
+ "The route state is active and advertised.";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE_ACTIVE_NOADV {\r
+ base ROUTE_STATE_TYPE;\r
+ description\r
+ "The route state is active and not advertised.";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE_ACTIVE_ADV_RELIED {\r
+ base ROUTE_STATE_TYPE;\r
+ description\r
+ "The route state is active, advertised, and relied.";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE_ACTIVE_NOADV_RELIED {\r
+ base ROUTE_STATE_TYPE;\r
+ description\r
+ "The route state is active, not advertised, and relied.";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE_INVALID_NOADV {\r
+ base ROUTE_STATE_TYPE;\r
+ description\r
+ "The route state is invalid and not advertised.";\r
+ }\r
+\r
+ identity ROUTE_STATE_TYPE_INACTIVE_NOADV {\r
+ base ROUTE_STATE_TYPE;\r
+ description\r
+ "The route state is inactive and not advertised.";\r
+ }\r
+\r
+ identity ROUTE_FLAG_TYPE {\r
+ description\r
+ "none";\r
+ }\r
+\r
+ identity ROUTE_FLAG_TYPE_D {\r
+ base ROUTE_FLAG_TYPE;\r
+ description\r
+ "A route is advertised to the Forwarding Information Base table.";\r
+ }\r
+\r
+ identity ROUTE_FLAG_TYPE_RD {\r
+ base ROUTE_FLAG_TYPE;\r
+ description\r
+ "A route is an iterated route and needs to be advertised to the FIB table.";\r
+ }\r
+\r
+ identity ROUTE_FLAG_TYPE_R {\r
+ base ROUTE_FLAG_TYPE;\r
+ description\r
+ "A route is an iterated route.";\r
+ }\r
+\r
+ grouping route-distinguisher-and-target-type {\r
+ leaf vpn-number {\r
+ type uint32;\r
+ description\r
+ "Identifier of the VPN, which is unique in the entire network";\r
+ }\r
+ leaf device-identifier-kind {\r
+ type device-identifier-kind-type;\r
+ default "DEVICE_IDENTIFIER_KIND_TYPE_NOT_YET_DEFINED";\r
+ description\r
+ "none";\r
+ }\r
+ leaf loop-back-ip-address {\r
+ type string;\r
+ default "-1.-1.-1.-1";\r
+ description\r
+ "Only relevant if (deviceIdentifierKind==LOOP_BACK_IP_ADDRESS). Loop back address of the device.";\r
+ }\r
+ leaf as-number {\r
+ type uint32;\r
+ default "0";\r
+ description\r
+ "Only relevant if (deviceIdentifierKind==AS_NUMBER). Autonomous System number of the device.";\r
+ }\r
+ description\r
+ "none";\r
+ }\r
+\r
+ grouping l-3vpn-configuration-type {\r
+ leaf label-mode {\r
+ type label-mode-type;\r
+ description\r
+ "Label model used by the VPN.";\r
+ }\r
+ container route-distinguisher {\r
+ uses route-distinguisher-and-target-type;\r
+ description\r
+ "The route distinguisher that should be used for the local VRF or VSI instance when it is signalled via BGP.";\r
+ }\r
+ list route-target-import-list {\r
+ key "vpn-number";\r
+ min-elements 1;\r
+ uses route-distinguisher-and-target-type;\r
+ description\r
+ "Route targets that will be imported to this VPN ";\r
+ }\r
+ list route-target-export-list {\r
+ key "vpn-number";\r
+ min-elements 1;\r
+ uses route-distinguisher-and-target-type;\r
+ description\r
+ "Route targets that will be tagged to outgoing routes";\r
+ }\r
+ leaf address-family {\r
+ type address-family-type;\r
+ default "ADDRESS_FAMILY_TYPE_NOT_YET_DEFINED";\r
+ description\r
+ "Address family type for the VPN instance is created for";\r
+ }\r
+ description\r
+ "L3 VPN instance configuration information.";\r
+ }\r
+}\r