RFC 2129

Toshiba's Flow Attribute Notification Protocol (FANP) Specification

๐Ÿ“… published April 1997, from ietf

Part 1 of 4: RFC 2129 ๐ŸŒˆโœจ

Toshiba's Flow Attribute Notification Protocol (FANP) Specification

Okay bestie, the title block is giving authors ๐Ÿ’…. The authors are K. Nagami, Y. Katsube, Y. Shobatake, A. Mogi, S. Matsuzawa, T. Jinmei, and H. Esaki, all from the Toshiba R&D Center. It's an Informational doc, dated April 1997 ๐ŸŽ€. There's no Obsoletes or Updates line in the title block, so it isn't replacing or changing any other RFC.

Status of this Memo โœจ

This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind. Distribution of this memo is unlimited.

Abstract ๐Ÿฆ‹

Okay so this memo is all about Flow Attribute Notification Protocol (FANP), which is a protocol between neighbor nodes for managing cut-through packet forwarding ๐Ÿ’–. With cut-through forwarding, a router doesn't have to do the usual IP packet processing on the packets it gets. FANP tells the neighbor node about the mapping between a datalink connection and a packet flow, and helps a pair of nodes manage that mapping together ๐Ÿซถ.

Using FANP, routers (for example CSR, which is Cell Switch Router) can forward incoming packets based on their datalink-level connection identifiers, skipping the usual IP packet processing. It's so efficient it's almost rude ๐Ÿ’…. The design policy of FANP is:

  • (1) soft-state cut-through path (Dedicated-VC) management
  • (2) protocol between neighbor nodes instead of end-to-end
  • (3) applicable to any connection oriented datalink platform

1. Background โœจ

Okay, so, the scalability requirement is the reason connection oriented (CO) datalink platforms, like ATM and Frame Relay, are going to be used alongside connection less (CL) datalink platforms, like Ethernet and FDDI ๐ŸŒธ. One of the best features of a CO datalink is that it has a datalink-level connection identifier. In a CO datalink, we can set up multiple virtual connections (VCs), each with its own VC identifier, between the nodes ๐Ÿงš.

Here's the main idea. When we aggregate packets that have the same direction (for example, the same destination IP address) into a single VC, we can forward those packets in the VC without any IP processing. With this setup, routers can figure out which node is the next hop for the packets just by looking at the VC identifier ๐Ÿ’œ. CSRs [1] can forward incoming packets using an ATM switch engine and bypass the conventional IP processing. Based on the ingress VPI/VCI value and the ingress interface information, the CSR works out the egress interface and the egress VPI/VCI value ๐Ÿ”ฅ.

In order to set up the cut-through packet forwarding state, a pair of neighbor nodes have to share the mapping information between the packet flow and the datalink VC ๐ŸŽ€. That's where FANP (Flow Attribute Notification Protocol) comes in. This memo describes FANP as the protocol that configures and manages the cut-through packet forwarding state ๐Ÿ‘‘.

2. Protocol Requirements and Future Enhancement ๐Ÿฆ‹

2.1 Protocol Requirements

Here are the protocol requirements for FANP ๐Ÿ’…:

  • (1) Applicable to various types of CO datalink platforms
  • (2) Available with various connection types (i.e., SVC, PVC, VP)
  • (3) Robust operation

The system should operate correctly even under the following conditions.

  • (a) VC failure

Some systems can detect VC failure as a function of the datalink (for example, the OAM function in ATM). However, we can not assume all nodes in the system can detect VC failure. The system has to operate correctly, assuming that every node can not detect VC failure ๐Ÿ˜ญ.

  • (b) Message loss

Control messages in FANP may be lost. The system has to operate correctly, even when some control messages are lost ๐Ÿ™ˆ.

  • (c) Node failure

A node may be down without any explicit notification to its neighbors. The system has to operate correctly, even with node failure ๐Ÿ’€.

Though FANP is not the protocol only for ATM, the following discussion assumes that the datalink is an ATM network ๐ŸŒˆ.

2.2 Future Enhancement

These are the future enhancements that are still to be done โญ:

  • (1) Aggregated flow

