ATM PVC Bundle Enhancement—MPLS EXP-Based PVC Selection

First Published: January 01, 2006

Last Updated: October 02, 2009

This feature allows you to configure multiple VCs that have different quality of service (QoS) characteristics between any pair of ATM-connected routers that support this feature. VC bundle management allows multiple VCs with various QoS settings to be directed to the same destination and to map traffic to the VCs based on protocol criteria associated with the traffic. Three experimental (EXP) bits in the Multiprotocol Label Switching (MPLS) packets determine which VC in the bundle to use to forward the packets.

Use Cisco Feature Navigator to find information about platform support and Cisco IOS and Catalyst OS software image support. To access Cisco Feature Navigator, go to http://www.cisco.com/go/cfn. An account on Cisco.com is not required.

ATM VC Bundle Management

The MPLS EXP Bits Based ATM PVC Bundles VC Selection feature is an extension to the IP to ATM Class of Service feature suite. The IP to ATM Class of Service feature suite, using VC support and bundle management, maps QoS characteristics between IP and ATM. It provides customers that have multiple VCs (with varying qualities of service to the same destination) the ability to build a QoS differentiated network.

The IP to ATM Class of Service feature suite allows customers to use IP precedence level as the selection criterion for packet forwarding. This feature provides customers with the option of using the MPLS experimental level as an additional selection criterion for packet forwarding.

Note If a selection criterion for packet forwarding is not selected (that is, if the packet is unlabeled), this feature uses the IP precedence level as the default selection criterion.

ATM VC Bundle Configuration

ATM VC bundle management allows you to configure multiple VCs that have different QoS characteristics between any pair of ATM-connected routers. As shown in Figure 1, these VCs are grouped in a bundle and are referred to as bundle members.

Figure 1 ATM VC Bundle

ATM VC bundle management allows you to define an ATM VC bundle and add VCs to it. Each VC of a bundle has its own ATM traffic class and ATM traffic parameters. You can apply attributes and characteristics to discrete VC bundle members, or you can apply them collectively at the bundle level.

Using VC bundles, you can create differentiated service by flexibly distributing MPLS EXP levels over the different VC bundle members. You can map a single MPLS EXP level, or a range of these levels, to each discrete VC in the bundle, thereby enabling individual VCs in the bundle to carry packets marked with different MPLS EXP levels. You can use Weighted Random Early Detection (WRED) or distributed WRED (dWRED) to further differentiate service across traffic that has different MPLS EXP levels.

To determine which VC in the bundle to use to forward a packet to its destination, the ATM VC bundle management software matches MPLS EXP levels between packets and VCs (see Figure 2). IP traffic is sent to the next hop address for the bundle because all VCs in a bundle share the same destination, but the VC used to carry a packet depends on the value set for that packet in the MPLS EXP level of the type of service (ToS) byte of its header. The ATM VC bundle management software matches the MPLS EXP level of the packet to the MPLS EXP levels assigned to a VC, sending the packet out on the appropriate VC.

Moreover, the ATM VC bundle management software allows you to configure how traffic will be redirected when the VC to which the packet was initially directed goes down. Figure 2 illustrates how the ATM VC bundle management software determines which permanent virtual circuit (PVC) bundle member to use to carry a packet and how WRED (or dWRED) is used to differentiate traffic on the same VC.

Figure 2 ATM VC Bundle PVC Selection for Packet Transfer

The support of multiple parallel ATM VCs allows you to create stronger service differentiation at the IP layer. For example, you might want to configure the network to provide IP traffic belonging to real-time class of service (CoS) such as Voice over IP traffic on an ATM VC with strict constraints on constant bit rate (CBR) or variable bit rate real-time (VBR-rt), while also allowing the network to transport nonreal-time traffic over a more elastic ATM unspecified bit rate (UBR) PVC. UBR is effectively the ATM version of best-effort service. Using a multiple parallel ATM VC configuration allows you to make full use of your network capacity.

Benefits of ATM VC Bundle Management

ATM VC bundle management was designed to provide a true working solution to class-based services, without the investment of new ATM network infrastructures. It allows networks to offer different service classes (sometimes termed differential service classes) across the entire WAN, not just the routed portion. Mission-critical applications can be given exceptional service during periods of high network usage and congestion. In addition, noncritical traffic can be restricted in its network usage, ensuring greater QoS for more important traffic and user types.

