C2MS 1.2b1 RTF Avatar
  1. OMG Issue

C2MS12 — Support CCSDS SM&C Services in C2MS

  • Key: C2MS12-215
  • Status: open  
  • Source: NASA ( Mr. James Kevin Rice)
  • Summary:

    (Note: This is a consolidated and cleaned-up issue for CCSDS SM&C and MAL, which exist in several other C2MS issues.
    This information has been collected from those sources and refined for clarity moving forward. Previous issues listed below.)

    The CCSDS (Spacecraft Monitor & Control) SM&C defines a set of mission operations services. At the bottom of these
    services is an abstract MAL message layer.

    It is possible that an abstract MAL message could be mapped to a C2MS version, along with an appropriate addressing
    scheme so that SM&C services could flow over a C2MS system, coexisting with C2MS message-based services. The following
    is a copy of the current MAL message. It has a header consisting of several fields; after these data fields, this will
    be (preliminarily) further discussed following the header section.

    Within the header, there are TO and FROM fields. The CCSDS MAL Blue Book states that these fields are “open” in the MAL
    abstract definition, although some form of reasonable quality-of-delivery service should also be provided for MAL message
    delivery. There is also a service model—this is described in a separate Blue Book—which suggests that each service has an
    associated URI.

    Finally, there are several MAL mappings defined in various Blue Books—TCP, HTTP, and Space Packets, to name three. These
    show how the MAL URI TO/FROM fields are mapped to specific protocol headers such as source/destination IP addresses, HTTP
    URLs, and APIDs, to align with the above references. Given that the C2MS message can define services using C2MS subjects,
    these can be used directly for the MAL TO/FROM fields or mapped from corresponding URI/URL values.

    The REFERENCES section at the end of this description points to several CCSDS reports and multiple implementations in
    different programming languages, using a variety of transport mechanisms.

    Abstract MAL Header

    Field Type Description
    From Identifier Message Source
    Authentication Id Blob Authentication Identifier of Message Originator
    To Identifier Message Destination
    Timestamp Time Message generation timestamp
    Interaction Type InteractionType Interaction Pattern Type
    Interaction Stage UOctet Interaction Pattern Stage
    Transaction Id Long Unique to consumer
    Service Area UShort Service Area
    Service UShort Service
    Operation UShort Service Operation
    Area version UOctet Area version
    Is Error Message Boolean ‘True’ if this is an error message; else ‘False’
    Supplements List<NamedValue> Optional supplementary fields

    URI MAL Header

    Field Type Description
    URI From Identifier Message Source
    Authentication Id Blob Authentication Identifier of Message Originator
    URI To Identifier Message Destination
    Timestamp Time Message generation timestamp
    Interaction Type InteractionType Interaction Pattern Type
    Interaction Stage UOctet Interaction Pattern Stage
    Transaction Id Long Unique to consumer
    Service Area UShort Service Area
    Service UShort Service
    Operation UShort Service Operation
    Area version UOctet Area version
    Is Error Message Boolean ‘True’ if this is an error message; else ‘False’
    Supplements List<NamedValue> Optional supplementary fields

    (possible and vague mapping of MAL as C2MS minus fixing up types and the List)

    C2MS MAL Header

    Field Type Description
    C2MS Subject Source Identifier Message Source
    Authentication Id Blob Authentication Identifier of Message Originator
    C2MS Subject Destination Identifier Message Destination
    Timestamp Time Message generation timestamp
    Interaction Type InteractionType Interaction Pattern Type
    Interaction Stage UOctet Interaction Pattern Stage
    Transaction Id Long Unique to consumer
    Service Area UShort Service Area
    Service UShort Service
    Operation UShort Service Operation
    Area version UOctet Area version
    Is Error Message Boolean ‘True’ if this is an error message; else ‘False’
    Supplements List<NamedValue> Optional supplementary fields

    For C2MS most of the fields can be mapped to C2MS types with exception List<NameType> which should follow the C2MS pattern:
    Field Type Description
    Supplement.n.Name Scalar Value Optional supplementary fields

    An "InteractionType" is:

    Interaction Types

    Name Value Description
    SEND 1 Used for SEND interactions.
    SUBMIT 2 Used for SUBMIT interactions.
    REQUEST 3 Used for REQUEST interactions.
    INVOKE 4 Used for INVOKE interactions.
    PROGRESS 5 Used for PROGRESS interactions.
    PUBSUB 6 Used for PUBLISH-SUBSCRIBE interactions.

    (PRELIMINARY)

    MAL MESSAGE BODY
    After these header items the MAL body appears to consist of a TYPE/VALUE pair that is aligned with a specific message specification from the service.
    In other words there is not a name associated with each field.

    This means there are 2 options to further map a MAL message to C2MS:
    1) bundle up any concrete MAL message's data body into a C2MS blob type and send it on, with the idea that the MAL service receiving it through C2MS
    layer will then know what to do with it, because it has its own service definitions.
    2) Let the mapper handle this because it's sophisticated and it will map each MAL field to a C2MS field using the appropriate service definition,
    (somehow) giving each field in that service (a type/value pair) a name as well.

    Alternative approaches?
    One alternative approach to all the above would be to take any concrete MAL message, and in total make it a blob-style part of C2MS message in the
    data body – and broadcast this message on the C2MS bus – and any particular node implementing SM&C services would receive that message - and
    then decode it enough to determine if it's recipient or not.

    This is a simpler approach overall but every node that receives such "broadcast" MAL messages will have to look at every
    one of them to determine if any particular one is for them or not.

    Other approaches considering essentially involved tunnelling a URL based MAL message through C2MS and then inserting/stuffing it into the http "stack" and so on and
    this seem messy and possibly a security horror.

    REFERENCES
    – there's a large number of related ccsds publication found here under the "Mission Operations..." title
    ---- https://ccsds.org/publications/moims/
    https://en.wikipedia.org/wiki/Message_Abstraction_Layer
    https://github.com/CNES/ccsdsmo-maljava
    https://github.com/CNES/ccsdsmo-malc (note: uses zeromq but not clear if c2ms subject/topics would be mappable to it)
    https://github.com/nasa/CCSDS-MAL-Http-Binding-Xml-Encoding
    https://github.com/CNES/ccsdsmo-malgo
    https://github.com/tanagraspace/ccsdsmo-malc-sepp-apps (fork may have updates)

    PREVIOUS or EXISTING ISSUES (Deferred)
    The following issues (& related proposals) have previously been submitted on this topic. They have in general been deferred (to 1.3 now). However the intent of this issue is to subsume them all into this one issue which will carry forward.

    They are as follows:
    C2MS12-79
    C2MS12-97
    C2MS12-74
    C2MS12-112

  • Reported: C2MS 1.1b1 — Mon, 27 Oct 2025 22:06 GMT
  • Updated: Wed, 29 Oct 2025 22:17 GMT