670 lines
21 KiB
Plaintext
670 lines
21 KiB
Plaintext
-- *****************************************************************
|
|
-- CISCO-SELECTIVE-VRF-DOWNLOAD-MIB.my: Cisco Selective VRF
|
|
-- Download MIB file
|
|
--
|
|
-- June 2011, Deepak Narula
|
|
--
|
|
-- Copyright (c) 2011 by cisco Systems, Inc.
|
|
-- All rights reserved.
|
|
--
|
|
-- *****************************************************************
|
|
|
|
CISCO-SELECTIVE-VRF-DOWNLOAD-MIB DEFINITIONS ::= BEGIN
|
|
|
|
IMPORTS
|
|
MODULE-IDENTITY,
|
|
OBJECT-TYPE,
|
|
NOTIFICATION-TYPE,
|
|
Counter32,
|
|
Gauge32,
|
|
Unsigned32
|
|
FROM SNMPv2-SMI
|
|
MODULE-COMPLIANCE,
|
|
OBJECT-GROUP,
|
|
NOTIFICATION-GROUP
|
|
FROM SNMPv2-CONF
|
|
TEXTUAL-CONVENTION,
|
|
TruthValue,
|
|
TimeStamp
|
|
FROM SNMPv2-TC
|
|
entPhysicalIndex
|
|
FROM ENTITY-MIB
|
|
AddressFamilyNumbers
|
|
FROM IANA-ADDRESS-FAMILY-NUMBERS-MIB
|
|
MplsL3VpnName
|
|
FROM MPLS-L3VPN-STD-MIB
|
|
ciscoMgmt
|
|
FROM CISCO-SMI;
|
|
|
|
|
|
ciscoSelectiveVrfDownloadMIB MODULE-IDENTITY
|
|
LAST-UPDATED "201106220000Z"
|
|
ORGANIZATION "Cisco Systems, Inc."
|
|
CONTACT-INFO
|
|
"Cisco Systems
|
|
Customer Service
|
|
|
|
Postal: 170 W Tasman Drive
|
|
San Jose, CA 95134
|
|
USA
|
|
|
|
Tel: +1 800 553-NETS
|
|
|
|
E-mail: cs-snmp@cisco.com"
|
|
DESCRIPTION
|
|
"This MIB module defines objects describing selective
|
|
VRF download. The selective VRF download feature makes
|
|
a best effort to download only those prefixes and labels
|
|
to a physical entity required to forward traffic through
|
|
the physical entity. The feature accomplishes this by
|
|
characterizing roles for physical entities baed on their
|
|
configuration.
|
|
|
|
Following terminology is introduced with selective VRF
|
|
download feature:
|
|
|
|
Core Facing A physical entity which has only core
|
|
facing interfaces (interfaces that
|
|
connect to other Provider/Provider Edge
|
|
devices).
|
|
|
|
Customer Facing A line physical entity which has one or
|
|
more customer facing interfaces
|
|
(interfaces that connect to Customer
|
|
Edge devices in different VRFs).
|
|
|
|
Local prefix A prefix that is received from a
|
|
Customer edge device connected to the
|
|
router in a configured VRF context.
|
|
|
|
Remote prefix A prefix received from another Provider
|
|
Edge device and is imported to a
|
|
configured VRF.
|
|
|
|
See the following references for futher information:
|
|
|
|
RFC 3813 - Multiprotocol Label Switching (MPLS)
|
|
Label Switching Router (LSR) Management Information
|
|
base (MIB), C. Srinivasan, A. Vishwanathan, and
|
|
T. Nadeau, June 2004
|
|
|
|
RFC 4382 - MPLS/BGP Layer 3 Virtual Private Network
|
|
(VPN) Management Information Base, T. Nadeau &
|
|
van Der Linde, February 2006
|
|
|
|
Acronyms:
|
|
VRF Virtual Routing and Forwarding
|
|
VPN Virtual Private Network
|
|
P Provider Core Device
|
|
PE Provider Edge Device
|
|
CE Customer Edge Device
|
|
AFI Address Family Identifier
|
|
CEF Cisco Express Forwarding"
|
|
REVISION "201106220000Z"
|
|
DESCRIPTION
|
|
"Initial version of this MIB module."
|
|
::= { ciscoMgmt 775 }
|
|
|
|
|
|
ciscoSelectiveVrfDownloadMIBNotifs OBJECT IDENTIFIER
|
|
::= { ciscoSelectiveVrfDownloadMIB 0 }
|
|
|
|
ciscoSelectiveVrfDownloadMIBObjects OBJECT IDENTIFIER
|
|
::= { ciscoSelectiveVrfDownloadMIB 1 }
|
|
|
|
ciscoSelectiveVrfDownloadMIBConform OBJECT IDENTIFIER
|
|
::= { ciscoSelectiveVrfDownloadMIB 2 }
|
|
|
|
|
|
-- Textual Conventions
|
|
|
|
SVDEntityRole ::= TEXTUAL-CONVENTION
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This textual convention denotes the role of a physical
|
|
entity with respect to selective VRF download feature.
|
|
|
|
'invalid': The role of the physical entity is unknown,
|
|
unconfigured, or the selective VRF download feature
|
|
has yet to calculate it.
|
|
|
|
'standard': The role of the physical entity has
|
|
interfaces configured in the default table and other
|
|
VRF tables. The selective VRF download feature
|
|
downloads all VRFs and prefixes to the physical entity.
|
|
|
|
'core': The role of the physical entity only has
|
|
interfaces configured in the default table. The
|
|
selective VRF download feature downloads all VRFs and
|
|
local customer prefixes to the physical entity.
|
|
|
|
'customer': The role of the physical entity only has
|
|
interfaces configured in VRF tables other than the
|
|
default. The selective VRF download feature downloads
|
|
all prefixes for locally provisioned VRFs.
|
|
|
|
'noInterest': The role of the physical entity does not
|
|
have interfaces configured in any VRF tables. The
|
|
selective VRF download feature does not download any
|
|
prefixes to the physical entity.
|
|
|
|
'vpnOnlyCustomer': The role of the physical entity is
|
|
for VPN-only customers (i.e., customers that do not need
|
|
access to global routes). The selective VRF download
|
|
feature downloads provisioned VRFs to the physical
|
|
entity, and it filters all BGP routes from the default
|
|
table."
|
|
SYNTAX INTEGER {
|
|
invalid(1),
|
|
standard(2),
|
|
core(3),
|
|
customer(4),
|
|
noInterest(5),
|
|
vpnOnlyCustomer(6)
|
|
}
|
|
|
|
csvdAdminEnable OBJECT-TYPE
|
|
SYNTAX TruthValue
|
|
MAX-ACCESS read-write
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object specifies the desired state of selective
|
|
VRF download feature. When a managed system initializes,
|
|
it starts with csvdAdminEnable in the true(1) state. As a
|
|
result of either explicit management action or per
|
|
configuration information retained by the managed system,
|
|
csvdAdminEnable is then changed to false(2) state (or
|
|
remains in the true(1) state."
|
|
DEFVAL { true }
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 1 }
|
|
|
|
csvdOperEnable OBJECT-TYPE
|
|
SYNTAX TruthValue
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the current operational state of
|
|
selective VRF download feature. If csvdAdminEnable is
|
|
changed then csvdOperEnable should change to the same
|
|
value after the external action is triggered. As an
|
|
external action implementations may require router reload
|
|
or switchover of the route-processor for the change to
|
|
take effect."
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 2 }
|
|
|
|
csvdEntityRoleChangeNotificationEnable OBJECT-TYPE
|
|
SYNTAX TruthValue
|
|
MAX-ACCESS read-write
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object specifies whether the system generates the
|
|
csvdEntityRoleChangeNotification."
|
|
DEFVAL { true }
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 3 }
|
|
|
|
csvdCounterDiscontinuityTime OBJECT-TYPE
|
|
SYNTAX TimeStamp
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the value of sysUpTime on the most
|
|
recent occasion at which selective VRF download counters
|
|
suffered a discontinuity. The relevant counters are the
|
|
instances of any Counter32 objects contained in
|
|
csvdStateTable. If no such discontinuities have occurred
|
|
since the last re-initialization of the local management
|
|
subsystem, then this object contains a zero value."
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 4 }
|
|
|
|
csvdStateTable OBJECT-TYPE
|
|
SYNTAX SEQUENCE OF CsvdStateEntry
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This table lists the state relating to the selective VRF
|
|
download feature for each physical entity capable of
|
|
forwarding packets. This table has an expansion dependent
|
|
relationship on the entPhysicalTable, containing zero or
|
|
more rows each row in the entPhysicalEntity. If the
|
|
physical entity is capable of forwarding packets, it
|
|
contains a row for each address family it supports."
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 5 }
|
|
|
|
csvdStateEntry OBJECT-TYPE
|
|
SYNTAX CsvdStateEntry
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"An entry describes state relating to the selective VRF
|
|
download feature. The system creates an entry each for
|
|
each supported AFI when a new physical entity capable of
|
|
forwarding packets becomes operational. The system
|
|
destroys all the entries associated with the physical
|
|
entity when it goes away."
|
|
INDEX {
|
|
entPhysicalIndex,
|
|
csvdStateAFI
|
|
}
|
|
::= { csvdStateTable 1 }
|
|
|
|
CsvdStateEntry ::= SEQUENCE {
|
|
csvdStateAFI AddressFamilyNumbers,
|
|
csvdStateEntityRole SVDEntityRole,
|
|
csvdStateEntityRoleLastChange TimeStamp,
|
|
csvdStateEntityRoleTransitions Counter32
|
|
}
|
|
|
|
csvdStateAFI OBJECT-TYPE
|
|
SYNTAX AddressFamilyNumbers
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the AFI for which the row
|
|
pertains."
|
|
::= { csvdStateEntry 1 }
|
|
|
|
csvdStateEntityRole OBJECT-TYPE
|
|
SYNTAX SVDEntityRole
|
|
MAX-ACCESS read-write
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object specifies the selective VRF download role of
|
|
the physical entity. It can be updated based on interface
|
|
to VRF association change or ip-address assignment to an
|
|
interface belonging to the physical entity.
|
|
For example:-
|
|
- if no interfaces on a physical entity have IPv4 address
|
|
configured, then it would be in Customer Facing
|
|
Role for IPv4 address family.
|
|
- if no interfaces on a physical entity have IPv6 address
|
|
configured, then it would be in Not Interested
|
|
Role for IPv6 address family.
|
|
- now if the user adds an IPv4 address to an interface
|
|
in default VRF, then the physical entity would turn
|
|
Core-Facing for IPv4 AFI.
|
|
- if the user would have added this interface in a
|
|
named VRF, then the physical entity would have remained in
|
|
Customer-Facing for IPv4 AFI.
|
|
- if there are interfaces configured in both default
|
|
VRF and named VRFs then the physical entity would turn in
|
|
to Standard Role."
|
|
::= { csvdStateEntry 2 }
|
|
|
|
csvdStateEntityRoleLastChange OBJECT-TYPE
|
|
SYNTAX TimeStamp
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the value of sysUpTime the last
|
|
time the corresponding instance of csvdStateEntityRole
|
|
changed."
|
|
::= { csvdStateEntry 3 }
|
|
|
|
csvdStateEntityRoleTransitions OBJECT-TYPE
|
|
SYNTAX Counter32
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the number of times the
|
|
corresponding instance of csvdStateEntityRole has
|
|
changed. Discontinuities in the value of this counter
|
|
can occur at re-initialization of the management system,
|
|
and at other times as indicated by the value of the
|
|
corresponding instance of csvdCounterDiscontinuityTime."
|
|
::= { csvdStateEntry 4 }
|
|
|
|
|
|
csvdRoleHistory OBJECT IDENTIFIER
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 6 }
|
|
|
|
|
|
csvdRoleHistorySize OBJECT-TYPE
|
|
SYNTAX Unsigned32 (1..100)
|
|
MAX-ACCESS read-write
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object specifies the maximum number of rows the
|
|
csvdRoleHistoryTable can contain at any given time. If
|
|
the role changes and the csvdRoleHistoryTable already
|
|
contains a number of rows equal to the value of this
|
|
object, then it destroys the oldest row before creating
|
|
a new one."
|
|
DEFVAL { 10 }
|
|
::= { csvdRoleHistory 1 }
|
|
|
|
csvdRoleHistoryLastIndex OBJECT-TYPE
|
|
SYNTAX Unsigned32 (0..65535)
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the value of csvdRoleHistoryIndex
|
|
corresponding to the last row created in the
|
|
csvdRoleHistoryTable."
|
|
::= { csvdRoleHistory 2 }
|
|
|
|
csvdRoleHistoryTable OBJECT-TYPE
|
|
SYNTAX SEQUENCE OF CsvdRoleHistoryEntry
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This table lists the role change history per
|
|
address family (ipv4 and ipv6) for each physical entity
|
|
capable of forwarding packets. This table has an
|
|
expansion dependant relationship on csvdStateTable,
|
|
containing zero or more rows for each row in
|
|
csvdStateTable."
|
|
::= { csvdRoleHistory 3 }
|
|
|
|
csvdRoleHistoryEntry OBJECT-TYPE
|
|
SYNTAX CsvdRoleHistoryEntry
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"An entry describes a change in the role of a physical
|
|
entity."
|
|
INDEX {
|
|
entPhysicalIndex,
|
|
csvdStateAFI,
|
|
csvdRoleHistoryIndex
|
|
}
|
|
::= { csvdRoleHistoryTable 1 }
|
|
|
|
CsvdRoleHistoryEntry ::= SEQUENCE {
|
|
csvdRoleHistoryIndex Unsigned32,
|
|
csvdRoleHistoryRole SVDEntityRole,
|
|
csvdRoleHistoryRoleChangeTime TimeStamp
|
|
}
|
|
|
|
csvdRoleHistoryIndex OBJECT-TYPE
|
|
SYNTAX Unsigned32 (0..65535)
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates an arbitrary integer-value
|
|
uniquely identifying the entry."
|
|
::= { csvdRoleHistoryEntry 1 }
|
|
|
|
csvdRoleHistoryRole OBJECT-TYPE
|
|
SYNTAX SVDEntityRole
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the selective VRF download role for
|
|
a given history index."
|
|
::= { csvdRoleHistoryEntry 2 }
|
|
|
|
csvdRoleHistoryRoleChangeTime OBJECT-TYPE
|
|
SYNTAX TimeStamp
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the value of sysUpTime when entry
|
|
was created."
|
|
::= { csvdRoleHistoryEntry 3 }
|
|
|
|
|
|
|
|
csvdVrfTable OBJECT-TYPE
|
|
SYNTAX SEQUENCE OF CsvdVrfEntry
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This table lists VRF tables selectively downloaded to
|
|
each physical entity capable of forwarding packets. This
|
|
table has an expansion dependent relationship on the
|
|
csvdStateTable, containing zero or more rows for each
|
|
address family supported by each physical entity capable
|
|
of forwarding packets."
|
|
::= { ciscoSelectiveVrfDownloadMIBObjects 7 }
|
|
|
|
csvdVrfEntry OBJECT-TYPE
|
|
SYNTAX CsvdVrfEntry
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"An entry describes a VRF selectively downloaded to a
|
|
physical entity capable of forwarding packets. The
|
|
system creates an entry when the selective VRF
|
|
download feature determines that a physical entity
|
|
requires a VRF. The system destroys an entry when the
|
|
selective VRF download feature determines that a
|
|
physical entity does not require a VRF."
|
|
INDEX {
|
|
entPhysicalIndex,
|
|
csvdStateAFI,
|
|
csvdVrfName
|
|
}
|
|
::= { csvdVrfTable 1 }
|
|
|
|
CsvdVrfEntry ::= SEQUENCE {
|
|
csvdVrfName MplsL3VpnName,
|
|
csvdPrefixCount Gauge32,
|
|
csvdLocalPrefixCount Gauge32,
|
|
csvdRemotePrefixCount Gauge32,
|
|
csvdTableConvergedFlag TruthValue
|
|
}
|
|
|
|
csvdVrfName OBJECT-TYPE
|
|
SYNTAX MplsL3VpnName
|
|
MAX-ACCESS not-accessible
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the name of the VRF."
|
|
REFERENCE
|
|
"T. Nadeau and H. van der Linde, 'MPLS/BGP Layer 3
|
|
Virtual Private Network (VPN) Management Information
|
|
Base', RFC-4382, February 2006."
|
|
::= { csvdVrfEntry 1 }
|
|
|
|
csvdPrefixCount OBJECT-TYPE
|
|
SYNTAX Gauge32
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the total number of prefixes
|
|
downloaded from the VRF table. The value of this object
|
|
may not equal to the sum of the values of the
|
|
corresponding instance of csvdLocalPrefixCount and
|
|
csvdRemotePrefixCount, as the VRF table may have special
|
|
internal prefixes to support the CEF implementation."
|
|
::= { csvdVrfEntry 2 }
|
|
|
|
csvdLocalPrefixCount OBJECT-TYPE
|
|
SYNTAX Gauge32
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the number of local prefixes
|
|
downloaded from the VRF table."
|
|
::= { csvdVrfEntry 3 }
|
|
|
|
csvdRemotePrefixCount OBJECT-TYPE
|
|
SYNTAX Gauge32
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates the number of remote prefixes
|
|
downloaded from the VRF table."
|
|
::= { csvdVrfEntry 4 }
|
|
|
|
csvdTableConvergedFlag OBJECT-TYPE
|
|
SYNTAX TruthValue
|
|
MAX-ACCESS read-only
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This object indicates whether the VRF table has
|
|
converged. Once all the prefixes for the VRF table have
|
|
been updated and downloaded, convergence is complete.
|
|
The flag is set to false when the VRF is created
|
|
initially or selectively downloaded to the physical
|
|
entity. Once the initial download of all the prefixes
|
|
for the VRF to the physical entity completes, the flag
|
|
is set to true."
|
|
DEFVAL { false }
|
|
::= { csvdVrfEntry 5 }
|
|
|
|
|
|
|
|
-- notification information
|
|
|
|
csvdEntityRoleChangeNotification NOTIFICATION-TYPE
|
|
OBJECTS { csvdStateEntityRole }
|
|
STATUS current
|
|
DESCRIPTION
|
|
"This notification is sent when the role of the physical
|
|
entity for a given address family changes.
|
|
csvdStateEntityRole indicates the role the entity is
|
|
transitioning to."
|
|
::= { ciscoSelectiveVrfDownloadMIBNotifs 1 }
|
|
-- conformance information
|
|
|
|
csvdMIBCompliances OBJECT IDENTIFIER
|
|
::= { ciscoSelectiveVrfDownloadMIBConform 1 }
|
|
|
|
csvdMIBGroups OBJECT IDENTIFIER
|
|
::= { ciscoSelectiveVrfDownloadMIBConform 2 }
|
|
|
|
|
|
-- compliance statements
|
|
|
|
csvdMIBCompliance MODULE-COMPLIANCE
|
|
STATUS current
|
|
DESCRIPTION
|
|
"The compliance statement for entities which
|
|
implement the MIB"
|
|
MODULE -- this module
|
|
MANDATORY-GROUPS {
|
|
csvdMIBGroup,
|
|
csvdMIBNotificationEnableGroup,
|
|
csvdMIBNotificationGroup
|
|
}
|
|
|
|
OBJECT csvdRoleHistorySize
|
|
MIN-ACCESS read-only
|
|
DESCRIPTION
|
|
"Write access is not supported."
|
|
::= { csvdMIBCompliances 1 }
|
|
|
|
-- units of conformance
|
|
|
|
csvdMIBGroup OBJECT-GROUP
|
|
OBJECTS {
|
|
csvdAdminEnable,
|
|
csvdOperEnable,
|
|
csvdCounterDiscontinuityTime,
|
|
csvdStateEntityRole,
|
|
csvdStateEntityRoleLastChange,
|
|
csvdStateEntityRoleTransitions,
|
|
csvdRoleHistorySize,
|
|
csvdRoleHistoryLastIndex,
|
|
csvdRoleHistoryRole,
|
|
csvdRoleHistoryRoleChangeTime,
|
|
csvdPrefixCount,
|
|
csvdLocalPrefixCount,
|
|
csvdRemotePrefixCount,
|
|
csvdTableConvergedFlag
|
|
}
|
|
STATUS current
|
|
DESCRIPTION
|
|
"A collection of objects providing selective VRF download
|
|
feature state information to a NMS agent."
|
|
::= { csvdMIBGroups 1 }
|
|
|
|
csvdMIBNotificationEnableGroup OBJECT-GROUP
|
|
OBJECTS { csvdEntityRoleChangeNotificationEnable }
|
|
STATUS current
|
|
DESCRIPTION
|
|
"A collection of objects for controlling
|
|
(enabling/disabling) selective VRF download feature
|
|
notifications to a NMS agent."
|
|
::= { csvdMIBGroups 2 }
|
|
|
|
csvdMIBNotificationGroup NOTIFICATION-GROUP
|
|
NOTIFICATIONS { csvdEntityRoleChangeNotification }
|
|
STATUS current
|
|
DESCRIPTION
|
|
"A collection of notifications used for monitoring
|
|
selective VRF download feature state."
|
|
::= { csvdMIBGroups 3 }
|
|
|
|
END
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|