summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5043.txt
blob: fd15f0b52d78ab90cc16d167afe0f83a252cec85 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
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
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
Network Working Group                                    C. Bestler, Ed.
Request for Comments: 5043                                      Neterion
Category: Standards Track                                R. Stewart, Ed.
                                                     Cisco Systems, Inc.
                                                            October 2007


              Stream Control Transmission Protocol (SCTP)
                 Direct Data Placement (DDP) Adaptation

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This document specifies an adaptation layer to provide a Lower Layer
   Protocol (LLP) service for Direct Data Placement (DDP) using the
   Stream Control Transmission Protocol (SCTP).




























Bestler & Stewart           Standards Track                     [Page 1]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
     1.1.  Conventions  . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  Definitions  . . . . . . . . . . . . . . . . . . . . . . . . .  3
   3.  Motivation . . . . . . . . . . . . . . . . . . . . . . . . . .  5
   4.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
   5.  Data Formats . . . . . . . . . . . . . . . . . . . . . . . . .  5
     5.1.  Adaptation Layer Indicator . . . . . . . . . . . . . . . .  5
     5.2.  Payload Data Chunks  . . . . . . . . . . . . . . . . . . .  6
       5.2.1.  DDP Source Sequence Number (DDP-SSN) . . . . . . . . .  6
       5.2.2.  DDP Segment Chunk  . . . . . . . . . . . . . . . . . .  7
       5.2.3.  DDP Stream Session Control . . . . . . . . . . . . . .  7
   6.  DDP Stream Sessions  . . . . . . . . . . . . . . . . . . . . .  8
     6.1.  Sequencing . . . . . . . . . . . . . . . . . . . . . . . .  9
     6.2.  Legal Sequence: Active/Passive Session Accepted  . . . . .  9
     6.3.  Legal Sequence: Active/Passive Session Rejected  . . . . .  9
     6.4.  Legal Sequence: Active/Passive Session Non-ULP Rejected  . 10
     6.5.  ULP-Specific Sequencing  . . . . . . . . . . . . . . . . . 10
     6.6.  Other Sequencing Rules . . . . . . . . . . . . . . . . . . 10
   7.  SCTP Endpoints . . . . . . . . . . . . . . . . . . . . . . . . 11
     7.1.  Adaptation Layer Indication Restriction  . . . . . . . . . 11
     7.2.  Multihoming Implications . . . . . . . . . . . . . . . . . 11
   8.  Number of Streams  . . . . . . . . . . . . . . . . . . . . . . 12
   9.  Fragmentation  . . . . . . . . . . . . . . . . . . . . . . . . 12
   10. Sequenced Unordered Operation  . . . . . . . . . . . . . . . . 13
   11. Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . 13
     11.1. Association Initialization . . . . . . . . . . . . . . . . 13
     11.2. Chunk Bundling . . . . . . . . . . . . . . . . . . . . . . 14
     11.3. Association Termination  . . . . . . . . . . . . . . . . . 14
   12. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 15
   13. Security Considerations  . . . . . . . . . . . . . . . . . . . 15
   14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 16
   15. Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 16
   16. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
     16.1. Normative References . . . . . . . . . . . . . . . . . . . 16
     16.2. Informative References . . . . . . . . . . . . . . . . . . 16














Bestler & Stewart           Standards Track                     [Page 2]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


1.  Introduction

   This document describes a method to adapt Direct Data Placement
   [RFC5041] to Stream Control Transmission Protocol (SCTP) [RFC4960].

   Some implementations may include this adaptation layer within their
   SCTP implementations to obtain maximum performance, but the behavior
   of SCTP will be unaffected.  An SCTP layer used solely by this
   adaptation layer is able to take certain optimizations based on the
   limited subset of SCTP capabilities used.  In order to allow
   optimization for these implementations, we specify the use of the new
   adaptation layer indication as defined in [RFC5061]

1.1.  Conventions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].

2.  Definitions

   DDP -  See Direct Data Placement Protocol.

   DDP Endpoint -  The logical sender/receiver of DDP Segments.  An SCTP
      stream pair is not assumed to have a DDP Endpoint.  DDP Segments
      may only be sent once a DDP Endpoint has been assigned to an SCTP
      stream pair by a local interface.

   DDP Source Stream Sequence Number (DDP-SSN) -  A stream-specific
      sequence number assigned by the adaptation layer for each SCTP
      Data Chunk sent.  This is the order that chunks were submitted to
      SCTP, no matter in what order they are actually sent or received.

   DDP Segment -  The smallest unit of data transfer for the DDP
      protocol.  It includes a DDP Header and ULP Payload (if present).
      A DDP Segment should be sized to fit within the Lower Layer
      Protocol MULPDU (Marker PDU Aligned (MPA) Upper Layer PDU).

   DDP Segment Chunk -  An SCTP Payload Data Chunk that encapsulates the
      DDP-SSN and a DDP Segment.

   DDP Stream -  A sequence of DDP Segments whose ordering is defined by
      the LLP.  For SCTP, a DDP stream maps directly to a bidirectional
      pair of SCTP streams with the same Stream IDs.  Note that DDP has
      no ordering guarantees between DDP streams.






Bestler & Stewart           Standards Track                     [Page 3]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   DDP Stream Session -  A single pairing of DDP Endpoints over a DDP
      stream that lasts from an Initiation message through the
      Termination message(s).

   DDP Stream Session Control Message -  A message that is used to
      control the association of the DDP Endpoint with the DDP stream.

   Direct Data Placement Protocol (DDP) -  A wire protocol that supports
      Direct Data Placement by associating explicit memory buffer
      placement information with the LLP payload units.

   Lower Layer Protocol (LLP) -  In the context of DDP, the protocol
      layer beneath RDMA that provides a reliable transport service.
      The SCTP DDP adaption is one of the initially defined LLPs for
      DDP.

   Protection Domain -  A common local interface convention to control
      which Steering Tags (STags) are valid with which DDP Endpoints.
      Under this convention, both the Steering Tag and DDP Endpoint are
      created within the context of a Protection Domain, and the
      Steering Tag may only be enabled for DDP Endpoints created under
      the same Protection Domain.

   RDMA -  Remote Direct Memory Access.

   RNIC -  RDMA Network Interface Card.

   SCTP association -  A protocol relationship between two SCTP
      endpoints.  An SCTP association supports multiple SCTP streams.

   SCTP Data Chunk -  An SCTP Chunk used to convey Payload Data.  There
      can be multiple Chunks within each SCTP packet.  Other Chunks are
      used to control the SCTP Association.

   SCTP endpoint -  The logical sender/receiver of SCTP packets.  On a
      multihomed host, an SCTP endpoint is represented to its peers as a
      combination of an SCTP port number and a set of eligible
      destination transport addresses to which SCTP packets can be sent.

   SCTP Stream -  A unidirectional logical channel established from one
      to another associated SCTP endpoint.  There can be multiple SCTP
      streams within each SCTP association.  An SCTP stream is used to
      form one direction of a DDP stream.

   Transmission Sequence Number (TSN) -  A 32-bit sequence number used
      internally by SCTP.  One TSN is attached to each chunk containing
      user data to permit the receiving SCTP endpoint to acknowledge its
      receipt and detect duplicate deliveries.



Bestler & Stewart           Standards Track                     [Page 4]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   Upper Layer Protocol (ULP) -  In the context of RDMA protocol
      specifications, this is the layer using RDMA services.  Typically,
      this is an application or middleware.  A primary goal of RDMA
      protocols is to enable direct transfer of payload to/from ULP
      Buffers.

