summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc2209.txt
blob: 20d495c3fc43cdc8a3e1769b111b382552669516 (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
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
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
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
Network Working Group                                          R. Braden
Request For Comments: 2209                                           ISI
Category: Informational                                         L. Zhang
                                                                    UCLA
                                                          September 1997

                Resource ReSerVation Protocol (RSVP) --
                   Version 1 Message Processing Rules

Status of this Memo


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

Abstract

   This memo contains an algorithmic description of the rules used by an
   RSVP implementation for processing messages.  It is intended to
   clarify the version 1 RSVP protocol specification.

   This memo provides a generic description of the rules for the
   operation of Version 1 of RSVP [RFC 2205].  It is intended to outline
   a set of algorithms that will accomplish the needed function,
   omitting many details.

1. GENERIC DATA STRUCTURES

   This memo assumes the generic interface calls defined in [RFC 2005]
   and the following data structures.  An actual implementation may use
   additional or different data structures and interfaces.  The data
   structure fields that are shown are required unless they are
   explicitly labelled as optional.

   o    PSB -- Path State Block

        Each PSB holds path state for a particular (session, sender)
        pair, defined by SESSION and SENDER_TEMPLATE objects,
        respectively, received in a PATH message.











Braden & Zhang               Informational                      [Page 1]
^L
RFC 2209                RSVP-Message Processing           September 1997


        PSB contents include the following values from a PATH message:

        -    Session

        -    Sender_Template

        -    Sender_Tspec

        -    The previous hop IP address and the Logical Interface
             Handle (LIH) from a PHOP object

        -    The remaining IP TTL

        -    POLICY_DATA and/or ADSPEC objects (optional)

        -    Non_RSVP flag

        -    E_Police flag

        -    Local_Only flag

        In addition, the PSB contains the following information provided
        by routing: OutInterface_list, which is the list of outgoing
        interfaces for this (sender, destination), and IncInterface,
        which is the expected incoming interface.  For a unicast
        destination, OutInterface_list contains one entry and
        IncInterface is undefined.

        Note that there may be more than one PSB for the same (session,
        sender) pair but different incoming interfaces.  At most one of
        these, which will have the Local_Only flag off, will be the PSB
        used for forwarding PATH messages downstream; we will refer to
        it as the "forwarding PSB" in the following.  The other PSB's
        will have the Local_Only flag on and an empty
        OutInterface_list.h The Local_Only flag is needed to correctly
        match PSB's against RSB's, by the rules of [RFC 2205].

   o    RSB -- Reservation State Block

        Each RSB holds a reservation request that arrived in a
        particular RESV message, corresponding to the triple:  (session,
        next hop, Filter_spec_list).  Here "Filter_spec_list" may be a
        list of FILTER_SPECs (for SE style), a single FILTER_SPEC (FF
        style), or empty (WF style).  We define the virtual object type
        "FILTER_SPEC*" for such a data structure.






Braden & Zhang               Informational                      [Page 2]
^L
RFC 2209                RSVP-Message Processing           September 1997


        RSB contents include:

        -    Session specification

        -    Next hop IP address

        -    Filter_spec_list

        -    The outgoing (logical) interface OI on which the
             reservation is to be made or has been made.

        -    Style

        -    Flowspec

        -    A SCOPE object (optional, depending upon style)

        -    RESV_CONFIRM object that was received (optional)

   o    TCSB -- Traffic Control State Block

        Each TCSB holds the reservation specification that has been
        handed to traffic control for a specific outgoing interface.  In
        general, TCSB information is derived from RSB's for the same
        outgoing interface.  Each TCSB defines a single reservation for
        a particular triple: (session, OI, Filter_spec_list).   TCSB
        contents include:

        -    Session

        -    OI (Outgoing Interface)

        -    Filter_spec_list

        -    TC_Flowspec, the effective flowspec, i.e., the LUB over the
             corresponding FLOWSPEC values from matching RSB's.
             TC_Flowspec is passed to traffic control to make the actual
             reservation.

         -   Fwd_Flowspec, the updated object to be forwarded
             after merging.

        -    TC_Tspec, equal to Path_Te, the effective sender Tspec.

        -    Police Flags

             The flags are E_Police_Flag, M_Police_Flag, and
             B_Police_Flag.



Braden & Zhang               Informational                      [Page 3]
^L
RFC 2209                RSVP-Message Processing           September 1997


        -    Rhandle, F_Handle_list

             Handles returned by the traffic control interface,
             corresponding to a flowspec and perhaps a list of filter
             specs.

        -    A RESV_CONFIRM object to be forwarded.

   o    BSB -- Blockade State Block

        Each BSB contains an element of blockade state.  Depending upon
        the reservation style in use, the BSB's may be per (session,
        sender_template) pair or per (session, PHOP) pair.  In practice,
        an implementation might embed a BSB within a PSB; however, for
        clarity we describe BSB's independently.

        The contents of a BSB include:

        -    Session

        -    Sender_Template (which is also a filter spec)

        -    PHOP

        -    FLOWSPEC Qb

        -    Blockade timer Tb

        The following Boolean Flag variables are used in this section:
        Path_Refresh_Needed, Resv_Refresh_Needed, Tear_Needed,
        Need_Scope, B_Merge, and NeworMod.  Refresh_PHOP_list is a
        variable-length list of PHOPs to be refreshed.

