RFC 8147

Next-Generation Pan-European eCall

πŸ“… published May 2017, from ietf

(part 1 of 9)

RFC 8147: Next-Generation Pan-European eCall πŸš—πŸ’–

okay bestie, here's the title block tea β˜• This one is from the IETF (Internet Engineering Task Force) and it's labelled Request for Comments: 8147 πŸ“„. It's a Standards Track doc, so it's the real deal, not just a suggestion. The ISSN is 2070-1721 πŸ”’.

The authors are R. Gellens from Core Technology Consulting and H. Tschofenig, who's writing as an individual 🧚. The date is May 2017 🌸. The title block doesn't list any Obsoletes or Updates entries, so this RFC isn't replacing or changing any other RFC πŸ¦‹.


Abstract ✨

okay so this doc is all about using IP-based emergency services mechanisms to power the next generation of the Pan-European in-vehicle emergency call service 🚨. That service comes from the eSafety initiative of the European Commission and everyone just calls it "eCall" πŸ’…. It's a standardized, mandated system for special emergency calls placed by vehicles, and it gives you real-time communications plus a whole bundle of related data 🫢.

It also registers MIME media types and an Emergency Call Data Type for the eCall vehicle data and the metadata/control data πŸ“¦. And it defines an INFO package so all of that can ride along in SIP INFO requests πŸŽ€.

Even though this spec is built to meet the needs of next-generation Pan-European eCall (NG-eCall), it's written generically 🌈. That means the tech can be reused or extended for requirements in other jurisdictions too, which is giving flexibility πŸ‘‘.


Status of This Memo ⭐

this is an Internet Standards Track document πŸ”₯.

It's a product of the IETF, so it represents the consensus of the IETF community 🫢. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG) πŸ’œ. If you want more deets on Internet Standards, check Section 2 of RFC 7841 πŸ“š.

For the current status, any errata, and how to give feedback, go to http://www.rfc-editor.org/info/rfc8147 πŸ”—.


Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved πŸ’….

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, which you can find at http://trustee.ietf.org/license-info in effect on the date of publication πŸ“œ. Please actually read these, because they describe your rights and restrictions πŸ™ˆ. Any Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Simplified BSD License describes πŸ’€.


Table of Contents 🧚

1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   4
2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   6
3.  Document Scope  . . . . . . . . . . . . . . . . . . . . . . .   6
4.  eCall Requirements  . . . . . . . . . . . . . . . . . . . . .   7
5.  Vehicle Data  . . . . . . . . . . . . . . . . . . . . . . . .   7
6.  Data Transport  . . . . . . . . . . . . . . . . . . . . . . .   7
7.  Call Setup  . . . . . . . . . . . . . . . . . . . . . . . . .  10
8.  Test Calls  . . . . . . . . . . . . . . . . . . . . . . . . .  11
9.  The Metadata/Control Object . . . . . . . . . . . . . . . . .  11
  9.1.  The Control Block . . . . . . . . . . . . . . . . . . . .  13
    9.1.1.  The <ack> Element . . . . . . . . . . . . . . . . . .  14
      9.1.1.1.  Attributes of the <ack> Element . . . . . . . . .  14
      9.1.1.2.  Child Element of the <ack> Element  . . . . . . .  15
      9.1.1.3.  Example of the <ack> Element  . . . . . . . . . .  16
    9.1.2.  The <capabilities> Element  . . . . . . . . . . . . .  16
      9.1.2.1.  Child Element of the <capabilities> Element . . .  16
      9.1.2.2.  Example of the <capabilities> Element . . . . . .  17
    9.1.3.  The <request> Element . . . . . . . . . . . . . . . .  17
      9.1.3.1.  Attributes of the <request> Element . . . . . . .  17
      9.1.3.2.  Child Element of the <request> Element  . . . . .  19
      9.1.3.3.  Request Example . . . . . . . . . . . . . . . . .  19
10. Examples  . . . . . . . . . . . . . . . . . . . . . . . . . .  20
11. Security Considerations . . . . . . . . . . . . . . . . . . .  25
12. Privacy Considerations  . . . . . . . . . . . . . . . . . . .  27
13. XML Schema  . . . . . . . . . . . . . . . . . . . . . . . . .  27
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  30
  14.1.  The EmergencyCallData Media Subtree  . . . . . . . . . .  30
  14.2.  Service URN Registrations  . . . . . . . . . . . . . . .  31
  14.3.  MIME Media Type Registration for
         application/EmergencyCallData.eCall.MSD  . . . . . . . .  31
  14.4.  MIME Media Type Registration for
         application/EmergencyCallData.Control+xml  . . . . . . .  32
  14.5.  Registration of the "eCall.MSD" Entry in the Emergency
         Call Data Types Registry . . . . . . . . . . . . . . . .  34
  14.6.  Registration of the "Control" Entry in the Emergency
         Call Data Types Registry . . . . . . . . . . . . . . . .  34
  14.7.  Registration for
         urn:ietf:params:xml:ns:EmergencyCallData:control . . . .  34
  14.8.  Registry Creation  . . . . . . . . . . . . . . . . . . .  35
    14.8.1.  Emergency Call Actions Registry  . . . . . . . . . .  35
    14.8.2.  Emergency Call Action Failure Reasons Registry . . .  36
  14.9.  The EmergencyCallData.eCall.MSD INFO Package . . . . . .  37
    14.9.1.  Overall Description  . . . . . . . . . . . . . . . .  37
    14.9.2.  Applicability  . . . . . . . . . . . . . . . . . . .  37
    14.9.3.  INFO Package Name  . . . . . . . . . . . . . . . . .  38
    14.9.4.  INFO Package Parameters  . . . . . . . . . . . . . .  38
    14.9.5.  SIP Option-Tags  . . . . . . . . . . . . . . . . . .  38
    14.9.6.  INFO Request Body Parts  . . . . . . . . . . . . . .  38
    14.9.7.  INFO Package Usage Restrictions  . . . . . . . . . .  39
    14.9.8.  Rate of INFO Requests  . . . . . . . . . . . . . . .  39
    14.9.9.  INFO Package Security Considerations . . . . . . . .  39
    14.9.10. Implementation Details . . . . . . . . . . . . . . .  39
    14.9.11. Examples . . . . . . . . . . . . . . . . . . . . . .  39
15. References  . . . . . . . . . . . . . . . . . . . . . . . . .  40
  15.1.  Normative References . . . . . . . . . . . . . . . . . .  40
  15.2.  Informative references . . . . . . . . . . . . . . . . .  41
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  42
Contributors  . . . . . . . . . . . . . . . . . . . . . . . . . .  42
Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  43

1. Introduction πŸš—

okay so picture this: emergency calls made from vehicles (like after a crash) help cut down on road deaths and injuries 😭. Why? Because emergency services get to know about the incident, the condition of the vehicle, and where the vehicle is, and they get a voice channel to the people inside πŸŽ€. That combo means a fast, appropriate response πŸ”₯.

The European Commission started the eCall initiative back in the late 1990s πŸ•°οΈ. It has since grown into a European Parliament decision that requires a compliant in-vehicle system (IVS) in new vehicles, plus eCall deployment across the European Member States very soon 🌸. Other regions are building eCall-compatible systems too 🌍.

The Pan-European eCall system is a standardized, mandated mechanism for emergency calls from vehicles, and it gives you a voice channel and data transmission πŸ“ž. It sets up procedures for these calls to be placed by in-vehicle systems, recognized and processed by the mobile network, and routed to a specialized Public Safety Answering Point (PSAP) 🚨. Once there, the vehicle data helps the call taker figure out what's going on and how to respond πŸ’œ. eCall brings a standard set of vehicle data, sensor data (like crash-related stuff), and location data 🧚.

An eCall can be user initiated or automatically triggered ⚑. Automatic ones mean a car crash or some other serious incident πŸ’€. Manual ones might be reports of witnessed crashes or serious hazards, requests for medical help, and so on 🫢. PSAPs might use specific operational handling for manual versus automatic eCalls πŸ‘‘.

Legacy eCall is standardized by 3GPP [SDO-3GPP] and the European Committee for Standardization (CEN) [CEN] πŸ“š. It runs as a 3GPP circuit-switched call over Global System for Mobile communications (GSM) (2G) or Universal Mobile Telecommunications System (UMTS) (3G) πŸ“±. Flags in the call setup mark the call as an eCall and say whether it was triggered automatically or manually 🚩. The call gets routed to an eCall-capable PSAP, a voice channel is set up between the vehicle and the PSAP, and an eCall in-band modem carries a defined set of vehicle, sensor (e.g., crash-related), and location data, which is the Minimum Set of Data or MSD, inside the voice channel πŸ”Š. The same in-band mechanism lets the PSAP acknowledge it got the MSD and ask the vehicle to send a new one (say, to check whether the vehicle or its occupants have moved) πŸ”.

NG-eCall goes all-IP 🌐. It carries the vehicle data and eCall signaling as additional data that travels with the call πŸ’–. This document shows how IETF mechanisms for IP-based emergency calls, including [RFC6443] and [RFC7852], are used to provide the signaling and data exchange for the next generation of Pan-European eCall ✨.

