@@ -38,7 +38,7 @@ service Provisioning {
3838
3939 // P2P SR-TE Policy provisioning.
4040 //
41- // RFC 9522 S5.1.1.3; RFC 9256 SR Policy.
41+ // RFC 9522 S5.1.1.3; RFC 9256 P2P SR Policy.
4242 //
4343 // Manage resources under `p2pSrTePolicy/{policy_id}`.
4444 rpc GetP2pSrTePolicy (GetP2pSrTePolicyRequest ) returns (P2pSrTePolicy ) {}
@@ -49,7 +49,7 @@ service Provisioning {
4949
5050 // P2P SR TE Policy dynamic candidate path provisioning.
5151 //
52- // RFC 9256 section 2.2, SR Policy dynamic candidate paths.
52+ // RFC 9256 section 2.2, P2P SR Policy dynamic candidate paths.
5353 //
5454 // Manage subresources under
5555 // `p2pSrTePolicy/{policy_id}/candidatePath/{path_id}`.
@@ -59,6 +59,29 @@ service Provisioning {
5959 rpc UpdateP2pSrTePolicyCandidatePath (UpdateP2pSrTePolicyCandidatePathRequest ) returns (P2pSrTePolicyCandidatePath ) {}
6060 rpc DeleteP2pSrTePolicyCandidatePath (DeleteP2pSrTePolicyCandidatePathRequest ) returns (google.protobuf.Empty ) {}
6161
62+ // P2MP SR-TE Policy provisioning.
63+ //
64+ // RFC 9522 S5.1.1.3; draft-ietf-pim-sr-p2mp-policy P2MP SR Policy
65+ //
66+ // Manage resources under `p2mpSrTePolicy/{policy_id}`.
67+ rpc GetP2mpSrTePolicy (GetP2mpSrTePolicyRequest ) returns (P2mpSrTePolicy ) {}
68+ rpc ListP2mpSrTePolicies (ListP2mpSrTePoliciesRequest ) returns (ListP2mpSrTePoliciesResponse ) {}
69+ rpc CreateP2mpSrTePolicy (CreateP2mpSrTePolicyRequest ) returns (P2mpSrTePolicy ) {}
70+ rpc UpdateP2mpSrTePolicy (UpdateP2mpSrTePolicyRequest ) returns (P2mpSrTePolicy ) {}
71+ rpc DeleteP2mpSrTePolicy (DeleteP2mpSrTePolicyRequest ) returns (google.protobuf.Empty ) {}
72+
73+ // P2MP SR TE Policy dynamic candidate path provisioning.
74+ //
75+ // draft-ietf-pim-sr-p2mp-policy-22 S2.3 P2MP SR Policy candidate paths.
76+ //
77+ // Manage subresources under
78+ // `p2mpSrTePolicy/{policy_id}/candidatePath/{path_id}`.
79+ rpc GetP2mpSrTePolicyCandidatePath (GetP2mpSrTePolicyCandidatePathRequest ) returns (P2mpSrTePolicyCandidatePath ) {}
80+ rpc ListP2mpSrTePolicyCandidatePaths (ListP2mpSrTePolicyCandidatePathsRequest ) returns (ListP2mpSrTePolicyCandidatePathsResponse ) {}
81+ rpc CreateP2mpSrTePolicyCandidatePath (CreateP2mpSrTePolicyCandidatePathRequest ) returns (P2mpSrTePolicyCandidatePath ) {}
82+ rpc UpdateP2mpSrTePolicyCandidatePath (UpdateP2mpSrTePolicyCandidatePathRequest ) returns (P2mpSrTePolicyCandidatePath ) {}
83+ rpc DeleteP2mpSrTePolicyCandidatePath (DeleteP2mpSrTePolicyCandidatePathRequest ) returns (google.protobuf.Empty ) {}
84+
6285 // Downtime provisioning.
6386 //
6487 // Inform Spacetime when elements of the network will be, or should
@@ -353,6 +376,224 @@ message DeleteP2pSrTePolicyCandidatePathRequest{
353376 }];
354377}
355378
379+ // A Point-to-MultiPoint (P2MP) Segment Routing (SR) Traffic Engineering (TE)
380+ // Policy.
381+ //
382+ // Describes one SR TE policy from one root EK_ROUTE_FN entity in the
383+ // data model to the set of EK_ROUTE_FN entities in the list of leaves.
384+ //
385+ // See also:
386+ // - draft-ietf-pim-sr-p2mp-policy
387+ message P2mpSrTePolicy {
388+ // The resource name of this policy.
389+ string name = 1 [(google.api.field_behavior ) = IDENTIFIER ];
390+
391+ // The priority field allows the requester to specify the order in
392+ // which requests for Provisioning resources are satisfied relative
393+ // to all other requests.
394+ //
395+ // A request will be treated as having a higher priority if the
396+ // value of this field is arithmetically greater than that of
397+ // another service request.
398+ //
399+ // Users may want to directly map this to some utility metric of
400+ // relevance to their network operations, e.g. estimated revenue,
401+ // number of customers served, etc.
402+ //
403+ // Cf. RFC 9256 S2.12's re-compute priority.
404+ double priority = 2 ;
405+
406+ // The time interval over which this service is requested.
407+ //
408+ // If start_time is empty the service is requested to be provisioned
409+ // at the earliest possible time it may be realized in the network.
410+ //
411+ // If end_time is empty the service is requested to be provisioned
412+ // until this specific request is canceled or this interval field
413+ // is updated with a non-empty end_time.
414+ google.type.Interval interval = 3 ;
415+
416+ // A simple way to temporarily disable this request without deleting
417+ // it from the store of requests. Requests that are disabled will
418+ // not be provisioned by Spacetime, but evaluation of candidate
419+ // links and topologies may still be performed (to improve rapidity
420+ // of provisioning once re-enabled).
421+ bool disabled = 4 ;
422+
423+ // NMTS Entity ID corresponding to the source EK_ROUTE_FN Entity
424+ // element already created within the network data model.
425+ //
426+ // draft-ietf-pim-sr-p2mp-policy S2.1 SR P2MP Policy identifying
427+ // tuple; "[a]n SR P2MP Policy is uniquely identified by the tuple
428+ // <Root, Tree-ID>".
429+ //
430+ // Note: SR P2P Policy color-like differentiation can be implemented
431+ // via tree_id values.
432+ string root = 5 ;
433+ int64 tree_id = 6 ; // restricted to uint32 values
434+
435+ // NMTS Entity IDs corresponding to the destination EK_ROUTE_FN
436+ // Entity elements already created within the network data model.
437+ repeated string leaves = 7 ;
438+
439+ // RFC 9256 S2.1; "[a]n implementation MAY allow the assignment
440+ // of a symbolic name..."
441+ string symbolic_name = 8 ;
442+ }
443+
444+ message GetP2mpSrTePolicyRequest {
445+ // The resource name of the policy to retrieve.
446+ // Format: `p2mpSrTePolicies/{policy_id}`
447+ string name = 1 [
448+ (google.api.field_behavior ) = REQUIRED ,
449+ (google.api.resource_reference ) = {
450+ type : "provisioning.spacetimeapis.com/P2mpSrTePolicy"
451+ }];
452+ }
453+
454+ message ListP2mpSrTePoliciesRequest {
455+ }
456+
457+ message ListP2mpSrTePoliciesResponse {
458+ repeated P2mpSrTePolicy p2mp_sr_te_policies = 1 ;
459+ }
460+
461+ message CreateP2mpSrTePolicyRequest {
462+ // The ID to use for the policy, which will become the final component of
463+ // the policy's resource name, i.e. `p2mpSrTePolicies/{policy_id}`.
464+ //
465+ // This value should be 1-63 characters, and valid characters
466+ // are /[a-z][0-9]-/, specifically of the form
467+ // "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$".
468+ string policy_id = 2 [(google.api.field_behavior ) = REQUIRED ];
469+
470+ // The policy to create.
471+ P2mpSrTePolicy policy = 3 [(google.api.field_behavior ) = REQUIRED ];
472+ }
473+
474+ message UpdateP2mpSrTePolicyRequest {
475+ // The policy to update.
476+ //
477+ // The policy's `name` field is used to identify the policy to be updated.
478+ // Format: `p2mpSrTePolicies/{policy_id}`
479+ P2mpSrTePolicy policy = 1 [(google.api.field_behavior ) = REQUIRED ];
480+
481+ // The list of fields to be updated.
482+ google.protobuf.FieldMask update_mask = 2 ;
483+
484+ // If set to true, and the policy is not found, a new instance will be
485+ // created. In this situation, `update_mask` is ignored.
486+ bool allow_missing = 3 ;
487+ }
488+
489+ message DeleteP2mpSrTePolicyRequest {
490+ // The resource name of the policy to delete.
491+ // Format: `p2mpSrTePolicies/{policy_id}`
492+ //
493+ // Deleting a P2MP SR-TE Policy also deletes all its Candidate Paths.
494+ string name = 1 [
495+ (google.api.field_behavior ) = REQUIRED ,
496+ (google.api.resource_reference ) = {
497+ type : "provisioning.spacetimeapis.com/P2mpSrTePolicy"
498+ }];
499+ }
500+
501+ message P2mpSrTePolicyCandidatePath {
502+ // The resource name of this candidate path.
503+ string name = 1 [(google.api.field_behavior ) = IDENTIFIER ];
504+
505+ // Candidate Paths inherit the scheduling parameters of their
506+ // parent P2MP SR-TE Policy.
507+
508+ // RFC 9256 S2.5 Discriminator; used to associate a candidate path
509+ // with this specific SR Policy's path request.
510+ uint32 discriminator = 2 ;
511+ // RFC 9256 S2.6 optional symbolic name.
512+ string symbolic_name = 3 ;
513+ // draft-ietf-pim-sr-p2mp-policy-22 does not have a field corresponding
514+ // to the RFC 9256 S2.7 Preference. This can be added later, should the
515+ // specification change or the need arise.
516+
517+ // Quantitative path metrics.
518+ Metrics metrics = 4 ;
519+ }
520+
521+ message GetP2mpSrTePolicyCandidatePathRequest {
522+ // The resource name of the candidate path to retrieve.
523+ // Format: `p2mpSrTePolicies/{policy_id}/candidatePaths/{path_id}`
524+ string name = 1 [
525+ (google.api.field_behavior ) = REQUIRED ,
526+ (google.api.resource_reference ) = {
527+ type : "provisioning.spacetimeapis.com/P2mpSrTePolicyCandidatePath"
528+ }];
529+ }
530+
531+ message ListP2mpSrTePolicyCandidatePathsRequest {
532+ // The parent policy for which to list candidate paths.
533+ // Format: `p2mpSrTePolicies/{policy_id}`
534+ string parent = 1 [
535+ (google.api.field_behavior ) = REQUIRED ,
536+ (google.api.resource_reference ) = {
537+ child_type : "provisioning.spacetimeapis.com/P2mpSrTePolicyCandidatePath"
538+ }];
539+ }
540+
541+ message ListP2mpSrTePolicyCandidatePathsResponse {
542+ repeated P2mpSrTePolicyCandidatePath p2mp_sr_te_policy_candidate_paths = 1 ;
543+ }
544+
545+ message CreateP2mpSrTePolicyCandidatePathRequest {
546+ // The parent policy for which this candidate path will be created.
547+ // Format: `p2mpSrTePolicies/{policy_id}`
548+ string parent = 1 [
549+ (google.api.field_behavior ) = REQUIRED ,
550+ (google.api.resource_reference ) = {
551+ child_type : "provisioning.spacetimeapis.com/P2mpSrTePolicyCandidatePath"
552+ }];
553+
554+ // The ID to use for the path, which will become the final component of
555+ // the path's resource name, i.e.
556+ // `p2mpSrTePolicies/{policy_id}/candidatePaths/{path_id}`
557+ //
558+ // This value should be 1-63 characters, and valid characters
559+ // are /[a-z][0-9]-/, specifically of the form
560+ // "^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$".
561+ string path_id = 2 [(google.api.field_behavior ) = REQUIRED ];
562+
563+ // The Candidate Path to create.
564+ P2mpSrTePolicyCandidatePath path = 3 [(google.api.field_behavior ) = REQUIRED ];
565+ }
566+
567+ message UpdateP2mpSrTePolicyCandidatePathRequest {
568+ // The candidate path to update.
569+ //
570+ // The candidate path's `name` field is used to identify the candidate
571+ // path to be updated.
572+ // `p2mpSrTePolicies/{policy_id}/candidatePaths/{path_id}`
573+ P2mpSrTePolicyCandidatePath path = 1 [(google.api.field_behavior ) = REQUIRED ];
574+
575+ // The list of fields to be updated.
576+ google.protobuf.FieldMask update_mask = 2 ;
577+
578+ // If set to true, and the candidate path is not found, a new instance will
579+ // be created, subject to the existence the parent SR-TE Policy. In this
580+ // situation, `update_mask` is ignored.
581+ bool allow_missing = 3 ;
582+ }
583+
584+ message DeleteP2mpSrTePolicyCandidatePathRequest {
585+ // The resource name of the candidate path to delete.
586+ // Format: `p2mpSrTePolicies/{policy_id}/candidatePaths/{path_id}`
587+ //
588+ // Delete all Candidate Paths associated with a P2MP SR-TE Policy
589+ // DOES NOT delete the policy itself.
590+ string name = 1 [
591+ (google.api.field_behavior ) = REQUIRED ,
592+ (google.api.resource_reference ) = {
593+ type : "provisioning.spacetimeapis.com/P2mpSrTePolicyCandidatePath"
594+ }];
595+ }
596+
356597// A notification to Spacetime of downtime for specified network elements.
357598//
358599// This resource informs Spacetime of elements in the network scheduled
0 commit comments