Skip to content

Conversation

juagargi
Copy link
Contributor

@juagargi juagargi commented Feb 7, 2020

Capnp messages for inter COLIBRI service communication.
Requests and responses for segment and e2e reservations. All of these messages will travel as payload of a packet that will also contain a hop by hop colibri extension.


This change is Reviewable

Copy link
Contributor

@oncilla oncilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 0 of 3 files reviewed, 9 unresolved discussions (waiting on @juagargi)

a discussion (no related file):

Requests and responses for segment and e2e reservations. All of these messages will travel as payload of a hop by hop colibri extension.

Wait, that is not true, right?
The payloads are the l4 payloads in the packet. the HBH extension header does not contain this payload.



proto/colibri.capnp, line 17 at r1 (raw file):

}

struct ReservationIndex {

Does this need to be its own struct?


proto/colibri.capnp, line 51 at r1 (raw file):

# Travel inside a hop by hop colibri extension.
struct SegmentSetupResData {
    setup @0 :SegmentSetupReqData; # the response is sent along the path in the opposite direction as the request

This should be a union, no?


proto/colibri.capnp, line 57 at r1 (raw file):

# Request to renew an existing segment reservation.
# Travel inside a hop by hop colibri extension (SegmentReservationID and index available externally).
struct SegmentRenewalData {

A renewal request should have the same format as the setup, no?


proto/colibri.capnp, line 69 at r1 (raw file):


# Telescoped segment reservation newewal. They travel inside a hop by hop extension.
struct SegmentTelesRenewalData {}   # empty (SegmentReservationID and index from hop by hop extension)

I don't follow the reasoning here, in the renewal there will be a new index.
Every AS needs to agree on a bandwidth again, no?

How can this be empty?


proto/colibri.capnp, line 72 at r1 (raw file):


# tear down a segment reservation.
struct SegmentTeardownData {}   # empty (SegmentReservationID and index from hop by hop extension)

There is no way of indicating what caused the teardown to fail.


proto/colibri.capnp, line 76 at r1 (raw file):

# Segment reservation index confirmation request.
# They travel inside hop by hop colibri extension.
struct SegmentIndexConfirmationData {

The point of index confirmation is to confirm the index, without actually using it.
As soon as an index is used, it is no longer permitted to use previous indexes.

Thus, you cannot simply use the index from the HBH extension/


proto/colibri.capnp, line 81 at r1 (raw file):


# removes a pending segment reservation.
struct SegmentCleanupData {}    # empty (SegmentReservationID and index from hop by hop extension)

How does that work? There is no reservation yet when we do cleanup.


proto/colibri.capnp, line 84 at r1 (raw file):


# Setup an E2E reservation. Sent in a hop by hop colibri extension through a stitched segment reservation.
struct E2ESetupReqData {

The request can already fail, there is no way to indicate the error.

@oncilla oncilla changed the title Added AS to AS capnp colibri messages COLIBRI: AS-to-AS capnp definitions Feb 12, 2020
Copy link
Contributor Author

@juagargi juagargi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 0 of 3 files reviewed, 10 unresolved discussions (waiting on @oncilla)

a discussion (no related file):

Previously, Oncilla wrote…

Requests and responses for segment and e2e reservations. All of these messages will travel as payload of a hop by hop colibri extension.

Wait, that is not true, right?
The payloads are the l4 payloads in the packet. the HBH extension header does not contain this payload.

Yes, poor wording. Should have been:
All of these messages will travel as payload of a packet that will also contain a hop by hop colibri extension.
Editing description in PR.



proto/colibri.capnp, line 17 at r1 (raw file):

Previously, Oncilla wrote…

Does this need to be its own struct?

Done.


proto/colibri.capnp, line 41 at r1 (raw file):

