MINDPRIDE Computer Services

Home | About Us | Our Services | Contact Information | Tutorials, Articles & Dictionaries | Site Map



About Us



Virus Alerts




Refer A Friend

Site Map



Privacy Policy




The 7-Layer OSI Model


You can look at protocols as being either open system or proprietary. An open system is a standard, published protocol controlled by a standards body while a proprietary protocol is privately controlled. The open systems interconnection (OSI) model is the basis for open system protocols and describes a network architecture composed of layers. The seven layers of the OSI model reflect the functions in data communications networks; it serves as a framework for the various networking standards. It has become a common reference point when discussing network protocols, features, and hardware. The functional layers of the model are shown in the figure below and compared to various interconnect device functions and to several media access protocols.



OSI seven-layer model compared to various interconnect device functions and to several media access protocols
Reprinted with permission of Fluke Corporation. Network Maintenance & Troubleshooting Guide, copyright 1997. Guide available from Fluke (1-800-90FLUKE, part number 200730).

The seven Layers Described

Physical layer: The lowest layer of the model, it provides the transmission of data. This layer defines electrical and mechanical properties.

Link layer: This layer controls the transmission of blocks of data between network peers over a physical link. It monitors and resolves errors that may occur on the physical layer.

Network layer: The third layer routes data from one network node to others.

Transport layer: This layer ensures that data from the source arrives at the destination correctly and in proper sequence.

Session layer: The layer provides the capability for cooperating applications to synchronize and manage their dialog and data exchange.

Presentation layer: This provides services that interpret the meaning of the information exchanged.

Application layer: This layer directly serves the end user. It supports end applications such as file transfer and database access.

The diagram below shows how a common suite of protocols (TCP/IP) used for the Internet are related to the OSI model.



Partial list of TCP/IP protocols in relation to the seven-layer model


OSI Seven-Layer Model

In the 1980s, the European-dominated International Standards Organization (ISO), began to develop its Open Systems Interconnection (OSI) networking suite. OSI has two major components: an abstract model of networking (the Basic Reference Model, or seven-layer model), and a set of concrete protocols. The standard documents that describe OSI are for sale and not currently available online.

Parts of OSI have influenced Internet protocol development, but none more than the abstract model itself, documented in OSI 7498 and its various addenda. In this model, a networking system is divided into layers. Within each layer, one or more entities implement its functionality. Each entity interacts directly only with the layer immediately beneath it, and provides facilities for use by the layer above it. Protocols enable an entity in one host to interact with a corresponding entity at the same layer in a remote host.


The seven layers of the OSI Basic Reference Model are (from bottom to top):


  1. The Physical Layer describes the physical properties of the various communications media, as well as the electrical properties and interpretation of the exchanged signals. Ex: this layer defines the size of Ethernet coaxial cable, the type of BNC connector used, and the termination method.


  2. The Data Link Layer describes the logical organization of data bits transmitted on a particular medium. Ex: this layer defines the framing, addressing and checksumming of Ethernet packets.


  3. The Network Layer describes how a series of exchanges over various data links can deliver data between any two nodes in a network. Ex: this layer defines the addressing and routing structure of the Internet.


  4. The Transport Layer describes the quality and nature of the data delivery. Ex: this layer defines if and how retransmissions will be used to ensure data delivery.


  5. The Session Layer describes the organization of data sequences larger than the packets handled by lower layers. Ex: this layer describes how request and reply packets are paired in a remote procedure call.


  6. The Presentation Layer describes the syntax of data being transferred. Ex: this layer describes how floating point numbers can be exchanged between hosts with different math formats.


  7. The Application Layer describes how real work actually gets done. Ex: this layer would implement file system operations.

The original Internet protocol specifications defined a four-level model, and protocols designed around it (like TCP) have difficulty fitting neatly into the seven-layer model. Most newer designs use the seven-layer model.


    The OSI Basic Reference Model has enjoyed a far greater acceptance than the OSI protocols themselves. There are several reasons for this. OSI's committee-based design process bred overgrown, unimaginative protocols that nobody ever accused of efficiency. Heavy European dominance helped protect their investments in X.25 (CONS is basically X.25 for datagram networks). Perhaps most importantly, X.25 data networks never caught people's imagination like the Internet, which, with a strong history of free, downloadable protocol specifications, has been loath to embrace yet another networking scheme where you have to pay to figure how things work.

    And why should we? OSI's biggest problem is that doesn't really offer anything new. The strongest case for its implementation comes from its status as an "international standard", but we already have a de facto international standard - the Internet. OSI protocols will be around, but its most significant contribution is the philosophy of networking represented by its layered model.

    If the Internet community has to worry about anything, it's the danger of IETF turning into another ISO - a big, overgrown standards organization run by committees, churning out thousands of pages of rubbish, and dominated by big business players more interested in preserving investments than advancing the state of the art.

