Coverage Report

Created: 2026-01-16 07:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/ipsec-parser-0.7.0/src/ikev2_notify.rs
Line
Count
Source
1
use rusticata_macros::newtype_enum;
2
3
/// Notify Message Type
4
///
5
/// Notification information can be error messages specifying why an SA
6
/// could not be established.  It can also be status data that a process
7
/// managing an SA database wishes to communicate with a peer process.
8
///
9
/// The table below lists the notification messages and their
10
/// corresponding values.  The number of different error statuses was
11
/// greatly reduced from IKEv1 both for simplification and to avoid
12
/// giving configuration information to probers.
13
///
14
/// Types in the range 0 - 16383 are intended for reporting errors.  An
15
/// implementation receiving a Notify payload with one of these types
16
/// that it does not recognize in a response MUST assume that the
17
/// corresponding request has failed entirely.  Unrecognized error types
18
/// in a request and status types in a request or response MUST be
19
/// ignored, and they should be logged.
20
///
21
/// Notify payloads with status types MAY be added to any message and
22
/// MUST be ignored if not recognized.  They are intended to indicate
23
/// capabilities, and as part of SA negotiation, are used to negotiate
24
/// non-cryptographic parameters.
25
///
26
/// Defined in [RFC7296](https://tools.ietf.org/html/rfc7296) section 3.10.1
27
///
28
/// Extensions:
29
///
30
/// - [RFC4555](https://tools.ietf.org/html/rfc4555) IKEv2 Mobility and Multihoming Protocol (MOBIKE)
31
/// - [RFC4739](https://tools.ietf.org/html/rfc4739) Multiple Authentication Exchanges in the Internet Key Exchange (IKEv2) Protocol
32
/// - [RFC5685](https://tools.ietf.org/html/rfc5685) Redirect Mechanism for the Internet Key Exchange Protocol Version 2 (IKEv2)
33
/// - [RFC5723](https://tools.ietf.org/html/rfc5723) Internet Key Exchange Protocol Version 2 (IKEv2) Session Resumption
34
/// - [RFC7427](https://tools.ietf.org/html/rfc7427) Signature Authentication in the Internet Key Exchange Version 2 (IKEv2)
35
///
36
/// See also [IKEV2IANA](https://www.iana.org/assignments/ikev2-parameters/ikev2-parameters.xhtml) for the latest values.
37
#[derive(Clone, Copy, PartialEq, Eq)]
38
pub struct NotifyType(pub u16);
39
40
newtype_enum! {
41
impl debug NotifyType {
42
    // error types
43
    UNSUPPORTED_CRITICAL_PAYLOAD  = 1,
44
    INVALID_IKE_SPI               = 4,
45
    INVALID_MAJOR_VERSION         = 5,
46
    INVALID_SYNTAX                = 7,
47
    INVALID_MESSAGE_ID            = 9,
48
    INVALID_SPI                   = 11,
49
    NO_PROPOSAL_CHOSEN            = 14,
50
    INVALID_KE_PAYLOAD            = 17,
51
    AUTHENTICATION_FAILED         = 24,
52
    SINGLE_PAIR_REQUIRED          = 34,
53
    NO_ADDITIONAL_SAS             = 35,
54
    INTERNAL_ADDRESS_FAILURE      = 36,
55
    FAILED_CP_REQUIRED            = 37,
56
    TS_UNACCEPTABLE               = 38,
57
    INVALID_SELECTORS             = 39,
58
    TEMPORARY_FAILURE             = 43,
59
    CHILD_SA_NOT_FOUND            = 44,
60
    // status types
61
    INITIAL_CONTACT               = 16384,
62
    SET_WINDOW_SIZE               = 16385,
63
    ADDITIONAL_TS_POSSIBLE        = 16386,
64
    IPCOMP_SUPPORTED              = 16387,
65
    NAT_DETECTION_SOURCE_IP       = 16388,
66
    NAT_DETECTION_DESTINATION_IP  = 16389,
67
    COOKIE                        = 16390,
68
    USE_TRANSPORT_MODE            = 16391,
69
    HTTP_CERT_LOOKUP_SUPPORTED    = 16392,
70
    REKEY_SA                      = 16393,
71
    ESP_TFC_PADDING_NOT_SUPPORTED = 16394,
72
    NON_FIRST_FRAGMENTS_ALSO      = 16395,
73
    //
74
    MULTIPLE_AUTH_SUPPORTED       = 16404,
75
    ANOTHER_AUTH_FOLLOWS          = 16405,
76
    REDIRECT_SUPPORTED            = 16406,
77
    //
78
    IKEV2_FRAGMENTATION_SUPPORTED = 16430,
79
    SIGNATURE_HASH_ALGORITHMS     = 16431,
80
}
81
}
82
83
impl NotifyType {
84
287k
    pub fn is_error(self) -> bool {
85
287k
        self.0 < 16384
86
287k
    }
<ipsec_parser::ikev2_notify::NotifyType>::is_error
Line
Count
Source
84
151k
    pub fn is_error(self) -> bool {
85
151k
        self.0 < 16384
86
151k
    }
<ipsec_parser::ikev2_notify::NotifyType>::is_error
Line
Count
Source
84
136k
    pub fn is_error(self) -> bool {
85
136k
        self.0 < 16384
86
136k
    }
87
0
    pub fn is_status(self) -> bool {
88
0
        self.0 > 16384
89
0
    }
Unexecuted instantiation: <ipsec_parser::ikev2_notify::NotifyType>::is_status
Unexecuted instantiation: <ipsec_parser::ikev2_notify::NotifyType>::is_status
90
}