    minBW @0 :UInt8;
    maxBW @1 :UInt8;
    accBW @2 :UInt8;

I've removed the accBW as it can be derived directly from the allocationTrail (accBW = min(maxBW forall maxBW in allocationTrail)


proto/colibri.capnp, line 51 at r1 (raw file):

Previously, Oncilla wrote…

This should be a union, no?

Yes. Each AS can keep a copy of the request, and then when the response comes back, recover the copy from the store. The token would be enough if success, otherwise the previous setup.


proto/colibri.capnp, line 57 at r1 (raw file):

Previously, Oncilla wrote…

A renewal request should have the same format as the setup, no?

I've added the allocation trail and the min and max BW, the only fields that can change from the original setup.


proto/colibri.capnp, line 69 at r1 (raw file):

Previously, Oncilla wrote…

I don't follow the reasoning here, in the renewal there will be a new index.
Every AS needs to agree on a bandwidth again, no?

How can this be empty?

Done.


proto/colibri.capnp, line 72 at r1 (raw file):

Previously, Oncilla wrote…

There is no way of indicating what caused the teardown to fail.

Done.


proto/colibri.capnp, line 76 at r1 (raw file):

Previously, Oncilla wrote…

The point of index confirmation is to confirm the index, without actually using it.
As soon as an index is used, it is no longer permitted to use previous indexes.

Thus, you cannot simply use the index from the HBH extension/

Added the index value.


proto/colibri.capnp, line 81 at r1 (raw file):

Previously, Oncilla wrote…

How does that work? There is no reservation yet when we do cleanup.

Added an ID and index.


proto/colibri.capnp, line 84 at r1 (raw file):

Previously, Oncilla wrote…

The request can already fail, there is no way to indicate the error.

My understanding is that when an e2e request is faied, a failed response is sent in the opposite direction.
The response to the request, E2ESetupResData, has an errorCode field.

Copy link
Contributor

@oncilla oncilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 1 of 3 files at r1, 2 of 2 files at r2.
Reviewable status: all files reviewed, 4 unresolved discussions (waiting on @juagargi and @oncilla)


proto/colibri.capnp, line 41 at r1 (raw file):

Previously, juagargi (Juan A. García Pardo Giménez de los Galanes) wrote…

I've removed the accBW as it can be derived directly from the allocationTrail (accBW = min(maxBW forall maxBW in allocationTrail)

alright.


proto/colibri.capnp, line 57 at r1 (raw file):

Previously, juagargi (Juan A. García Pardo Giménez de los Galanes) wrote…

I've added the allocation trail and the min and max BW, the only fields that can change from the original setup.

surely the index can also change.
Also, what about the split class?

Did the restrictions on the renewal change? If so, can you point me to the new spec.


proto/colibri.capnp, line 84 at r1 (raw file):

Previously, juagargi (Juan A. García Pardo Giménez de los Galanes) wrote…

My understanding is that when an e2e request is faied, a failed response is sent in the opposite direction.
The response to the request, E2ESetupResData, has an errorCode field.

The request still travels the full path to collect what the remaining ASes would have been willing to permit.

Copy link
Contributor Author

@juagargi juagargi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 3 unresolved discussions (waiting on @oncilla)


proto/colibri.capnp, line 57 at r1 (raw file):

Previously, Oncilla wrote…

surely the index can also change.
Also, what about the split class?

Did the restrictions on the renewal change? If so, can you point me to the new spec.

I only have your thesis as a reference. I understood that during the renewal the min and max BW could be adjusted (and I understood that nothing more), 3.3.2 pp15.
Also, I don't think I understand how the new index is requested.


proto/colibri.capnp, line 84 at r1 (raw file):

Previously, Oncilla wrote…

The request still travels the full path to collect what the remaining ASes would have been willing to permit.

I didn't know that. In the thesis, for the ephemeral setup, it specifies only the reservation ID and token, e.g. figure 4.10.
Do you want to extend this with an allocation sequence and error code?

Copy link
Contributor

@oncilla oncilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @juagargi)


proto/colibri.capnp, line 57 at r1 (raw file):
a reservation is identified by its ID plus its index.

So an AS creates an initional reservation. This will be ID+0. When it wants to renew the reservation. It will try to get reservation ID+1. Then ID+2.. and so on.

From that section:

A renewal request renews a given steady reservation. Renewing a reservation
is done by adding a new index to the given reservation.

Maybe Section 3.2.7 clears things up a bit.


proto/colibri.capnp, line 84 at r1 (raw file):
The failed request can be seen in 4.11, not 4.10.

I admit, this is not formulated well in the thesis:

3.3.5

When a request is failed, the contents are transformed to accumulate the bandwidth
classes that the ASes would have been willing to grant. No reservation is created
and no bandwidth is allocated.

Copy link
Contributor Author

@juagargi juagargi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @oncilla)


proto/colibri.capnp, line 57 at r1 (raw file):

Previously, Oncilla wrote…

a reservation is identified by its ID plus its index.

So an AS creates an initional reservation. This will be ID+0. When it wants to renew the reservation. It will try to get reservation ID+1. Then ID+2.. and so on.

From that section:

A renewal request renews a given steady reservation. Renewing a reservation
is done by adding a new index to the given reservation.

Maybe Section 3.2.7 clears things up a bit.

Thanks for all the clarifications. At the end the renewal looks the same as a setup, I've replaced the request and response of the renewals with the same structures used in the setups.


proto/colibri.capnp, line 84 at r1 (raw file):

Previously, Oncilla wrote…

The failed request can be seen in 4.11, not 4.10.

I admit, this is not formulated well in the thesis:

3.3.5

When a request is failed, the contents are transformed to accumulate the bandwidth
classes that the ASes would have been willing to grant. No reservation is created
and no bandwidth is allocated.

Done.
I've now also replaced the e2e renewal with the setup struct, PTAL.

@juagargi juagargi force-pushed the colibri.capnp branch 2 times, most recently from 28de1a3 to d584148 Compare February 28, 2020 10:26
ReservationIndex not needed as type.
Removed accBW from setup.
SegmentSetupResData contains a union.
Extended SegmentRenewalData.
Removed SegmentTelesRenewalData.
Added SegmentTeardownResData.
Extended SegmentIndexConfirmationData with an index.
Extended SegmentCleanupData with an ID and index.
Renewals use the setup structs.
The e2e setup needs a failure group, to collect the bandwidths. Error code and inf field
are needed as well.
Copy link
Contributor

@oncilla oncilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 2 of 2 files at r3.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved

Copy link
Contributor

@oncilla oncilla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:lgtm:

Reviewable status: :shipit: complete! all files reviewed, all discussions resolved

@oncilla oncilla merged commit bf51fb3 into scionproto:master Mar 2, 2020
@juagargi juagargi deleted the colibri.capnp branch March 4, 2020 13:14
stygerma pushed a commit to stygerma/scion that referenced this pull request Mar 26, 2020
This PR adds the capnp messages for the inter COLIBRI service communication.
This includes the requests and replies for segment and e2e reservations.

All of these messages will be encapsulated inside a l4 payload in a packet that has a COLIBRI extension in the extension headers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants