Making a QoS Reservation

The rapi_reserve() call is used by the receiver to make a reservation or change a reservation. The call specifies a reservation style, filterspecs (data senders), and flowspecs (QoS specifications).

This example shows how a receiver makes or changes a reservation:

#define MAX_RSVP_SENDERS 10
    int retcode;
    rapi_styleid_t rapiStyle = RAPI_RSTYLE_FIXED; /* fixed reservation */
    int filterSpecCount;
    rapi_filter_t filterSpec[MAX_RSVP_SENDERS];
    int flowSpecCount;
    rapi_flowspec_t flowSpec[MAX_RSVP_SENDERS];

    filterSpecCount = 1;   /* one specified sender this time */
    /* set the object size and form in the object header */
    filterSpec[0].len = sizeof(rapi_hdr_t) + sizeof(rapi_filter_base_t);
    filterSpec[0].form = RAPI_FILTERFORM_BASE;
    /* fill in the body of the filterspec object */
    filterSpec[0].filter.base.sender = sndAddr; /* copied from path event */

    flowSpecCount = 1;     /* one flowspec this time */
    /* set the object size and form in the object header */
    flowSpec[0].len = sizeof(rapi_hdr_t) + sizeof(CL_flowspec_t);
    flowSpec[0].form = RAPI_FORMAT_IS_CL;
    /* fill in the body of the flowspec object */
    flowSpec[0].cl_tspec_r = 100000;
    flowSpec[0].cl_tspec_b = 2600;
    flowSpec[0].cl_tspec_p = 100000;
    flowSpec[0].cl_tspec_m = 1300;
    flowSpec[0].cl_tspec_M = 1300;

    retcode = rapi_reserve(
            sessID,  /* session id */
            RAPI_REQ_CONFIRM,    /* flags */
            NULL,    /* rcv host addr (optional, sessID has destination) */
            rapiStyle,    /* style ID */
            NULL,    /* style extension, not supported */
            NULL,    /* receiver policy, not supported */
            filterSpecCount,
            filterSpec,   /* array of filterspecs */
            flowSpecCount,
            flowSpec      /* array of flowspecs */
            );
    if (retcode)
        printf("rapi_reserve() error %d\n", retcode);

The rapi_reserve() call above has the optional RAPI_REQ_CONFIRM flag, that asks for a confirmation message to be sent if the reservation is made. Such an event indicates that the reservation had a very high probability of succeeding.

After making the reservation, the receiver should start listening for the data stream on a data socket.


[Back: Callback Function Example]
[Next: Receiving a Reservation Message]