RFC 2843

Proxy-PAR

πŸ“… published May 2000, from ietf

Proxy-PAR (RFC 2843) πŸŽ€

Okay bestie, let's get into it πŸ’– This doc is by P. Droz from IBM and T. Przygienda from Siara 🧚 It's Informational (so it's giving info, not a standard 🫢), dated May 2000, and it doesn't obsolete or update anything 🌈

Status of this Memo ✨

This memo is here to give info to the Internet community πŸ’… It does not specify an Internet standard of any kind, and distribution is unlimited πŸ¦‹

Copyright (C) The Internet Society (2000). All Rights Reserved. 🌸

Abstract πŸ”₯

Okay so Proxy-PAR is a minimal version of PAR (PNNI Augmented Routing) πŸ’– It lets ATM-attached devices talk to PNNI devices without having to fully support PAR 🫢 The client side is way simpler than the server side, so it's easier to implement and deploy fast ✨ No cap, that's iconic πŸ‘‘

The point of Proxy-PAR is to let non-ATM devices use the flooding mechanisms PNNI already has for registering and automatically discovering services that ATM-attached devices offer πŸ¦‹ The first version of PAR mostly deals with protocols available in IPv4, but it also has a generic interface to access PNNI flooding 😭 On top of that, Proxy-PAR-capable servers can filter by VPN IDs [1], IP protocols, and address prefixes πŸ’… So for example, routers in a certain VPN running OSPF can find their OSPF neighbors on the same subnet. Main character energy πŸŽ€ The whole thing runs on a registration/query setup, where devices register their services and then query for services and protocols other clients registered 🧚

1 Introduction 🌷

Okay, history time πŸ“œ In June of 1996, the ATM Forum accepted the "Proxy-PAR contribution as minimal subset of PAR" as a work item of the Routing and Addressing (RA) working group, which used to be called the PNNI working group [2]. The PAR [3] spec is where you find the full protocol description, including state machines and packet formats πŸ€“

This doc is just here to give general info about Proxy-PAR πŸ’– If you want the detailed protocol description, go to [3] 🫢

So Proxy-PAR is a protocol that lets various ATM-attached devices (ATM and non-ATM devices both πŸ™ˆ) interact with PAR-capable switches to swap info about non-ATM services, without having to run PAR themselves ✨ The client side is much simpler in terms of implementation complexity and memory requirements than a full PAR instance, which should make it easy to put on existing IP devices like IP routers 🌈 Clients can also use Proxy-PAR to register different non-ATM services and the protocols they support πŸ’œ

Now here's the tea β˜• The protocol was deliberately left out of ILMI [4] 😭 Why? PAR info passed in the protocol is super complex, and Proxy-PAR is meant only for integrating non-ATM protocols and services πŸ’€ Also, a device running Proxy-PAR doesn't have to run ILMI or UNI signalling, though it normally will πŸ¦‹

Proxy-PAR doesn't say how a client should use the info it gets to set up connectivity 🫣 For example, OSPF routers that find each other through Proxy-PAR could build a full mesh of P2P VCs using RFC2225 [5], or use RFC1793 [6] to talk to each other. LANE [7] or MARS [8] could also do the job. πŸ”₯ Guidelines for how a given protocol can use Proxy-PAR are supposed to come from the right working group or standards body for that protocol πŸ’… And there's an additional RFC [9] about running OSPF together with Proxy-PAR, published alongside this doc πŸŽ€

The protocol can do ATM address resolution for IP-attached devices πŸ’– but that can also be done by other protocols under IETF work, like [10] ✨ The main goal is still automatic detection of devices over an ATM cloud in a distributed way, which skips the usual pitfalls of server-based solutions 🧚 And finally, Proxy-PAR complements and coexists with the IETF work on server detection through ILMI extensions [11,12,13] πŸ«ΆπŸ’œ

2. Proxy-PAR Operation and Interaction with PNNI ✨

okay bestie, so the protocol is asymmetric 🫢 It has two halves: a discovery part and a query/registration part. Discovery is basically the existing PNNI Hello protocol, and it's what starts and keeps the chat going between adjacent clients and servers. Registration and updates only kick in once a Proxy-PAR adjacency is up.

The client registers its own services by sending registration messages to the server, and it gets the info it wants by sending query messages. If the client's set of registered protocols changes, it has to re-register πŸ’… If it wants to withdraw everything, it registers a null set of services, and boom, gone.

The server side does NOT push new info to the client, and it doesn't keep any record of what the client has already received. The client is the one in charge of updating and refreshing its info, finding new clients, and updating what it already knows about other clients, by sending queries and registrations at sensible intervals. This keeps the protocol simple, but it assumes the client won't store or ask for huge amounts of data πŸ™ˆ

The server's main job is to flood the registered info through the PNNI cloud so potential clients can find each other πŸ¦‹ The Proxy-PAR server also has filtering functions for VPNs and IP subnetting. It's assumed that services get advertised by a fairly small number of clients and stay pretty stable, so polling and refresh intervals can be relatively long 🌸

The Proxy-PAR extensions depend on PNNI flooding doing its thing. When a client registers or re-registers a service, it attaches an abstract membership scope to it. The server maps that scope to a PNNI routing level, and that mapping is what limits the flooding. The best part is that the PNNI routing level can change without the client needing to be reconfigured ✨ The server can also set up the mapping table so a client only floods up to a certain level. Nodes in the PNNI network look at the scope attached to the info when they flood it, which is so iconic πŸ‘‘

This means you can use the PNNI routing hierarchy by announcing different protocols at different levels. For example, OSPF could run inside certain peer groups, while BGP runs between the peer groups that are running OSPF. Lining up non-ATM protocols with the PNNI hierarchy like this can seriously boost the scalability and flexibility of the Proxy-PAR service πŸš€ Figure 1 helps you picture the scenario. For this topology, these registrations get made:

+-+
| | PNNI peer group    # PPAR capable  @ PNNI capable  * Router
+-+                      switch          switch


               Level 40
               +---------------------------+
               |                           |
               |                           |
               |      @ ---- @ ---- @      |
               |      |             |      |
               +----- | ----------- | -----+
                      |             |
       Level 60       |             |
       +------------- | ---+    +-- | --------------+
       |              |    |    |   |               |
  R1* ------#-P1------@    |    |   @---------P3-#------- * R3
       |              |    |    |   |               |
  R2* ------#-P2------+    |    |   +---------P4-#------- * R4
       |                   |    |                   |
       +-------------------+    +-------------------+

   Figure 1: OSPF and BGP scalability with Proxy-PAR autodetection
                           (ATM topology).
  1. R1 registers OSPF protocol as running on the IP interface 1.1.1.1 and subnet 1.1.1/24 with scope 60
  2. R2 registers OSPF protocol as running on the IP interface 1.1.1.2 and subnet 1.1.1/24 with scope 60
  3. R3 registers OSPF protocol as running on the IP interface 1.1.2.1 and subnet 1.1.2/24 with scope 60
  4. R4 registers OSPF protocol as running on the IP interface 1.1.2.2 and subnet 1.1.2/24 with scope 60

and

  1. R1 registers BGP4 protocol as running on the IP interface 1.1.3.1 and subnet 1.1/16 with scope 40 within AS101
  2. R3 registers BGP4 protocol as running on the IP interface 1.1.3.2 and subnet 1.1/16 with scope 40 within AS100

Quick note: the real PNNI routing levels are 60 and 40, and they're shown here just for simplicity πŸŽ€ In real life, clients would use the abstract membership scopes "local" and "local+1" instead. All of the registered info sits in the same VPN ID too.

Table 1 shows how the registrations get distributed and who can see them, and whether the routers don't just see the info but actually use it πŸ‘€ Once the protocols converge and the adjacencies and sessions are built, the overlying IP topology looks like Figure 2:

                 AS101         DMZ      AS100
               #########                ##########
                       #                #
           |           #   |            #            |
           +-- R1 ---------+            #       R4 --+
           |           #   |            #            |
           |           #   | BGP4 on    #    OSPF on |
           | OSPF on   #   | subnet     #     subnet |
           | subnet    #   | 1.1/16     #   1.1.2/24 |
           | 1.1.1/24  #   |            #            |
           |           #   +------------------- R3 --+
           +-- R2      #   |            #            |
           |           #                #
               #########                ##########

   Figure 2: OSPF and BGP scalability with Proxy-PAR autodetection
                            (IP topology).

Put another way: if the scope of the Proxy-PAR info says it needs to go beyond the boundaries of the peer group, the peer group leader collects that info and passes it up to a higher layer of the PNNI hierarchy 🧚 Here's the catch. Apart from scope values, you usually can't assume anything about the info being distributed (IP addresses bound to AESAs, for instance, aren't assumed to line up with them in any way), so the info can't be summarized. That's why careful handling of scopes is a must if you want to keep the scalability we talked about above πŸ’œ

                   Reg#   1. 2. 3. 4. 5. 6.
                  Router#
                -----------------------------
                  R1      R  U        R  U
                  R2      U  R        Q  Q
                  R3            R  U  R  U
                  R4            U  R  Q  Q


                    R registered
                    Q seen through query
                    U used (implies Q)

    Table 1: Flooding scopes of Proxy-PAR registrations.

3. Proxy-PAR Protocols πŸŽ€

3.1. Hello Protocol

The Proxy-PAR Hello Protocol is closely related to the Hello protocol specified in [2] πŸ’– It uses the same packet header and the same version negotiation methods. To keep things simple, the states that don't matter to Proxy-PAR were removed from the original PNNI Hello protocol. The whole point of the Proxy-PAR Hello protocol is to establish and maintain a Proxy-PAR adjacency between client and server that can handle exchanging registration and query messages.

If the protocol runs across multiple parallel links between the same server and client pair, each registration and query session is tied to one specific link. The client and the server are both responsible for assigning registration and query sessions to the different communication instances 🫢 Proxy-PAR can run at the same granularity as ILMI [4], which lets it support virtual links and VP tunnels ✨

On top of the regular PNNI Hello, the Proxy-PAR Hellos that travel from server to client also tell the client how long the server will keep the registered info (the lifetime). The client needs to pull that interval out of the Hello packet and set its refresh interval to something below it. Otherwise, the server might age out the registered info, and nobody wants that 😭

3.2. Registration/Query Protocol

The registration and query protocols let a client announce the protocols it supports and learn about the protocols supported by other clients πŸ¦‹ Every query and registration operation is started by the client. The server never tries to push info to the client. It's the client's job to register and refresh the set of protocols it supports, and to re-register them whenever something changes. Same deal with queries: if the client wants the latest info, it has to ask the server at sensible intervals πŸ’… It's also important to note that neither the client nor the server is supposed to cache any state about the info stored on the other side.

Registered info is tied to an ATM address and a scope inside the PNNI hierarchy. From the IP point of view, all info is tied to a VPN ID, an IP address, a subnet mask, and an IP protocol family. Each VPN is a completely separate IP address space, so no mixing allowed 🌈 For example, <A, 194.194.1.01, 255.255.255.0, OSPF> describes an OSPF interface in VPN A. You can also register more detailed info about the protocol itself, like the OSPF area ID or the router priority. But the Proxy-PAR server only takes the ATM and IP-specific info into account when it retrieves queried info. Protocol-specific info is never looked at by a Proxy-PAR server πŸ™ˆ

3.2.1. Registration Protocol

The registration protocol lets a client register the protocols and services it supports. Every protocol is associated with a specific AESA and membership scope in the PNNI hierarchy. For the default scope, implementations should pick the local scope of the PNNI peer group ✨ That way, manual configuration can be skipped unless the info has to cross PNNI peer group boundaries. PNNI handles the correct flooding, either inside the local peer group or across the hierarchy.

The registration protocol lines up with the standard initial topology database exchange protocol used in link-state routing protocols, as far as possible πŸ”₯ It uses a window size of one. Only one information element is registered at a time, and it must be acknowledged before a new registration packet can be sent. The protocol uses the 'initialization' and 'more' bits the same way PNNI and OSPF do. Any registration on a link unconditionally overwrites all the registration data previously received on that same link. The server uses a return code to tell the client whether the registration worked πŸ’œ

Apart from the IP-related info, the protocol also gives you a generic interface to PNNI flooding. Through so-called System Capabilities Information Groups, other info can be distributed, and that's great for proprietary or experimental implementations 🌸

3.2.2. Query Protocol πŸ”

okay so the query protocol is how a client finds out about services that other clients have registered πŸ‘€ The client asks for services inside a specific membership scope, VPN, and IP address prefix. The client is always the one doing the asking. The server never pushes info at the client, no unsolicited drops πŸ™…β€β™€οΈ If the client wants to filter results by service-specific stuff like BGP AS, it must parse and interpret what it gets back itself. And the server never looks beyond the IP scope, so it's not peeking past that boundary 🫣

The generic interface to the flooding works in a similar way to the registration protocol 🌸

4. Supported Protocols 🧚

okay so Table 2 shows which protocols are included right now πŸ“‹ For the ones marked 'yes', there's extra info specified that's helpful for them to work. But honestly, a lot of protocols don't need any extra info. Knowing they're supported and which addresses they're bound to is enough, and that's giving simplicity πŸ’–

If you want to pass along other info in an experimental way, use the generic information element πŸ§ͺ✨

5. VPN Support πŸŽ€

okay this part is my favourite 😭 To set up virtual private networks, all the info distributed via PAR can be scoped under a VPN ID [1]. Based on that ID, individual VPNs get separated from each other. Inside a given VPN, you can make further distinctions using IP-address-related info and/or protocol type. Iconic organisation, no cap πŸ—‚οΈ

The best VPN support usually happens when Proxy-PAR is used between the client and the server, because then the real PNNI topology stays hidden from the client πŸ™ˆ The PAR-capable server translates the abstract membership scope into the real PNNI routing level. So the real PNNI topology stays hidden and the server can apply restrictions in the PNNI scope. For example, the server could map the membership scope "global" to the highest level peer group that a particular VPN has access to. That makes membership scopes work like a hierarchy inside a VPN 🌈 And the best part: a network provider can change that mapping without reconfiguring any clients. Main character energy for the provider πŸ‘‘

For more secure VPN setups, you'll also need VPN ID filters on the server side πŸ” With those, a client can be restricted to a certain set of VPN IDs (typically just one). The server then only allows queries and registrations from clients in the allowed VPNs. This stops an attached client from finding devices outside its own VPN, which is so important 😀 There's even room to restrict things further by not allowing wildcard queries from a client. Security-wise, some protocols have their own methods, so PAR is only used to discover the counterparts. For example, OSPF has an authentication that's used during OSPF operation. So even if two wrong partners find each other, they still won't communicate, because they can't authenticate each other πŸ™…β€β™€οΈπŸ”’

                   Protocol    Additional Info

                 -------------------------------
                   OSPF              yes
                   RIP
                   RIPv2
                   BGP3
                   BGP4              yes
                   EGP
                   IDPR
                   MOSPF             yes
                   DVMRP
                   CBT
                   PIM-SM
                   IGRP
                   IS-IS
                   ES-IS
                   ICMP
                   GGP
                   BBN SPF IGP
                   PIM-DM
                   MARS
                   NHRP
                   ATMARP
                   DHCP
                   DNS               yes

Table 2: Additional protocol information carried in PAR and PPAR. πŸ“Š

The VPN ID used by PAR and Proxy-PAR lines up with the VPN ID used by other protocols from the ATM Forum and IETF 🀝 Structurally, the VPN ID has two parts: a 3-byte-long OUI plus a 4-byte index 🧩

6. Interoperation with ILMI based Server Discovery πŸ›°οΈ

okay so PAR can complement server discovery via ILMI, as specified in [11,12,13] πŸ’« It can also be used to flood info across the PNNI network. For that to happen, a server has to register with a PAR-capable device. That can be done through Proxy-PAR or a direct PAR interaction, and manual configuration is possible too πŸ› οΈ For example, the ATMARP server could register its service via Proxy-PAR. A direct interaction with PAR is required to provide an appropriate flooding scope, so don't skip that part πŸ™

A PAR-capable device that has the additional MIB variables in the Service Registry MIB can set those variables while it's getting info via PAR πŸ“¦ Everything it needs is either already in PAR or is static, like the IP version ✨

7. Security Consideration πŸ”

okay real talk, the Proxy-PAR protocol doesn't have its own security concepts πŸ₯Ί PAR extends PNNI, so it gets all the security features that come with PNNI πŸ’ͺ The protocol is mainly used for automatically discovering peers for certain protocols. After discovery, the security concepts of each individual protocol kick in for the bring-up πŸš€ As the VPN support section explained, the only security considerations are on the server side, where you can implement access filters for VPN IDs and configure restrictive membership scope mappings. Guard that server like it's your diary πŸ“”πŸ”’

8. Conclusion 🎬

So this document covers the basic functions of Proxy-PAR, which was specified within the ATM Forum body πŸ›οΈ The main purpose is to provide automatic detection and configuration of non-ATM devices over an ATM cloud ☁️

In the future, support for more protocols and address families may be added, which would widen where Proxy-PAR can be used 🌍✨

9. Bibliography πŸ“š

  • [1] Fox, B. and B. Gleeson, "Virtual Private Networks Identifier", RFC 2685, September 1999.
  • [2] ATM-Forum, "Private Network-Network Interface Specification Version 1.0." ATM Forum af-pnni-0055.000, March 1996.
  • [3] ATM-Forum, "PNNI Augmented Routing (PAR) Version 1.0." ATM Forum af-ra-0104.000, January 1999.
  • [4] ATM-Forum, "Interim Local Management Interface, (ILMI) Specification 4.0." ATM Forum af-ilmi-0065.000, September 1996.
  • [5] Laubach, J., "Classical IP and ARP over ATM", RFC 2225, April 1998.
  • [6] Moy, J., "Extending OSPF to Support Demand Circuits", RFC 1793, April 1995.
  • [7] ATM-Forum, "LAN Emulation over ATM 1.0." ATM Forum af-lane-0021.000, January 1995.
  • [8] Armitage, G., "Support for Multicast over UNI 3.0/3.1 based ATM Networks", RFC 2022, November 1996.
  • [9] Droz, P., Haas, R. and T. Przygienda, "OSPF over ATM and Proxy PAR", RFC 2844, May 2000.
  • [10] Coltun, R., "The OSPF Opaque LSA Option", RFC 2328, July 1998.
  • [11] Davison, M., "ILMI-Based Server Discovery for ATMARP", RFC 2601, June 1999.
  • [12] Davison, M., "ILMI-Based Server Discovery for MARS", RFC 2602, June 1999.
  • [13] Davison, M., "ILMI-Based Server Discovery for NHRP", RFC 2603, June 1999.

Authors' Addresses βœ‰οΈ

Patrick Droz
IBM Research
Zurich Research Laboratory
Saumerstrasse 4
8803 Ruschlikon
Switzerland

EMail: dro@zurich.ibm.com


Tony Przygienda
Siara Systems Incorporated
1195 Borregas Avenue
Sunnyvale, CA 94089
USA

EMail: prz@siara.com

Copyright (C) The Internet Society (2000). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement 🫢

Funding for the RFC Editor function is currently provided by the Internet Society πŸ’œ

πŸ“¦ where this page comes from