description: >
    Implement this to add system dump management.

    System dumps are dump of the host memory and hardware states generated
    during a failure in the host firmware. This can be a huge dump stored in the
    host memory, the BMC doesnt store this dump but stream this dump to an
    external client based on the offload request. Apart from system generated
    system dump, users can also request for this kind of dump.

properties:
    - name: SourceDumpId
      type: uint32
      description: >
          The dump id provided by the source of the dump. There are dumps which
          get generated outside the BMC, like a system dump which gets generated
          and stored in the host memory. All dumps will have a  unique id  but
          when communicating to the source of the dump the SourceDumpId will be
          used.
    - name: Token
      type: uint32
      description: >
          A token exchanged with an external firmware subsystem when creating a
          dump outside of the BMC. This token can be used to identify the dump
          entry once the collection is completed.
    - name: SystemImpact
      type: enum [self.SystemImpact]
      default: Disruptive
      description: >
          System dumps can be broadly classified into two types based on their
          impact on the system state. The first type, known as a 'disruptive'
          dump, alters the system state. This kind of dump is typically
          generated during a host crash, although it can also be manually
          requested by a user. Despite its disruptive nature, this dump is able
          to collect a lot of data, making it particularly useful for diagnosing
          system crashes. The second type is a 'non-disruptive' dump. As the
          name suggests, this dump is created without causing any disruption to
          the system state.
    - name: UserChallenge
      type: string
      description: >
          On some host implementations a user-challenge need to be provided by
          the user and it flows through BMC and up to the host as a part of the
          dump request. Non-disruptive dumps consume significant host resources
          and involve the collection of host memory data. To safeguard these
          operations and ensure they are initiated only by authorized personnel,
          the provided passphrase is employed. In some systems, an Access
          Control List (ACL) file, provided through the Platform Level Data
          Model (PLDM), is used. The host validates the provided user-challenge
          against this ACL. If the user-challenge doesn't match any entry in the
          ACL, the host will reject the dump request. This field is needed so
          the host can check that only authorized users are allowed to perform
          certain dump operations.
    - name: DumpRequestStatus
      type: enum[self.HostResponse]
      description: >
          The host will send a response code for each request to create a system
          dump to indicate whether the request is successful or there is an
          error.
      default: Unknown

enumerations:
    - name: SystemImpact
      description: Indicate the type of system dump
      values:
          - name: Disruptive
            description: >
                The system state will change with this type of dump collection
          - name: NonDisruptive
            description: >
                The system state will not change with the collection
    - name: HostResponse
      description: >
          These are the possible response codes from the host's after sending a
          non-disruptive system dump request.
      values:
          - name: Unknown
            description: >
                The status of the request is unknown, or not initialized
          - name: Requested
            description: >
                Requested for system dump and awaiting the host response
          - name: Success
            description: >
                Successfully validated and accepted the request for a
                non-disruptive system dump.
          - name: ACLFileInvalid
            description: >
                Invalid Access Control List file, cannot validate the user to
                start a non-disruptive system dump.
          - name: UserChallengeInvalid
            description: >
                The user challenge provided is not valid
          - name: PermissionDenied
            description: >
                The caller does not have enough privileges to execute the
                requested non-disruptive system dump.