The European Telecommunications Standards Institute (ETSI) [SDO-ETSI] published a Technical Report called "Mobile Standards Group (MSG); eCall for VoIP" [MSG_TR] πŸ“‘. It shares findings and recommendations for supporting eCall in an all-IP environment πŸ¦‹. The recommendations include using 3GPP Internet Multimedia System (IMS) emergency calling with extra elements that mark the call as an eCall and carry eCall data and signaling πŸ› οΈ. 3GPP IMS emergency services support multimedia, so you can get voice, text, and video πŸŽ₯. Inside 3GPP this is called Multimedia Emergency Services (MMES) πŸ’….

There's going to be a transition period where the entities involved in starting and handling an eCall might support NG-eCall, legacy eCall, or both πŸ•°οΈ. Migration and co-existence during that transition are outside the scope of this document πŸ™ˆ.

This document indicates how to use IP-based emergency services mechanisms to support NG-eCall πŸŽ€.

This document also registers MIME media types and Emergency Call Data Types for the eCall vehicle data (MSD) and metadata/control data, plus an INFO package to carry this data in SIP INFO requests πŸ“¦.

The MSD is carried in the MIME type application/EmergencyCallData.eCall.MSD, and the metadata/control block is carried in the MIME type application/EmergencyCallData.Control+xml. Both are registered in Section 14 🌈. An INFO package is defined in Section 14.9 so these MIME types can be carried in SIP INFO requests, per [RFC6086] 🫢.

2. Terminology πŸ“–

okay bestie, 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 [RFC2119]. πŸ’…

this document reuses terminology defined in Section 3 of [RFC5012] 🫢

we also use these abbreviations, so you're not lost ✨

  • 3GPP: 3rd Generation Partnership Project
  • CEN: European Committee for Standardization
  • EENA: European Emergency Number Association
  • ESInet: Emergency Services IP network
  • IMS: IP Multimedia Subsystem
  • IVS: In-Vehicle System
  • MNO: Mobile Network Operator
  • MSD: Minimum Set of Data
  • PSAP: Public Safety Answering Point

3. Document Scope πŸŽ€

this document is all about the signaling, data exchange, and protocol needs of NG-eCall (also called packet-switched eCall or all-IP eCall) inside the SIP framework for emergency calls (as described in [RFC6443] and [RFC6881]) 🧚 eCall itself is specified by 3GPP and CEN, and those specs cover way more ground than we touch here, so no panic if you see a bigger picture somewhere else 😭

the eCall service runs over cellular wireless communication, but this document does not address cellular-specific details, nor client domain selection (e.g., circuit-switched versus packet-switched). all of that is the purview of the respective standards bodies πŸ’œ the scope here is limited to eCall operating inside a SIP-based environment (e.g., 3GPP IMS Emergency Calling [TS23.167]).

ok so even though this spec is built to meet the requirements of Pan-European NG-eCall, it's written generically so the tech can be reused or extended for requirements in other jurisdictions (see, e.g., [RFC8148]). extension points are provided to make that easier 🌈

also, vehicles designed for multiple regions might need to support eCall and other Advanced Automatic Crash Notification (AACN) systems (such as described in [RFC8148]). that's a whole other vibe, though, and it's out of scope for this document πŸ™ˆ


4. eCall Requirements ⭐

the eCall requirements are specified by CEN in [EN_16072] and by 3GPP in [TS22.101], Section 10.7 and Annex A.27, and [TS24.229], Section 4.7.6 πŸ“‹ the requirements specific to vehicle data live in EN 15722 [MSD], so go there for those πŸ“


5. Vehicle Data πŸš—

Pan-European eCall gives us a standardized, mandated set of vehicle-related data (including VIN, vehicle type, propulsion type, current and optionally previous location coordinates, and the number of occupants) called the Minimum Set of Data (MSD) πŸ”₯ CEN specified this data in EN 15722 [MSD], with both ASN.1 and XML encodings. circuit-switched eCall and this document both use the ASN.1 PER encoding, which is specified in Annex A of EN 15722 [MSD]. the XML encoding in Annex C is not used in this document, per 3GPP [SDO-3GPP] πŸ’…

this document registers the application/EmergencyCallData.eCall.MSD MIME media type so the MSD can be carried in SIP ✨ since the data is an ASN.1 PER-encoded object, it's binary, so it gets transported using binary content transfer encoding inside SIP messages πŸ¦‹ this doc also adds "eCall.MSD" to the "Emergency Call Data Types" registry so the MSD gets recognized as such in a SIP-based eCall emergency call πŸ‘‘ (see [RFC7852] for more on the registry and how it's used).

see Section 6 for how the MSD vehicle data gets conveyed in an NG-eCall 🫢


6. Data Transport πŸ“¦

[RFC7852] sets up a general mechanism for conveying blocks of data within a SIP emergency call 🌸 this document uses that mechanism to include vehicle data (the MSD; see Section 5) and metadata/control information (see Section 9) inside SIP messages.