2. PROCESSING RULES

   MESSAGE ARRIVES

   Verify version number and RSVP checksum, and discard message if any
   mismatch is found.

   If the message type is not PATH or PTEAR or RACK and if the IP
   destination address does not match any of the addresses of the local
   interfaces, then forward the message to IP destination address and
   return.

   Parse the sequence of objects in the message.  If any required
   objects are missing or the length field of the common header does not
   match an object boundary, discard the message and return.



Braden & Zhang               Informational                      [Page 4]
^L
RFC 2209                RSVP-Message Processing           September 1997


   Verify the INTEGRITY object, if any.  If the check fails, discard the
   message and return.

   Verify the consistent use of port fields.  If the DstPort in the
   SESSION object is zero but the SrcPort in a SENDER_TEMPLATE or
   FILTER_SPEC object is non-zero, then the message has a "conflicting
   source port" error; silently discard the message and return.

   Processing of POLICY_DATA objects will be specified in the future.

   Further processing depends upon message type.

   PATH MESSAGE ARRIVES

   Assume the PATH message arrives on interface InIf.

   Process the sender descriptor object sequence in the message as
   follows.  The Path_Refresh_Needed and Resv_Refresh_Needed flags are
   initially off.

   o    Search for a path state block (PSB) whose (session,
        sender_template) pair matches the corresponding objects in the
        message, and whose IncInterface matches InIf.

             During this search:

             1.   If a PSB is found whose session matches the
                  DestAddress and Protocol Id fields of the received
                  SESSION object, but the DstPorts differ and one is
                  zero, then build and send a "Conflicting Dst Port"
                  PERR message, drop the PATH message, and return.

             2.   If a PSB is found with a matching sender host but the
                  Src Ports differ and one of the SrcPorts is zero, then
                  build and send an "Ambiguous Path" PERR message, drop
                  the PATH message, and return.

             3.   If a forwarding PSB is found, i.e., a PSB that matches
                  the (session, sender_template) pair and whose
                  Local_Only flag is off, save a pointer to it in the
                  variable fPSB.  If none is found, set fPSB to NULL.

        o    If there was no matching PSB, then:

             1.   Create a new PSB.

             2.   Copy contents of the SESSION, SENDER_TEMPLATE,
                  SENDER_TSPEC, and PHOP (IP address and LIH) objects



Braden & Zhang               Informational                      [Page 5]
^L
RFC 2209                RSVP-Message Processing           September 1997


                  into the PSB.

             3.   If the sender is from the local API, set
                  OutInterface_List to the single interface whose
                  address matches the sender address, and make
                  IncInterface undefined.  Otherwise, turn on the
                  Local_Only flag.

             4.   Turn on the Path_Refresh_Needed flag.

        o    Otherwise (there is a matching PSB):

             -    If the PHOP IP address, the LIH, or Sender_Tspec
                  differs between the message and the PSB, copy the new
                  value into the PSB and turn on the Path_Refresh_Needed
                  flag.  If the PHOP IP address or the LIH differ, also
                  turn on the Resv_Refresh_Needed flag.

        o    Call the resulting PSB the "current PSB" (cPSB).  Update
             the cPSB, as follows:

             -    Start or Restart the cleanup timer for the PSB.

             -    If the message contains an ADSPEC object, copy it into
                  the PSB.

             -    Copy E_Police flag from SESSION object into PSB.

             -    Store the received TTL into the PSB.
                  If the received TTL differs from Send_TTL in the RSVP
                  common header, set the Non_RSVP flag on in the PSB.

        o    If the PSB is new or if there is no route change
             notification in place, then perform the following routing
             manipulations, but not if the cPSB is from the local API.

             1.   Invoke the appropriate Route_Query routine using
                  DestAddress from SESSION and (for multicast routing)
                  SrcAddress from Sender_Template.

                  Call the results (Rt_OutL, Rt_InIf).

             2.   If the destination is multicast and Rt_InIf differs
                  from IncInterface in the cPSB, but fPSB points to the
                  cPSB, then do the following.

                  -    Turn on the Local_Only flag and clear the
                       OutInterface_list of the fPSB.  Set the fPSB



Braden & Zhang               Informational                      [Page 6]
^L
RFC 2209                RSVP-Message Processing           September 1997


                       pointer to NULL.

                  -    Search for a PSB for the same (session,
                       sender_template) pair whose IncInterface matches
                       Rt_InIf.  If one is found, set fPSB to point to
                       it.

             3.   If the destination is multicast and Rt_InIf is the
                  same as IncInterface in the cPSB, but fPSB does not
                  point to the cPSB, then do the following.

                  -    Copy into the cPSB the OutInterface_list from the
                       PSB, if any, pointed to by fPSB.  Clear
                       OutInterface_list and turn on the Local_Only flag
                       in the PSB pointed to by fPSB, if any.

                  -    Turn off the Local_Only flag in the cPSB and set
                       fPSB to point to cPSB.

             4.   If Rt_OutL differs from OutInterface_list of the PSB
                  pointed to by fPSB, then:

                  -    Update the OutInterface_list of the PSB from
                       Rt_OutL, and then execute the PATH LOCAL REPAIR
                       event sequence below.

        o    If the Path_Refresh_Needed flag is now off, drop the PATH
             message and return.

             Otherwise (the path state is new or modified), do
             refreshes, upcalls, and state updates as follows.

             1.   If this PATH message came from a network interface and
                  not from a local application, make a Path Event upcall
                  for each local application for this session:

                       Call: <Upcall_Proc>( session-id, PATH_EVENT,
                                    flags, sender_tspec, sender_template
                                    [ , ADSPEC] [ , POLICY_DATA] )

             2.   If OutInterface_list is not empty, execute the PATH
                  REFRESH event sequence (below) for the sender defined
                  by the PSB.

             3.   Search for any matching reservation state, i.e., an
                  RSB whose Filter_spec_list includes a FILTER_SPEC
                  matching the SENDER_TEMPLATE and whose OI appears in
                  the OutInterface_list, and make this the `active RSB'.



Braden & Zhang               Informational                      [Page 7]
^L
RFC 2209                RSVP-Message Processing           September 1997


                  If none is found, drop the PATH message and return.

             4.   Execute the RESV REFRESH sequence (below) for the PHOP
                  in the PSB.

             5.   Execute the event sequence UPDATE TRAFFIC CONTROL to
                  update the local traffic control state if necessary.
                  This sequence will turn on the Resv_Refresh_Needed
                  flag if the traffic control state has been modified in
                  a manner that should trigger a reservation refresh.
                  If so, execute the RESV REFRESH sequence for the PHOP
                  in the PSB.

        o    Drop the PATH message and return.

   PTEAR MESSAGE ARRIVES

        o    Search for a PSB whose (Session, Sender_Template) pair
             matches the corresponding objects in the message.  If no
             matching PSB is found, drop the PTEAR message and return.

        o    Forward a copy of the PTEAR message to each outgoing
             interface listed in OutInterface_list of the PSB.

        o    Find each RSB that matches this PSB, i.e., whose
             Filter_spec_list matches Sender_Template in the PSB and
             whose OI is included in OutInterface_list.

             1.   If the RSB style is explicit, then:
                  -    Delete from Filter_spec_list the FILTER_SPEC that
                       matches the PSB.

                  -    if Filter_spec_list is now empty, delete the RSB.

             2.   Otherwise (RSB style is wildcard) then:

                  -    If this RSB matches no other PSB, then delete the
                       RSB.

             3.   If an RSB was found, execute the event sequence UPDATE
                  TRAFFIC CONTROL (below) to update the traffic control
                  state to be consistent with the current reservation
                  and path state.

        o    Delete the PSB.

        o    Drop the PTEAR message and return.




Braden & Zhang               Informational                      [Page 8]
^L
RFC 2209                RSVP-Message Processing           September 1997


   PERR MESSAGE ARRIVES

        o    Search for a PSB whose (SESSION, SENDER_TEMPLATE) pair
             matches the corresponding objects in the message.  If no
             matching PSB is found, drop the PERR message and return.

        o    If the previous hop address in the PSB is the local API,
             make an error upcall to the application:

                  Call: <Upcall_Proc>( session-id, PATH_ERROR,
                                 Error_code, Error_value, Node_Addr,
                                 Sender_Template [ , Policy_Data] )

             Any SENDER_TSPEC or ADSPEC object in the message is
             ignored.

             Otherwise, send a copy of the PERR message to the PHOP IP
             address.

        o    Drop the PERR message and return.

   RESV MESSAGE ARRIVES

        Initially, Refresh_PHOP_list is empty and the
        Resv_Refresh_Needed and NeworMod flags are off.  These variables
        are used to control immediate reservation refreshes.

        o    Determine the Outgoing Interface OI

             The logical outgoing interface OI is taken from the LIH in
             the NHOP object.  (If the physical interface is not implied
             by the LIH, it can be learned from the interface matching
             the IP destination address).

        o    Check the path state

             1.   If there are no existing PSB's for SESSION then build
                  and send a RERR message (as described later)
                  specifying "No path information", drop the RESV
                  message, and return.

             2.   If a PSB is found with a matching sender host but the
                  SrcPorts differ and one of the SrcPorts is zero, then
                  build and send an "Ambiguous Path" PERR message, drop
                  the RESV message, and return.






Braden & Zhang               Informational                      [Page 9]
^L
RFC 2209                RSVP-Message Processing           September 1997


        o    Check for incompatible styles.

             If any existing RSB for the session has a style that is
             incompatible with the style of the message, build and send
             a RERR message specifying "Conflicting Style", drop the
             RESV message, and return.

        Process the flow descriptor list to make reservations, as
        follows, depending upon the style.  The following uses a filter
        spec list struct Filtss of type FILTER_SPEC* (defined earlier).

        For FF style: execute the following steps independently for each
        flow descriptor in the message, i.e., for each (FLOWSPEC,
        Filtss) pair.  Here the structure Filtss consists of the
        FILTER_SPEC from the flow descriptor.

        For SE style, execute the following steps once for (FLOWSPEC,
        Filtss), with Filtss consisting of the list of FILTER_SPEC
        objects from the flow descriptor.

        For WF style, execute the following steps once for (FLOWSPEC,
        Filtss), with Filtss an empty list.

        o    Check the path state, as follows.

             1.   Locate the set of PSBs (senders) that route to OI and
                  whose SENDER_TEMPLATEs match a FILTER_SPEC in Filtss.

                  If this set is empty, build and send an error message
                  specifying "No sender information", and continue with
                  the next flow descriptor in the RESV message.

             2.   If the style has explicit sender selection (e.g., FF
                  or SE) and if any FILTER_SPEC included in Filtss
                  matches more than one PSB, build and send a RERR
                  message specifying "Ambiguous filter spec" and
                  continue with the next flow descriptor in the RESV
                  message.

             3.   If the style is SE and if some FILTER_SPEC included in
                  Filtss matches no PSB, delete that FILTER_SPEC from
                  Filtss.

             4.   Add the PHOP from the PSB to Refresh_PHOP_list, if the
                  PHOP is not already on the list.






Braden & Zhang               Informational                     [Page 10]
^L
RFC 2209                RSVP-Message Processing           September 1997


        o    Find or create a reservation state block (RSB) for
             (SESSION, NHOP).  If the style is distinct, Filtss is also
             used in the selection.  Call this the "active RSB".

        o    If the active RSB is new:

             1.   Set the session, NHOP, OI and style of the RSB from
                  the message.

             2.   Copy Filtss into the Filter_spec_list of the RSB.

             3.   Copy the FLOWSPEC and any SCOPE object from the
                  message into the RSB.

             4.   Set NeworMod flag on.

        o    If the active RSB is not new, check whether Filtss from the
             message contains FILTER_SPECs that are not in the RSB; if
             so, add the new FILTER_SPECs and turn on the NeworMod flag.

        o    Start or restart the cleanup timer on the active RSB, or,
             in the case of SE style, on each FILTER_SPEC of the RSB
             that also appears in Filtss.

        o    If the active RSB is not new, check whether STYLE, FLOWSPEC
             or SCOPE objects have changed; if so, copy changed object
             into RSB and turn on the NeworMod flag.

        o    If the message contained a RESV_CONFIRM object, copy it
             into the RSB and turn on NeworMod flag.

        o    If the NeworMod flag is off, continue with the next flow
             descriptor in the RESV message, if any.

        o    Otherwise (the NeworMod flag is on, i.e., the active RSB is
             new or modified), execute the UPDATE TRAFFIC CONTROL event
             sequence (below).  If the result is to modify the traffic
             control state, this sequence will turn on the
             Resv_Refresh_Needed flag and make a RESV_EVENT upcall to
             any local application.

             If the UPDATE TRAFFIC CONTROL sequence fails with an error,
             then delete a new RSB but restore the original reservation
             in an old RSB.

        o    Continue with the next flow descriptor.





Braden & Zhang               Informational                     [Page 11]
^L
RFC 2209                RSVP-Message Processing           September 1997


        o    When all flow descriptors have been processed, check the
             Resv_Refresh_Needed flag.  If it is now on, execute the
             RESV REFRESH sequence (below) for each PHOP in
             Refresh_PHOP_list.

        o    Drop the RESV message and return.

             If processing a RESV message finds an error, a RERR message
             is created containing flow descriptor and an ERRORS object.
             The Error Node field of the ERRORS object is set to the IP
             address of OI, and the message is sent unicast to NHOP.

   RTEAR MESSAGE ARRIVES

        Processing of a RTEAR message roughly parallels the processing
        of the corresponding RESV message

        A RTEAR message arrives with an IP destination address matching
        outgoing interface OI.  Flag Resv_Refresh_Needed is initially
        off and Refresh_PHOP_list is empty.

        o    Determine the Outgoing Interface OI

             The logical outgoing interface OI is taken from the LIH in
             the NHOP object.  (If the physical interface is not implied
             by the LIH, it can be learned from the interface matching
             the IP destination address).

        o    Process the flow descriptor list in the RTEAR message to
             tear down local reservation state, as follows, depending
             upon the style.  The following uses a filter spec list
             struct Filtss of type FILTER_SPEC* (defined earlier).

             For FF style: execute the following steps independently for
             each flow descriptor in the message, i.e., for each
             (FLOWSPEC, Filtss) pair.  Here the structure Filtss
             consists of the FILTER_SPEC from the flow descriptor.

             For SE style, execute the following steps once for
             (FLOWSPEC, Filtss), with Filtss consisting of the list of
             FILTER_SPEC objects from the flow descriptor.

             For WF style, execute the following steps once for
             (FLOWSPEC, Filtss), with Filtss an empty list.







Braden & Zhang               Informational                     [Page 12]
^L
RFC 2209                RSVP-Message Processing           September 1997


             1.   Find an RSB matching (SESSION, NHOP).  If the style is
                  distinct, Filtss is also used in the selection.  Call
                  this the "active RSB".  If no active RSB is found,
                  continue with next flow descriptor.

             2.   Check the style

                  If the active RSB has a style that is incompatible
                  with the style of the message, drop the RTEAR message
                  and return.

             3.   Delete from the active RSB each FILTER_SPEC that
                  matches a FILTER_SPEC in Filtss.

             4.   If all FILTER_SPECs have now been deleted from the
                  active RSB, delete the active RSB.

             5.   Execute the UPDATE TRAFFIC CONTROL event sequence
                  (below) to update the traffic control state to be
                  consistent with the reservation state.  If the result
                  is to modify the traffic control state, the
                  Resv_Refresh_Needed flag will be turned on and a
                  RESV_EVENT upcall will be made to any local
                  application.

             6.   Continue with the next flow descriptor.

        o    All flow descriptors have been processed.

             Build and send any RTEAR messages to be forwarded, in the
             following manner.

             1.   Select each PSB that routes to the outgoing interface
                  OI, and, for distinct style, that has a
                  SENDER_TEMPLATE matching Filtss.

             2.   Select a flow descriptor (Qj,Fj) (where Fj may be a
                  list) in the RTEAR message whose FILTER_SPEC matches
                  the SENDER_TEMPLATE in the PSB.  If not match is
                  found, return for next PSB.

                  -    Search for an RSB (for any outgoing interface) to
                       which the PSB routes and whose Filter_spec_list
                       includes the SENDER_TEMPLATE from the PSB.

                  -    If an RSB is found, add the PHOP of the PSB to
                       the Refresh_PHOP_list.




Braden & Zhang               Informational                     [Page 13]
^L
RFC 2209                RSVP-Message Processing           September 1997


                  -    Otherwise (no RSB is found), add the flow
                       descriptor (Qj,Fj) to the new RTEAR message being
                       built, in a manner appropriate to the style.

                  -    Continue with the next PSB.

             3.   If the next PSB is for a different PHOP or the last
                  PSB has been processed, forward any RTEAR message that
                  has been built.

        o    If any PSB's were found in the preceding step, and if the
             Resv_Refresh_Needed flag is now on, execute the RESV
             REFRESH sequence (below) for each PHOP in
             Refresh_PHOP_list.

        o    Drop the RTEAR message and return.

   RERR MESSAGE ARRIVES

        A RERR message arrives through the (real) incoming interface
        In_If.

        o    If there is no path state for SESSION, drop the RERR
             message and return.

        o    If the Error Code = 01 (Admission Control failure), do
             special processing as follows:

             1.   Find or create a Blockade State Block (BSB), in the
                  following style-dependent manner.

                  For WF (wildcard) style, there will be one BSB per
                  (session, PHOP) pair.

                  For FF style, there will be one BSB per (session,
                  filter_spec) pair.  Note that an FF style RERR message
                  carries only one flow descriptor.

                  For SE style, there will be one BSB per (session,
                  filter_spec), for each filter_spec contained in the
                  filter spec list of the flow descriptor.

             2.   For each BSB in the preceding step, set (or replace)
                  its FLOWSPEC Qb with FLOWSPEC from the message, and
                  set (or reset) its timer Tb to Kb*R seconds.  If the
                  BSB is new, set its PHOP value, and set its
                  Sender_Template equal to the appropriate filter_spec
                  from the message.



Braden & Zhang               Informational                     [Page 14]
^L
RFC 2209                RSVP-Message Processing           September 1997


             3.   Execute the RESV REFRESH event sequence (shown below)
                  for the previous hop PHOP, but only with the B_Merge
                  flag off.  That is, if processing in the RESV REFRESH
                  sequence reaches the point of turning the B_Merge flag
                  on (because all matching reservations are blockaded),
                  do not turn it on but instead exit the REFRESH
                  sequence and return here.

        o    Execute the following for each RSB for this session whose
             OI differs from In_If and whose Filter_spec_list has at
             least one filter spec in common with the FILTER_SPEC* in
             the RERR message.   For WF style, empty FILTER_SPEC*
             structures are assumed to match.

             1.   If Error_Code = 01 and the InPlace flag in the
                  ERROR_SPEC is 1 and one or more of the BSB's
                  found/created above has a Qb that is strictly greater
                  than Flowspec in the RSB, then continue with the next
                  matching RSB, if any.

             2.   If NHOP in the RSB is the local API, then:

                  -    If the FLOWSPEC in the RERR message is strictly
                       greater than the RSB Flowspec, then turn on the
                       NotGuilty flag in the ERROR_SPEC.

                  -    Deliver an error upcall to application:

                        Call: <Upcall_Proc>( session-id, RESV_ERROR,
                                        Error_code, Error_value,
                                           Node_Addr,  Error_flags,
                                           Flowspec, Filter_Spec_List
                                            [ , Policy_data] )

                       and continue with the next RSB.

             3.   If the style has wildcard sender selection, use the
                  SCOPE object SC.In from the RERR message to construct
                  a SCOPE object SC.Out to be forwarded.  SC.Out should
                  contain those sender addresses that appeared in SC.In
                  and that route to OI, as determined by scanning the
                  PSB's.  If SC.Out is empty, continue with the next
                  RSB.

             4.   Create a new RERR message containing the error flow
                  descriptor and send to the NHOP address specified by
                  the RSB.  Include SC.Out if the style has wildcard
                  sender selection.



Braden & Zhang               Informational                     [Page 15]
^L
RFC 2209                RSVP-Message Processing           September 1997


             5.   Continue with the next RSB.

        o    Drop the RERR message and return.

   RESV CONFIRM ARRIVES

        o    If the (unicast) IP address found in the RESV_CONFIRM
             object in the RACK message matches an interface of the
             node, a confirmation upcall is made to the matching
             application:

                  Call: <Upcall_Proc>( session-id, RESV_CONFIRM,
                              Error_code, Error_value, Node_Addr,
                                  LUB-Used, nlist, Flowspec,
                                  Filter_Spec_List, NULL, NULL )

        o    Otherwise, forward the RACK message to the IP address in
             its RESV_CONFIRM object.

        Drop the RACK message and return.

   UPDATE TRAFFIC CONTROL

        The sequence is invoked by many of the message arrival sequences
        to set or adjust the local traffic control state in accordance
        with the current reservation and path state.  An implicit
        parameter of this sequence is the `active' RSB.

        If the result is to modify the traffic control state, this
        sequence notifies any matching local applications with a
        RESV_EVENT upcall.  If the state change is such that it should
        trigger immediate RESV refresh messages, it also turns on the
        Resv_Refresh_Needed flag.

        o    Compute the traffic control parameters using the following
             steps.

             1.   Initially the local flag Is_Biggest is off.

             2.   Consider the set of RSB's matching SESSION and OI from
                  the active RSB.  If the style of the active RSB is
                  distinct, then the Filter_spec_list must also be
                  matched.

                  -    Compute the effective kernel flowspec,
                       TC_Flowspec, as the LUB of the FLOWSPEC values in
                       these RSB's.




Braden & Zhang               Informational                     [Page 16]
^L
RFC 2209                RSVP-Message Processing           September 1997


                  -    Compute the effective traffic control filter spec
                       (list) TC_Filter_Spec* as the union of the
                       Filter_spec_lists from these RSB's.

                  -    If the active RSB has a FLOWSPEC larger than all
                       the others, turn on the Is_Biggest flag.

             3.   Scan all RSB's matching session and Filtss, for all
                  OI.  Set TC_B_Police_flag on if TC_Flowspec is smaller
                  than, or incomparable to, any FLOWSPEC in those RSB's.

             4.   Locate the set of PSBs (senders) whose
                  SENDER_TEMPLATEs match Filter_spec_list in the active
                  RSB and whose OutInterface_list includes OI.

             5.   Set TC_E_Police_flag on if any of these PSBs have
                  their E_Police flag on.  Set TC_M_Police_flag on if it
                  is a shared style and there is more than one PSB in
                  the set.

             6.   Compute Path_Te as the sum of the SENDER_TSPEC objects
                  in this set of PSBs.

        o    Search for a TCSB matching SESSION and OI; for distinct
             style (FF), it must also match Filter_spec_list.

             If none is found, create a new TCSB.

        o    If TCSB is new:

             1.   Store TC_Flowspec, TC_Filter_Spec*, Path_Te, and the
                  police flags into TCSB.

             2.   Turn the Resv_Refresh_Needed flag on and make the
                  traffic control call:

                 TC_AddFlowspec( OI, TC_Flowspec,
                              Path_Te, police_flags)
                               ->  Rhandle, Fwd_Flowspec

             3.   If this call fails, build and send a RERR message
                  specifying "Admission control failed" and with the
                  InPlace flag off.  Delete the TCSB, delete any
                  RESV_CONFIRM object from the active RSB, and return.