ATM VC bundle management gives customers the option of using the MPLS EXP level, in addition to IP precedence, as a selection criterion for packet forwarding.

–Use of Interim Local Management Interface (ILMI) and Operation, Administration, and Maintenance (OAM) functionality in the PVC management feature for PVC failure detection.

•VC selection within the bundle:

–Uses three EXP bits in the MPLS header to define the precedence levels, with level 7 being the highest for MPLS traffic.

–No automapping of VCs to precedence levels can be done. The user must use the mpls experimental command under each member VC to explicitly specify the mapping.

–Multiple precedence levels can be mapped to one VC.

–Packets with the PAK_PRIORITY_CRUCIAL flag set go on a high precedence (level 6) VC. These packets include IP routing packets such as Intermediate System-Intermediate System (IS-IS) packets for integrated IP routing. Label Distribution Protocol (LDP) and Tag Distribution Protocol (TDP) messages, and Inverse ARP packets also use a precedence level 6 VC. However, OAM cells still flow in the individual VC to detect PVC failures, although the PAK_PRIORITY_CRUCIAL flag is set for them.

–Regular ping commands use the lowest precedence (level 0) VC. If other protocols such as Internetwork Packet Exchange (IPX) are configured in the bundle, they will also use the lowest precedence level VC for their traffic.

•ATM Inverse ARP:

–Inverse ARP is viewed as a parameter at the bundle level and can be enabled or disabled only for the bundle, not for individual VCs in the bundle.

–The PAK_PRIORITY_CRUCIAL flag is set in each ATM Inverse ARP packet and the packets use the precedence level 6 VC.

–Inverse ARP for other protocols such as IPX is off by default unless it is configured in the bundle.

•Broadcast and multicast:

–Broadcasting can be turned on or off at the bundle level, not at the individual VC level in the bundle.

–Pseudobroadcasting is used for forwarding the broadcast traffic.

–VC selection for the broadcast traffic is based on the precedence levels of the broadcast packets.

•Bundle management:

–According to the protected group rule, when all members in the protected group fail, the bundle is declared down.

–According to the protected VC rule, when a protected VC goes down, the bundle goes down.

–A VC can be a standalone VC or belong to only one bundle.

–When a bundle goes down, no traffic should be forwarded out the bundle, even if some of the VCs in the bundle are still up.

–In VC bumping, each bundle member can specify if bumping is allowed. If bumping is allowed, the next lower precedence level VC is selected when a VC goes down. This is the implicit bumping rule. Traffic is restored to the original VC when it comes back.

–In explicit VC bumping, a VC can specify to which precedence level it wants to bump its traffic when it goes down. Only one precedence level can be specified for bumping. If the VC that carries the bumped traffic also fails, the traffic will follow the bumping rules specified for that VC.

–In reject bumping, a VC may also be configured not to accept the bumped traffic.

–When no alternate VC can be found for some bumped traffic, the bundle has to be declared down.

–To avoid bringing down a bundle because of a failure of the lowest precedence VC, configure explicit bumping on the lowest precedence VC.

–Bundle status attributes and their current status for each VC in the bundle can be displayed in a tabular form using EXEC commands.

–Bundle statistics are the same statistics provided for VC that have been aggregated for a VC bundle.

Configuring MPLS and Creating a VC Bundle

Perform this task to enable MPLS and create a VC bundle. When you create a VC bundle, you enter bundle configuration mode, in which you can assign attributes and parameters to the bundle and to all of its member VCs.

Enables MPLS forwarding of IP packets along normally routed paths for the platform.

Step 8

bundlebundle-name

Example:

Router(config-if)# bundle new-york

Creates or modifies a bundle and enters bundle configuration mode. The prompt changes to the following:

Router(config-if-atm-bundle)#

What to Do Next

Decide whether you want to configure the VC bundle member directly or use a VC class attached to a bundle.

You can apply parameters (or attributes) to bundles either by applying the parameters directly to the bundle or by applying the parameters to a VC class assigned to the bundle.

Applying parameters by using VC classes assigned to the bundle allows you to apply multiple parameters at once because you apply the VC class to the bundle and to all of its VC members. This method allows you to apply a parameter across all VCs for the bundle, after which (for some parameters) you can later modify that parameter for individual VCs. After configuring the parameters for the VC class, you need to attach the VC class to the bundle.

Parameters applied directly to a bundle take priority over those applied to VC classes assigned to the bundle, and the steps for this task are in the "Configuring the Bundle-Level Protocol" section. Parameters applied to VC classes assigned to the bundle take priority over those applied to individual VCs.

Note Some parameters applied through a VC class or directly to the bundle can be superseded by commands that you apply directly to individual VCs in bundle-VC configuration mode.

Configuring the Bundle-Level Protocol

Perform this task to configure a protocol that applies to the bundle and to all of its members. The commands in these steps are entered in bundle configuration mode.

DETAILED STEPS

Configures a static map (the map statement for the bundle) for an ATM PVC, SVC, or VC class.

•protocol—Networking protocol.

•protocol-address—Destination address that is being mapped to a PVC.

•inarp—(Valid only for IP and IPX protocols on PVCs) Enables Inverse ARP on an ATM PVC. If you specify a protocol address instead of the inarp keyword, Inverse ARP is automatically disabled for that protocol.

•[no] broadcast—Indicates that this map entry is used when the corresponding protocol sends broadcast packets to the interface.

Note Pseudobroadcasting is supported. The broadcast keyword of the protocol command takes precedence if you previously configured the broadcast command on the ATM PVC or SVC.

Step 2

encapsulation [aal5mux | aal5snap]

Example:

Router(config-if-atm-bundle)# encapsulation aal5snap

Configures the ATM adaptation layer (AAL) and encapsulation type for every VC in the bundle.

•aal5mux—AAL and encapsulation type for multiplex (MUX) type VCs. A protocol must be specified when using this encapsulation type.

•aal5snap—AAL and encapsulation type that supports Inverse ARP.

Configuring Parameters on a VC Bundle Member Directly

Perform this task to configure parameters on an individual VC bundle member directly. The commands in these steps are entered in bundle-VC configuration mode.

SUMMARY STEPS

1. pvc-bundlepvc-name [vpi/][vci]

2. ubr pcr

3. vbr-nrt pcr scr [mbs]

4. mpls experimental [other| range]

5. bump {implicit | explicitprecedence-level | traffic}

6. protect {group | vc}

7. exit

DETAILED STEPS

Command or Action

Purpose

Step 1

pvc-bundlepvc-name [vpi/][vci]

Example:

Router(config-if-atm-bundle)# pvc-bundle ny-control 207

Adds a VC to a bundle as a member and enters bundle-VC configuration mode to configure VC specific parameters.

•The VC is created upon exiting the mode.

•vpi—ATM network virtual path identifier (VPI) for this PVC. The absence of the slash mark (/) and a VPI value defaults the value to 0. The vpi and vci keywords cannot both be set to 0.

•vci—ATM network virtual channel identifier (VCI) for this PVC. The value range is from 0 to 1 less than the maximum value set for this interface by the atm vc-per-vp command.

Note The pvc-bundle command is used instead of the pvc command to avoid the ambiguity between this command and the interface pvc command.

Configures MPLS EXP levels for a VC class that can be assigned to a VC bundle and thus applied to all VC members of that bundle.

•This command is ignored if the class that contains it is not attached to a bundle member.

•other—Any precedence level from 0 to 7 not explicitly configured.

•range—An MPLS EXP level specified as a number or a range of numbers. Ranges can be expressed with a hyphen (2-5, for example), and numbers and ranges can be expressed in groups separated by commas; 1, 3, 5-7, for example.

Step 5

bump {implicit | explicitprecedence-level | traffic}

Example:

Router(config-if-atm-member)# bump explicit 7

Configures the bumping rules and applies only to bundle members.

•implicit—Applies the implicit bumping rule, which is the default, to a single VC or PVC bundle member or to all VCs in the bundle (VC-class mode). The implicit bumping rule stipulates that bumped traffic is to be carried by a VC or PVC with a lower precedence level.

•explicitprecedence-level—Specifies a precedence level from 0 to 7 for the traffic to be bumped to.

•traffic—Specifies that the VC or PVC accepts bumped traffic (the default condition). The no form of this command stipulates that the VC or PVC does not accept any bumped traffic.

Step 6

protect {group | vc}

Example:

Router(config-if-atm-member)# protect vc