this document also registers an INFO package (in Section 14.9) so eCall-related data blocks can be carried in SIP INFO requests. (per [RFC6086], new INFO usages require the definition of an INFO package, so that's why this exists 🧚)

heads up: if other data sets need to be sent in the future, the right signaling mechanism for them still needs to be evaluated, including things like the size and frequency of that data. πŸ™ˆ

an IVS transmits an MSD (see Section 5) by encoding it per Annex A of EN 15722 [MSD] and including it as a MIME body part inside a SIP message per [RFC7852] πŸ’– the body part is identified by its MIME media type (application/EmergencyCallData.eCall.MSD) in the Content-Type header field of the body part. it gets a unique identifier, which is listed in a Content-ID header field in the body part. the SIP message is marked as containing the MSD by adding (or appending to) a Call-Info header field at the top level of the SIP message. that Call-Info header field holds a Content Identifier (CID) URL that references the body part's unique identifier, plus a purpose parameter that identifies the data as the eCall MSD per the entry in the "Emergency Call Data Types" registry. the purpose parameter's value is EmergencyCallData.eCall.MSD ✨ and per [RFC6086], an MSD is carried in a SIP INFO request by using the INFO package defined in Section 14.9.

a PSAP or IVS transmits a metadata/control object (see Section 9) by encoding it per the description in this document and including it inside a SIP message as a MIME body part per [RFC7852] πŸŽ€ the body part is identified by its MIME media type (application/EmergencyCallData.Control+xml) in the Content-Type header field of the body part. it gets a unique identifier, listed in a Content-ID header field in the body part. the SIP message is marked as containing the metadata/control object by adding (or appending to) a Call-Info header field at the top level of the SIP message. that Call-Info header field holds a CID URL referencing the body part's unique identifier, plus a purpose parameter identifying the data as an eCall metadata/control block per the entry in the "Emergency Call Data Types" registry. the purpose parameter's value is EmergencyCallData.Control 🌈 and per [RFC6086], a metadata/control object is carried in a SIP INFO request by using the INFO package defined in Section 14.9.

an MSD or a metadata/control block is always enclosed in a multipart body part, even if it would otherwise be the only body part in the SIP message πŸ“

a body part containing an MSD or metadata/control object has a Content-Disposition header field value containing By-Reference πŸ’…

an IVS starting an NG-eCall includes an MSD as a body part within the initial INVITE, and it can optionally also include a metadata/control object telling the PSAP about its capabilities as another body part 🚨 the MSD body part (plus the metadata/control and Presence Information Data Format Location Object (PIDF-LO) body parts, if included) has a Content-Disposition header field with the value By-Reference; handling=optional. specifying handling=optional stops the SIP INVITE request from getting rejected if a legacy element (e.g., a gateway between SIP and circuit-switched environments) processes it and doesn't understand the MSD (or metadata/control object or PIDF-LO) πŸ›‘οΈ

the PSAP creates a metadata/control object acknowledging receipt of the MSD and includes it as a body part within the SIP final response to the SIP INVITE request per [RFC7852] πŸ’œ a metadata/control object is not included in provisional (e.g., 180) responses.

a PSAP can reject a call while still showing it's aware of the situation. it does this by including a metadata/control object that acknowledges the MSD and contains received=true, inside a final response using SIP response code 600 (Busy Everywhere), 486 (Busy Here), or 603 (Decline), per [RFC7852] πŸ‘‘

if the IVS gets an acknowledgment for an MSD containing received=false, that means the PSAP couldn't properly decode or process the MSD 😭 the IVS action is not defined here (e.g., it might only log an error). since the PSAP can request an updated MSD during the call, if the initial MSD is unsatisfactory in any way, the PSAP can choose to ask for another one πŸ¦‹

a PSAP can ask the vehicle to send an updated MSD during a call (e.g., when a PSAP call taker manually requests it because they suspect the vehicle state may have changed) πŸ”₯ to do that, the PSAP creates a metadata/control object requesting an MSD and includes it within a SIP INFO request sent inside the dialog. the IVS then includes an updated MSD within a SIP INFO request and sends it inside the dialog. if the IVS can't send an MSD, it sends a metadata/control object acknowledging the request instead. that object contains an <actionResult> element with a success parameter set to false, and a reason parameter (and optionally a details parameter) that says why the request couldn't be done πŸ™ˆ per [RFC6086], metadata/control objects and MSDs are sent using the INFO package defined in Section 14.9. to match how an MSD or metadata/control block is sent in a SIP message other than an INFO request, a Call-Info header field is also included in the SIP INFO request to reference the MSD or metadata/control block per [RFC7852]. see Section 14.9 for info on how SIP INFO requests carry data within an eCall 🌸

the IVS is not expected to send an unsolicited MSD after the initial INVITE ✨

this document does not mandate support for the data blocks defined in [RFC7852] 🧚


7. Call Setup πŸ“ž

in a circuit-switched eCall, the IVS places a special form of a 112 emergency call. it carries an eCall flag, which indicates that the call is an eCall and whether it was triggered manually or automatically. the mobile network operator (MNO) recognizes the eCall flag and routes the call to an eCall-capable PSAP, and the vehicle data is sent to the PSAP through the eCall in-band modem (in the voice channel) πŸ“žπŸ”₯

   ///-----\\\     112 voice call with eCall flag      +------+
   ||| IVS |||---------------------------------------->| PSAP |
   \\\-----///  vehicle data via eCall in-band modem   +------+

                  Figure 1: Circuit-Switched eCall

for NG-eCall, the IVS sets up an emergency call using a Request-URI that indicates a manual or automatic eCall. the MNO (or ESInet) recognizes the eCall URN and routes the call to an NG-eCall-capable PSAP. then the PSAP interprets the vehicle data sent with the call and makes it available to the call taker πŸ’–

   ///-----\\\    IMS emergency call with eCall URN    +------+
   ||| IVS |||---------------------------------------->| PSAP |
   \\\-----///  vehicle data included in call setup    +------+

                         Figure 2: NG-eCall

see Section 6 for info on how the MSD gets transported within an NG-eCall 🫢

this document adds new service URN children within the "sos" subservice 🌈 these URNs are how an eCall gets identified, and they tell apart manually and automatically triggered eCalls (which might get different treatment, depending on policy). the two service URNs are urn:service:sos.ecall.automatic and urn:service:sos.ecall.manual. they request resources for an emergency call placed by an in-vehicle system, carrying a standardized set of data about the vehicle and incident πŸ‘‘ these are registered in Section 14.2.

call routing is outside the scope of this document 🚫

8. Test Calls πŸ§ͺπŸ’…

okay so bestie, eCall needs to be able to place test calls πŸ“ž (see [TS22.101], clause 10.7 and [EN_16062], clause 7.2.2) πŸŽ€. These are calls that get recognized and treated kinda like eCalls, but they do NOT get emergency call treatment and call takers don't pick them up πŸ™ˆ. How the test eCalls actually get handled is outside the scope of this document 🫢. Typically the test call facility lets the IVS or the user check that an eCall can go through with voice communication ✨. The IVS might also be able to check that the MSD was received successfully πŸ’–.

A service URN starting with "test." means it's a test call πŸ¦‹. For eCall, "urn:service:test.sos.ecall" is the test feature 🌸. The "test" service URN is defined in [RFC6881] πŸ’œ.

This document specifies "urn:service:test.sos.ecall" for eCall test calls πŸ“. It's registered in Section 14.2 ✨.

The circuit-switched eCall test call facility is a non-emergency number, so it does NOT get treated as an emergency call 😭. For NG-eCall, MNOs, emergency authorities, and PSAPs can decide how to treat a vehicle call that requests the "test" service URN, so the desired functionality gets tested πŸ”₯. But that's outside the scope of this document 🌈.


9. The Metadata/Control Object 🧚

eCall needs the PSAP to be able to acknowledge that it successfully received an MSD sent by the IVS 🫢, and it also needs the PSAP to be able to request that the IVS send an MSD πŸ’…. (Like, the call taker can start a request for a fresh MSD to see if the vehicle's state has changed, such as location, direction, or number of fastened seat belts πŸ‘‘.)

This document defines a block of metadata/control data as an XML structure πŸŽ€. It has elements for eCall and other related emergency call systems, plus extension points ✨. (This metadata/control block is basically a high-level protocol between the PSAP and IVS πŸ’œ.)

This document registers the application/EmergencyCallData.Control+xml MIME media type πŸ¦‹ so the metadata/control data can be carried in SIP 🌸. It also adds "Control" to the "Emergency Call Data Types" registry πŸ“ so the metadata/control block gets recognized as such in a SIP-based eCall πŸ’–. (See [RFC7852] for more about the registry and how it's used 🧚.)

See Section 6 for how the metadata/control data is conveyed in an NG-eCall ✨.

When the PSAP sends a metadata/control block in response to data the IVS sent in a SIP request other than INFO (like the MSD in the initial INVITE) πŸŽ€, the metadata/control block goes in the SIP response to that request (like the response to the INVITE) πŸ’…. When the PSAP sends a control block in other situations (like mid call) 🌈, it's sent from the PSAP to the IVS in a SIP INFO request within the established dialog πŸ”₯. The IVS sends the requested data (the MSD) in a new SIP INFO request (per [RFC6086]) πŸ’œ. This lets the PSAP send eCall-specific data to the IVS, and lets the IVS respond, super flexibly 🫢. SIP INFO requests are sent using an appropriate INFO package ✨. See Section 6 for more on sending a metadata/control block inside a SIP message πŸ¦‹. See Section 14.9 for info on using SIP INFO requests to carry data within an eCall 🌸.

When the IVS includes an unsolicited MSD in a SIP request (like the initial INVITE) πŸ“, the PSAP sends a metadata/control block that says whether the MSD was received successfully or not, in the SIP response to that request πŸ’–. This also tells the IVS that an NG-eCall is happening 🧚. If the IVS gets a SIP final response WITHOUT the metadata/control block, that means the SIP dialog is not an NG-eCall (like if part of the call is being handled as a legacy call) 😭. When the IVS sends a solicited MSD (like in a SIP INFO request sent after getting a SIP INFO request with a metadata/control block asking for an MSD) πŸŽ€, the PSAP does NOT send back a metadata/control block saying whether that MSD was received πŸ™ˆ. (Normal SIP retransmission handles a requested piece of data that never arrives πŸ”. Also, per [RFC6086], a 200 OK response to a SIP INFO request only means the receiver successfully received and accepted the SIP INFO request ✨, and it says NOTHING about whether the payload is acceptable πŸ’€.) If the IVS gets a request to send an MSD but can't do it for any reason 😬, the IVS instead sends a metadata/control object acknowledging the request 🫢, with an <actionResult> element whose "success" parameter is set to "false" πŸ’…, plus a "reason" parameter (and optionally a "details" parameter) explaining why the request couldn't be done 🌈.

This gives lots of flexibility for different situations πŸ¦‹. For example, if a PSAP can't accept an eCall (like because of overload or too many calls from the same location) πŸ”₯, it can reject the INVITE πŸ’œ. Since a metadata/control object also goes in the SIP response that rejects the call πŸŽ€, the IVS knows whether the PSAP received the MSD ✨, and it can tell the vehicle occupants that the PSAP got the vehicle location and info but can't talk to them right now 🫢. Especially for SIP response codes that mean the call can't be conducted (as opposed to a technical inability to process the request) πŸ’–, the IVS can also tell that the call was successful on a technical level (like, it's not helpful to retry as circuit switched) 🧚. (Note that there could be edge cases where the PSAP response never reaches the IVS 😭. For example, if an intermediary sends a CANCEL, and an error response gets forwarded toward the IVS before the error response from the PSAP arrives, the response gets dropped πŸ’€. But these are unlikely to happen here πŸ™.)

The metadata/control block is carried in the MIME type application/EmergencyCallData.Control+xml 🌸.

The metadata/control block is designed for Pan-European eCall AND eCall-like systems (in other regions too) 🌍, and it has extension points πŸ“. Note that eCall-like systems might define their own vehicle data blocks πŸŽ€, and might need to register a new INFO package to support the new data MIME media type and the metadata/control object πŸ’….

9.1. The Control Block πŸŽ€

The control block is an XML data structure that allows for acknowledgments, requests, and capabilities information ✨. It's carried in a body part with a specific MIME media type πŸ’œ. Three elements are defined for use within a control block πŸ¦‹:

  • ack: acknowledges receipt of data or a request 🫢.
  • capabilities: used in a control block sent from the IVS to the PSAP (like in the initial INVITE) to tell the PSAP about the vehicle's capabilities 🌸. Child elements contain ALL the actions and data types the vehicle supports πŸ’–. It is OPTIONAL for the IVS to send this block 🧚. Leaving the block out means the IVS only supports the mandatory functionality defined in this document 😭.
  • request: used in a control block sent by the PSAP to the IVS to ask the vehicle to perform an action πŸ”₯.

The <ack> element says which object is being acknowledged and reports success or failure πŸŽ€.

The <request> element has attributes that describe the request and supply related info πŸ’…. The "action" attribute is MANDATORY and says which specific action it is πŸ‘‘. An IANA registry is created in Section 14.8.1 to hold the allowed values 🌈.

The <capabilities> element has child <request> elements that show which actions the IVS supports πŸ¦‹.

9.1.1. The <ack> Element πŸ’Œ

The <ack> element acknowledges receipt of an eCall data object or request 🫢. An <ack> element references the Content-ID of the object being acknowledged πŸ“. The PSAP MUST send an <ack> element acknowledging receipt of an unsolicited MSD (like one the IVS sent in the INVITE) πŸ’–; this <ack> element says whether the PSAP considers the MSD successfully received or not 🧚. An <ack> element is NOT sent for a <capabilities> element πŸ™….

9.1.1.1. Attributes of the <ack> Element ✨

The <ack> element has the following attributes πŸŽ€:

Name:         ref
Usage:        Mandatory
Type:         anyURI
Direction:    Sent in either direction
Description:  References the Content-ID of the body part being
              acknowledged.
Example:      <ack received="true"
              ref="1234567890@atlanta.example.com"/>

Name:         received
Usage:        Conditional: mandatory in an <ack> element sent by a
              PSAP
Type:         boolean
Direction:    In this document, sent from the PSAP to the IVS
Description:  Indicates if the referenced object was considered
              successfully received or not.
Example:      <ack received="true"
              ref="1234567890@atlanta.example.com"/>

9.1.1.2. Child Element of the <ack> Element 🧸

For extensibility, the <ack> element has the following child element 🌈:

Name:         actionResult
Usage:        Optional
Direction:    Sent from the IVS to the PSAP
Description:  An <actionResult> element indicates the result of an
   action (other than a successfully executed "send-data" action).
   The <ack> element contains an <actionResult> element for each
   <request> element that is not a successfully executed "send-data"
   action.  The <actionResult> element has the following attributes:

   Name:         action
   Usage:        Mandatory
   Type:         token
   Description:  Contains the value of the "action" attribute of the
      <request> element

   Name:         success
   Usage:        Mandatory
   Type:         boolean
   Description:  Indicates if the action was successfully
      accomplished

   Name:         reason
   Usage:        Conditional
   Type:         token
   Description:  Used when "success" is "false", this attribute
      contains a reason code for a failure.  A registry for reason
      codes is defined in Section 14.8.2.  The initial values are:
      damaged (required components are damaged), data-unsupported
      (the data item referenced in a "send-data" request is not
      supported), security-failure (the authenticity of the request
      or the authority of the requestor could not be verified),
      unable (a generic error for use when no other code is
      appropriate), and unsupported (the "action" value is not
      supported).

   Name:         details
   Usage:        optional
   Type:         string
   Description:  Contains further explanation of the circumstances of
      a success or failure.  The contents are implementation specific
      and human readable.  This is intended for internal use and
      troubleshooting, not for display to vehicle occupants.

9.1.1.3. Example of the <ack> Element πŸ“

       <?xml version="1.0" encoding="UTF-8"?>
       <EmergencyCallData.Control
           xmlns="urn:ietf:params:xml:ns:EmergencyCallData:control"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

       <ack received="true" ref="1234567890@atlanta.example.com"/>

       </EmergencyCallData.Control>

                 Figure 3: <ack> Example from PSAP to IVS

9.1.2. The <capabilities> Element πŸ¦‹

The <capabilities> element is transmitted by the IVS to tell the PSAP about its capabilities 🌸. NO attributes for this element are currently defined πŸ™ˆ. There is one child element defined πŸ’œ.

9.1.2.1. Child Element of the <capabilities> Element ✨

okay so the <capabilities> element has one child element, and it's called <request> πŸ’…

  • Name: request
  • Usage: Mandatory
  • Description: The <capabilities> element holds one <request> child element for each action the vehicle supports. πŸš—

Here's what that looks like in action:

      <capabilities>

         <request action="send-data" supported-values="eCall.MSD" />

      </capabilities>

It is OPTIONAL for the IVS to support the <capabilities> element 🫢 And if the IVS doesn't send one, that means the only <request> action it supports is "send-data" with "datatype" set to "eCall.MSD". Literally the default setup, no cap πŸŽ€

9.1.2.2. Example of the <capabilities> Element 🌸

<?xml version="1.0" encoding="UTF-8"?>
<EmergencyCallData.Control
    xmlns="urn:ietf:params:xml:ns:EmergencyCallData:control">

<capabilities>
    <request action="send-data" supported-values="eCall.MSD"/>
</capabilities>

</EmergencyCallData.Control>

Figure 4: <capabilities> Element Example πŸ“Έ

9.1.3. The <request> Element πŸ’–

A <request> element shows up one or more times, either on its own or as a child of a <capabilities> element. It's how the PSAP asks the IVS to do something. The only action that MUST be supported is sending an MSD, so that one is non-negotiable 😀 The attributes and child elements work like this.

9.1.3.1. Attributes of the <request> Element πŸ¦‹

The <request> element has the following attributes:

  • Name: action
  • Usage: Mandatory
  • Type: token
  • Direction: Sent in either direction
  • Description: This tells you which action the vehicle is being asked to perform. (Inside a <request> that's a child of a <capabilities> element, it instead says which action the vehicle is capable of performing.) An IANA registry is established in Section 14.8.1 to hold the allowed values. πŸ“š
  • Example: action="send-data"
  • Name: int-id
  • Usage: Conditional
  • Type: unsignedInt
  • Direction: Sent in either direction
  • Description: Defined for extensibility. Documents that use it are expected to explain when it's required and how it's used. 🧩
  • Example: int-id="3"
  • Name: persistence
  • Usage: Optional
  • Type: duration
  • Direction: Sent in either direction
  • Description: Defined for extensibility. This says how long to keep carrying on with the specified action. If it's absent, the default is for the duration of the call ⏳
  • Example: persistence="PT1H"
  • Name: datatype
  • Usage: Conditional
  • Type: token
  • Direction: Sent in either direction
  • Description: This one is mandatory when you've got a "send-data" action inside a <request> that is NOT inside a <capabilities> element. It picks which data block the IVS should transmit, using the same identifier as the "purpose" attribute in a Call-Info header field that points to that data block. Permitted values live in IANA's "Emergency Call Data Types" registry, established in [RFC7852]. Only the "eCall.MSD" value is mandatory to support πŸ’œ
  • Example: datatype="eCall.MSD"
  • Name: supported-values
  • Usage: Conditional
  • Type: string
  • Direction: Sent from the IVS to the PSAP
  • Description: Defined for extensibility. When it's used in a <request> element that's a child of a <capability> element, it lists every supported value of the action type. Permitted values depend on the action value. Multiple values are separated with a semicolon, and white space is ignored. Documents that use it are expected to explain when it's required, what the permitted values are, and how it's used 🌈
  • Name: requested-state
  • Usage: Conditional
  • Type: token
  • Direction: Sent from the PSAP to the IVS
  • Description: Defined for extension. It indicates the requested state of an element associated with the request type. Permitted values depend on the request type. Documents that use it are expected to explain when it's required, what the permitted values are, and how it's used πŸŽ€
  • Name: element-id
  • Usage: Conditional
  • Type: token
  • Direction: Sent from the PSAP to the IVS
  • Description: Defined for extension. It identifies the element to be acted on. Permitted values depend on the request type. Documents that use it are expected to explain when it's required, what the permitted values are, and how it's used πŸ“

9.1.3.2. Child Element of the <request> Element 🧚

For extensibility, the <request> element has the following child element:

  • Name: text
  • Usage: Optional
  • Type: string
  • Direction: Sent from the PSAP to the IVS
  • Description: Defined for extension.

9.1.3.3. Request Example πŸ¦‹

<?xml version="1.0" encoding="UTF-8"?>
<EmergencyCallData.Control
    xmlns="urn:ietf:params:xml:ns:EmergencyCallData:control">

<request action="send-data" datatype="eCall.MSD"/>

</EmergencyCallData.Control>

Figure 5: <request> Element Example ✨

10. Examples ✨

okay so this section is literally the fun part πŸ’… Figure 6 shows an eCall. The call uses the request URI urn:service:sos.ecall.automatic service URN, so it gets recognized as an eCall, and even more specifically as one the IVS invoked automatically because of a crash or other serious incident πŸš—πŸ’₯ In this example, the originating network sends the call to an ESInet, and the ESInet sends it to the right NG-eCall-capable PSAP. The emergency call first lands on the ESInet's Emergency Services Routing Proxy (ESRP), which is the entry point into the ESInet πŸšͺ The ESRP routes it to a PSAP, where a call taker picks it up 🎧 If there's no ESInet, the originating network just routes the call straight to the NG-eCall-capable PSAP. The picture would look the same as the one below, just without the ESInet or ESRP 🫢

           +-----------+  +----------------------------------------+
           |           |  |                  +-------+             |
           |           |  |                  | PSAP2 |             |
           |           |  |                  +-------+             |
           |           |  |                                        |
           |           |  |   +------+   +----------------------+  |
 Vehicle-->|           |--|-->| ESRP |-->| PSAP1 --> Call Taker |  |
           |           |  |   +------+   +----------------------+  |
           |           |  |                                        |
           |           |  |                  +-------+             |
           |           |  |                  | PSAP3 |             |
           |Originating|  |                  +-------+             |
           |  Mobile   |  |                                        |
           |  Network  |  |                ESInet                  |
           +-----------+  +----------------------------------------+

Figure 6: Example of NG-eCall Message Flow

Figure 7 is giving "mid-call update" energy πŸ“ž The IVS starts an emergency call and puts the MSD in the INVITE. The PSAP replies with a 200 OK that includes a metadata/control object acknowledging it got the MSD πŸ™Œ Later on, during the call, the PSAP asks for an MSD with an INFO request, and the IVS sends the requested MSD back in a brand-new INFO request πŸ’–

         IVS                                         PSAP
          |(1) INVITE (eCall MSD)                      |
          |------------------------------------------->|
          |                                            |
          |(2) 200 OK (eCall metadata [ack MSD])       |
          |<-------------------------------------------|
          |                                            |
          |(3) start media stream(s)                   |
          |............................................|
          |                                            |
          |(4) INFO (eCall metadata [request MSD])     |
          |<-------------------------------------------|
          |                                            |
          |(5) 200 OK                                  |
          |------------------------------------------->|
          |                                            |
          |(6) INFO (eCall MSD)                        |
          |------------------------------------------->|
          |                                            |
          |(7) 200 OK                                  |
          |<-------------------------------------------|
          |                                            |
          |(8) BYE                                     |
          |<-------------------------------------------|
          |                                            |
          |(9) end media streams                       |
          |............................................|
          |                                            |
          |(10) 200 OK                                 |
          |------------------------------------------->|

Figure 7: NG-eCall Call Flow Illustration

Figure 8 is the SIP eCall INVITE with an MSD in it πŸŽ€ Quick heads-up: this example skips a bunch of SIP headers, the Session Description Protocol (SDP) contents, and any extra data blocks the IVS or the originating mobile network might add. Also, the MSD is ASN.1 PER encoded, which is binary, so its contents just can't live in a text doc πŸ™ˆ

   INVITE urn:service:sos.ecall.automatic SIP/2.0
   To: urn:service:sos.ecall.automatic
   From: <sip:+13145551111@example.com>;tag=9fxced76sl
   Call-ID: 3848276298220188511@atlanta.example.com
   Geolocation: <cid:target123@example.com>
   Geolocation-Routing: no
   Call-Info: <cid:1234567890@atlanta.example.com>;
              purpose=EmergencyCallData.eCall.MSD
   Accept: application/sdp, application/pidf+xml,
           application/EmergencyCallData.Control+xml
   CSeq: 31862 INVITE
   Recv-Info: EmergencyCallData.eCall.MSD
   Allow: INVITE, ACK, PRACK, INFO, OPTIONS, CANCEL, REFER, BYE,
          SUBSCRIBE, NOTIFY, UPDATE
   Content-Type: multipart/mixed; boundary=boundary1
   Content-Length: ...

   --boundary1
   Content-Type: application/sdp

        ...Session Description Protocol (SDP) goes here...

   --boundary1
   Content-Type: application/pidf+xml
   Content-ID: <target123@example.com>
   Content-Disposition: by-reference;handling=optional

         ...PIDF-LO goes here...

   --boundary1
   Content-Type: application/EmergencyCallData.eCall.MSD
   Content-ID: <1234567890@atlanta.example.com>
   Content-Disposition: by-reference;handling=optional

        ...MSD in ASN.1 PER encoding goes here...

    --boundary1--

Figure 8: SIP NG-eCall INVITE

Continuing the story πŸ¦‹ Figure 9 shows a SIP 200 OK answering the INVITE from Figure 8. It carries a metadata/control block that acknowledges the eCall MSD was received successfully βœ… (Same deal as before: not every SIP header is shown.)

   SIP/2.0 200 OK
   To: urn:service:sos.ecall.automatic;tag=8gydfe65t0
   From: <sip:+13145551111@example.com>;tag=9fxced76sl
   Call-ID: 3848276298220188511@atlanta.example.com
   Call-Info: <cid:2345678901@atlanta.example.com>;
              purpose=EmergencyCallData.Control
   Accept: application/sdp, application/pidf+xml,
           application/EmergencyCallData.Control+xml,
           application/EmergencyCallData.eCall.MSD
   CSeq: 31862 INVITE
   Recv-Info: EmergencyCallData.eCall.MSD
   Allow: INVITE, ACK, PRACK, INFO, OPTIONS, CANCEL, REFER, BYE,
          SUBSCRIBE, NOTIFY, UPDATE
   Content-Type: multipart/mixed; boundary=boundaryX
   Content-Length: ...

   --boundaryX
   Content-Type: application/sdp

        ...Session Description Protocol (SDP) goes here...

   --boundaryX
   Content-Type: application/EmergencyCallData.Control+xml
   Content-ID: <2345678901@atlanta.example.com>
   Content-Disposition: by-reference

   <?xml version="1.0" encoding="UTF-8"?>
   <EmergencyCallData.Control
       xmlns="urn:ietf:params:xml:ns:EmergencyCallData:control">

   <ack received="true" ref="1234567890@atlanta.example.com"/>
   </EmergencyCallData.Control>

   --boundaryX--

Figure 9: 200 OK Response to INVITE

Figure 10 is a SIP INFO request with a metadata/control block that asks for an eCall MSD πŸ™‹β€β™€οΈ (Once again, the example skips some SIP headers, so don't panic if you spot a gap.)

 INFO sip:+13145551111@example.com SIP/2.0
 To: <sip:+13145551111@example.com>;tag=9fxced76sl
 From: Exemplar PSAP <urn:service:sos.ecall.automatic>;tag=8gydfe65t0
 Call-ID: 3848276298220188511@atlanta.example.com
 Call-Info: <cid:3456789012@atlanta.example.com>;
            purpose=EmergencyCallData.Control
 CSeq: 41862 INFO
 Info-Package: EmergencyCallData.eCall.MSD
 Allow: INVITE, ACK, PRACK, INFO, OPTIONS, CANCEL, REFER, BYE,
        SUBSCRIBE, NOTIFY, UPDATE
 Content-Type: multipart/mixed; boundary=boundaryZZZ
 Content-Disposition: Info-Package
 Content-Length: ...

 --boundaryZZZ
 Content-Disposition: by-reference
 Content-Type: application/EmergencyCallData.Control+xml
 Content-ID: <3456789012@atlanta.example.com>

 <?xml version="1.0" encoding="UTF-8"?>
 <EmergencyCallData.Control
     xmlns="urn:ietf:params:xml:ns:EmergencyCallData:control">

 <request action="send-data" datatype="eCall.MSD"/>

 </EmergencyCallData.Control>
  --boundaryZZZ--

Figure 10: INFO Requesting MSD

Figure 11 is the SIP INFO request that actually carries the MSD πŸ’œ Same vibe as before: some SIP headers are left out, and the MSD is ASN.1 PER encoded binary, so its contents can't be shown in a text document.

   INFO urn:service:sos.ecall.automatic SIP/2.0
   To: urn:service:sos.ecall.automatic;tag=8gydfe65t0
   From: <sip:+13145551111@example.com>;tag=9fxced76sl
   Call-ID: 3848276298220188511@atlanta.example.com
   Call-Info: <cid:4567890123@atlanta.example.com>;
              purpose=EmergencyCallData.eCall.MSD
   CSeq: 51862 INFO
   Info-Package: EmergencyCallData.eCall.MSD
   Allow: INVITE, ACK, PRACK, INFO, OPTIONS, CANCEL, REFER, BYE,
          SUBSCRIBE, NOTIFY, UPDATE
   Content-Type: multipart/mixed; boundary=boundaryLine
   Content-Disposition: Info-Package
   Content-Length: ...

   --boundaryLine
   Content-Type: application/EmergencyCallData.eCall.MSD
   Content-ID: <4567890123@atlanta.example.com>
   Content-Disposition: by-reference

        ...MSD in ASN.1 PER encoding goes here...

   --boundaryLine--

Figure 11: INFO Containing MSD

11. Security Considerations πŸ”βœ¨

okay bestie, security is where we get serious 😀 The security considerations in [RFC5069] (on marking and routing emergency calls) apply here too πŸ’…

ngl this part is so important. Along with whatever location the network gives (which might be figured out only by the network, or together with the originating device, or possibly entirely by the device πŸ—ΊοΈ), an eCall also carries an IVS-supplied location inside the MSD. That's highkey useful for the PSAP, especially when no network-provided location is included, or when the two locations are determined independently πŸ“. Even when the network-supplied location is limited to the cell site, it can still work as a sanity check on the device-supplied location in the MSD. so smart πŸ§ πŸ’–

[RFC7378] talks about trust issues around location that's provided by end devices, or figured out with their help 🀝

The security stuff specific to how the PSAP sends acknowledgments and requests to the vehicle is covered in the "Security Considerations" block of Section 14.4 🫢 But here's the tea. An attacker who can access the initial INVITE request and is able to generate a response to it could send a 600 (Busy Everywhere), 486 (Busy Here), or 603 (Decline) response 😱 That response would include a metadata/control object that references the MSD in the initial INVITE, plus a "received=true" field. The result? The IVS might think the PSAP is overloaded and then decide NOT to try reinitiating the call πŸ’€ The risk can be mitigated as described in the "Security Considerations" block of Section 14.4 πŸ›‘οΈ

Data that comes from external sources always carries implementation risks, bestie 🚨 Depending on the platform, buffer overflows can lead to remote code execution vulnerabilities, null characters can corrupt strings, numeric values used in internal calculations can cause underflow/overflow errors, and malformed XML objects can expose parsing bugs, etc. 😭 Implementations need to be aware of these risks and follow best practices, which might include sufficiently capable static code analysis, fuzz testing, component isolation, avoiding unsafe coding techniques, third-party attack tests, signed software, over-the-air updates, etc. They also need multiple levels of protection πŸ”’ Implementors especially need to know that the data objects described here and elsewhere (including the MSD and metadata/control objects) might be malformed, contain unexpected characters, or have excessively long attribute values and elements, etc. πŸ™ˆ

The security considerations in [RFC7852] apply here too πŸ” Look especially at the discussion of Transport Layer Security (TLS), TLS versions, cipher suites, and PKI 🌈

When vehicle data or control/metadata is inside a signed or encrypted body part, the enclosing multipart (for example, multipart/signed or multipart/encrypted) has the same Content-ID as the enclosed data part 🧩 This lets an entity find and access the data blocks it cares about without digging deep into the message structure or decrypting parts it isn't interested in. Iconic, right? ✨ (The "purpose" parameter in a Call-Info header field identifies the data and contains a CID URL that points to the data block in the body, which has a matching Content-ID body part header field πŸ“¦)


12. Privacy Considerations 🫣

The privacy considerations in [RFC7852] apply here πŸ’œ The MSD carries some identifying and personal information (mostly about the vehicle and less about the owner), plus location information πŸ“ So it needs to be protected against unauthorized disclosure. Local regulations may add their own privacy protection requirements, so keep an eye on those too 🌸

Privacy considerations specific to the data structure that holds vehicle information are in the "Security Considerations" block of Section 14.3 πŸš—

Privacy considerations specific to how the PSAP sends acknowledgments and requests to the vehicle are in the "Security Considerations" block of Section 14.4 πŸ¦‹


13. XML Schema πŸ§ΎπŸ’…

This section defines an XML schema for the control block πŸŽ€ The text description of the control block in Section 9.1 is normative and supersedes any conflicting aspect of this schema, so the words win if they ever disagree πŸ‘‘

    <?xml version="1.0"?>
    <xs:schema
      targetNamespace="urn:ietf:params:xml:ns:EmergencyCallData:control"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:pi="urn:ietf:params:xml:ns:EmergencyCallData:control"
      xmlns:xml="http://www.w3.org/XML/1998/namespace"
      elementFormDefault="qualified"
      attributeFormDefault="unqualified">

        <xs:import namespace="http://www.w3.org/XML/1998/namespace"/>

        <xs:element name="EmergencyCallData.Control"
                    type="pi:controlType"/>

        <xs:complexType name="controlType">
           <xs:complexContent>
              <xs:restriction base="xs:anyType">
                 <xs:choice>
                    <xs:element name="capabilities"
                                type="pi:capabilitiesType"/>
                    <xs:element name="request" type="pi:requestType"/>
                    <xs:element name="ack" type="pi:ackType"/>
                    <xs:any namespace="##any" processContents="lax"
                            minOccurs="0"
                            maxOccurs="unbounded"/>
                 </xs:choice>
                 <xs:anyAttribute/>
              </xs:restriction>
           </xs:complexContent>
        </xs:complexType>

        <xs:complexType name="ackType">
            <xs:complexContent>
                <xs:restriction base="xs:anyType">
                    <xs:sequence minOccurs="1" maxOccurs="unbounded">
                        <xs:element name="actionResult" minOccurs="0"
                                    maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="action"
                                              type="xs:token"
                                              use="required"/>
                                <xs:attribute name="success"
                                              type="xs:boolean"
                                              use="required"/>
                                <xs:attribute name="reason"
                                              type="xs:token">
                                    <xs:annotation>
                                        <xs:documentation>
                                            conditionally mandatory
                                            when @success="false"
                                            to indicate reason code
                                            for a failure
                                        </xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="details"
                                              type="xs:string"/>
                                <xs:anyAttribute
                                    processContents="skip"/>
                            </xs:complexType>
                        </xs:element>
                        <xs:any namespace="##any" processContents="lax"
                                minOccurs="0"
                                maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:attribute name="ref"
                                  type="xs:anyURI"
                                  use="required"/>

                    <xs:attribute name="received"
                                  type="xs:boolean"/>
                    <xs:anyAttribute/>
                </xs:restriction>
            </xs:complexContent>
        </xs:complexType>

        <xs:complexType name="capabilitiesType">
            <xs:complexContent>
                <xs:restriction base="xs:anyType">
                    <xs:sequence minOccurs="1" maxOccurs="unbounded">
                        <xs:element name="request"
                                    type="pi:requestType"
                                    minOccurs="1"
                            maxOccurs="unbounded"/>
                        <xs:any namespace="##any" processContents="lax"
                                 minOccurs="0"
                            maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:anyAttribute/>
                </xs:restriction>
            </xs:complexContent>
        </xs:complexType>

        <xs:complexType name="requestType">
           <xs:complexContent>
                <xs:restriction base="xs:anyType">
                    <xs:choice minOccurs="1" maxOccurs="unbounded">
                        <xs:element name="text" minOccurs="0"
                                    maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                        <xs:anyAttribute
                                            namespace="##any"
                                            processContents="skip"/>
                                    </xs:extension>
                                </xs:simpleContent>
                            </xs:complexType>
                        </xs:element>
                        <xs:any namespace="##any" processContents="lax"
                                minOccurs="0"
                                maxOccurs="unbounded"/>
                    </xs:choice>
                    <xs:attribute name="action" type="xs:token"
                                  use="required"/>

                    <xs:attribute name="int-id" type="xs:unsignedInt"/>
                    <xs:attribute name="persistence"
                                  type="xs:duration"/>
                    <xs:attribute name="datatype" type="xs:token"/>
                    <xs:attribute name="supported-values"
                                  type="xs:string"/>
                    <xs:attribute name="element-id" type="xs:token"/>
                    <xs:attribute name="requested-state"
                                  type="xs:token"/>
                    <xs:anyAttribute/>
                </xs:restriction>
            </xs:complexContent>
        </xs:complexType>

    </xs:schema>

Figure 12: Control Block Schema πŸ“œ


14. IANA Considerations πŸ—‚οΈπŸŒˆ

14.1. The EmergencyCallData Media Subtree 🎢

This document establishes the "EmergencyCallData" media (MIME) subtype tree, which is a brand-new media subtree rooted at "application/EmergencyCallData" πŸ₯³ This subtree is used only for content associated with emergency communications πŸš‘ New subtypes in this subtree follow the rules in Section 3.1 of [RFC6838], with one extra restriction: the standards-related organization MUST be responsible for some aspect of emergency communications πŸ‘‘

This subtree initially contains the following subtypes (defined here or in [RFC7852]) πŸ’–

      EmergencyCallData.Comment+xml
      EmergencyCallData.Control+xml
      EmergencyCallData.DeviceInfo+xml
      EmergencyCallData.eCall.MSD
      EmergencyCallData.ProviderInfo+xml
      EmergencyCallData.ServiceInfo+xml
      EmergencyCallData.SubscriberInfo+xml

14.2. Service URN Registrations πŸ“ž

IANA has registered the URN urn:service:sos.ecall under the "'sos' Sub-Services" registry defined in Section 4.2 of [RFC5031]. πŸ’–

Okay so this is the main eCall service URN ✨ It requests resources tied to an emergency call placed by an in-vehicle system, and the call carries a standardized set of data about the vehicle and the incident. The "Description" registry field is "Vehicle-initiated emergency calls". Two sub-services are registered as well:

  • urn:service:sos.ecall.automatic
    • Used with an eCall invoked automatically, for example, due to a crash or other serious incident. The "Description" registry field is "Automatic vehicle-initiated emergency calls". πŸ’₯
  • urn:service:sos.ecall.manual
    • Used with an eCall invoked due to manual interaction by a vehicle occupant. The "Description" registry field is "Manual vehicle-initiated emergency calls". πŸ™‹β€β™€οΈ

IANA has also registered the URN urn:service:test.sos.ecall under the "'test' Sub-Services" registry defined in Section 17.2 of [RFC6881]. This one is the test vibe πŸ§ͺ It requests resources for a test (non-emergency) call placed by an in-vehicle system. See Section 8 for more information on the test eCall request URN. πŸŽ€


14.3. MIME Media Type Registration for application/EmergencyCallData.eCall.MSD 🩷

IANA added application/EmergencyCallData.eCall.MSD as a MIME media type, referencing this document, following the procedures in RFC 6838 [RFC6838] and the guidelines in RFC 7303 [RFC7303]. Here's the whole registration, bestie:

  • MIME media type name: application
  • MIME subtype name: EmergencyCallData.eCall.MSD
  • Mandatory parameters: none
  • Optional parameters: none
  • Encoding scheme: binary
  • Encoding considerations: It uses ASN.1 PER, which is a binary encoding. When it's transported in SIP, binary content transfer encoding is used. πŸ€–
  • Security considerations: This media type is built to carry vehicle and incident-related data during an emergency call. That data includes personal info like the vehicle VIN, location, direction, and so on, so it's super important to take precautions that limit unauthorized access, inappropriate disclosure to third parties, and eavesdropping. Sections 9 and 10 of [RFC7852] go deeper on this. πŸ”’
  • Interoperability considerations: None
  • Published specification: Annex A of EN 15722 [MSD]
  • Applications which use this media type: Pan-European eCall compliant systems
  • Additional information: None
  • Magic Number: None
  • File Extension: None
  • Macintosh file type code: BINA
  • Person and email address for further information: Randall Gellens, rg+ietf@randy.pensive.org
  • Intended usage: LIMITED USE
  • Author: The MSD specification was produced by the European Committee For Standardization (CEN). For contact information, please see <http://www.cen.eu/cen/Pages/contactus.aspx>.
  • Change controller: The European Committee For Standardization (CEN)

14.4. MIME Media Type Registration for application/EmergencyCallData.Control+xml 🧾

IANA added application/EmergencyCallData.Control+xml as a MIME media type, referencing this document, following the procedures in RFC 6838 [RFC6838] and the guidelines in RFC 7303 [RFC7303]. Here's the deal:

  • MIME media type name: application
  • MIME subtype name: EmergencyCallData.Control+xml
  • Mandatory parameters: none
  • Optional parameters: charset, which indicates the character encoding of the XML content.
  • Encoding considerations: It uses XML, which can use 8-bit characters depending on the character encoding in use. See Section 3.2 of RFC 7303 [RFC7303]. πŸ”€
  • Security considerations: This media type carries metadata, control information, and requests, like the ones sent from a Public Safety Answering Point (PSAP) to an In-Vehicle System (IVS) during an emergency call. 🚨

Metadata (like an acknowledgment that data the IVS sent to the PSAP was received successfully) has limited privacy and security implications. Control information (like requests from the PSAP asking the vehicle to perform an action) has some privacy and security implications, and this part is serious 😳 The privacy concern comes from the ability to request the vehicle to transmit a data set, which, as described in Section 14.3, can contain personal information. The security concern is the ability to request the vehicle to perform an action. Control information needs to originate only from a PSAP or other emergency services providers, and it needs to not be modified en route. The integrity of the cellular network the emergency call goes over also matters: when the IVS starts an eCall over a cellular network, it mostly relies on the MNO to route the call to a PSAP. (Calls placed using other means, like Wi-Fi or over-the-top services, generally carry somewhat higher levels of risk than calls placed "natively" over cellular networks.) πŸ“Ά

A callback from a PSAP deserves extra attention, because current mechanisms aren't ideal for verifying that a call really is a callback from a PSAP responding to an emergency call placed by the IVS. See the discussion in Section 11 and the PSAP Callback document [RFC7090]. πŸ“ž

Sections 7 and 8 of [RFC7852] contain more discussion.

  • Interoperability considerations: None
  • Published specification: This document
  • Applications which use this media type: Pan-European eCall compliant systems
  • Additional information: None
  • Magic Number: None
  • File Extension: .xml
  • Macintosh file type code: TEXT
  • Person and email address for further information: Randall Gellens, rg+ietf@randy.pensive.org
  • Intended usage: LIMITED USE
  • Author: The IETF ECRIT working group
  • Change controller: The IETF ECRIT working group

14.5. Registration of the "eCall.MSD" Entry in the Emergency Call Data Types Registry πŸ—‚οΈ

IANA has added the "eCall.MSD" entry to the "Emergency Call Data Types" registry, with a reference to this document. The "Data About" value is "The Call". βœ…

14.6. Registration of the "Control" Entry in the Emergency Call Data Types Registry πŸŽ›οΈ

IANA has added the "Control" entry to the "Emergency Call Data Types" registry, with a reference to this document. The "Data About" value is "The Call". πŸ’œ

14.7. Registration for urn:ietf:params:xml:ns:EmergencyCallData:control 🌸

This section registers a new XML namespace, following the guidelines in RFC 3688 [RFC3688]. 🧚

  • URI: urn:ietf:params:xml:ns:EmergencyCallData:control
  • Registrant Contact: IETF, ECRIT working group, <ecrit@ietf.org>, as delegated by the IESG <iesg@ietf.org>.
  • XML:
BEGIN
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
     "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
     <meta http-equiv="content-type"
           content="text/html;charset=iso-8859-1"/>
     <title>Namespace for Emergency Call Data Control Block</title>
</head>
<body>
     <h1>Namespace for Emergency Call Data Control Block</h1>
<p>See RFC 8147</p>
</body>
</html>
END

14.8. Registry Creation πŸ—οΈ

This document creates a new registry called "Emergency Call Metadata/Control Data". The following sub-registries are created for this registry. πŸŽ€

14.8.1. Emergency Call Actions Registry 🎬

This document creates a new sub-registry called "Emergency Call Actions". As defined in [RFC5226], this registry operates under "Expert Review" rules. The expert should determine that the proposed action is within the purview of a vehicle, is sufficiently distinguishable from other actions, and is clearly and fully described. In most cases, a published and stable document is referenced for the description of the action. πŸ“š

The content of this registry includes:

  • Name: The identifier to be used in the "action" attribute of a control <request> element.
  • Description: A description of the action. In most cases, this will be a reference to a published and stable document. The description MUST specify if any attributes or child elements are optional or mandatory and describe the action to be taken by the vehicle. ⚠️

The initial set of values is listed in Table 1.

        +-----------+--------------------------------------+
        |    Name   |             Description              |
        +-----------+--------------------------------------+
        | send-data | See Section 9.1.3.1 of this document |
        +-----------+--------------------------------------+

       Table 1: Emergency Call Actions Registry Initial Values

14.8.2. Emergency Call Action Failure Reasons Registry 🚫

This document creates a new sub-registry called "Emergency Call Action Failure Reasons", which holds the values for the "reason" attribute of the <actionResult> element. As defined in [RFC5226], this registry operates under "Expert Review" rules. The expert should determine that the proposed reason is sufficiently distinguishable from other reasons, and that the proposed description is understandable and correctly worded. 🧐

The content of this registry includes:

  • ID: A short string identifying the reason, for use in the "reason" attribute of an <actionResult> element.
  • Description: A description of the reason.

The initial set of values is listed in Table 2.

+------------------+------------------------------------------------+
| ID               | Description                                    |
+------------------+------------------------------------------------+
| damaged          | Required components are damaged.               |
|                  |                                                |
| data-unsupported | The data item referenced in a "send-data"      |
|                  | request is not supported.                      |
|                  |                                                |
| security-failure | The authenticity of the request or the         |
|                  | authority of the requestor could not be        |
|                  | verified.                                      |
|                  |                                                |
| unable           | The action could not be accomplished (a        |
|                  | generic error for use when no other code is    |
|                  | appropriate).                                  |
|                  |                                                |
| unsupported      | The "action" value is not supported.           |
+------------------+------------------------------------------------+

    Table 2: Emergency Call Action Failure Reasons Registry Initial
                                Values

14.9. The EmergencyCallData.eCall.MSD INFO Package ✨

okay bestie, this section registers the EmergencyCallData.eCall.MSD INFO package in the "Info Packages Registry" πŸ“‹πŸ’–

Both endpoints (the IVS and the PSAP equipment) put EmergencyCallData.eCall.MSD in a Recv-Info header field per [RFC6086]. That's how they say "hey, I can receive INFO requests carrying data described here" 🫢

Supporting this package means you can receive the eCall-related body parts specified in this document πŸŽ€

An INFO request carrying emergency-call body parts (as described here) has its Info-Package header field set to EmergencyCallData.eCall.MSD per [RFC6086] πŸ¦‹

The requirements of Section 10 of [RFC6086] are handled in the sections below πŸ’…

14.9.1. Overall Description

This part explains what kind of info travels in INFO requests for this package, and which applications and functionalities User Agents (UAs) can use it for 🌸

INFO requests tied to the EmergencyCallData.eCall.MSD INFO package carry emergency call data, as defined in this document πŸš— The application is vehicle-initiated emergency calls set up using SIP. The functionality is carrying vehicle data and metadata/control info between vehicles and PSAPs. It's giving connected car, no cap πŸ”₯

14.9.2. Applicability

Here we explain why the INFO package mechanism was picked over the other options, for this specific use case 🧐

The SIP INFO method was chosen after the team compared the requirements against what INFO does and how it behaves versus other approaches. The alternatives they looked at were the SIP MESSAGE method, the SIP OPTIONS method, the SIP re-INVITE method, media-plane transport, and non-SIP protocols. The key thing is that the emergency call data blocks get transported inside a SIP emergency dialog (per Section 6), and they're normally carried in the initial INVITE request and response. The SIP INFO method only comes into play when emergency-call-related data needs to be sent mid-call πŸ™ˆ

SIP MESSAGE could work, but it isn't tied to a SIP dialog the way SIP INFO is, so it might not be associated with the dialog. SIP OPTIONS or re-INVITE could also do the job, but they're seen as less clean than SIP INFO πŸ€·β€β™€οΈ

SIP SUBSCRIBE/NOTIFY could be coerced into service, but the semantics aren't a good fit. Subscribe/notify gives one-way communication: a bunch of (often multiple) notifications from the notifier to the subscriber, saying certain events in the notifier have happened. What we actually need is two-way communication of data related to the emergency dialog πŸ’€

Media-plane mechanisms got discounted too. The number of messages that need to be exchanged in a dialog is normally zero or very few, and the data is also very small. Setting up a user plane (for example, using the Message Session Relay Protocol (MSRP) as transport) would have way too much overhead 😭

After all those analyses, the SIP INFO method was chosen to provide mid-call data transport πŸŽ‰

14.9.3. INFO Package Name

The INFO package name is EmergencyCallData.eCall.MSD 🏷️

14.9.4. INFO Package Parameters

None 🌈

14.9.5. SIP Option-Tags

None 🫧

14.9.6. INFO Request Body Parts

The body of an EmergencyCallData.eCall.MSD INFO request is a multipart body (normally multipart/mixed) 🧩 It contains zero or one application/EmergencyCallData.eCall.MSD parts (holding an MSD), plus zero or more application/EmergencyCallData.Control+xml parts (holding a metadata/control object). At least one MSD or metadata/control body part is expected. What happens when an INFO request arrives with neither is undefined, so don't count on anything there πŸ‘€

The body parts get sent per [RFC6086]. On top of that, to line up with how these body parts are sent in SIP messages that aren't INFO requests, each associated body part is referenced by a Call-Info header field at the top level of the SIP message. The body part has a Content-Disposition header field set to By-Reference πŸ”—

An MSD or metadata/control block is always enclosed in a multipart body part, even if it would otherwise be the only body part in the SIP message πŸŽ€ The outermost multipart that contains only body parts associated with the INFO package has a Content-Disposition value of Info-Package πŸ’…

14.9.7. INFO Package Usage Restrictions

Usage is limited to vehicle-initiated emergency calls as defined in this document πŸš«πŸš™

14.9.8. Rate of INFO Requests

Within an established emergency call dialog, the SIP INFO request is used in two ways. The PSAP uses it to ask the IVS to send an updated MSD, and the IVS uses it to send a requested MSD πŸ“ž

This is normally only done on manual request of the PSAP call taker, who suspects some part of the vehicle state has changed. So the rate of SIP INFO requests for the EmergencyCallData.eCall.MSD INFO package is normally pretty low. Most dialogs are likely to have zero INFO requests, and others might carry an occasional one 🐒✨

14.9.9. INFO Package Security Considerations

The MIME media type registrations for this INFO package (Sections 14.3 and 14.4) talk about the security and/or privacy considerations specific to that data block πŸ” For the security and privacy considerations of the data carried in eCalls, see Sections 11 and 12 πŸ›‘οΈ

14.9.10. Implementation Details

Protocol details are in Sections 6 and 7 πŸ“–

14.9.11. Examples

Protocol examples are in Section 10 πŸ“

15. References πŸ“š

15.1. Normative References

[MSD]      European Committee for Standardization, "Intelligent
           transport systems - eSafety - eCall minimum set of data
           (MSD)", Standard: CEN - EN 15722, April 2015.

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119,
           DOI 10.17487/RFC2119, March 1997,
           <http://www.rfc-editor.org/info/rfc2119>.

[RFC3688]  Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
           DOI 10.17487/RFC3688, January 2004,
           <http://www.rfc-editor.org/info/rfc3688>.

[RFC5031]  Schulzrinne, H., "A Uniform Resource Name (URN) for
           Emergency and Other Well-Known Services", RFC 5031,
           DOI 10.17487/RFC5031, January 2008,
           <http://www.rfc-editor.org/info/rfc5031>.

[RFC5226]  Narten, T. and H. Alvestrand, "Guidelines for Writing an
           IANA Considerations Section in RFCs", BCP 26, RFC 5226,
           DOI 10.17487/RFC5226, May 2008,
           <http://www.rfc-editor.org/info/rfc5226>.

[RFC6086]  Holmberg, C., Burger, E., and H. Kaplan, "Session
           Initiation Protocol (SIP) INFO Method and Package
           Framework", RFC 6086, DOI 10.17487/RFC6086, January 2011,
           <http://www.rfc-editor.org/info/rfc6086>.

[RFC6838]  Freed, N., Klensin, J., and T. Hansen, "Media Type
           Specifications and Registration Procedures", BCP 13,
           RFC 6838, DOI 10.17487/RFC6838, January 2013,
           <http://www.rfc-editor.org/info/rfc6838>.

[RFC6881]  Rosen, B. and J. Polk, "Best Current Practice for
           Communications Services in Support of Emergency Calling",
           BCP 181, RFC 6881, DOI 10.17487/RFC6881, March 2013,
           <http://www.rfc-editor.org/info/rfc6881>.

[RFC7303]  Thompson, H. and C. Lilley, "XML Media Types", RFC 7303,
           DOI 10.17487/RFC7303, July 2014,
           <http://www.rfc-editor.org/info/rfc7303>.

[RFC7852]  Gellens, R., Rosen, B., Tschofenig, H., Marshall, R., and
           J. Winterbottom, "Additional Data Related to an Emergency
           Call", RFC 7852, DOI 10.17487/RFC7852, July 2016,
           <http://www.rfc-editor.org/info/rfc7852>.

15.2. Informative references

[CEN]      "European Committee for Standardization (CEN)",
           <http://www.cen.eu>.

[EN_16062] European Committee for Standardization, "Intelligent
           transport systems - eSafety - eCall High Level Application
           Requirements (HLAP) Using GSM/UMTS Circuit Switched
           Networks", Standard: CEN - EN 16062, April 2015.

[EN_16072] European Committee for Standardization, "Intelligent
           transport systems - eSafety - Pan-European eCall operating
           requirements", Standard: CEN - EN 16072, April 2015.

[MSG_TR]   ETSI, "Mobile Standards Group (MSG); eCall for VoIP",
           ETSI TR 103 140 V1.1.1, April 2014.

[RFC5012]  Schulzrinne, H. and R. Marshall, Ed., "Requirements for
           Emergency Context Resolution with Internet Technologies",
           RFC 5012, DOI 10.17487/RFC5012, January 2008,
           <http://www.rfc-editor.org/info/rfc5012>.

[RFC5069]  Taylor, T., Ed., Tschofenig, H., Schulzrinne, H., and M.
           Shanmugam, "Security Threats and Requirements for
           Emergency Call Marking and Mapping", RFC 5069,
           DOI 10.17487/RFC5069, January 2008,
           <http://www.rfc-editor.org/info/rfc5069>.

[RFC6443]  Rosen, B., Schulzrinne, H., Polk, J., and A. Newton,
           "Framework for Emergency Calling Using Internet
           Multimedia", RFC 6443, DOI 10.17487/RFC6443, December
           2011, <http://www.rfc-editor.org/info/rfc6443>.

[RFC7090]  Schulzrinne, H., Tschofenig, H., Holmberg, C., and M.
           Patel, "Public Safety Answering Point (PSAP) Callback",
           RFC 7090, DOI 10.17487/RFC7090, April 2014,
           <http://www.rfc-editor.org/info/rfc7090>.

[RFC7378]  Tschofenig, H., Schulzrinne, H., and B. Aboba, Ed.,
           "Trustworthy Location", RFC 7378, DOI 10.17487/RFC7378,
           December 2014, <http://www.rfc-editor.org/info/rfc7378>.

[RFC8148]  Gellens, R., Rosen, B., and H. Tschofenig, "Next-
           Generation Vehicle-Initiated Emergency Calls", RFC 8148,
           DOI 10.17487/RFC8148, May 2017,
           <http://www.rfc-editor.org/info/rfc8148>.

[SDO-3GPP] "3rd Generation Partnership Project (3GPP)",
           <http://www.3gpp.org/>.

[SDO-ETSI] "European Telecommunications Standards Institute (ETSI)",
           <http://www.etsi.org>.

[TS22.101] 3GPP, "Universal Mobile Telecommunications System (UMTS);
           Service aspects; Service principles", 3GPP TS
           22.101, version 8.7.0, Release 8, January 2008.

[TS23.167] 3GPP, "IP Multimedia Subsystem (IMS) emergency sessions",
           3GPP TS 23.167, version 9.6.0, Release 9, March 2011.

[TS24.229] 3GPP, "IP multimedia call control protocol based on
           Session Initiation Protocol (SIP) and Session Description
           Protocol (SDP); Stage 3", 3GPP TS 24.229, version 12.6.0,
           Release 12, October 2014.

Acknowledgments πŸ’œ

Huge thank-yous to Bob Williams and Ban Al-Bakri for their feedback and suggestions 🫢 Rex Buddenberg, Lena Chaponniere, Alissa Cooper, Keith Drage, Stephen Edge, Wes George, Mirja Kuehlewind, Allison Mankin, Alexey Melnikov, Ivo Sedlacek, and James Winterbottom reviewed it and gave comments, which was so needed πŸ™Œ Robert Sparks and Paul Kyzivat helped with the SIP mechanisms ✨ Mark Baker and Ned Freed helped with the media subtype registration issue πŸ’… Michael Montag, Arnoud van Wijk, Gunnar Hellstrom, and Ulrich Dietz helped with the original document this one is based on 🌸 And Christer Holmberg deserves special mention for his many detailed reviews πŸ‘‘

Contributors ✨

Okay, bestie, big shoutout to Brian Rosen 🫢 He was a co-author of the original document this one is based on, so he basically laid the groundwork for all of this 🌸

Authors' Addresses πŸ’…

Randall Gellens πŸ’– Core Technology Consulting Email: rg+ietf@coretechnologyconsulting.com URI: http://www.coretechnologyconsulting.com

Hannes Tschofenig πŸ¦‹ Individual Email: Hannes.Tschofenig@gmx.net URI: http://www.tschofenig.priv.at

πŸ“¦ where this page comes from