home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_ietf_q_t / draft-ietf-rsvp-policy-lpm-01.txt < prev    next >
Text File  |  1996-11-25  |  35KB  |  1,080 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Internet Draft                                               Shai Herzog
  8. Expiration: May 1997                     IBM T.J. Watson Research Center
  9. File: draft-ietf-rsvp-policy-lpm-01.txt                         11/22/96
  10.  
  11.  
  12.  
  13.             Local Policy Modules (LPM):  Policy Control for RSVP
  14.  
  15.  
  16. Status of Memo
  17.  
  18.    This document is an Internet-Draft.  Internet-Drafts are working
  19.    documents of the Internet Engineering Task Force (IETF), its areas,
  20.    and its working groups.  Note that other groups may also distribute
  21.    working documents as Internet-Drafts.
  22.  
  23.    Internet-Drafts are draft documents valid for a maximum of six months
  24.    and may be updated, replaced, or obsoleted by other documents at any
  25.    time.  It is inappropriate to use Internet-Drafts as reference
  26.    material or to cite them other than as "work in progress."
  27.  
  28.    To learn the current status of any Internet-Draft, please check the
  29.    "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
  30.    Directories on ds.internic.net (US East Coast), nic.nordu.net
  31.    (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific
  32.    Rim).
  33.  
  34. Abstract
  35.  
  36.    This memo details a generic framework for policy enforcement based on
  37.    the RSVP/Policy Control interface described in [Ext].
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. Shai Herzog               Expiration: May 1997                  [Page 1]
  58.  
  59.  
  60.  
  61.  
  62.  
  63. Internet Draft         Local Policy Modules (LPM)          November 1996
  64.  
  65.  
  66. Table of Contents
  67.  
  68. 1     Introduction                                                    4
  69.  
  70. 2     Policy Elements                                                 4
  71.  
  72. 3     The LPM Policy Multiplexer                                      5
  73.  
  74. 4     Associating Policies to Flows                                   6
  75.  
  76. 5     LPM Policy Control (PC) Functions                               7
  77.  
  78.       5.1   Error Signaling  ........................................ 8
  79.  
  80. 6     State Maintenance                                               9
  81.  
  82.       6.1   Time-out:  .............................................. 9
  83.  
  84.       6.2   Instantaneous Policy Replacement   ...................... 9
  85.  
  86.       6.3   Tree/Branch maintenance:  ............................... 10
  87.  
  88.       6.4   Closing:  ............................................... 10
  89.  
  90. 7     Syntactic Fragmentation of Large Policy Data Objects            10
  91.  
  92.       7.1   Fragmentation  .......................................... 10
  93.  
  94.       7.2   Reassembly  ............................................. 11
  95.  
  96.       7.3   IP Style vs. Semantic Fragmentation  .................... 12
  97.  
  98. 8     LPM Security                                                    13
  99.  
  100. 9     LPM Configuration                                               13
  101.  
  102.       9.1   Interaction Between Handlers  ........................... 14
  103.  
  104. 10    Acknowledgment                                                  14
  105.  
  106. A     A List of Currently Defined Policies                            16
  107.  
  108. B     Semantic Fragmentation                                          17
  109.  
  110.       B.1   Fragmentation Example  .................................. 17
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117. Shai Herzog               Expiration: May 1997                  [Page 2]
  118.  
  119.  
  120.  
  121.  
  122.  
  123. Internet Draft         Local Policy Modules (LPM)          November 1996
  124.  
  125.  
  126. 1. Introduction
  127.  
  128.    The current admission process in RSVP uses resource (capacity) based
  129.    admission control; we expand this model to include policy based
  130.    admission control as well.  We introduce a framework named "Local
  131.    Policy Modules" (LPM) that is based on the RSVP/Policy Control
  132.    interface described in [Ext].  Policy admission control is enforced
  133.    at border/policy nodes by LPMs; LPMs provide RSVP with information
  134.    about the status of reservations, based on the contents of incoming
  135.    policy objects, applicable bilateral agreements, and local policies.
  136.    They are also responsible for constructing outgoing POLICY_DATA
  137.    objects, by either copying, modifying or entirely rewriting the
  138.    POLICY_DATA objects that pass through them.
  139.  
  140.    This document suggests a generic framework for policy control which
  141.    is based on RSVP's policy extensions [Ext] and its policy reference
  142.    [Arch] documents.  Interoperability considerations suggest the need
  143.    for some standardized policies; the appendix to this document
  144.    provides a list of such policies, however, it leaves a wide range of
  145.    policies for local and proprietary usage.
  146.  
  147.    The LPM architecture governs the following aspects of policy control:
  148.    policy element format (Section 2 and Appendix A), policy multiplexing
  149.    (Section 3), flows association (Section 4), PC services (Section 5),
  150.    state maintenance (Section 6), fragmentation (Section 7), security
  151.    considerations (Section 8), and configuration (Section 9).
  152.  
  153. 2. Policy Elements
  154.  
  155.    The format of policy data objects of C-type 1 is defined in [Ext] as
  156.    including a list of policy elements. Policy elements relate policy
  157.    specific information and have the following format:
  158.  
  159.  
  160.    +---------------------------+---------------------------+
  161.    |     Length                |      P-type               |
  162.    +---------------------------+---------------------------+
  163.    |     Policy                                            |
  164.    +-------------------------------------------------------+
  165.  
  166.    Length: 16 bits
  167.  
  168.         The length (in bytes) of the policy element
  169.  
  170.    P-type: 16 bits
  171.  
  172.         The type of the policy element
  173.  
  174.  
  175.  
  176.  
  177. Shai Herzog               Expiration: May 1997                  [Page 3]
  178.  
  179.  
  180.  
  181.  
  182.  
  183. Internet Draft         Local Policy Modules (LPM)          November 1996
  184.  
  185.  
  186.    Policy: variable length (multiples of 32 bits)
  187.  
  188.         A description of the policy itself. Each policy element has its
  189.         own P-type specific format. (See Appendix A for current type
  190.         list).
  191.  
  192.  
  193. 3. The LPM Policy Multiplexer
  194.  
  195.    We have contended in [Arch] that the exact nature of the usage
  196.    policies is a local matter between service providers and their users,
  197.    or other neighboring providers.  Successful development and
  198.    deployment of usage policies would greatly depend on the ability of
  199.    ISPs to experiment and develop their desired policies.  The LPM
  200.    architecture was design to provide such capability by supporting a
  201.    wide range of local, flexible, and plug-n-play policies.
  202.  
  203.  
  204.             +-----------------------------------------------------------+
  205.             | RSVP                                                      |
  206.             |        Incoming Resv:  Resv-header,LPM-header,P1,P2,P3,P4 |
  207.             |                                         |                 |
  208.             +-----------------------------------------+-----------------+
  209.             | LPM: Common Layer                      @|/                |
  210.             | lpm_in()          +-------- LPM-header,P1,P2,P3,P4        |
  211.             |                  /           /          |          @      |
  212.             +-----------+-----+-----+-----+-----+-----+-----+-----+-----+
  213.             |           |   P1|     |   P2|     |   P3|     |   P4|     |
  214.             |           |    @|/    |    @|/    |    @|/    |    @|/    |
  215.             |           |           |           |           |           |
  216.             | Handler 0 | Handler 1 | Handler 2 | Handler 4 | Handler 5 |
  217.             +-----------+-----------+-----------+-----------+-----------+
  218.     Figure 1: Demultiplexing an incoming Resv message with POLICY_DATA
  219.    objects
  220.  
  221.  
  222.  
  223.    Modularity is achieved by dividing the policy space into 65535
  224.    independent types of policy elements, identified by the P-type field.
  225.    Moreover, multiple independent policies could simultaneously be in
  226.    effect when multiple policy elements are included in a single
  227.    POLICY_DATA object.  The LPM is divided into two layers: a policy-
  228.    specific layer and a common layer (Figure 1).  The policy-specific
  229.    layer contains the set of locally configured handlers, one for each
  230.    P-type supported by the local node. Unrecognized objects are
  231.    processed by a handler of the reserved P-type 0; this handler
  232.    performs the default handling as specified in [Ext] (forwarding the
  233.    objects as-is with the appropriate outgoing RSVP messages).  The
  234.  
  235.  
  236.  
  237. Shai Herzog               Expiration: May 1997                  [Page 4]
  238.  
  239.  
  240.  
  241.  
  242.  
  243. Internet Draft         Local Policy Modules (LPM)          November 1996
  244.  
  245.  
  246.    common layer provides the glue between RSVP and the policy-specific
  247.    layer by demultiplexing RSVP's LPM calls into individual policy-
  248.    specific calls.
  249.  
  250.    On input, the common layer disassembles the incoming POLICY_DATA
  251.    object, dispatches each policy element to its policy-specific
  252.    handler, and aggregates the return code status from all handlers
  253.    (Figure 1).  On output, the common layer collects the policy elements
  254.    from all active handlers, and assembles them into a single
  255.    POLICY_DATA object (Figure 2).
  256.  
  257.    On status queries, policy-specific handlers can vote to accept or
  258.    snub a reservation, but may also cast a veto.  The common layer
  259.    collects responses from all active handlers, and combines them into a
  260.    single status result.  We use the following rule: A reservation is
  261.    approved by the common layer, if there is at least one handler that
  262.    accepts it it, and no other that vetoed it. [Note 1]
  263.     Consider the case where an internet service provider (ISP) admits
  264.    flows either under flat-rate service or under pay-per-use
  265.    arrangement.  Several handlers can be active: [ID] for verifying the
  266.    flow's owner/group ID, [FR] for verifying a flat-rate account, and
  267.    [PPU] for performing pay-per-use transactions.
  268.  
  269.    Let us examine some representative cases:
  270.  
  271.  
  272.    o    Unknown user: REJECT: [ID]: veto. It doesn't matter what other
  273.         handlers say.
  274.  
  275.    o    Flat-rate user: ADMIT : [ID]: snub, [FR]: accept, and  [PPU]:
  276.         snub.
  277.  
  278.    o    Pay-per-use user:
  279.         Broke: REJECT: [ID]: snub, [FR]: snub, and  [PPU]: snub.
  280.         Rich : ADMIT: [ID]: snub, [FR]: snub, and  [PPU]: accept.
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288. _________________________
  289. [Note 1] Notice that veto has a stronger semantics than a snub, since it
  290. has the power to forcefully reject a flow regardless of any accept
  291. decisions made by other handlers.
  292.  
  293.  
  294.  
  295.  
  296.  
  297. Shai Herzog               Expiration: May 1997                  [Page 5]
  298.  
  299.  
  300.  
  301.  
  302.  
  303. Internet Draft         Local Policy Modules (LPM)          November 1996
  304.  
  305.  
  306.  
  307.             +-----------------------------------------------------------+
  308.             | RSVP                                                      |
  309.             |        Outgoing Resv:  Resv-header,LPM-header,P1,P2,P3,P4 |
  310.             |                                        /|@                |
  311.             +-----------------------------------------+-----------------+
  312.             | LPM: Common Layer                       |                 |
  313.             | lpm_out()         +-------> LPM-header,P1,P2,P3,P4        |
  314.             |                  /           /         /|@         @      |
  315.             +-----------+-----+-----+-----+-----+-----+-----+-----+-----+
  316.             |           |   P1|     |   P2|     |   P3|     |   P4|     |
  317.             |           |     |     |     |     |     |     |     |     |
  318.             |           |           |           |           |           |
  319.             | Handler 0 | Handler 1 | Handler 2 | Handler 4 | Handler 5 |
  320.             +-----------+-----------+-----------+-----------+-----------+
  321.    Figure 2: Constructing POLICY_DATA objects for an outgoing Resv message
  322.  
  323.  
  324. 4. Associating Policies to Flows
  325.  
  326.    The LPM uses RSVP's criteria for identifying flows; Each policy
  327.    element is associated with a specific [SESSION, RSVP_HOP, FILTER_SPEC
  328.    list] combination.
  329.  
  330.    For every POLICY_DATA object, the SESSION information is provided by
  331.    RSVP (as parameter in the PC_xxxx() calls) and the RSVP_HOP and
  332.    FILTER_SPEC list are embedded in the POLICY_DATA object itself. When
  333.    no FILTER_SPECs are provided, the object is assumed to be associated
  334.    with all the flows of the session.  When no RSVP_HOP is provided, the
  335.    POLICY_DATA object is assumed to have been assembled by the RSVP_HOP
  336.    listed in the RSVP message.  (i.e., the neighboring RSVP
  337.    next/previous hop).
  338.  
  339. 5. LPM Policy Control (PC) Functions
  340.  
  341.    In this section we provide a rough outline of the basic operations
  342.    required for each service supported by the LPM. We use the notation
  343.    "xxxx_rtn()" to represent a call to function rtn() for element of P-
  344.    type xxxx.
  345.  
  346.    o    Process a received POLICY_DATA object
  347.  
  348.  
  349.         Call: PC_InPolicy   (session, lih, rsvp_hop, message_type,
  350.                              in_policy_objects, resv_handle,
  351.                              resv_flowspec, timeout)
  352.                              -> RCode
  353.  
  354.  
  355.  
  356.  
  357. Shai Herzog               Expiration: May 1997                  [Page 6]
  358.  
  359.  
  360.  
  361.  
  362.  
  363. Internet Draft         Local Policy Modules (LPM)          November 1996
  364.  
  365.  
  366.         PD_List = PC_Reassemble(session, rsvp_hop, in_policy_objects->OID, ...);
  367.         Flowp = Locate_state(session, PD_List->filter_spec_list);
  368.         for (each PD in PD_List) {
  369.             if (!Integrity_check(PD)
  370.                 error();
  371.             for (each P_element_xxxx in PD)
  372.                 if (!xxxx_InPolicy(..., Flowp, PA, rsvp_hop, message_type, timeout)
  373.                     error();
  374.         }
  375.         return PC_AuthCheck(session, lih, message_type,
  376.                            PD_List->filter_spec_list,
  377.                            resv_handle, resv_flowspec);
  378.  
  379.    o    Request an outgoing POLICY_DATA object
  380.  
  381.  
  382.         Call: PC_OutPolicy (session, filter_spec_list,
  383.                              lih, rsvp_hop, message_type,
  384.                              out_policy_objects,
  385.                              max_pd, avail_pd)
  386.                              -> RCode
  387.  
  388.         Flowp = locate_state(session, filter_spec_list);
  389.         element_list = NULL;
  390.         for (each active element handler of P-type xxxx) {
  391.             policy_element = xxxx_OutPolicy(..., flowp, rsvp_hop, message_type,... )
  392.             add_element(element_list, policy_element);
  393.         }
  394.         PD_List = PC_Fragment(element_list, max_pd, avail_pd)
  395.         return (PD_List);
  396.  
  397.    o    Check the status of an existing reservation
  398.  
  399.  
  400.         Call: PC_AuthCheck (session, filter_spec_list,
  401.                              lih, message_type, resv_handle,
  402.                              resv_flowspec, ind)
  403.                              -> RCode
  404.  
  405.         Flowp = locate_state(session, filter_spec_list);
  406.         for (each active element handler of P-type xxxx) {
  407.             curr_status = xxxx_AuthCheck(Flowp, lih, message_type,
  408.                                          resv_handle, resv_flowspec,...)
  409.             merge_status(status, curr_status);
  410.         }
  411.         purge_old_state();
  412.         return (status);
  413.  
  414.  
  415.  
  416.  
  417. Shai Herzog               Expiration: May 1997                  [Page 7]
  418.  
  419.  
  420.  
  421.  
  422.  
  423. Internet Draft         Local Policy Modules (LPM)          November 1996
  424.  
  425.  
  426.    o    Initialize Policy Control services
  427.  
  428.  
  429.         Call: PC_Init      (void) -> RCode
  430.  
  431.         for (each active element handler of P-type xxxx)
  432.             xxxx_Init()
  433.  
  434.    o    Synchronize RSVP and policy control state (see Section 6.3).
  435.  
  436.  
  437.         Call: PC_Branch     (session, filter_spec_list,
  438.                              rsvp_hop, op_type)
  439.                              -> RCode
  440.  
  441.         Flowp = locate_state(session, filter_spec_list);
  442.         for (each active element handler of P-type xxxx)
  443.             xxxx_Branch(..., flowp, rsvp_hop, op_type,... )
  444.  
  445.    o    Delete policy control state (see Section 6.4)
  446.  
  447.  
  448.         Call:  PC_Close (session, filter_spec_list) -> RCode
  449.  
  450.         Flowp = locate_state(session, filter_spec_list);
  451.         for (each active element handler of P-type xxxx)
  452.             xxxx_Close(flowp)
  453.  
  454.    5.1 Error Signaling
  455.  
  456.       As described in [Ext], policy errors are handled by RSVP in two
  457.       phases: (1) RSVP is notified about the error (a return codes from
  458.       either  PC_AuthCheck() or  PC_InPolicy()). (2) RSVP prepares a
  459.       standard error message (PathErr or ResvErr), queries
  460.       PC_OutPolicy() for an outgoing error policy object,  and embeds
  461.       the object in the outgoing error message.
  462.  
  463.       Error Signaling is opaque to the LPM common-layer as well; it
  464.       simply demultiplexes the  PC_OutPolicy() call to the active
  465.       handlers.  When  xxxx_OutPolicy() is called with a message type of
  466.       either PathErr or ResvErr, individual policy handlers use a last-
  467.       error cache to generate outgoing error policy elements. These
  468.       elements are assembles by the LPM common-layer into a single
  469.       POLICY_DATA object that is returned to RSVP.
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477. Shai Herzog               Expiration: May 1997                  [Page 8]
  478.  
  479.  
  480.  
  481.  
  482.  
  483. Internet Draft         Local Policy Modules (LPM)          November 1996
  484.  
  485.  
  486. 6. State Maintenance
  487.  
  488.    LPM state must remain consistent with the corresponding RSVP state.
  489.    State is created when POLICY_DATA objects are passed to the LPM and
  490.    can be updated or removed through several possible mechanisms that
  491.    imitate  RSVP's state management mechanisms:
  492.  
  493.    6.1 Time-out:
  494.  
  495.       When new POLICY_DATA objects cease to arrive (either as a result
  496.       of a change of policy or a fragment loss) the locally stored state
  497.       begins to age. Each policy-element is subject to a timer, and when
  498.       the timer goes off, the state should be deleted.  The timer
  499.       mechanism should be similar to that of RSVP and both should
  500.       remained synchronized in the following way: each time RSVP hands
  501.       over a policy object to the LPM (PC_InPolicy()) it provides a
  502.       time-out value.  Each time RSVP verifies the status of a
  503.       reservation (PC_AuthCheck()), the LPM examines its internal state,
  504.       purging old state.
  505.  
  506.    6.2 Instantaneous Policy Replacement
  507.  
  508.       In some cases, policies must be replaced or purged immediately.
  509.       [Note 2]
  510.  
  511.       Instantaneous replacement is especially critical to avoid over-
  512.       charging when accounting or other debiting policies are in effect.
  513.       We propose a very simple rule:
  514.  
  515.       hspace*0.4inOnly one instance of a policy element type (P-type) is
  516.       allowed for any given flow.
  517.  
  518.       Following this rule, a modified policy-element would immediately
  519.       purge the old one.  Purging an old policy-element without
  520.       installing a new one can be done simply by sending an empty
  521.       policy-element (with the 32bit header only).  As added benefit,
  522.       this rule guarantees that the receiving LPM would never face
  523.       multiple, contradictory provisions of the same policy-type. [Note
  524.       3]
  525.  
  526.  
  527. _________________________
  528. [Note 2] As opposed to stopping refreshes and waiting for the time-out
  529. mechanism to purge old state.
  530.  
  531. [Note 3] "There can be only one", Highlander.
  532.  
  533.  
  534.  
  535.  
  536.  
  537. Shai Herzog               Expiration: May 1997                  [Page 9]
  538.  
  539.  
  540.  
  541.  
  542.  
  543. Internet Draft         Local Policy Modules (LPM)          November 1996
  544.  
  545.  
  546.    6.3 Tree/Branch maintenance:
  547.  
  548.       When the shape of the session (multicast) tree changes due to
  549.       route changes, teardown messages, or blockade state, RSVP must
  550.       notify the LPM about the change.  (See Section 5, "PC_Branch()" for
  551.       more details.)
  552.  
  553.    6.4 Closing:
  554.  
  555.       The call "PC_Close(session, filter-spec list)" purges all the
  556.       state linked to the session and filter-spec list.  Closing a
  557.       Policy Association is done when RSVP no longer maintains any state
  558.       associated with that flow (all senders quit).  Notice that on-
  559.       going operations (e.g., accounting) must be shut-down in an
  560.       orderly manner before the state is purged.
  561.  
  562. 7. Syntactic Fragmentation of Large Policy Data Objects
  563.  
  564.    Document [Ext] describe syntactic fragmentation of large POLICY_DATA
  565.    objects from RSVP's view point.  In this section, we describe the LPM
  566.    support for this syntactic fragmentation.
  567.  
  568.    7.1 Fragmentation
  569.  
  570.       When RSVP queries the LPM for outgoing policy objects (
  571.       PC_OutPolicy()) it provide the LPM with two size parameters:
  572.       "max_pd" (desired maximal object size), and "avail_pd" (available
  573.       space in the outgoing RSVP message).  The general fragmentation
  574.       rules for a POLICY_DATA (PD) object is:
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597. Shai Herzog               Expiration: May 1997                 [Page 10]
  598.  
  599.  
  600.  
  601.  
  602.  
  603. Internet Draft         Local Policy Modules (LPM)          November 1996
  604.  
  605.  
  606.       PC_Fragment(session, ..., pd_list, max_pd, avail_pd)
  607.  
  608.       if (avail_pd < MIN_POL_OBJ)          /* Minimal object size */
  609.          return NULL;
  610.  
  611.       /* Assemble the full PD */
  612.  
  613.       if (size of PD <= avail_pd)          /* No need for fragmentation */
  614.          pd_list = PD;
  615.       else {
  616.          oid=Pick_Oid(session);
  617.          pd_list=Fragment(max_pd, PD, oid);
  618.          Add_PD_Token(pd_list, oid);
  619.       }
  620.       return pd_list;
  621.  
  622.       Remarks:
  623.  
  624.  
  625.       o    Pick_Oid() picks an object ID for the outgoing POLICY_DATA
  626.            object.  (See [Ext] for OID selection criteria).
  627.  
  628.       o    Fragment() fragments the PD object to the desired size
  629.            (max_pd).  Notice that if it cannot fulfill the desired size
  630.            it should attempt to get as close to it as it can, and let IP
  631.            fragmentation handle if from there. [Note 4]
  632.  
  633.            All the fragments are marked by including the Fragmentation
  634.            option, and the OID is placed in their header.
  635.  
  636.       o    Add_PD_Token() completes the syntactic fragmentation by
  637.            creating a token object with minimal header of size
  638.            MIN_POL_OBJ. The selected oid is placed in the token's
  639.            header, and the token is concatenated to the end of the
  640.            pd_list.  This token object will be embedded in the standard
  641.            outgoing RSVP message.
  642.  
  643.  
  644.  
  645.  
  646. _________________________
  647. [Note 4] Because of syntactic fragmentation, the RSVP control message
  648. contains only a small policy token, and therefore, do not incur
  649. significant added loss risk.  The impact of a failed IP fragmentation on
  650. a large policy object is limited to the loss of the policy object
  651. itself.
  652.  
  653.  
  654.  
  655.  
  656.  
  657. Shai Herzog               Expiration: May 1997                 [Page 11]
  658.  
  659.  
  660.  
  661.  
  662.  
  663. Internet Draft         Local Policy Modules (LPM)          November 1996
  664.  
  665.  
  666.    7.2 Reassembly
  667.  
  668.       PC_Reassemble(Session, rsvp_hop, ..., in_PD, time-out)
  669.  
  670.       pd_list = Get_PDList(session, rsvp_hop, in_PD->oid);
  671.       if (IS_FRAGMENT(in_PD)) {
  672.          Add_PD_Fragment(pd_list, in_PD, time-out);
  673.          return;
  674.       }
  675.       Reassemble(pd_list);  /* no need to add PD to list */
  676.       Reset_Fragments(...);
  677.  
  678.       Remarks:
  679.  
  680.       o    Get_PDList locates or creates a fragment list associated with
  681.            a session/rsvp_hop/oid triplet.
  682.  
  683.       o    Add_PD_Fragment() adds a fragment to the pd_list.
  684.  
  685.       o    Reassemble() processes the received list of fragments for
  686.            that triplet.
  687.  
  688.       o    Reset_Fragments(): The management of fragments is one of the
  689.            issues at local discretion. For example, fragments that
  690.            arrive after the token object may be (1) purged immediately
  691.            or (2) combined with earlier fragments to generate a more
  692.            complete POLICY_DATA object.  If (1) is chosen,
  693.            Reset_Fragments() simply purges all the previously received
  694.            fragments each time. If (2) is chosen, a timeout mechanism
  695.            must be provided to purge old fragments.
  696.  
  697.    7.3 IP Style vs. Semantic Fragmentation
  698.  
  699.       The actual fragmentation method is determined by the
  700.       Fragment/Reassembly; it is therefore orthogonal to the syntactic
  701.       fragmentation mechanism.
  702.  
  703.       Two common fragmentation policies are:
  704.  
  705.       o    IP and IP style fragmentation:
  706.  
  707.            The simplest approach could be to use IP fragmentation.
  708.            First, the large POLICY_DATA object would be sent by a single
  709.            vacuous RSVP message, that would undergo IP fragmentation. A
  710.            lost fragment would result in loosing the entire POLICY_DATA
  711.            object, however RSVP would not be adversely effected.
  712.            Immediately following the vacuous message, a standard RSVP
  713.            message is sent with a minimal policy token embedded in it.
  714.  
  715.  
  716.  
  717. Shai Herzog               Expiration: May 1997                 [Page 12]
  718.  
  719.  
  720.  
  721.  
  722.  
  723. Internet Draft         Local Policy Modules (LPM)          November 1996
  724.  
  725.  
  726.            The LPM can also perform IP style fragmentation itself
  727.            if/when the limitations of IP fragmentation (e.g., maximum of
  728.            64K bytes message) become a problem.
  729.  
  730.       o    Semantic Fragmentation:
  731.  
  732.            Semantic fragmentation is highly context sensitive and at
  733.            least in the case of the RSVP protocol [RSVPSP] was proven to
  734.            be a formidable problem. In Appendix B we outline a possible
  735.            approach to semantic fragmentation.
  736.  
  737. 8. LPM Security
  738.  
  739.    The RSVP security mechanism proposed in [Bak96] relies on hop-by-hop
  740.    authentication. This form of authentication creates a chain of trust
  741.    that is only as strong as its weakest element; as long as we believe
  742.    that all RSVP nodes are policy nodes as well, then RSVP security is
  743.    sufficient for the entire RSVP message, including POLICY_DATA
  744.    objects.
  745.  
  746.    However, when policy is enforced only at border nodes (cloud entry
  747.    and exit points), RSVP's hop-by-hop security is insufficient to
  748.    protect policy objects; from a policy control perspective, the in-
  749.    cloud nodes are unsecured, and might be unlawfully manipulating
  750.    policy objects that pass through them.  The solution is to have a
  751.    secure "policy tunnel", that creates logical policy topology, on top
  752.    of which security is enforced.
  753.  
  754.    The secure, automatic tunnel is created by adding an INTEGRITY object
  755.    to each policy data object assembled by a border node. When the
  756.    policy object is received by the next border/policy node, the
  757.    integrity envelope guarantees that none of the intermediate non-
  758.    policy-aware (and unsecured) RSVP nodes have modified the object's
  759.    contents.
  760.  
  761.    One of the advantages of automatic tunneling is that it can use the
  762.    same or similar key distribution mechanisms as advocated for RSVP in
  763.    [Bak96] since it complies with the hop-by-hop security model.  Here,
  764.    the previous/next hops are the policy-capable (as opposed to directly
  765.    connected) neighboring RSVP nodes.
  766.  
  767. 9. LPM Configuration
  768.  
  769.    LPM configuration can be general, for all handlers, but can also be
  770.    type/handler specific (e.g., a specific handler's rewrite conversion
  771.    table for policy data objects).  Configuration may be expressed in a
  772.    simple configuration file, or even through a configuration language.
  773.    Because of the early stages of this work, we believe it is too early
  774.  
  775.  
  776.  
  777. Shai Herzog               Expiration: May 1997                 [Page 13]
  778.  
  779.  
  780.  
  781.  
  782.  
  783. Internet Draft         Local Policy Modules (LPM)          November 1996
  784.  
  785.  
  786.    to provide specific configuration details.
  787.  
  788.    9.1 Interaction Between Handlers
  789.  
  790.       Independent element types may require some interaction between
  791.       their handlers.  Consider the case where policy type-1 computes
  792.       the cost of a flow, while type-2 performs actual debiting of a
  793.       user/group account based on the this computed cost (e.g., credit
  794.       card account).  Such interaction has two basic requirements: order
  795.       dependency and export capability. In our example, type-1 must
  796.       calculate the cost before type-2 is activated (such partial
  797.       ordering may be set as part of the local configuration process).
  798.       Export capability is required, in this case, to allow type-1 to
  799.       export the calculation results to type-2. The simplest approach
  800.       could be to allow inter-handler function calls.
  801.  
  802.       In some cases, a single element handler may be capable of
  803.       interacting with multiple equivalent peer handlers. In our
  804.       example, once type-1 determined the cost, there could be several
  805.       accounts available for debiting (Visa, MasterCard, AmEx etc.)
  806.       each handled by a different element type (type-2, type-3, type-4).
  807.       Local configuration may enforce the use of a certain card by
  808.       binding type-1 with a particular card handler, e.g., AmEx/type-4.
  809.       Configuration may also set a certain order such that the lower
  810.       cards on the list would be debited only after the previous ones
  811.       have been attempted and failed.
  812.  
  813. 10. Acknowledgment
  814.  
  815.    This document incorporates inputs from Lou Berger, Bob Braden,
  816.    Deborah Estrin, Roch Gu'erin, Scott Shenker and feedback from RSVP
  817.    collaborators.
  818.  
  819. References
  820.  
  821. [Bak96]  F. Baker.  RSVP Cryptographic Authentication "Internet-Draft",
  822.     draft-ietf-rsvp-md5-02.txt, 1996.
  823.  
  824. [RSVPSP]  R. Braden, L. Zhang, S. Berson, S. Herzog, and S. Jamin,
  825.     Resource ReSerVation Protocol (RSVP) Version 1 Functional
  826.     Specification.  "Internet-Draft", draft-ietf-rsvp-spec-14.txt, Nov.
  827.     1996.
  828.  
  829. [Her95]  S. Herzog, S. Shenker, and D. Estrin.
  830.      {Sharing the Cost of Multicast Trees: An Axiomatic Analysis
  831.      {"Proceedings of ACM SIGCOMM '95", Aug. 1995.
  832.  
  833. [Ext]  S. Herzog RSVP Extensions for Policy Control.  "Internet-Draft",
  834.  
  835.  
  836.  
  837. Shai Herzog               Expiration: May 1997                 [Page 14]
  838.  
  839.  
  840.  
  841.  
  842.  
  843. Internet Draft         Local Policy Modules (LPM)          November 1996
  844.  
  845.  
  846.     draft-ietf-rsvp-policy-ext-01.[ps,txt], Nov. 1996.
  847.  
  848. [Arch]  S. Herzog Accounting and Access Control Policies for Resource
  849.     Reservation Protocols. "Internet-Draft", draft-ietf-rsvp-policy-
  850.     arch-01.[ps,txt], Nov. 1996.
  851.  
  852.  
  853.  
  854. Author's Address
  855.  
  856. Shai Herzog
  857. IBM T. J. Watson Research Center,
  858. P.O. Box 704
  859. Yorktown Heights, NY 10598
  860.  
  861. Phone: (914) 784-6059
  862. Email: herzog@watson.ibm.com
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897. Shai Herzog               Expiration: May 1997                 [Page 15]
  898.  
  899.  
  900.  
  901.  
  902.  
  903. Internet Draft         Local Policy Modules (LPM)          November 1996
  904.  
  905.  
  906. 12. A List of Currently Defined Policies
  907.  
  908. Usage policies are assumed to be local by nature, however, interoperable
  909. framework implies the need to standardize the format and contents of
  910. inter-provider policies.  The policy element space is partitioned
  911. accordingly into two ranges; the lower range is reserved for globally
  912. meaningful policies, while the upper range is set aside for purely local
  913. policies.  The following list details the currently defined policy
  914. elements:
  915.  
  916. 0: NULL/default
  917.  
  918.  
  919.      This is a reserved type that is used for unrecognized objects.
  920.  
  921. 1: String Credentials (Sender or Receiver)
  922.  
  923.      A single character string.
  924.      The string must be NULL-terminated and padded to
  925.      multiple of 32 bits.
  926.  
  927. 2: Reservation Ack
  928.  
  929.      In its simplest form, this policy requires only a header and no
  930.      actual policy information.
  931.  
  932.      If included in Resv messages, it requests an ack of the current
  933.      reservation. When included in the Path message, it confirms the
  934.      Reservation succeeded all the way to the source (end-to-end).
  935.  
  936. 3: MultiCost (Cost Allocation) [Her95]
  937.  
  938.      Upstream Format:
  939.           FLOW_SPEC object,
  940.           32bit unsigned counter: the number of downstream
  941.           members for FLOW_SPEC.
  942.  
  943.      Downstream Format:
  944.           FLOW_SPEC object,
  945.           32bit unsigned counter: cost unit type
  946.           Double Precision Float: allocated cost (units)
  947.  
  948.  
  949. Local Policies:
  950.  
  951.      All P-types values that are not defined in this document are
  952.      available for local use. We recommend that you choose local policy
  953.      P-types starting at 65535 and going down, to prevent conflicts when
  954.      the list in this appendix grows.
  955.  
  956.  
  957. Shai Herzog               Expiration: May 1997                 [Page 16]
  958.  
  959.  
  960.  
  961.  
  962.  
  963. Internet Draft         Local Policy Modules (LPM)          November 1996
  964.  
  965.  
  966. 13. Semantic Fragmentation
  967.  
  968. IP style fragmentation is best suited for cases where nothing but the
  969. complete set of fragments will do.  Policies enjoy a different
  970. semantics. They are compiled from the start as a list of smaller,
  971. independent elements, which makes it ideal for semantic fragmentation.
  972. When policies are fragmented into independent elements, the loss of some
  973. elements does not invalidate others that were received properly.
  974. Moreover, the received elements can be incrementally added to form a
  975. workable (even if not complete) policy.  The consequences are that there
  976. is no need for fragmentation negotiation between the sender and
  977. receiver; the sender may fragment the object into its desired level of
  978. details.  The receiver may use its preferred reassembly policy. (i.e.,
  979. what to do when fragments are missing).
  980.  
  981. Semantic fragmentation imposes an added burden on state management since
  982. the absence of a policy-element is ambiguous.  Consider the case were a
  983. new policy element P_i is introduced but an older policy element P_j is
  984. lost. One option would be to apply only the new policy in P_i, but
  985. another could be to use the previously received P_j along with the new
  986. P_i to maintain consistency (Assuming the state in P_j had not timed out
  987. yet).  This implies the need for a time-out (and possibly a teardown)
  988. mechanism for each {policy-element, FILTER_SPEC} object pair.
  989.  
  990. 13.1 Fragmentation Example
  991.  
  992.    Semantic fragmentation is context sensitive and therefore can only be
  993.    performed by the same handlers that assemble specific policy elements
  994.    and understand their internal semantics. Clearly, the following
  995.    example is not universal since it assumes specific policy semantics.
  996.  
  997.    Consider the following fragmentation example where S_i denotes a
  998.    FilterSpec for sender i, P_j[i..j] represents a policy element that
  999.    is associated with individual senders from the set (S_i,... ,S_j),
  1000.    and * is a wildcard, all senders, operator.  Let us further assume
  1001.    that the original POLICY_DATA object is:
  1002.  
  1003.    (1)  S_1,...,S_n,P_1[i..j], P_2[k..l], P_3[*]
  1004.  
  1005.    First, we can separate the different policy elements since each of
  1006.    them is an independent unit. (1 into 2.1 + 2.2 + 2.3)
  1007.  
  1008.    (2.1)  S_1,...,S_n, P_1[i..j]
  1009.    (2.2)  S_1,...,S_n, P_2[k..l]
  1010.    (2.3)  S_1,...,S_n, P_3[*]
  1011.  
  1012.    Now, we can compress the source list by eliminating irrelevant
  1013.    sources:
  1014.  
  1015.  
  1016.  
  1017. Shai Herzog               Expiration: May 1997                 [Page 17]
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023. Internet Draft         Local Policy Modules (LPM)          November 1996
  1024.  
  1025.  
  1026.    (3.1)  S_i,...,S_j, P_1[i..j]
  1027.    (3.2)  S_k,...,S_l, P_2[k..l]
  1028.    (3.3)  S_1,...,S_n, P_3[*]
  1029.  
  1030.    Finally, we can break each non-wildcard policy element and attach it
  1031.    to its corresponding filter: (3.1 into 4.1.i..4.1.j)
  1032.  
  1033.    (4.1.i)  S_i,P_1[i]
  1034.  
  1035.    (4.1.j)  S_j,P_1[j]
  1036.  
  1037.    We could do the same for 3.2, however, P_3 could not be broken to
  1038.    smaller semantic pieces since is a wildcard policy.
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077. Shai Herzog               Expiration: May 1997                 [Page 19]
  1078.  
  1079.  
  1080.