]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust/nfs4: Add NFSPROC4_RECLAIM_COMPLETE op parsers
authorSam Muhammed <ghostinthehive.vx@gmail.com>
Sun, 20 Feb 2022 12:27:17 +0000 (14:27 +0200)
committerVictor Julien <vjulien@oisf.net>
Fri, 4 Mar 2022 15:50:55 +0000 (16:50 +0100)
rust/src/nfs/nfs4_records.rs
rust/src/nfs/types.rs

index d6f716a9b2c3a5b093172f9dfbc8a79c5a1a501b..61915b06763d76ba6ebf8f7e3768617bd74dd940 100644 (file)
@@ -61,6 +61,7 @@ pub enum Nfs4RequestContent<'a> {
     ExchangeId(Nfs4RequestExchangeId<'a>),
     Sequence(Nfs4RequestSequence<'a>),
     CreateSession(Nfs4RequestCreateSession<'a>),
+    ReclaimComplete(u32),
 }
 
 #[derive(Debug,PartialEq)]
@@ -418,6 +419,10 @@ fn nfs4_req_commit(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent> {
     Ok((i, Nfs4RequestContent::Commit))
 }
 
+fn nfs4_req_reclaim_complete(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent> {
+    map(verify(be_u32, |&v| v <= 1), Nfs4RequestContent::ReclaimComplete) (i)
+}
+
 #[derive(Debug,PartialEq)]
 pub struct Nfs4RequestExchangeId<'a> {
     pub client_string: &'a[u8],
@@ -488,6 +493,7 @@ fn parse_request_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent
         NFSPROC4_SEQUENCE => nfs4_req_sequence(i)?,
         NFSPROC4_EXCHANGE_ID => nfs4_req_exchangeid(i)?,
         NFSPROC4_CREATE_SESSION => nfs4_req_create_session(i)?,
+        NFSPROC4_RECLAIM_COMPLETE => nfs4_req_reclaim_complete(i)?,
         _ => { return Err(Err::Error(make_error(i, ErrorKind::Switch))); }
     };
     Ok((i, cmd_data))
@@ -537,6 +543,7 @@ pub enum Nfs4ResponseContent<'a> {
     ExchangeId(u32, Option<Nfs4ResponseExchangeId<'a>>),
     Sequence(u32, Option<Nfs4ResponseSequence<'a>>),
     CreateSession(u32, Option<Nfs4ResponseCreateSession<'a>>),
+    ReclaimComplete(u32),
 }
 
 #[derive(Debug, PartialEq)]
@@ -594,6 +601,10 @@ fn nfs4_parse_res_exchangeid(i: &[u8]) -> IResult<&[u8], Nfs4ResponseExchangeId>
     }))
 }
 
+fn nfs4_res_reclaim_complete(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
+    map(be_u32, Nfs4ResponseContent::ReclaimComplete) (i)
+}
+
 fn nfs4_res_exchangeid(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
     let (i, status) = be_u32(i)?;
     let (i, xchngid_data) = cond(status == 0, nfs4_parse_res_exchangeid)(i)?;
@@ -946,6 +957,7 @@ fn nfs4_res_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
         NFSPROC4_SEQUENCE => nfs4_res_sequence(i)?,
         NFSPROC4_RENEW => nfs4_res_renew(i)?,
         NFSPROC4_CREATE_SESSION => nfs4_res_create_session(i)?,
+        NFSPROC4_RECLAIM_COMPLETE => nfs4_res_reclaim_complete(i)?,
         _ => { return Err(Err::Error(make_error(i, ErrorKind::Switch))); }
     };
     Ok((i, cmd_data))
index 07e2cf76c966ba2a34dadee004b9f91abb148864..f20f1a29463bec67362893483eeff5c05281235a 100644 (file)
@@ -273,11 +273,10 @@ pub const NFSPROC4_SETCLIENTID_CONFIRM: u32 = 36;
 pub const NFSPROC4_VERIFY:              u32 = 37;
 pub const NFSPROC4_WRITE:               u32 = 38;
 pub const NFSPROC4_RELEASE_LOCKOWNER:   u32 = 39;
+pub const NFSPROC4_EXCHANGE_ID:         u32 = 42;
 pub const NFSPROC4_CREATE_SESSION:      u32 = 43;
 pub const NFSPROC4_SEQUENCE:            u32 = 53;
-
-
-pub const NFSPROC4_EXCHANGE_ID:         u32 = 42;
+pub const NFSPROC4_RECLAIM_COMPLETE:    u32 = 58;
 
 pub const NFSPROC4_ILLEGAL:             u32 = 10044;