Configures a VC class with protected group or protected VC status for application to a VC bundle member.

•This command makes a bundle member part of the protected group of a bundle or a protected VC in a bundle.

•group—Configures the VC or PVC bundle member as part of the protected group of the bundle.

•vc—Configures the VC or PVC member as individually protected.

Step 7

exit

Example:

Router(config-if-atm-member)# exit

Exits the current configuration mode.

•Continue entering exit at the prompt to exit each configuration mode.

Configuring a VC Class and Applying Parameters to a Bundle

Perform this task to configure a VC class to contain commands that configure all VC members of a bundle when the class is applied to that bundle. The parameters are applied in VC-class configuration mode. Use the vc-class atm command in global configuration mode to enter the VC-class configuration mode.

Commands Ignored in a VC Class Bundle

When a VC is part of a bundle, some of the VC configuration in the VC class will no longer be applicable to the VC and will be ignored. The inheritance rule for VCs in VC bundles follows this order: VC configuration, bundle configuration, subinterface configuration. In VC mode and bundle mode, the configuration with the individual command takes precedence over the configuration with the class command.

SUMMARY STEPS

1. enable

2. configure terminal

3. vc-class atmname

4. oam-bundle [manage] [frequency]

5. mpls experimental [other | range]

6. bump {implicit | explicitprecedence-level | traffic}

7. protect {group | vc}

8. exit

DETAILED STEPS

Command or Action

Purpose

Step 1

enable

Example:

Router> enable

Enables privileged EXEC mode.

•Enter your password if prompted.

Step 2

configureterminal

Example:

Router# configure terminal

Enters global configuration mode.

Step 3

vc-class atmname

Example:

Router(config)# vc-class atm bundle-class

Creates a VC class for an ATM interface and enters VC-class configuration mode.

Step 4

oam-bundle [manage] [frequency]

Example:

Router(config-vc-class)# oam-bundle manage 3

Enables end-to-end F5 OAM loopback cell generation and determines whether the bundle is OAM managed, that is, whether every VC in the bundle is OAM managed. There is no effect if the VC class that contains this command is not attached to a bundle.

•manage—Enables OAM management. If this keyword is omitted, loopback cells are sent, but the bundle is not managed.

Configures MPLS EXP levels for a VC class that can be assigned to a VC bundle and thus applied to all VC members of that bundle.

•This command is ignored if the class that contains it is not attached to a bundle member.

•other—Any precedence level from 0 to 7 not explicitly configured.

•range—An MPLS EXP level specified as a number or a range of numbers. Ranges can be expressed with a hyphen (2-5, for example), and numbers and ranges can be expressed in groups separated by commas; 1, 3, 5-7, for example.

Step 6

bump {implicit | explicitprecedence-level | traffic}

Example:

Router(config-vc-class)# no bump traffic

Configures the bumping rules and applies only to bundle members.

•implicit—Applies the implicit bumping rule, which is the default, to a single VC or PVC bundle member or to all VCs in the bundle (VC-class mode). The implicit bumping rule stipulates that bumped traffic is to be carried by a VC or PVC with a lower precedence level.

•explicitprecedence-level—Specifies a precedence level from 0 to 7 for the traffic to be bumped to.

•traffic—Specifies that the VC or PVC accepts bumped traffic (the default condition). The no form of this command stipulates that the VC or PVC does not accept any bumped traffic.

Step 7

protect {group | vc}

Example:

Router(config-vc-class)# protect vc

Configures a VC class with protected group or protected VC status for application to a VC bundle member.

•This command makes a bundle member part of the protected group of a bundle or a protected VC in a bundle.

•group—Configures the VC or PVC bundle member as part of the protected group of the bundle.

•vc—Configures the VC or PVC member as individually protected.

Step 8

exit

Example:

Router(config-vc-class)# exit

Exits the current configuration mode.

•Continue entering exit at the prompt to exit each configuration mode.

Configures a static map (the map statement for the bundle) for an ATM PVC, SVC, or VC class.

•protocol—Networking protocol.

•protocol-address—Destination address that is being mapped to a PVC.

•inarp—(Valid only for IP and IPX protocols on PVCs) Enables Inverse ARP on an ATM PVC. If you specify a protocol address instead of the inarp keyword, Inverse ARP is automatically disabled for that protocol.