Braden & Zhang               Informational                     [Page 17]
^L
RFC 2209                RSVP-Message Processing           September 1997


             4.   Otherwise (call succeeds), record Rhandle and
                  Fwd_Flowspec in the TCSB.  For each filter_spec F in
                  TC_Filter_Spec*, call:

                 TC_AddFilter( OI, Rhandle, Session, F)
                                     -> Fhandle

             and record the returned Fhandle in the TCSB.

        o    Otherwise, if TCSB is not new but no effective kernel
             flowspec TC_Flowspec was computed earlier, then:

             1.   Turn on the Resv_Refresh_Needed flag.

             2.   Call traffic control to delete the reservation:

                 TC_DelFlowspec( OI, Rhandle )

             3.   Delete the TCSB and return.

        o    Otherwise, if TCSB is not new but the TC_Flowspec, Path_Te,
             and/or police flags just computed differ from corresponding
             values in the TCSB, then:

             1.   If the TC_Flowspec and/or Path_Te values differ, turn
                  the Resv_Refresh_Needed flag on.

             2.   Call traffic control to modify the reservation:

                 TC_ModFlowspec( OI, Rhandle, TC_Flowspec,
                                Path_Te, police_flags )
                                     -> Fwd_Flowspec

             3.   If this call fails, build and send a RERR message
                  specifying "Admission control failed" and with the
                  InPlace bit on.  Delete any RESV_CONFIRM object from
                  the active RSB and return.

             4.   Otherwise (the call succeeds), update the TCSB with
                  the new values and save Fwd_Flowspec in the TCSB.

        o    If the TCSB is not new but the TC_Filter_Spec* just
             computed differs from the FILTER_SPEC* in the TCSB, then:

             1.   Make an appropriate set of TC_DelFilter and
                  TC_AddFilter calls to transform the Filter_spec_list
                  in the TCSB into the new TC_Filter_Spec*.




Braden & Zhang               Informational                     [Page 18]
^L
RFC 2209                RSVP-Message Processing           September 1997


             2.   Turn on the Resv_Refresh_Needed flag.

        o    If the active RSB contains a RESV_CONFIRM object, then:

             1.   If the Is_Biggest flag is on, move the RESV_CONFIRM
                  object into the TCSB and turn on the
                  Resv_Refresh_Needed flag. (This will later cause the
                  RESV REFRESH sequence to be invoked, which will either
                  forward or return the RESV_CONFIRM object, deleting it
                  from the TCSB in either case).

             2.   Otherwise, create and send a RACK message to the
                  address in the RESV_CONFIRM object.  Include the
                  RESV_CONFIRM object in the RACK message.  The RACK
                  message should also include an ERROR_SPEC object whose
                  Error_Node parameter is IP address of OI from the TCSB
                  and that specifies "No Error".

        o    If the Resv_Refresh_Needed flag is on and the RSB is not
             from the API, make a RESV_EVENT upcall to any matching
             application:

                  Call: <Upcall_Proc>( session-id, RESV_EVENT,
                              style, Flowspec, Filter_spec_list [ ,
                              POLICY_DATA] )

             where Flowspec and Filter_spec_list come from the TCSB and
             the style comes from the active RSB.

        o    Return to the event sequence that invoked this one.

   PATH REFRESH

        This sequence sends a path refresh for a particular sender,
        i.e., a PSB.  This sequence may be entered by either the
        expiration of a refresh timer or directly as the result of the
        Path_Refresh_Needed flag being turned on during the processing
        of a received PATH message.

        o    Insert TIME_VALUES object into the PATH message being
             built.  Compute the IP TTL for the PATH message as one less
             than the TTL value received in the message.  However, if
             the result is zero, return without sending the PATH
             message.

        o    Create a sender descriptor containing the SENDER_TEMPLATE,
             SENDER_TSPEC, and POLICY_DATA objects, if present in the
             PSB, and pack it into the PATH message being built.



Braden & Zhang               Informational                     [Page 19]
^L
RFC 2209                RSVP-Message Processing           September 1997


        o    Send a copy of the PATH message to each interface OI in
             OutInterface_list.  Before sending each copy:

             1.   If the PSB has the E_Police flag on and if interface
                  OI is not capable of policing, turn the E_Police flag
                  on in the PATH message being built.

             2.   Pass the ADSPEC object and Non_RSVP flag present in
                  the PSB to the traffic control call TC_Advertise.
                  Insert the modified ADSPEC object that is returned
                  into the PATH message being built.

             3.   Insert into its PHOP object the interface address and
                  the LIH for the interface.

   RESV REFRESH

        This sequence sends a reservation refresh towards a particular
        previous hop with IP address PH.  This sequence may be entered
        by the expiration of a refresh timer, or invoked from the PATH
        MESSAGE ARRIVES, RESV MESSAGE ARRIVES, RTEAR MESSAGE ARRIVES, or
        RERR MESSAGE ARRIVES sequence.

        In general, this sequence considers each of the PSB's with PHOP
        address PH.  For a given PSB, it scans the TCSBs for matching
        reservations and merges the styles, FLOWSPECs and
        Filter_spec_list's appropriately.  It then builds a RESV message
        and sends it to PH.  The details depend upon the attributes of
        the style(s) included in the reservations.

        Initially the Need_Scope flag is off and the new_SCOPE object is
        empty.

        o    Create an output message containing INTEGRITY (if
             configured), SESSION, RSVP_HOP, and TIME_VALUES objects.

        o    Determine the style for these reservations from the first
             RSB for the session, and move the STYLE object into the
             proto-message.  (Note that the present set of styles are
             never themselves merged; if future styles can be merged,
             these rules will become more complex).

        o    If style is wildcard and if there are PSB's from more than
             one PHOP and if the multicast routing protocol does not use
             shared trees, set the Need_Scope flag on.






Braden & Zhang               Informational                     [Page 20]
^L
RFC 2209                RSVP-Message Processing           September 1997


        o    Select each sender PSB whose PHOP has address PH.  Set the
             local flag B_Merge off and execute the following steps.

             1.   Select all TCSB's whose Filter_spec_list's match the
                  SENDER_TEMPLATE object in the PSB and whose OI appears
                  in the OutInterface_list of the PSB.

             2.   If the PSB is from the API, then:

                  -    If TCSB contains a CONFIRM object, then create
                       and send a RACK message containing the object and
                       delete the CONFIRM object from the TCSB.

                  -    Continue with next PSB.

             3.   If B_Merge flag is off then ignore a blockaded TCSB,
                  as follows.

                  -    Select BSB's that match this TCSB.  If a selected
                       BSB is expired, delete it.  If any of the
                       unexpired BSB's has a Qb that is not strictly
                       larger than TC_Flowspec, then continue processing
                       with the next TCSB.

                  However, if steps 1 and 2 result in finding that all
                  TCSB's matching this PSB are blockaded, then:

                  -    If this RESV REFRESH sequence was invoked from
                       RESV ERROR RECEIVED, then return to the latter.

                  -    Otherwise, turn on the B_Merge flag and restart
                       at step 1, immediately above.

             4.   Merge the flowspecs from this set of TCSB's, as
                  follows:

                  -    If B_Merge flag is off, compute the LUB over the
                       flowspec objects.  From each TCSB, use the
                       Fwd_Flowspec object if present, else use the
                       normal Flowspec object.











Braden & Zhang               Informational                     [Page 21]
^L
RFC 2209                RSVP-Message Processing           September 1997


                       While computing the LUB, check for a RESV_CONFIRM
                       object in each TCSB.  If a RESV_CONFIRM object is
                       found:

                       -    If the flowspec (Fwd_Flowspec or Flowspec)
                            in that TCSB is larger than all other (non-
                            blockaded) flowspecs being compared, then
                            save this RESV_CONFIRM object for forwarding
                            and delete from the TCSB.

                       -    Otherwise (the corresponding flowspec is not
                            the largest), create and send a RACK message
                            to the address in the RESV_CONFIRM object.
                            Include the RESV_CONFIRM object in the RACK
                            message.  The RACK message should also
                            include an ERROR_SPEC object whose
                            Error_Node parameter is IP address of OI
                            from the TCSB and specifying "No Error".

                       -    Delete the RESV_CONFIRM object from the
                            TCSB.

                  -    Otherwise (B_Merge flag is on), compute the GLB
                       over the Flowspec objects of this set of TCSB's.

                  While computing the GLB, delete any RESV_CONFIRM
                  object object in any of these TCSB's.

             5.   (All matching TCSB's have been processed).  The next
                  step depends upon the style attributes.

                  Distinct reservation (FF) style

                       Use the Sender_Template as the merged
                       FILTER_SPEC.  Pack the merged (FLOWSPEC,
                       FILTER_SPEC, F_POLICY_DATA) triplet into the
                       message as a flow descriptor.

                  Shared wildcard reservation (WF) style

                       There is no merged FILTER_SPEC.  Merge (compute
                       the LUB of) the merged FLOWSPECS from the TCSB's,
                       across all PSB's for PH.








Braden & Zhang               Informational                     [Page 22]
^L
RFC 2209                RSVP-Message Processing           September 1997


                  Shared distinct reservation (SE) style

                       Using the Sender_Template as the merged
                       FILTER_SPEC, form the union of the FILTER_SPECS
                       obtained from the TCSB's.  Merge (compute the LUB
                       of) the merged FLOWSPECS from the TCSB's, across
                       all PSB's for PH.

             6.   If the Need_Scope flag is on and the sender specified
                  by the PSB is not the local API:

                  -    Find each RSB that matches this PSB, i.e., whose
                       Filter_spec_list matches Sender_Template in the
                       PSB and whose OI is included in
                       OutInterface_list.

                  -    If the RSB either has no SCOPE list or its SCOPE
                       list includes the sender IP address from the PSB,
                       insert the sender IP address into new_SCOPE.

        o    (All PSB's for PH have been processed).  Finish the RESV
             message.

             1.   If Need_Scope flag is on but new_SCOPE is empty, no
                  RESV message should be sent; return.  Otherwise, if
                  Need_Scope is on, move new_SCOPE into the message.

             2.   If a shared reservation style is being built, move the
                  final merged FLOWSPEC object and filter spec list into
                  the message.

             3.   If a RESV_CONFIRM object was saved earlier, move it
                  into the new RESV message.

             4.   Set the RSVP_HOP object in the message to contain the
                  IncInterface address through which it will be sent and
                  the LIH from (one of) the PSB's.

        o    Send the message to the address PH.

   ROUTE CHANGE NOTIFICATION

        This sequence is triggered when routing sends a route change
        notification to RSVP.

        o    Each PSB is located whose SESSION matches the destination
             address and whose SENDER_TEMPLATE matches the source
             address (for multicast).



Braden & Zhang               Informational                     [Page 23]
^L
RFC 2209                RSVP-Message Processing           September 1997


             1.   If the OutInterface_list from the notification differs
                  from that in the PSB, execute the PATH LOCAL REPAIR
                  sequence.

             2.   If the IncInterface from the notification differs from
                  that in the PSB, update the PSB.

   PATH LOCAL REPAIR

        The sequence is entered to effect local repair after a route
        change for a given PSB.

        o    Wait for a delay time of W seconds.

        o    Execute the PATH REFRESH event sequence (above) for the
             PSB.

References

   [Baker96]  Baker, F., "RSVP Cryptographic Authentication", Work in
        Progress.


   [RFC 2205]  Braden, R., Ed., Zhang, L., Berson, S., Herzog, S., and
        S. Jamin, "Resource ReSerVation Protocol (RSVP) -- Version 1
        FunctionalSpecification", RFC 2205, September 1997.

   [RFC 2207]  Berger, L. and T. O'Malley, "RSVP Extensions for IPSEC
        IPv4 Data Flows", RFC 2207, September 1997.

   [RSVP93]  Zhang, L., Deering, S., Estrin, D., Shenker, S., and D.
        Zappala, "RSVP: A New Resource ReSerVation Protocol", IEEE
        Network, September 1993.

Security Considerations

   Processing the RSVP INTEGRITY object [Baker96] is only mentioned in
   this memo, because the processing rules are described here only in
   general terms.  The RSVP support for IPSEC [RFC 2207] will imply
   modifications that have not yet been incorporated into these
   processing rules.










Braden & Zhang               Informational                     [Page 24]
^L
RFC 2209                RSVP-Message Processing           September 1997


Authors' Addresses

   Bob Braden
   USC Information Sciences Institute
   4676 Admiralty Way
   Marina del Rey, CA 90292

   Phone: (310) 822-1511
   EMail: Braden@ISI.EDU


   Lixia Zhang
   UCLA Computer Science Department
   4531G Boelter Hall
   Los Angeles, CA 90095-1596 USA

   Phone: 310-825-2695
   EMail: lixia@cs.ucla.edu

































Braden & Zhang               Informational                     [Page 25]
^L