3.  Motivation

   This document specifies an adaptation layer which fulfills the
   requirements of a Lower Layer Protocol (LLP) for DDP using a specific
   subset of SCTP capabilities.

   The defined protocol is intended to be implementable over existing
   SCTP stacks, while clearly defining what portions of SCTP are
   required to enable an implementation to be optimized specifically to
   support DDP.

4.  Overview

   The adaptation layer uses a pair of like-numbered SCTP streams within
   an SCTP Association to provide a reliable DDP stream between two DDP
   Endpoints.  Except as specifically noted, each DDP Segment submitted
   by the DDP layer is encoded as a single unordered SCTP Data Chunk.
   In addition to the DDP Segment, the Data Chunk also contains a
   sequence number (DDP-SSN) that reflects the order in which DDP
   submitted the segments for that stream.

   A DDP Stream Session is defined by DDP Stream Session Control Chunks
   that manage the state of the DDP Stream Session.  These Chunks
   dynamically bind DDP Endpoints to the DDP Stream Session, and DDP
   Segment Chunks are used to reliably deliver DDP Segments with the
   session.

5.  Data Formats

5.1.  Adaptation Layer Indicator

   The DDP/SCTP adaptation layer uses all streams within an SCTP
   association.  An SCTP Association that has had the DDP Adaptation
   Indication negotiated will carry only SCTP Data Chunks as defined in
   this document.

   It is presumed that the handling of incoming data chunks for DDP-
   enabled associations is sufficiently different than for routine SCTP
   associations that it is undesirable to require support for mixing DDP
   and non-DDP streams in a single association.  More than a single
   association is required if an application desires to utilize both DDP
   and non-DDP traffic with the same remote host.



Bestler & Stewart           Standards Track                     [Page 5]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   We define an Adaptation Indication that MUST appear in the INIT or
   INIT-ACK with the following format as defined in [RFC5061].

   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Type =0xC006           |    Length = Variable          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Adaptation Indication                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Adaptation Indication:

   The following value has been assigned for DDP.

         DDP                        - 0x00000001


5.2.  Payload Data Chunks

   The DDP SCTP adaptation uses two types of SCTP Payload Data Chunks,
   differentiated by the Payload Protocol Identifier:

      DDP Segment Chunks are used to reliably deliver DDP Segments sent
      between DDP Endpoints.

      DDP Stream Session Control Messages are used to establish and tear
      down DDP Stream Sessions, specifically by controlling the binding
      of DDP Endpoints with SCTP streams.


   Payload Protocol Identifier:

   The following value are defined for DDP in this document
   and have been assigned by IANA:

         DDP Segment Chunk          - 16
         DDP Stream Session Control - 17


5.2.1.  DDP Source Sequence Number (DDP-SSN)

   All SCTP Payload Data Chunks used by this adaptation layer include a
   DDP Source Sequence Number (DDP-SSN).  The DDP-SSN tracks the
   sequence in which the messages were submitted to the SCTP layer for
   the SCTP stream in use.  The DDP-SSN MUST have the same value that
   the SCTP Stream Sequence Number (SSN) would have been assigned had
   ordered SCTP Payload Data Chunks been used rather than unordered.



Bestler & Stewart           Standards Track                     [Page 6]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   The rationale for specifying the DDP-SSN is as follows:

   o  The SCTP Stream Sequence Number (SSN) is not suitable for this
      purpose because all messages defined by this document use
      unordered Payload Data Chunks to ensure prompt delivery from the
      receiving SCTP layer.

   o  The SCTP Transmission Sequence Number (TSN) is not suitable for
      determining the original order of Data Chunks within a stream.
      The sending SCTP layer is allowed to optimize the transmission
      sequence of unordered Data Chunks to encourage Chunk Bundling, or
      for other purposes.

5.2.2.  DDP Segment Chunk

   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          DDP-SSN              |         DDP Segment           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
   |                                                               |
   |                         ...                                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   DDP Segments are as defined in [RFC5041].  The DDP Segment Chunk
   serves the same purpose as the MPA [RFC5044] Upper Layer PDU (MULPDU)
   in that it carries DDP Segments over a reliable protocol with added
   sequencing information.

5.2.3.  DDP Stream Session Control

   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          DDP-SSN              |    Function Code              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Private Data (Dependent on Function Code)          |
   |                         ...                                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   The following function code values are defined for DDP in
   this document:

         DDP Stream Session Initiate         - 0x001
         DDP Stream Session Accept           - 0x002
         DDP Stream Session Reject           - 0x003
         DDP Stream Session Terminate        - 0x004




Bestler & Stewart           Standards Track                     [Page 7]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   ULP-supplied Private Data MUST be included for DDP Stream Session
   Initiate, DDP Stream Session Accept, and DDP Stream Session Reject
   messages.  However, the ULP supplied Private DATA MAY be of zero
   length.

   Private Data length MUST NOT exceed 512 bytes in any message.

   Private Data MUST NOT be included in the DDP Stream Session Terminate
   message.

   Received DDP Stream Session Control messages SHOULD be reported to
   the ULP.  If reported, any supplied Private Data MUST be available
   for the ULP to examine.

   The DDP/SCTP adaptation layer MAY limit the number of Session
   Initiate requests that it has submitted to the ULP.  When a DDP
   Stream Session Initiate cannot be forwarded to the ULP due to such a
   limit, the adaptation layer MUST respond with a DDP Stream Session
   Terminate message.

6.  DDP Stream Sessions

   A DDP Endpoint is the logical sender/receiver of DDP Segments.  A DDP
   stream connects two DDP Endpoints using a matched pair of SCTP
   streams having the same SCTP Stream Identifiers.

   A DDP Stream Session defines the sequence of Data Chunks exchanged
   between two DDP Endpoints over a DDP stream that has a distinct
   beginning and end as defined in the following section.  Data Chunks
   from one DDP Stream Session are never carried over to the next
   session.  Each Data Chunk unambiguously belongs to exactly one
   session.  The DDP-SSNs assigned to the Data Chunks for a session MUST
   NOT have any gaps.

   The local interface MAY dynamically associate a DDP Endpoint with the
   DDP stream based upon the initial exchanges of a DDP Session, and
   dynamically terminate that association at the session's end.
   Alternately, a specialized local interface could simply statically
   map DDP Endpoints to DDP streams.

   Conventionally, local interfaces for RDMA have deferred the selection
   of the DDP Endpoint until after the ULP decides to accept an RDMA
   connection request.  But that is a local interface choice and not a
   wire protocol requirement.

   A DDP stream is associated with at most one Protection Domain during
   a single DDP Stream Session.  On the passive side, the association is
   typically deferred until the DDP Stream Session Accept message.



Bestler & Stewart           Standards Track                     [Page 8]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


6.1.  Sequencing

   The DDP-SSN is reset to zero at the beginning of each DDP Stream
   Session.

   The normative sequence for considering Payload Data Chunks within a
   given session is based upon each Data Chunk's DDP-SSN.  When
   considered in this normative sequence, all sessions MUST conform to
   one of the patterns defined in this section.

   If the adaptation layer receives a Payload Data Chunk that conforms
   to none of the enumerated legal patterns, the DDP Stream Session MUST
   be terminated.

6.2.  Legal Sequence: Active/Passive Session Accepted

   In this DDP Stream Session sequence, one DDP Endpoint assumes the
   active role in requesting a DDP Stream Session, which the other side
   accepts.

      Active side sends a DDP Stream Session Initiate message.

      Passive side sends a DDP Stream Session Accept message.

      Each side may then send zero or more DDP Segments with increasing
      DDP-SSNs, subject to any flow control imposed by other protocol
      layers.

      The final User Data Chunk for each side MAY be a DDP Stream
      Terminate.  At least one side MUST send a DDP Stream Terminate.
      Note that this would follow any RDMAP Terminate message, which to
      the adaptation layer is simply another DDP Segment.

6.3.  Legal Sequence: Active/Passive Session Rejected

   DDP Stream Sessions allow each party to send a single non-payload
   message before the other end commits specific resources to the
   session.  This allows each end to determine which resources are to be
   used, and how they are to be configured, or even if the session
   should be granted.

   These decisions MAY be influenced by the need to assign a specific
   Protection Domain, to determine how many RDMA Read Credits are
   required, or to determine how many receive operations the ULP should
   enable.






Bestler & Stewart           Standards Track                     [Page 9]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   Because of these or other factors, the passive side MAY choose to
   reject a DDP Stream Session Request.  This results in the following
   legal sequence:

      Active side sends a DDP Stream Session Initiate message.

      Passive side sends a DDP Stream Session Reject message.

   A DDP Stream Session Reject message MUST NOT be sent unless the
   rejection is at the direction of the ULP.

6.4.  Legal Sequence: Active/Passive Session Non-ULP Rejected

   Acceptance or rejection of DDP Stream Session Initiate messages
   SHOULD be under the control of the ULP.  This MAY require passing an
   event to the ULP.  There MUST be a finite limit on the number of such
   requests that are pending a ULP decision.  When more session requests
   are received, the passive side MUST respond to the Initiate message
   with a DDP Stream Terminate Message.

6.5.  ULP-Specific Sequencing

   An implementation MAY choose to support additional ULP-specific
   sequences, but MUST NOT do so unless requested to do so by the ULP.

   A defined ULP MUST be able to operate using only the defined
   mandatory session sequences.  Any additional sequences must be used
   only for optional optimizations.

6.6.  Other Sequencing Rules

   A DDP Stream Session Control message MUST NOT be sent if it may be
   received before a prior DDP Stream Session Control message within the
   same DDP Stream Session.

   An active side of a DDP Stream Session MUST NOT send a DDP Segment
   that might be received before the DDP Stream Session Initiate
   message.

   This MAY be determined by SCTP acking of the Data Chunk used to carry
   the DDP Stream Session Initiate message, or by receipt of a
   responsive DDP Stream Session Control message.

   A DDP Stream Identifier MUST NOT be reused for another DDP Stream
   Session while any Data Chunk from a prior session might be
   outstanding.





Bestler & Stewart           Standards Track                    [Page 10]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


7.  SCTP Endpoints

7.1.  Adaptation Layer Indication Restriction

   The local interface MUST allow the ULP to specify an SCTP endpoint to
   use a specific Adaptation Indication.  It MAY require the ULP to do
   so.

   Once an endpoint decides on its acceptable Adaptation Indication(s),
   it SHOULD terminate all requests to establish an association with any
   different Adaptation Indication.

   An SCTP implementation MAY choose to accept association requests for
   a given SCTP endpoint only until one association for the endpoint has
   been established.  At that point, it MAY choose to restrict all
   further associations for the same endpoint to use the same Adaptation
   Indication.

7.2.  Multihoming Implications

   SCTP allows an SCTP endpoint to be associated with multiple IP
   addresses, potentially representing different interface devices.
   Distribution of the logic for a single DDP stream across multiple
   input devices can be very undesirable, resulting in complex cache
   coherency challenges.  Therefore, the local interface MAY restrict
   DDP-enabled SCTP endpoints to a single IP address, or to a set of IP
   addresses that are all assigned to the same input device ("RNIC").

   The default binding of a DDP-enabled SCTP endpoint SHOULD NOT cover
   more than a single IP address unless doing so results in neither
   additional bus traffic nor duplication of memory registration
   resources.  This will frequently result in a different default than
   for SCTP endpoints that are not DDP enabled.

   Applications MAY choose to avoid using out-of-band methods for
   communicating the set of IP addresses used by an SCTP endpoint when
   there is potential confusion as to the intended scope of the SCTP
   endpoint.  For example, assuming the SCTP endpoint consists of all IP
   addresses Advertised by DNS may work for a general purpose SCTP
   endpoint but not a DDP-enabled one.

   Even when multihoming is supported, ULPs are cautioned that they
   SHOULD NOT use ULP control of the source address in an attempt to
   load-balance a stream across multiple paths.  A receiving DDP/SCTP
   implementation that chooses to support multihoming SHOULD optimize
   its design on the assumption that multihoming will be used for
   network fault tolerance, and not to load-balance between paths.  This
   is consistent with recommended SCTP practices.



Bestler & Stewart           Standards Track                    [Page 11]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


8.  Number of Streams

   DDP streams are bidirectional.  They are always composed by pairing
   the inbound and outbound SCTP streams with the same SCTP Stream
   Identifier.

   The adaptation layer should request the maximum number of SCTP
   streams it will wish to use over the lifetime of the association.
   SCTP streams must still be bound to DDP Endpoints, and a DDP-enabled
   SCTP association does not support ordered Data Chunks.  Therefore,
   the mere existence of an SCTP stream is unlikely to require
   significant supporting resources.

   This mapping uses an SCTP association to carry one or more DDP
   streams.  Each DDP stream will be mapped to a pair of SCTP streams
   with the same SCTP stream number.  The adaptation MUST initialize all
   of its SCTP associations with the same number of inbound and outbound
   streams.

9.  Fragmentation

   A DDP/SCTP Receiver already deals with fragmentation at both the IP
   and DDP layers.  Therefore, use of SCTP layer segmenting will be
   avoided for most cases.

   As a Lower Layer Protocol (LLP) for DDP, the SCTP adaptation layer
   MUST inform the DDP layer of the maximum DDP Segment size that will
   be supported.  This should be the largest value that can be supported
   without use of IP or SCTP fragmentation, or 516 bytes, whichever is
   larger.

   A minimum of 516 bytes is required to allow a DDP Stream Session
   Control Message with 512 bytes of Private Data.

   SCTP data chunk fragmentation MUST NOT be used unless the alternative
   is IP fragmentation.

   The SCTP adaptation layer SHOULD set the maximum DDP Segment size
   below the theoretical maximum in order to allow bundling of Control
   Chunks in the same SCTP packet.

   The SCTP adaptation layer MUST reject DDP Segments that are larger
   than the maximum size specified.








Bestler & Stewart           Standards Track                    [Page 12]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


10.  Sequenced Unordered Operation

   The adaptation layer MUST use the Unordered option on all Data Chunks
   (U Flag set to one).  The SCTP layer is expected to deliver unordered
   Data Chunks without delay.

   Because DDP employs unordered SCTP delivery, the receiver MUST NOT
   rely upon the SCTP Transmission Sequence Number (TSN) to imply
   ordering of DDP Segments.  The fact that the SCTP Data Chunk for a
   DDP Segment is prior to the cumulative ack point does not guarantee
   that all prior DDP segments have been placed.  The SCTP sender is not
   obligated to transmit unordered Data Chunks in the order presented.

   The DDP-SSN can be used without special logic to determine the
   submission sequence when the maximum number of in-flight messages is
   less than 32768.  This also applies if the sending SCTP accepts no
   more than 32767 Data Chunks for a single stream without assigning
   TSNs.

   If SCTP does accept more than 32768 Data chunks for a single stream
   without assigning TSNs, the sending DDP must simply refrain from
   sending more than 32767 Data Chunks for a single stream without
   acknowledgment.  Note that it MUST NOT rely upon ULP flow control for
   this purpose.  Typical ULP flow control will deal exclusively with
   untagged messages, not with DDP segments.

   The receiver MAY perform a validity check on received DDP-SSNs to
   ensure that any gap could be accounted for by unreceived Data Chunks.
   Implementations SHOULD NOT allocate resources on the assumption that
   DDP-SSNs are valid without first performing such a validity check.
   An invalid DDP-SSN MAY result in termination of the DDP stream.

11.  Procedures

11.1.  Association Initialization

   At the startup of an association, a DDP/SCTP adaptation layer MUST
   include an adaptation layer indication in its INIT or INIT-ACK (as
   defined in Section 5.1).  After the exchange of the initial first two
   SCTP chunks (INIT and INIT-ACK), an endpoint MUST verify and inspect
   the Adaptation Indication and compare it to the following table to
   determine proper action.









Bestler & Stewart           Standards Track                    [Page 13]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


          Indication |           Action
            type     |
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                     | This indicates that the peer DOES NOT
         NONE        | support ANY DDP or RDMA adaptation, and thus
                     | RDMA and DDP procedures MUST NOT be
                     | performed upon this association.
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                     | This indicates that the peer DOES support
         DDP         | the DDP/SCTP adaptation layer defined here.
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                     | This indicates that the peer DOES NOT
       ANY-OTHER     | support the DDP adaptation, and thus
       Indication    | DDP procedures MUST NOT be performed
                     | upon this association.
   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   An implementation MAY require that all associations for a given SCTP
   endpoint be placed in the same mode.

   The local interface MAY allow the ULP to accept only requests to
   establish an association in a specified mode.

11.2.  Chunk Bundling

   SCTP allows multiple Data Chunks to be bundled in a single SCTP
   packet.  Data chunks containing DDP Segments with untagged messages
   SHOULD NOT be delayed to facilitate bundling.  Data chunks containing
   DDP Segments with tagged messages will generally be full sized, and
   hence not subject to bundling.  However, partial-size tagged messages
   MAY be delayed, as they are frequently followed by a short untagged
   message.

11.3.  Association Termination

   Termination of an SCTP Association due to errors should be handled at
   the SCTP layer.  The RDMAP-defined RDMAP Terminate Message SHOULD NOT
   be sent on each DDP stream when a determination has been made to
   terminate an SCTP association.  Sending that message on each SCTP
   stream could severely delay the termination of the association.

   The local interface SHOULD notify all consumers of DDP streams when
   the underlying SCTP stream has been terminated.

   Other RDMAP-defined Terminate Messages MUST be generated as specified
   when a DDP stream is terminated.  Note that with the SCTP mapping,
   termination of a DDP Stream does not mandate termination of the
   Association.



Bestler & Stewart           Standards Track                    [Page 14]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


12.  IANA Considerations

   This document defines a new SCTP Adaptation Layer Indication
   codepoint for DDP (0x00000001).  [RFC5061] creates the registry from
   which this codepoint has been assigned.

   This document also defines two new SCTP Payload Protocol Identifiers
   (PPIDs).  RFC 4960 [RFC4960] creates the registry from which these
   identifiers have been assigned.  The following values have been
   assigned:

         DDP Segment Chunk           - 16
         DDP Stream Session Control  - 17

13.  Security Considerations

   Any direct placement of memory could pose a significant security risk
   if adequate local controls are not provided.  These threats are
   addressed in the appropriate DDP [RFC5041], RDMA [RFC5040], or
   Security [RFC5042] documents.  This document does not add any
   additional security risks over those found in RFC 4960 [RFC4960].

   The IPsec requirements for Remote Direct Data Placement (RDDP) are
   based on the version of IPsec specified in RFC 2401 [RFC2401] and
   related RFCs, as profiled by RFC 3723 [RFC3723], despite the
   existence of a newer version of IPsec specified in RFC 4301 [RFC4301]
   and related RFCs.  One of the important early applications of the
   RDDP protocols is their use with iSCSI iSER [RFC5046]; RDDP's IPsec
   requirements follow those of IPsec in order to facilitate that usage
   by allowing a common profile of IPsec to be used with iSCSI and the
   RDDP protocols.  In the future, RFC 3723 may be updated to the newer
   version of IPsec; the IPsec security requirements of any such update
   should apply uniformly to iSCSI and the RDDP protocols.

   Additional requirements apply to security for RDDP over SCTP, due to
   the use of SCTP as the transport protocol.  An implementation of
   IPsec for RDDP over SCTP:

   1)  MUST support IPsec functionality for SCTP equivalent to the IPsec
       functionality for TCP that is required by RFC 3723,

   2)  SHOULD support the same level of IPsec functionality for SCTP and
       TCP unless there is no support for TCP, and

   3)  MUST support at least the level of protocol and port selector
       functionality for SCTP that is supported for TCP.





Bestler & Stewart           Standards Track                    [Page 15]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


14.  Contributors

   Many thanks to our contributors who have spent many hours reading and
   reviewing keeping us straight: Sukanta Ganguly an independent
   consultant, Vivek Kashyap of IBM, Jim Pinkerton of Microsoft, and
   Hemal Shah of Broadcom.  Thanks for all your hard work.

15.  Acknowledgments

   The authors would like to thank the following people that have
   provided comments and input: Stephen Bailey, David Black, Douglas
   Otis, Allyn Romanow, and Jim Williams.

16.  References

16.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC3723]  Aboba, B., Tseng, J., Walker, J., Rangan, V., and F.
              Travostino, "Securing Block Storage Protocols over IP",
              RFC 3723, April 2004.

   [RFC4960]  Stewart, R., "Stream Control Transmission Protocol",
              RFC 4960, September 2007.

   [RFC5040]  Recio, R., Metzler, B., Culley, P., Hilland, J., and D.
              Garcia, "A Remote Direct Memory Access Protocol
              Specification", RFC 5040, October 2007.

   [RFC5041]  Shah, H., Pinkerton, J., Recio, R., and P. Culley, "Direct
              Data Placement over Reliable Transports", RFC 5041,
              October 2007.

   [RFC5042]  Pinkerton, J. and E. Deleganes, "Direct Data Placement
              Protocol (DDP) / Remote Direct Memory Access Protocol
              (RDMAP) Security", RFC 5042, October 2007.

   [RFC5061]  Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M.
              Kozuka, "Stream Control Transmission Protocol (SCTP)
              Dynamic Address Reconfiguration", RFC 5061,
              September 2007.

16.2.  Informative References

   [RFC2401]  Kent, S. and R. Atkinson, "Security Architecture for the
              Internet Protocol", RFC 2401, November 1998.



Bestler & Stewart           Standards Track                    [Page 16]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


   [RFC4301]  Kent, S. and K. Seo, "Security Architecture for the
              Internet Protocol", RFC 4301, December 2005.

   [RFC5044]  Culley, P., Elzur, U., Recio, R., Bailey, S., and J.
              Carrier, "Marker PDU Aligned Framing for TCP
              Specification", RFC 5044, October 2007.

   [RFC5046]  Ko, M., Chadalapaka, M., Elzur, U., Shah, H., and P.
              Thaler, "Internet Small Computer System Interface (iSCSI)
              Extensions for Remote Direct Memory Access (RDMA)",
              RFC 5046, October 2007.

Authors' Addresses

   Caitlin Bestler (editor)
   Neterion
   20230 Stevens Creek Blvd.
   Suite C
   Cupertino, CA  95014
   USA

   Phone: 408-366-4639
   EMail: caitlin.bestler@neterion.com


   Randall R. Stewart (editor)
   Cisco Systems, Inc.
   Forest Drive
   Columbia, SC  29036
   USA

   Phone: +1-815-342-5222
   EMail: rrs@cisco.com


















Bestler & Stewart           Standards Track                    [Page 17]
^L
RFC 5043                  SCTP DDP Adaptation               October 2007


Full Copyright Statement

   Copyright (C) The IETF Trust (2007).

   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
   THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
   THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.












Bestler & Stewart           Standards Track                    [Page 18]
^L