OSI: The Network Layer

OSI Background

Created by the International Organization for Standardization (ISO) to develop standards for data networking, the Open System Interconnection (OSI) protocols represent an international standardization program that facilitates multivendor equipment interoperability. This paper will familiarize you with common terms and introduce you to the core concepts of open systems networking.

In an OSI network there are four significant architectural entities: hosts, areas, a backbone, and a domain. A domain is any portion of an OSI network that is under common administrative authority. Within any OSI domain, one or more areas can be defined. An area is a logical entity; it is formed by a set of contiguous routers and the data links that connect them. All routers in the same area exchange information about all of the hosts that they can reach.

The areas are connected to form a backbone. All routers on the backbone know how to reach all areas. The term end system (ES) refers to any nonrouting host or node; intermediate system (IS) refers to a router. These terms are the basis for the OSI End System-to-Intermediate System (ES-IS) and Intermediate System-to-Intermediate System (IS-IS) protocols, both of which are discussed later in this document.


OSI Network-Layer Services and Protocols

Two types of OSI network-layer services are available: Connectionless Network Service (CLNS) and Connection-Oriented Network Service (CONS). CLNS uses a datagram data transfer service and does not require a circuit to be established before data is transmitted.

In contrast, CONS does require a circuit to be established before transmitting data. While CLNS and CONS define the actual services provided to the OSI transport layer entities that operate immediately above the network layer, Connectionless Network Protocol (CLNP) and Connection-Oriented Network Protocol (CONP) name the protocols that these services use to convey data at the network layer. CLNP is the OSI equivalent of IP.

Knowledge of OSI network addressing is the next step toward an understanding of routing. OSI network addresses are variable-length entities designed to handle networks of virtually any type and size. OSI addressing encompasses two primary concepts: Network Service Access Points (NSAPs) and Network Entity Titles (NETs).

NSAPs specify usage points at which network-layer services can be acquired. If there are multiple network-layer service users (for example, OSI transport protocols Transport Protocol 3 [TP-3] and Transport Protocol 4 [TP-4]) in a particular ES, then that ES will have multiple NSAP addresses. In contrast, NETs specify network-layer entities or processes. NET entities represent the active agents that operate within the network layer to carry out assigned functions. CLNP is a network-layer entity and would therefore have an associated NET. NSAP and NET structure is very similar; in fact, in an ES, they typically differ only in the last byte, called the selector. The NSAP selector is used to distinguish between logical entities on the host (a transport entity in an ES or a network entity in an IS).

NSAPs are hierarchical addresses consisting of two parts: an initial domain part (IDP) and a domain-specific part (DSP). The IDP consists of authority and format identifier (AFI) and initial domain identifier (IDI) parts. The AFI provides information about the structure and content of the IDI and DSP fields, including whether the IDI is of variable length and whether the DSP uses decimal or binary notation. The IDI further specifies an entity that can assign values to the DSP portion of the address.

When used in an environment where the OSI IS-IS protocol is used for routing, the DSP specifies the area, the station ID within the area, and the selector (port) number. Figure 1 illustrates the NSAP address format for use with IS-IS routing.

Figure 1: NSAP Address Format for Use With IS-IS Routing


OSI Routing Protocols

The OSI protocol suite includes several routing protocols and one router discovery protocol (ES-IS). Although not explicitly a routing protocol, ES-IS is included in this section because it is commonly used with routing protocols to provide end-to-end data movement through an internetwork.

Routing within an area is called level 1 routing; routing between areas is called level 2 routing. An IS that can route only within areas is known as a level 1 IS. A level 1 IS needs to know only about the ESs and other level 1 ISs in its own level 1 area and about the nearest level 2 IS that it can use to forward traffic out of its own area. Figure 2 illustrates the level 1 view of the routing domain.

Figure 2: Level 1 View of the Routing Domain


An IS that can route between areas is called a level 2 IS. A level 2 IS must understand the topology of the areas in which it resides, other level 2 ISs in its routing domain, and how to reach all other level 1 areas. Figure 3 illustrates the level 2 view of the routing domain.

Figure 3: Level 2 View of the Routing Domain


In OSI networks, each ES lives in a particular area. An ES discovers an IS by listening to "hello" messages exchanged as part of the ES-IS protocol (explained in the next section). When an ES wants to send a packet to another ES, it sends the packet to any directly connected Level 1 IS in its area. The IS looks up the destination address and forwards the packet along the best route. If the destination address is an ES in another area, the Level 1 IS sends the packet to the nearest Level 2 IS. Forwarding through Level 2 ISs continues until the packet reaches a Level 2 IS in the destination area. Within the destination area, Level 1 ISs forward the packet along the best path of Level 1 ISs until the destination ES is reached. Figure 4 illustrates the CLNP routing process.

Figure 4: CLNP Routing


Network-layer and routing protocols are both involved in the routing process; these protocols are discussed in the next two sections.


ES-IS is the means through which an ES becomes acquainted with an IS. It is a very simple protocol that makes use of three types of messages: end-system hellos (ESHs), intermediate-system hellos (ISHs), and redirects. An ESH announces the presence of an ES. An ESH is sent by all ESs to a special data-link layer address that all ISs on that network segment listen to. An ISH announces the presence of an IS. An ISH is sent by all ISs to a special data link-layer address that all ESs on t hat segment listen to. Both ESHs and ISHs provide network-layer and data link-layer addresses for the source nodes. An IS sends a redirect to an ES to tell the ES that there is a more efficient path to the destination.

Figure 5 shows an instance in which a redirect message instructs ES1 to send a packet to IS2 instead of IS1. At time 1, ES1 sends a packet to IS1. IS1's optimal path information, compiled with the help of routing protocols, specifies that the packet should be forwarded out the same port as the one from which the packet was received. In this case, the best path is really through IS2, which is directly accessible to ES1. At time 2, after it has forwarded the original packet to IS2, IS1 sends a redirect message to ES1 telling it that IS2 is a better route for datagrams destined for ES2. At time 3, ES1 directs a new packet to IS2.

Figure 5: Redirect Message Example


Where an ES is connected to an IS via a point-to-point connection, ISHs and redirects are not necessary. The ES simply sends the IS periodic ESHs to let the IS know its network-layer address. The IS can then announce to the rest of the network that it can forward datagrams to that ES.

Where an ES is connected to a LAN, more complicated (but still relatively simple) operations are required. All ESs send ESHs, and all ISs send ISHs. ESHs allow ISs to identify all ESs on the LAN; ISHs allow ESs to identify all ISs on the LAN. ESs maintain two caches: an IS cache that contains data link-layer addresses for all ISs on the LAN and a destination cache that contains the network layer/data link-layer address mappings for all destination ESs.

When an ES needs to transmit to a destination ES, it first checks its destination cache. If the destination ES is listed in the cache, the source ES addresses and sends the packet accordingly. If the destination ES is not in the destination cache, the source ES looks in its IS cache. If the IS cache is not empty, the source ES selects an IS from the cache and addresses its packet to that IS. In other words, the ES sends the packet to any directly connected IS in its area. The IS may or may not be the first step along the optimal path to the destination. If the IS determines that the next hop is another IS on the ES's LAN, it forwards the packet to that IS and sends the ES a redirect message. If the IS determines that the destination ES is on the source ES's LAN, it forwards the packet to the destination ES and sends a redirect message to the source ES.

If the IS cache is empty and there is no appropriate entry in the destination cache, the ES sends the packet to a multicast address indicating all ESs. All ESs on the LAN receive the multicast and examine the network-layer address. If an ES sees a network-layer address matching its own, it accepts the packet and sends an ESH to the source ES. All ESs without a matching network-layer address discard the packet. Figure 6 shows a flowchart of ES-IS operations.

Figure 6: ES-IS Operations



IS-IS is the standard intradomain routing (routing within a domain) protocol in the OSI protocol suite. It is a link state protocol, meaning that it calls for each IS to "meet" its neighbor ISs and proliferate information about the state of each neighbor link to all other ISs. Each IS stores these link state advertisements (LSAs) and can compute optimal routes to each ES from the complete topological knowledge they yield. IS-IS is a cost-based routing protocol. In other words, each IS that runs ISIS must be configured with a cost for each attached link. LSAs include costs to allow straightforward calculation of optimal routes.

LSA distribution is a critical part of IS-IS operations. All ISs must receive LSAs from all other ISs, or topological information is not complete. LSAs are flooded to all IS ports except those on which the LSA was received. LSAs also include remaining lifetime and sequence number fields. ISs use these fields to help determine whether received LSAs might be duplicates, too old, or otherwise inappropriate. ISs send LSAs at regular intervals and when the following special events occur:



  • When an IS discovers that its link to a neighbor is down


  • When an IS discovers that it has a new neighbor


  • When an IS discovers that the cost of a link to an existing neighbor has changed


Once LSAs have been distributed appropriately, an algorithm must be run to compute optimal paths to each ES. The algorithm most often chosen for this task is the Dijkstra algorithm. The Dijkstra algorithm iterates on the length of a path, examining the LSAs of all ISs working outward from the host IS. At the end of the computation, a connectivity tree yielding the shortest paths (including all intermediate hops) to each IS is formed.

When a level 1 IS receives a packet, it examines the destina-tion area address in the network-layer header. If this address matches the level 1 IS's area address, the IS routes based on the ID portion of the address. Otherwise, the IS forwards the packet to the closest level 2 IS. Within an area, a level 1 IS receiving a packet will look in its routing table to see if an entry exists for the destination ES. If an entry exists, the IS forwards the packet appropriately. If an entry does not exist, the packet is either dropped or forwarded to a default IS designated for such purposes.

Integrated IS-IS

Integrated IS-IS is an implementation of the IS-IS protocol for routing multiple network protocols. Today, Integrated ISIS standards exist that support CLNP and IP protocols.

Like all integrated routing protocols, Integrated IS-IS calls for all routers to run a single routing algorithm. LSAs sent by routers running Integrated IS-IS include all destinations running either IP or CLNP network-layer protocols. Protocols such as the Address Resolution Protocol (ARP) and the Internet Control Message Protocol (ICMP) for IP and the ES-IS protocol for CLNP still must be supported by routers running Integrated IS-IS.

Standard IS-IS packets must be modified to support multiple network-layer protocols. IS-IS packet formats were designed to support the addition of new fields without a loss of compatibility with nonintegrated versions of IS-IS. The fields that are added to IS-IS to support integrated routing:



  • Tell ISs which network-layer protocols are supported by other ISs


  • Tell ISs whether end stations running other protocols can be reached


  • Include any other required network-layer, protocol-specific information


Most internetworks running Integrated IS-IS support three different IS configurations: those running only IP, those running only CLNP, and those running both IP and CLNP. ISs running only one of the two protocols ignore information concerning the other protocol. In fact, such ISs will refuse to recognize other ISs as neighbors unless they have at least one protocol in common. ISs running both protocols can and will become neighbors with the other IS types.

Interdomain Routing

Interdomain routing (routing between domains) is philosophically different from intradomain routing; hence the separation of these protocols into a new category. The primary philosophical difference is that intradomain routing typically assumes a trusted environment in which constant communication within a single organization occurs. By contrast, interdomain routing often occurs between different organizations that want distinct and essential controls over information sent and received. Communication often is not as frequent and typically is subjected to additional scrutiny.

The simplest type of interdomain routing is static routing. In static routing systems, routes between domains are manually established and deestablished. Because it involves much more administrative overhead than dynamic routing, static routing is most often used when very few routes must be maintained.


Cisco's OSI Implementation

Cisco Systems was the first company to support dynamic interdomain routing within OSI environments. Currently, Cisco's OSI implementation provides both static and dynamic packet forwarding and routing and adheres to relevant ISO protocol specifications, including:


  • ISO 8473 (CLNP)
  • ISO 8348 (CLNS)
  • ISO 8348/Ad2 (NSAP addressing)
  • ISO 8208 (packet-level CONS)
  • ISO 8802-2 (frame-level services on LAN media)
  • ISO 8881 (CONS over ISO 8802-2)
  • ISO 7776 (Link Access Procedure, Balanced)
  • ISO 9542 (ES-IS)
  • ISO 10589 (IS-IS)


Integrated IS-IS extensions for IP as defined in RFC 1195 also are supported. Users can perform CLNP routing over Ethernet, Fiber Distributed Data Interface (FDDI), Token Ring, and serial line networks. Cisco's OSI implementation is also compliant with the United States Government Open Systems Interconnection Profile (US-GOSIP) Version 2 specification, and Cisco is the first router vendor to be certified and registered with the National Institute of Standards and Technology (NIST).


The ability of protocol implementations to work with other implementations of the same protocol (often called interoperability) is a critical feature of any OSI implementation. Cisco's OSI implementation is highly interoperable, having been proven so in OSI interoperability demonstrations with AT&T, Data General, DEC, Frontier Technologies, HP, IBM, Intel, NCR, Novell, OSIWare, Spider, Sun, Tandem, Touch, Unisys, and Wollongong. Cisco routers are able to interoperate with equipment from each of these vendors, a fact that is particularly noteworthy in the case of AT&T, which many people believe has the largest installed base of CLNP end systems. Cisco also participated successfully in a European pilot demonstration of CLNP-protocol-based inter-domain routing (see Figure 7).

Figure 7: European CLNP Pilot


As networks grow larger, administrative control of network access becomes increasingly important. Such control is particularly important in OSI networks, which were designed to provide a rich feature set in support of large, heterogeneous networks. Cisco provides many features designed to enhance administrative control of OSI networks. These features are described in the next two sections.

Route Redistribution

Cisco routers support information sharing between multiple routing protocols and between multiple instances of the same routing protocol. Such sharing is known as route redistribution and is supported among all of Cisco's routing protocols. Route redistribution ensures that routing can occur in networks that run multiple routing protocols.

Over time, Cisco has enhanced its route redistribution support to improve administrative control over methods by which routing information moves between routing domains. To ease configuration of route redistribution, Cisco created route maps. A route map is a set of instructions that tell the router how routing information is to be redistributed between two routing protocols or between two instances of the same routing protocol.

Route maps contain an ordered list of match conditions. Each item in the list is matched in turn against any route that is a candidate for redistribution. When a match is found, an item performs an action associated with that match. The route can be permitted (redistributed) or not permitted (not redistributed), but the action also can mandate the use of certain administrative information (called route tags) that can be attached to routing data to augment routing decisions. Route maps also can mandate the use of certain route metrics or route types and even can modify the route's destination in outgoing advertisements. Where different networks share similar redistribution needs, network administrators can conserve memory and save time by using the same route map for more than one protocol pair.

Route maps give network managers unprecedented control over the ways that routing information is propagated in their networks. Redistribution configuration files that use route maps are easy to create, understand, and modify. Using route maps, Cisco users are able to build larger, more robust, reliable networks, with better traffic control than ever before.

OSI Filtering

Cisco offers advanced filtering features that provide additional administrative control of traffic flow in an OSI network. There are four components to a Cisco OSI filter:


  • Address templates
  • Template aliases
  • Filter sets
  • Filter expressions

Address templates are applied to NSAP addresses to provide flexible filtering based on all or a portion of the address. The simplest template is an address itself. Wildcard notation can be used in an address template to denote a match with anything. Address prefix and suffix matching is also possible. These features are particularly useful with NSAP's variable-length addresses. Both bit- and byte-level matching is also possible.

Because NSAP addresses can be relatively lengthy, address templates sometimes can become unwieldy. In these cases, address templates can be assigned names called template aliases. Template aliases allow repetitive use of address templates without concern for user typing mistakes and other problems. Aliases are more meaningful to human administrators than alphanumeric NSAP addresses are, so it is easier to look at a template alias and know what it denotes. Finally, when an address changes, administrators can simply modify the template alias.

A filter set is a named collection of address templates with associated permit/deny indications. Filter expressions are Boolean combinations of filter sets, other filter expressions, and certain logical operators (AND, OR, XOR, and NOT). Filter expressions allow filtering combinations not possible with simple filter sets. Further, they permit matches on source address. Filter sets and filter expressions can be applied to inbound or outbound CLNP datagrams, IS-IS adjacencies (IS-IS routers that are on the same network segment), ISO-IGRP adjacencies (ISO-IGRP routers that are on the same segment), ES-IS adjacencies (ESs and ISs that are on the same segment), and route redistribution. Together, they provide an extensive set of OSI filtering capabilities designed to ease network administration while saving time and reducing the possibility of configuration errors.