In this memo, we define the flow as containing a source and destination IP address. Since this may require many VC resources, we also need a new definition of aggregated flow that includes several end-to-end flows. The concrete definition of the aggregated flow is for future study ๐Ÿ“.

  • (2) Providing multicast service
  • (3) Supporting IP level QOS signaling like RSVP
  • (4) Supporting IPv6

3. Terminology and Definition ๐Ÿงš

  • VCID (Virtual Connection IDentifier)

Since VPI/VCI values at the origination and the termination points of a VC (and VP) may not be the same, we need an identifier that uniquely identifies the datalink connection between neighbor nodes. We define this identifier as a VCID. Right now, only one type of VCID is defined. This VCID contains the ESI (End System Identifier) of a source node and the unique identifier within a source node ๐Ÿ’–.

  • Flow ID (Flow IDentifier)

An IP level packet flow is identified by some parameters in a packet. Right now, only one type of flow ID is defined. This flow ID contains a source IP address and a destination IP address. Note that the flow ID used in this specification is not the same as the flow-id specified in IPv6 ๐Ÿ™ƒ.

  • Cut-through packet forwarding

Packets are forwarded without any IP processing at the router, using datalink level information (e.g., VPI/VCI). Internetworking level information (e.g., destination IP address) is mapped to the corresponding datalink-level identifier by using FANP โœจ.

  • Hop-by-Hop packet forwarding

Packets are forwarded using IP level information, like conventional routers. In ATM, cells are reassembled into packets at the router so the IP header can be analyzed ๐ŸŽ€.

  • Default-VC

The Default-VC is used for hop-by-hop packet forwarding. Cells received from the Default-VC are reassembled into IP packets, and conventional IP processing is performed on those packets. The encapsulation over the Default-VC is LLC for routed non-ISO protocols defined by RFC1483 [3] ๐Ÿฆ‹.

  • Dedicated-VC

The Dedicated-VC is used for the specific IP packet flow identified by the flow-ID. When the flow-ID for an incoming VC and an outgoing VC are the same at a CSR, it can forward the packets belonging to the flow through cut-through packet forwarding. The encapsulation over the Dedicated-VC is LLC for routed non-ISO protocols defined by RFC1483 [3] ๐ŸŒธ.

  • Cut-through trigger

When a FANP capable node receives a trigger packet, it tries to establish a Dedicated-VC and to notify the mapping information between the Dedicated-VC and the IP packet flow that the received trigger packet belongs to. Trigger packets are defined by the port-ID of TCP/UDP, along with the local policy of each FANP capable node. In general, they would be the port-IDs of sessions with a long life-time and/or a large amount of packets, e.g., http, ftp and nntp. Future implementations will include other triggers, such as the arrival of a resource reservation request ๐Ÿ”ฅ.

4. Protocol Overview ๐Ÿงšโ€โ™€๏ธ

Figure 1 shows an operational overview of FANP. In the figure, a cut-through packet forwarding path is established from host 1 (H1) to host 2 (H2) using two Dedicated-VCs. H1 and H2 are connected to Ethernets, and R1, R2 and R3 are routers that can speak FANP. R1 and R3 both have an ATM interface and an Ethernet interface. R2 has two ATM interfaces ๐Ÿ’….

When R1 receives an IP packet from H1, R1 analyzes the payload of the received IP packet to check whether it is a trigger packet or not. When the received packet is a trigger packet, R1 gets a Dedicated-VC to its downstream neighbor (R2) and sends FANP messages. FANP is effective between neighboring nodes only. The same procedure is performed between R2 and R3, independently from the procedure between R1 and R2. The flow-ID of the packet flow from H1 to H2 is represented as id(H1,H2). Here, id(H1,H2) is the set of the IP address of H1 and that of H2 ๐Ÿซถ.

The Dedicated-VC is released when no packet is transferred on it for a given period. We do not need to explicitly indicate release of the Dedicated-VC to the neighbor node, since the state management in FANP is soft-state rather than hard-state ๐ŸŒ™.

    +--+ Ethernet +--+   +-----+   +--+   +-----+   +--+ Ethernet +--+
    |H1|----------|R1|---| ATM |---|R2|---| ATM |---|R3|----------|H2|
    +--+          +--+   +-----+   +--+   +-----+   +--+          +--+
       trigger pkt
       |----------> trigger packet
                    |------------->   trigger packet
                       FANP          |-------------->  trigger pkt
                    <=============>        FANP        |----------->
                                     <==============>

                    |=============|
                     Dedicated-VC    |==============|
                                       Dedicated-VC

             Figure 1. Trigger packet and FANP initiation

5. Protocol Sequence ๐Ÿ’œ

FANP has the following five procedures: (1) Dedicated-VC selection, (2) VCID negotiation, (3) flow-ID notification, (4) Dedicated-VC refresh and (5) Dedicated-VC release. Procedures (2), (3) and (4) have nothing to do with the kind of the Dedicated-VC, i.e., SVC, PVC or VP. On the contrary, the procedures (1) and (5) with SVC are different from the procedures with PVC and with VP ๐ŸŽ€.

The detailed procedures are described in the following subsections.

5.1 Dedicated-VC Selection Procedure

A VC is picked up in order to use it as a Dedicated-VC. There are two ways to pick up a Dedicated-VC ๐Ÿฆ‹:

  • (1) A number of VCs are prepared in advance and registered into an un-used VC list. When a Dedicated-VC is needed, one of them is picked up from the un-used VC list.
  • (2) A new VC is established through ATM signaling on demand.

With ATM PVC/VP configuration, a Dedicated-VC is activated by procedure (1) ๐ŸŒธ.

With ATM SVC configuration, a Dedicated-VC is activated by procedure (1) or (2). When procedure (1) is used, some number of VCs are prepared in advance through ATM signaling. These VCs are registered into the un-used VC list. When a Dedicated-VC is needed, a VC is picked up from the un-used VC list. When procedure (2) is used, a Dedicated-VC is established through ATM signaling each time it is required ๐Ÿงš.

Procedure (1) can decrease the time to activate a Dedicated-VC. But the necessary VC resource will increase, since additional VCs need to be prepared. Which procedure should be applied is a matter of local decision in each node, taking the economical requirement and the system responsiveness into account ๐Ÿ’–.

A Dedicated-VC is used as a uni-directional VC, although it is generally bi-directional. This means that packets are transferred only from upstream node to downstream node in the Dedicated-VC. Packets from downstream node to upstream node are transferred through the Default-VC or through another Dedicated-VC ๐Ÿซถ.

5.2 VCID Negotiation Procedure โœจ

Okay so, after the Dedicated-VC selection is done, the upstream node sends a PROPOSE message to the downstream node through the Dedicated-VC ๐Ÿ’– The PROPOSE message carries a VCID for that Dedicated-VC plus the IP address of the downstream node (the target IP address) ๐ŸŽ€. If the downstream node accepts the PROPOSE, it sends back a PROPOSE ACK through the Default-VC. This is the glow-up moment, because both ends of the Dedicated-VC get to share the same "VCID" label for it ๐Ÿซถ. If the downstream node can't accept the proposal for some reason (like policy), it sends an ERROR message back to the upstream node through the Default-VC ๐Ÿ˜ญ

Here's the downstream node's checklist for handling a PROPOSE message, bestie ๐Ÿ’…

    1. if(Target IP address of the PROPOSE message isn't equal to my IP
          address)
       then Goto end.

    2. if(The PROPOSE message should be refused)
       then  Send an ERROR(refuse by policy) message. Go to end.

    3. if(VCID Type in the PROPOSE message isn't known)
       then Send an ERROR(unknown VCID Type) message. Go to end.

    4. if(The VCID in the PROPOSE message is  the same as the VCID which
       has already been registered for another Dedicated-VC in the node)
       then Delete the registered VCID.
       Release the old Dedicated-VC.

    5. if(A VCID is registered for the Dedicated-VC which has received
       the PROPOSE message)
       then Delete the registered VCID.

    6. Register the mapping between VCID and  I/F, VPI, VCI for the
       Dedicated-VC.

    7. if(The mapping is successful)
       then Send a PROPOSE ACK.
       else Send an ERROR(resource unavailable).

The upstream node retransmits the PROPOSE message if it gets neither a PROPOSE ACK nor an ERROR message ๐Ÿ”. If it still hears nothing after five retransmissions, the Dedicated-VC it picked during the Dedicated-VC selection procedure SHOULD be released. The number of retransmissions (five in this specification) is a RECOMMENDED value and can be modified in the future ๐ŸŒธ

The whole point of the VCID negotiation procedure isn't just sharing the VCID info for the Dedicated-VC. It also checks whether the Dedicated-VC is actually available and whether the neighbor node is working correctly ๐Ÿ‘‘

If the VCID negotiation procedure with a neighbor node always fails, it's considered that the node may not be a FANP-capable node ๐Ÿ™ˆ So the upstream node SHOULD NOT try the VCID negotiation procedure with that node for a certain time period.


5.3 Flow-ID Notification Procedure ๐ŸŒˆ

After the VCID negotiation procedure, the upstream node sends an OFFER message to the downstream node through the Default-VC ๐Ÿ’Œ The OFFER message contains the VCID of the Dedicated-VC, the flow-ID of the packet flow going through the Dedicated-VC, and the refresh interval of a READY message.

When the downstream node gets the OFFER message, it sends a READY message back to the upstream node through the Default-VC to say "yep, I accept this OFFER" ๐Ÿฆ‹ Once the upstream node gets that READY, it knows the downstream node can receive IP packets coming through the Dedicated-VC. Iconic ๐Ÿ™Œ

The upstream node retransmits the OFFER message if it doesn't receive a READY message from the downstream node. If it still has no READY after five retransmissions, the Dedicated-VC MUST be released. Wait, correction, bestie: the original says it SHOULD be released here, so the Dedicated-VC SHOULD be released ๐Ÿ˜ญ The number of retransmissions (i.e., five in this specification) is a RECOMMENDED value and MAY be modified in the future โœจ

A node sends an ERROR message to its neighbor in the following cases. When a node receives an ERROR message, the Dedicated-VC SHOULD be released ๐Ÿ’€

    (a) unknown VCID: The VCID in the message is unknown.
    (b) unknown VCID Type: The VCID Type is unknown.
    (c) unknown flow-ID Type: the flow-ID Type is unknown.

When the downstream node accepts the OFFER message from the upstream node, it MUST send a READY message to the upstream node within the refresh interval offered by the upstream node โฐ If it can't do that, the downstream node sends an ERROR message (this refresh interval is not supported) to the upstream node. The downstream node SHOULD accept any refresh interval larger than 120 seconds ๐Ÿ’œ So the downstream node SHOULD NOT send the ERROR message (this refresh interval is not supported) when the refresh interval in the OFFER message is larger than 120 seconds.

Here's how a node handles a received OFFER message ๐Ÿ“‹

    1. if(unknown version in the OFFER message)
       then Discard the message.  Goto end.

    2. if(unknown VCID Type in the OFFER message)
       then Send an ERROR (unknown VCID Type) message.  Goto end.

    3. if(VCID in the OFFER message has not been registered)
       then Send an ERROR (unknown VCID) message.  Goto end.

    4. if(unknown Flow ID Type in the OFFER message)
       then Send an ERROR (unknown Flow ID Type) message.  Goto end.

    5. if(refuse Flow ID in the OFFER message)
       then Send an ERROR (refused by policy) message.  Goto end.

    6. if(refuse refresh interval in the OFFER message)
       then Send an ERROR(This refresh interval is not supported)
       message.  Goto end.

    7. if(the mapping between Flow ID and VCID already exists and
          Flow ID in the OFFER message is different from the registered
          Flow ID for the corresponding VCID)
       then Do Flow-ID removal procedure.  Goto end.

    8. Do the procedure of receiving the OFFER message.

    7. if(successful)
       then Send a READY message.
       else Send an ERROR (resource unavailable) message.

    8. end.

And here's what a node does when it receives a READY message ๐Ÿซง

    1. if(unknown version in the READY message)
       then Discard the message.  Goto end.

    2. if(unknown VCID Type in the READY message)
       then Send an ERROR (unknown VCID Type) message.  Goto end.

    3. if(VCID in the READY message has not been registered)
       then Send an ERROR (unknown VCID) message.  Goto end.

    4. if(unknown Flow ID Type in the READY message)
       then Send an ERROR (unknown Flow ID Type) message.  Goto end.

    5. if((the mapping between Flow ID and VCID doesn't exist)||
          (the mapping between Flow ID and VCID already exists and
           Flow ID in the READY message is different from registered Flow
           ID for the corresponding VCID))
       then Send an ERROR (unknown VCID) message.  Goto end.

    6. Do the procedure of receiving the READY message.

    7. end.

5.4 Flow ID Refresh Procedure ๐Ÿงš

While the downstream node is receiving IP packets through the Dedicated-VC, it SHOULD periodically (with a refresh interval) send the READY message to the upstream node ๐Ÿ’– If the downstream node doesn't receive any IP packet during the refresh interval, it stops sending READY messages to the upstream node.

As long as the upstream node keeps getting READY messages, it knows it can keep transmitting IP packets through the Dedicated-VC ๐ŸŽ€ If it doesn't get a READY message at all for a predetermined period (the dead interval), it removes the mapping between the Flow IP and VCID. The dead interval is defined below ๐Ÿฆ‹

When the upstream node fails without doing the Flow ID removal procedure for a Dedicated-VC, the mapping MUST be removed by the downstream node ๐Ÿ™ˆ The downstream node removes the mapping between the Flow ID and VCID for the Dedicated-VC when it hasn't received any IP packet for a "removal period" (= refresh interval times m).

The refresh interval, the dead interval and the removal period SHOULD satisfy the following equation ๐Ÿงฎ

    refresh interval < dead interval < removal period (=refresh
    interval times m)

And these are the RECOMMENDED values ๐Ÿ‘‘

    refresh interval =  2 minutes
    dead interval    =  6 minutes (=refresh interval x 3)
    removal period  = 20 minutes (=refresh interval x 10)

5.5. Flow ID Removal Procedure ๐Ÿงนโœจ

Okay bestie, when the upstream node realizes the Dedicated-VC isn't being used anymore, it kicks off a Flow ID removal procedure ๐Ÿ’…

Here's the tea: the procedure is different depending on whether you're on PVC/VP configuration or SVC configuration ๐ŸŽ€

With PVC/VP configuration, the upstream node sends a REMOVE message to the downstream node, and the downstream node replies with a REMOVE ACK message ๐Ÿซถ If the upstream node doesn't get a REMOVE ACK, it retransmits REMOVE messages. If it still hears nothing after five REMOVE message retransmissions, it assumes the downstream node is in failure state ๐Ÿ˜ญ

With SVC configuration, there are two options ๐Ÿฆ‹ In the first one, the mapping between the Flow ID and the VCID gets removed without releasing the ATM connection. That's the same as the PVC/VP procedure. In the second one, the mapping gets removed by releasing the VC through ATM signaling. The first option is quicker at creating and deleting the Flow ID and VCID mapping, since ATM signaling doesn't have to happen every single time. The catch is that unused ATM connections have to be kept around by the node ๐Ÿ™ˆ Which option gets used is each CSR's local decision, based on the VC resource cost and how responsive it needs to be โœจ

The downstream node may also want to remove the mapping between the Flow ID and the VCID. When the upstream node receives the REMOVE message, it sends a REMOVE ACK message back to the downstream node ๐ŸŒธ

          +--+                              +--+
          |R1|------------------------------|R2|
          +--+                              +--+
            |           PROPOSE              |
            |===============================>|
   VCID     |       [VCID, target IP]        |
negotiation |          PROPOSE ACK           |
            |<===============================|
            |            [VCID]              |
            |                                |
            |            OFFER               |
            |===============================>|
  Flow-ID   |       [VCID, flow-ID]          |
notification|            READY               |
            |<===============================|
            |       [VCID, flow-ID]          |
            |                                |
                 :         :           :
                 :         :           :
            |           READY                |
            |<===============================|
Dedicated-VC|       [VCID, flow-ID]          |
refresh     |           READY                |
            |<===============================|
            |       [VCID, flow-ID]          |

Figure 2. Flow ID notification and refresh procedure

          +--+                              +--+
          |R1|------------------------------|R2|
          +--+                              +--+
            |                                 |
            |             REMOVE              |
            |================================>|
            |             [VCID]              |
            |                                 |
            |           REMOVE ACK            |
            |<================================|
            |             [VCID]              |

(a) Flow ID removal (independent of ATM signaling)

          +--+                              +--+
          |R1|------------------------------|R2|
          +--+                              +--+
            |          ATM signaling          |
            |           (release)             |
            |<===============================>|
            |                                 |

(b) Flow ID removal through ATM signaling

Figure 3. Flow ID removal procedure


6. Message Format ๐Ÿ“ฎ

Okay so the FANP control procedure has seven messages, described from 6.2 to 6.8 ๐Ÿ“ Among them, the PROPOSE message used for the VCID negotiation procedure uses an extended ATM ARP message format defined in RFC1577 [2]. The other messages get encapsulated into IP packets.

The destination IP address in the IP packet header is the neighbor node's IP address, and the source IP address is the sender's IP address. Right now, the protocol ID for these messages is 110 (decimal). This protocol ID must be registered by IANA ๐Ÿ”ฅ

The reserved field in the following packet format must be zero ๐Ÿ™ˆ

6.1. Field Format ๐ŸŽ€

6.1.1. VCID field

The VCID type value decides the VCID field format. Right now, only type "1" is defined. Here's the VCID field format for VCID type 1 ๐Ÿ’–

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    ESI of upstream node                       |
    +                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                               |                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
    |                              ID                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   ESI field: ESI of upstream node
   ID       : upstream node decides unique identifier.

6.1.2. Flow ID field

The flow ID type value decides the flow-ID field format. Right now, flow-ID type "0" and "1" are defined. The flow ID type value "0" means the flow ID field is null ๐Ÿซง When the flow ID type value is "1", the format below is used โœจ

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                   Source IP address                           |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                   Destination IP address                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Source IP address      : source IP address of flow
   Destination IP address : destination IP address of flow

6.2. PROPOSE message ๐Ÿฆ‹

The PROPOSE message uses the extended ATM-ARP message format [2], with the VCID type and the VCID field added on top. The Type & Length fields are set to zero, because these messages don't need a sender or target ATM address. This message goes from the upstream node to the downstream node through the Dedicated-VC.

Yep, same point again: the PROPOSE message is transferred from the upstream node to the downstream node through the Dedicated-VC ๐Ÿ’œ

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Hardware Type = 0x13          |  Protocol Type = 0x0800       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Type&Length 1 | Type&Length 2 |      Opereation Code          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Length 1   | Type&Length 3 | Type&Length 4 |   Length 2    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                     Sender IP Address                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                     Target IP Address                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |   VCID Type   |VCID Length    |       Reserved                |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                        VCID                                   |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Type&Length 1 ; Type & Length of sender ATM number = 0
   Type&Length 2 ; Type & Length of sender ATM subnumber = 0
   Type&Length 3 ; Type & Length of sender ATM number = 0
   Type&Length 4 ; Type & Length of sender ATM subnumber =0
   Length 1      ; Source IP address length
   Length 2      ; Target IP address length

   Operation code
            0x10 = PROPOSE

   VCID Type:   Currently , VCID Type = 1 is defined.
   VCID Length: Length of VCID field
   VCID :       VCID described previous

6.3. PROPOSE ACK โœจ

PROPOSE ACK messages go through the Default-VC ๐ŸŒˆ

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Version       |Op code = 1    |        Checksum               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | VCID type     |Flow-ID type=0 |         Reserved              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           VCID                                |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Version: This field indicates the version number of FANP. Right now, Version = 1.
  • Operation Code: This field indicates the operation code of the message. There are five operation codes, listed below. Here's the one defined in this section: operation code = 1 : PROPOSE ACK message
  • Checksum: This field is the 16-bit checksum for the whole body of the FANP message. The checksum algorithm is the same as the one used for the IP header.
  • VCID Type: This field indicates the VCID type. Right now, only "1" is defined.

6.4. OFFER message ๐Ÿ’–

The OFFER message is transferred from an upstream node to a downstream node. Here's the message format ๐Ÿงš

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Version = 1   | Op Code = 2   |        Checksum               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | VCID type     |Flow-ID type   |     Refresh Interval          |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           VCID                                |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         Flow-ID                               |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Refresh Interval: This field indicates the interval of the refresh timer. The refresh interval is represented in seconds as an integer. This field is used only in the OFFER message. The recommended value is 120 (seconds) โฐ

6.5. READY message ๐Ÿฆ‹

okay so the READY message goes from a downstream node to an upstream node. the downstream node sends it when it gets an OFFER message, and then it keeps sending it periodically in each refresh interval. here's the format, bestie ๐Ÿ’…

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Version = 1   | Op Code = 3   |        Checksum               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | VCID type     |Flow-ID type   |     Reserved                  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           VCID                                |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         Flow-ID                               |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

6.6. ERROR message ๐Ÿšจ

ERROR message is the one that gets sent when something in the received message is unknown or refused ๐Ÿ˜ญ it can go from downstream to upstream, or from upstream to downstream, periodt.

ngl this one has a rule: when the message you received is an ERROR message, you don't send another ERROR back ๐Ÿ™…โ€โ™€๏ธ no error ping-pong, we're not doing that.

the VCID type, VCID, Flow ID Type and Flow ID fields in the ERROR message just copy the same fields from the message you received. here's the format ๐ŸŽ€

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Version = 1   | Op Code = 4   |        Checksum               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | VCID type     |Flow-ID type   |     Error code                |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           VCID                                |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         Flow-ID                               |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    Error Code = 1 : unknown VCID type
               = 2 : unknown Flow-ID type
               = 3 : unknown VCID
               = 4 : resource is unavailable
               = 5 : unavailable refresh interval is offered
               = 6 : refuse by policy

6.7. REMOVE message ๐Ÿงน

the REMOVE message goes from downstream to upstream or the other way around. its whole job is to tear down the mapping between the flow ID and the VCID โœจ clean slate, no drama.

the big one: the node that gets a REMOVE message has to send back a REMOVE ACK message, even if it doesn't recognise the VCID in the message ๐Ÿ’€ no ghosting allowed.

here's the format, bestie ๐Ÿฆ‹

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Version = 1   | Op Code = 5   |        Checksum               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | VCID type     |Flow-ID type   |     Reserved                  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           VCID                                |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

6.8. REMOVE ACK message โœ…

REMOVE ACK is the reply that goes from downstream to upstream, or from upstream to downstream ๐Ÿซถ it's the "yep, got it, it's gone" message. here's the format ๐ŸŒธ

     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Version = 1   | Op Code = 6   |        Checksum               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | VCID type     |Flow-ID type   |     Reserved                  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           VCID                                |
    /                                                               /
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

7. Security Considerations ๐Ÿ”

Security issues are not discussed in this memo. ๐Ÿ’€ bestie, this is the part where the spec just... doesn't go there. so keep that in mind when you're building with it ๐Ÿ‘€


8. References ๐Ÿ“š

   [1] Katsube, Y., Nagami, K., and H. Esaki, "Router Architecture
       Extensions for ATM; overview", Work in Progress.

   [2] Laubach, M., "Classical IP and ARP over ATM", RFC 1577,
       October 1993.

   [3] Heinanen, J., "Multiprotocol Encapsulation over ATM Adaptation
       Layer 5", RFC 1483, July 1993.

Ethernet is a registered trademark of Xerox Corp. All other product names mentioned herein may be trademarks of their respective companies. ๐ŸŽ€


9. Authors' Addresses ๐Ÿ’Œ

the whole Toshiba crew, all in one place ๐ŸŒˆ

   Ken-ichi Nagami
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   EMail : nagami@isl.rdc.toshiba.co.jp
   Yasuhiro Katsube
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   EMail : katsube@isl.rdc.toshiba.co.jp
   Yasuro Shobatake
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   Email : masahata@csl.rdc.toshiba.co.jp
   Akiyoshi Mogi
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   EMail : mogi@isl.rdc.toshiba.co.jp
   Shigeo Matsuzawa
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   EMail : shigeom@isl.rdc.toshiba.co.jp
   Tatsuya Jinmei
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   EMail : jinmei@isl.rdc.toshiba.co.jp
   Hiroshi Esaki
   R&D Center, Toshiba
   1 Komukai Toshiba-cho, Saiwai-ku, Kawasaki 210 Japan
   Phone : +81-44-549-2238
   EMail : hiroshi@isl.rdc.toshiba.co.jp
๐Ÿ“ฆ where this page comes from