•[no] broadcast—Indicates that this map entry is used when the corresponding protocol sends broadcast packets to the interface.

Note Pseudobroadcasting is supported. The broadcast keyword of the protocol command takes precedence if you previously configured the broadcast command on the ATM PVC or SVC.

Step 7

classclass-name

Example:

Router(config-atm-bundle)# class control-class

Attaches a named VC class to this bundle.

Step 8

pvc-bundlepvc-name [vpi/][vci]

Example:

Router(config-if-atm-bundle)# pvc-bundle ny-control 207

Adds a VC to a bundle as a member and enters bundle-VC configuration mode to configure VC specific parameters.

•The VC is created upon exiting the mode.

•vpi—ATM network virtual path identifier (VPI) for this PVC. The absence of the slash mark (/) and a VPI value defaults the value to 0. The vpi and vci keywords cannot both be set to 0.

•vci—ATM network virtual channel identifier (VCI) for this PVC. The value range is from 0 to 1 less than the maximum value set for this interface by the atm vc-per-vp command.

Note The pvc-bundle command is used instead of the pvc command to avoid the ambiguity between this command and the interface pvc command.

Step 9

ubrpcr

Example:

Router(config-if-atm-member)# ubr 10000

Configures UBR QoS and specifies the output PCR for the VC bundle member.

Adds a VC to a bundle as a member and enters bundle-VC configuration mode to configure VC specific parameters.

•The VC is created upon exiting the mode.

•vpi—ATM network virtual path identifier (VPI) for this PVC. The absence of the slash mark (/) and a VPI value defaults the value to 0. The vpi and vci keywords cannot both be set to 0.

•vci—ATM network virtual channel identifier (VCI) for this PVC. The value range is from 0 to 1 less than the maximum value set for this interface by the atm vc-per-vp command.

Note The pvc-bundle command is used instead of the pvc command to avoid the ambiguity between this command and the interface pvc command.

Step 6

classclass-name

Example:

Router(config-if-atm-member)# class control-class

Attaches a VC class to this VC.

Step 7

ubrpcr

Example:

Router(config-if-atm-member)# ubr 10000

Configures UBR QoS and specifies the output PCR for the VC bundle member.

Step 8

vbr-nrtpcrscr [mbs]

Example:

Router(config-if-atm-member)# vbr-nrt 20000 10000 32

Configures VBR-nrt QoS with a PCR, an SCR, and MBS.

Step 9

mpls experimental [other | range]

Example:

Router(config-if-atm-member)# mpls experimental 7

Defines the experimental levels for packets to be forwarded on this PVC.

•other—Any precedence level from 0 to 7 not explicitly configured.

•range—An MPLS EXP level specified as a number or a range of numbers. Ranges can be expressed with a hyphen (2-5, for example), and numbers and ranges can be expressed in groups separated by commas; 1, 3, 5-7, for example.

Step 10

bump {implicit | explicitprecedence-level | traffic}

Example:

Router(config-if-atm-member)# bump explicit 7

Specifies the bumping rule for the VC.

•implicit—Applies the implicit bumping rule, which is the default, to a single VC or PVC bundle member or to all VCs in the bundle (VC class mode). The implicit bumping rule stipulates that bumped traffic is to be carried by a VC or PVC with a lower precedence level.

•explicitprecedence-level—Specifies a precedence level from 0 to 7 for the traffic to be bumped to.

•traffic—Specifies that the VC or PVC accepts bumped traffic (the default condition). The no form of this command stipulates that the VC or PVC does not accept any bumped traffic.

Step 11

protect {group | vc}

Example:

Router(config-if-atm-member)# protect vc

Configures a VC class with protected group or protected VC status for application to a VC bundle member.

•This command makes a bundle member part of the protected group of a bundle or a protected VC in a bundle.

•group—Configures the VC or PVC bundle member as part of the protected group of the bundle.

•vc—Configures the VC or PVC member as individually protected.

Step 12

exit

Example:

Router(config-if-atm-member)# exit

Exits the current configuration mode.

•Continue entering exit at the prompt to exit each configuration mode.

! and belongs to the protected group of the bundle. The QoS type is UBR+.

!

vc-class atm priority-class

mpls experimental 4-2

protect group

ubr+ 10000 3000

! The following VC class defines a basic-class that carries the traffic of the precedence