Integrated and Interdomain Routing

In addition to Cisco's support of Integrated IS-IS, its standard IS-IS implementation still can run simultaneously in the same router with other routing protocols. For example, users can use IS-IS to route CLNP and Enhanced IGRP to route IP. Both routing processes (IS-IS and Enhanced IGRP) operate autonomously in any router. This approach, which is often called ships-in-the-night routing, creates multiple logical routers within a single physical router. Physical routers analyze all incoming datagrams, identify the indicated network-layer protocol in each, and assign the packet to the appropriate logical router for processing.

In addition to Integrated IS-IS, Cisco continues to offer its ISOIGRP implementation. ISO-IGRP is another integrated routing protocol that accomplishes the same purpose as Integrated IS-IS. The primary difference between the two is that ISO-IGRP is a distance-vector protocol, whereas Integrated IS-IS is a link-state protocol.

ISO-IGRP also gave Cisco the distinction of being the first company to offer dynamic interdomain routing for CLNP. An ISO-IGRP network can connect two or more IS-IS domains. Route redistribution ensures that IS-IS routes can pass through the "foreign" environment without information loss. Static routes provide users with yet another way to effect inter-domain routing in CLNP environments.

Other Features

To provide monitoring and troubleshooting capability, the Cisco CLNP implementation supports both ping and trace commands. Ping commands are used to test the reachability of remote nodes. Trace commands allow an administrator to discover the path a packet takes when it traverses the network. In addition to these helpful and often-used commands, the show and debug commands display such information as the contents of the routing cache, lists of ES and IS neighbors, traffic statistics, and significant CLNP event occurrences. These capabilities constitute the industry's most robust set of CLNP monitoring and diagnostic features and, for the user, they translate into less time spent debugging network problems.

Routing paths through a network can be of equal cost. This is particularly common in the case of serial interfaces, because the speed of the lines is often the same. Rather than simply using one of two paths and subjecting traffic on that line to possible delay, Cisco supports per-packet load sharing between equal-cost paths. In other words, packets can be multiplexed in a round-robin fashion on up to four equal-cost paths. This technique provides better response through superior bandwidth utilization.

X.500 is the OSI name service protocol. Since X.500 implementations are not yet commonplace, Cisco offers system administrators a static name-to-address translation capability. This feature allows administrators to use convenient names rather than 20-byte NSAP addresses in all router commands. Administrators provide the router with name/NSAP address pairs, which are used for name-to-address translation.

Domain Name System (DNS) support for NSAP addresses, as defined in RFC 1348, is currently in transition. Cisco is tracking the transition and will support the standard that emerges. When the standard is complete, administrators will simply load the name-to-NSAP mapping into a DNS database. Thereafter, when a name that is not in the NSAP name database is encountered, a DNS lookup is executed automatically.

X.25 Switching

Cisco's support of ISO 8208 (CONS) provides the ability to extend X.25 switching to different media, such as Ethernet, Token Ring, and FDDI. CONS specifies the implementation of packet-level X.25 over the Logical Link Control 2 (LLC2) connection-oriented data link service on LAN media. LAN-based OSI nodes can be connected both to one another and to remote OSIbased DTE devices via X.25 public data networks (PDNs) or point-to-point lines. Figure 8 shows examples of each of these Cisco CONS configurations.

Figure 8: Example Cisco CONS Configurations



Cisco offers a feature-rich, robust, highly compatible, time-proven OSI routing solution that will continue to support multivendor equipment interoperability. CLNP and CONP are 2 of over 20 protocols that can be simultaneously routed and bridged by any of Cisco's routers. Cisco enriches the implementation of each of these protocols with value-added features that provide ease of use, security, enhanced management, and optimized performance for networks ranging in size from PC LAN environments to very large-scale, enterprise-wide networks.

OSI Layer II

  Services What We Offer Areas Covered Rates & Discounts
Estimates Maintenance Plans Links Phone Tech Support
About Us Refer A Friend Why Us? Reference Dictionaries Tutorials
Privacy Policy Service Protocol Disclaimer Contact Us

Web Page Designed By  ADAM
Copyright 1981 - 2008
MINDPRIDE CONSULTING All rights reserved.
Revised: November 21, 2007