{
  "$schema": "/api/schemas/documents.schema.json",
  "apiVersion": "1.1.0",
  "lastModified": "2026-10-20T22:13:25.445Z",
  "sourcePath": "src/main/data/docs",
  "docId": "RFC9960",
  "document": {
    "abstract": "The Point-to-Multipoint (P2MP) Policy enables creation of P2MP trees for efficient multipoint packet delivery in a Segment Routing (SR) domain. This document specifies the architecture, signaling, and procedures for SR P2MP Policies with Segment Routing over MPLS (SR-MPLS) and Segment Routing over IPv6 (SRv6). It defines the SR P2MP Policy construct, candidate paths (CPs) of an SR P2MP Policy, and the instantiation of the P2MP tree instances (PTIs) of a CP using Replication segments. Additionally, it describes the required extensions for a controller to support P2MP path computation and provisioning. This document updates RFC 9524.",
    "abstract$meta": {
      "confidence": "high",
      "note": "Parsed from RFC index XML abstract",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "authors": [
      {
        "name": "Rishabh Parekh (editor)"
      },
      {
        "name": "Daniel Voyer"
      },
      {
        "name": "Clarence Filsfils"
      },
      {
        "name": "Hooman Bidgoli"
      },
      {
        "name": "Zhaohui (Jeffrey) Zhang"
      }
    ],
    "authors$meta": {
      "confidence": "high",
      "note": "Parsed from Datatracker doc page article:author (profile full names)",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "docId": "RFC9960",
    "docId$meta": {
      "confidence": "high",
      "note": "Derived from RFC number or Datatracker identifier",
      "originalValue": null,
      "source": "resolved",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "docLabel": "IETF RFC 9960",
    "docLabel$meta": {
      "confidence": "high",
      "note": "Constructed from provider and document identifier",
      "originalValue": null,
      "source": "resolved",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "docNumber": "9960",
    "docNumber$meta": {
      "confidence": "high",
      "note": "From the RFC index entry (rfc-index.xml <doc-id>)",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "docTitle": "Segment Routing Point-to-Multipoint Policy",
    "docTitle$meta": {
      "confidence": "high",
      "note": "Parsed from RFC index XML title",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "docType": "Standard",
    "docType$meta": {
      "confidence": "high",
      "note": "Mapped from Datatracker std_level or RFC status text",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "doi": "10.17487/RFC9960",
    "doi$meta": {
      "confidence": "high",
      "note": "Parsed from RFC index XML doi",
      "originalValue": null,
      "source": "resolved",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "href": "https://doi.org/10.17487/RFC9960",
    "href$meta": {
      "confidence": "high",
      "note": "Derived from DOI (https://doi.org/<doi>)",
      "originalValue": null,
      "source": "resolved",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "keywords": [
      "Segment Routing",
      "SRv6"
    ],
    "keywords$meta": {
      "confidence": "high",
      "note": "Parsed from RFC index XML keywords",
      "originalValue": [
        "SR Multicast",
        "SRv6 Multicast"
      ],
      "overridden": true,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T22:13:25.445Z",
      "version": "extractDocs.js@commit:301bfdf288d8"
    },
    "pages": "24",
    "pages$meta": {
      "confidence": "high",
      "note": "Parsed from RFC index XML page-count",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "publicationDate": "2026-04-01",
    "publicationDate$meta": {
      "confidence": "high",
      "note": "Parsed from RFC index XML date",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "publisher": "IETF",
    "publisher$meta": {
      "confidence": "high",
      "note": "Static: provider",
      "originalValue": null,
      "source": "parsed",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T21:48:16.639Z",
      "version": "extractDocs.js@commit:92f3ced618ff"
    },
    "references": {
      "bibliographic": [
        "RFC2827",
        "IETF.draft-ietf-idr-sr-p2mp-policy-01",
        "RFC4655",
        "RFC5286",
        "RFC5715",
        "RFC8660",
        "RFC8754",
        "RFC8986",
        "RFC9573",
        "RFC9855",
        "IETF.draft-bashandy-rtgwg-segment-routing-uloop-18",
        "IETF.draft-ietf-pce-sr-p2mp-policy-14",
        "IETF.draft-hb-spring-sr-p2mp-policy-yang-02",
        "IETF.draft-filsfils-spring-sr-policy-considerations-09"
      ],
      "bibliographic$meta": {
        "confidence": "high",
        "note": "Parsed from RFC HTML references/informative sections",
        "originalValue": [],
        "source": "parsed",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      },
      "normative": [
        "RFC2119",
        "RFC8174",
        "RFC8402",
        "RFC9256",
        "RFC9524"
      ],
      "normative$meta": {
        "confidence": "high",
        "note": "Parsed from RFC HTML normative references sections",
        "originalValue": [],
        "source": "parsed",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      }
    },
    "resolvedHref": "https://www.rfc-editor.org/info/rfc9960/",
    "resolvedHref$meta": {
      "confidence": "high",
      "note": "Final URL resolved via URL redirect verification",
      "originalValue": null,
      "source": "resolved",
      "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
      "updated": "2026-10-20T22:13:25.445Z",
      "version": "extractDocs.js@commit:301bfdf288d8"
    },
    "status": {
      "active": true,
      "active$meta": {
        "confidence": "high",
        "note": "Derived from supersession relationship fields",
        "originalValue": null,
        "source": "resolved",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      },
      "amends": [
        "RFC9524"
      ],
      "amends$meta": {
        "confidence": "high",
        "note": "Parsed from RFC index XML",
        "originalValue": [],
        "source": "parsed",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      },
      "errataExist": false,
      "errataExist$meta": {
        "confidence": "high",
        "note": "Derived from presence of errata links on RFC/Datatracker pages",
        "originalValue": null,
        "source": "parsed",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      },
      "latestVersion": true,
      "latestVersion$meta": {
        "confidence": "high",
        "note": "Derived from supersession relationship fields",
        "originalValue": null,
        "source": "resolved",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      },
      "statusNote": "Proposed Standard",
      "statusNote$meta": {
        "confidence": "high",
        "note": "Mapped from Datatracker doc.json std_level",
        "originalValue": null,
        "source": "parsed",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      },
      "superseded": false,
      "superseded$meta": {
        "confidence": "high",
        "note": "Derived from supersession relationship fields",
        "originalValue": null,
        "source": "resolved",
        "sourceUrl": "https://www.rfc-editor.org/info/rfc9960/",
        "updated": "2026-10-20T21:48:16.639Z",
        "version": "extractDocs.js@commit:92f3ced618ff"
      }
    }
  }
}