! levels not specified in the profile; it is part of a protected group.

! The QoS type is UBR.

!

vc-class atm basic-class

mpls experimental other

protect group

ubr 10000

Associating an ATM VC Bundle with the Interface: Example

The following interface has one bundle, new-york, for connecting to three neighbors: new-york, san-francisco, and los-angeles. The new-york and san-francisco bundles have four members and los-angeles has three members.

interface atm 1/0.1 multipoint

ip address 10.0.0.1 255.255.255.0

ip router isis

bundle new-york

!

! The following commands enable IP and OSI traffic flows in the bundle. The protocol ip

! according to the inheritance rule. The protocol clns command is configured so IP routing

! can be integrated. The OSI routing packets will go on the highest precedence VC in the

! bundle, while the OSI data packets, if any, will use the lowest precedence VC in the

! bundle. Other protocols such as IPX or AppleTalk, if configured, would always use the

! lowest precedence VC in the bundle.

protocol ip 10.10.1.2 broadcast

protocol clns 49.0000.0000.0000.2222.00 broadcast

class bundle-class

!

! The following commands show how to configure the PVC bundles, including adding a VC

! to a bundle as a member.

pvc-bundle ny-control 207

class control-class

pvc-bundle ny-premium 206

class premium-class

pvc-bundle ny-priority 204

class priority-class

pvc-bundle ny-basic 201

class basic-class

bundle san-francisco

protocol clns 49.0000.0000.0000.3333.00 broadcast

inarp 1

class bundle-class

pvc-bundle sf-control 307

class control-class

pvc-bundle sf-premium 306

class premium-class

pvc-bundle sf-priority 304

class priority-class

pvc-bundle sf-basic 301

class basic-class

bundle los-angeles

protocol ip 1.1.1.4 broadcast

protocol clns 49.0000.0000.0000.4444.00 broadcast

inarp 1

class bundle-class

pvc-bundle la-high 407

precedence 7-5

protect vc

class premium-class

pvc-bundle la-mid 404

precedence 4-2

protect group

class priority-class

pvc-bundle la-low 401

precedence other

protect group

class basic-class

!

The following commands configure PVC la-other as a standalone VC that does not belong to
any of the bundles.

!

pvc la-other 400

no protocol ip inarp

broadcast

Creating a VC Class: Example

In the following example, a class called class1 is created and then applied to the bundle called bundle1:

! The following commands create the class class1:

vc-class atm class1

encapsulation aal5snap

broadcast

protocol ip inarp

oam-bundle manage 3

oam 4 3 10

!

! The following commands apply class1 to the bundle called bundle1:

bundle bundle1

class-bundle class1

With hierarchy precedence rules taken into account, VCs belonging to the bundle named bundle1 will be characterized by these parameters: AAL5SNAP (RFC1483 bridging) encapsulation, broadcast on, use of Inverse ARP to resolve IP addresses, and OAM enabled.

RFCs

Technical Assistance

Description

Link

The Cisco Support website provides extensive online resources, including documentation and tools for troubleshooting and resolving technical issues with Cisco products and technologies.

To receive security and technical information about your products, you can subscribe to various services, such as the Product Alert Tool (accessed from Field Notices), the Cisco Technical Services Newsletter, and Really Simple Syndication (RSS) Feeds.

Access to most tools on the Cisco Support website requires a Cisco.com user ID and password.

Not all commands may be available in your Cisco IOS software release. For release information about a specific command, see the command reference documentation.

Use Cisco Feature Navigator to find information about platform support and software image support. Cisco Feature Navigator enables you to determine which Cisco IOS and Catalyst OS software images support a specific software release, feature set, or platform. To access Cisco Feature Navigator, go to http://www.cisco.com/go/cfn. An account on Cisco.com is not required.

Note Table 1 lists only the Cisco IOS software release that introduced support for a given feature in a given Cisco IOS software release train. Unless noted otherwise, subsequent releases of that Cisco IOS software release train also support that feature.

All other trademarks mentioned in this document or website are the property of their respective owners. The use of the word partner does not imply a partnership relationship between Cisco and any other company. (0908R)

Any Internet Protocol (IP) addresses used in this document are not intended to be actual addresses. Any examples, command display output, and figures included in the document are shown for illustrative purposes only. Any use of actual IP addresses in illustrative content is unintentional and coincidental.