summaryrefslogtreecommitdiff
path: root/src/protocol
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol')
-rw-r--r--src/protocol/ethernet.rs15
-rw-r--r--src/protocol/grev0.rs26
-rw-r--r--src/protocol/grev1.rs13
-rw-r--r--src/protocol/gtpv1.rs22
-rw-r--r--src/protocol/icmp.rs11
-rw-r--r--src/protocol/icmpv6.rs11
-rw-r--r--src/protocol/ipv4.rs13
-rw-r--r--src/protocol/ipv6.rs46
-rw-r--r--src/protocol/l2tp.rs44
-rw-r--r--src/protocol/mod.rs3
-rw-r--r--src/protocol/ppp.rs13
-rw-r--r--src/protocol/pppoe.rs252
-rw-r--r--src/protocol/pptp.rs121
-rw-r--r--src/protocol/udp.rs13
-rw-r--r--src/protocol/vlan.rs13
15 files changed, 490 insertions, 126 deletions
diff --git a/src/protocol/ethernet.rs b/src/protocol/ethernet.rs
index d3b9fc0..396dc22 100644
--- a/src/protocol/ethernet.rs
+++ b/src/protocol/ethernet.rs
@@ -203,11 +203,16 @@ mod tests {
assert_eq!(EthHeader::decode(&bytes), Ok((LAST_SLICE, expectation)));
// example
- let ethernet = EthHeader::decode(&bytes);
- if let Ok((payload, header)) = ethernet {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ let result = EthHeader::decode(&bytes);
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}
diff --git a/src/protocol/grev0.rs b/src/protocol/grev0.rs
index 8ef5a20..88a43f1 100644
--- a/src/protocol/grev0.rs
+++ b/src/protocol/grev0.rs
@@ -238,11 +238,16 @@ mod tests {
// example
let result = GREv0Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
#[test]
@@ -325,10 +330,15 @@ mod tests {
// example
let result = GREv0Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}
diff --git a/src/protocol/grev1.rs b/src/protocol/grev1.rs
index a16bab6..ed2d2f2 100644
--- a/src/protocol/grev1.rs
+++ b/src/protocol/grev1.rs
@@ -177,10 +177,15 @@ mod tests {
// example
let result = GREv1Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}
diff --git a/src/protocol/gtpv1.rs b/src/protocol/gtpv1.rs
index 9acfc0f..bc01b41 100644
--- a/src/protocol/gtpv1.rs
+++ b/src/protocol/gtpv1.rs
@@ -206,10 +206,13 @@ mod tests {
// example
let result = GTPv1Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -272,10 +275,13 @@ mod tests {
// example
let result = GTPv1Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
diff --git a/src/protocol/icmp.rs b/src/protocol/icmp.rs
index fee8749..991a191 100644
--- a/src/protocol/icmp.rs
+++ b/src/protocol/icmp.rs
@@ -136,10 +136,13 @@ mod tests {
// example
let result = ICMPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
diff --git a/src/protocol/icmpv6.rs b/src/protocol/icmpv6.rs
index 26728f4..9bd58d2 100644
--- a/src/protocol/icmpv6.rs
+++ b/src/protocol/icmpv6.rs
@@ -170,10 +170,13 @@ mod tests {
// example
let result = ICMPv6Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
diff --git a/src/protocol/ipv4.rs b/src/protocol/ipv4.rs
index 61dce29..7606b1e 100644
--- a/src/protocol/ipv4.rs
+++ b/src/protocol/ipv4.rs
@@ -179,10 +179,15 @@ mod tests {
// example
let result = IPv4Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}
diff --git a/src/protocol/ipv6.rs b/src/protocol/ipv6.rs
index 639c023..8ee78c3 100644
--- a/src/protocol/ipv6.rs
+++ b/src/protocol/ipv6.rs
@@ -231,11 +231,16 @@ mod tests {
// example
let result = IPv6Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
#[test]
@@ -305,10 +310,13 @@ mod tests {
// example
let result = IPv6Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -378,10 +386,13 @@ mod tests {
// example
let result = IPv6Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -500,10 +511,13 @@ mod tests {
// example
let result = IPv6Header::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
diff --git a/src/protocol/l2tp.rs b/src/protocol/l2tp.rs
index ebed837..90c5ea5 100644
--- a/src/protocol/l2tp.rs
+++ b/src/protocol/l2tp.rs
@@ -464,10 +464,13 @@ mod tests {
// example
let result = L2TPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -513,10 +516,13 @@ mod tests {
// example
let result = L2TPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -565,10 +571,13 @@ mod tests {
// example
let result = L2TPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -776,10 +785,13 @@ mod tests {
// example
let result = L2TPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs
index 16b9963..db1b38c 100644
--- a/src/protocol/mod.rs
+++ b/src/protocol/mod.rs
@@ -16,4 +16,5 @@ pub mod l2tp;
pub mod grev0;
pub mod grev1;
pub mod pptp;
-pub mod ppp; \ No newline at end of file
+pub mod ppp;
+pub mod pppoe; \ No newline at end of file
diff --git a/src/protocol/ppp.rs b/src/protocol/ppp.rs
index 558e9a6..97fa0e5 100644
--- a/src/protocol/ppp.rs
+++ b/src/protocol/ppp.rs
@@ -106,10 +106,15 @@ mod tests {
// example
let result = PPPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}
diff --git a/src/protocol/pppoe.rs b/src/protocol/pppoe.rs
new file mode 100644
index 0000000..fbd8448
--- /dev/null
+++ b/src/protocol/pppoe.rs
@@ -0,0 +1,252 @@
+use crate::protocol::codec::Decode;
+use crate::protocol::ppp::PPPProtocol;
+use nom::bits;
+use nom::error::Error;
+use nom::number;
+use nom::sequence;
+use nom::IResult;
+
+/******************************************************************************
+ * Struct
+ ******************************************************************************/
+
+/*
+ * RFC 2516 - A Method for Transmitting PPP Over Ethernet (PPPoE)
+ *
+ * 0 1 2 3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VER | TYPE | CODE | SESSION_ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | LENGTH | payload ~
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * https://datatracker.ietf.org/doc/html/rfc2516
+ * https://info.support.huawei.com/info-finder/encyclopedia/zh/PPPoE.html
+ */
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum PPPoECode {
+ SessionData, // Session Data
+ PADI, // Active Discovery Initiation
+ PADO, // Active Discovery Offer
+ PADR, // Active Discovery Request
+ PADS, // Active Discovery Session-confirmation
+ PADT, // Active Discovery Terminate
+ Other(u8),
+}
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum PPPoETagType {
+ EndOfList,
+ ServiceName,
+ ACName,
+ HostUniq,
+ ACcookie,
+ VendorSpecific,
+ RelaySessionId,
+ ServiceNameError,
+ ACSystemError,
+ GenericError,
+ Other(u16),
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct PPPoETag {
+ pub tag_type: PPPoETagType,
+ pub tag_length: u16,
+ pub tag_value: Vec<u8>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum PPPoEStage {
+ Discovery(Vec<PPPoETag>),
+ Session(PPPProtocol),
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct PPPoEHeader {
+ pub version: u8, // 4 bits
+ pub type_: u8, // 4 bits
+ pub code: PPPoECode, // 8 bits
+ pub session_id: u16, // 16 bits
+ pub payload_length: u16, // 16 bits
+ pub stage: PPPoEStage,
+}
+
+/******************************************************************************
+ * API
+ ******************************************************************************/
+
+impl From<u8> for PPPoECode {
+ fn from(raw: u8) -> Self {
+ match raw {
+ 0x00 => PPPoECode::SessionData,
+ 0x09 => PPPoECode::PADI,
+ 0x07 => PPPoECode::PADO,
+ 0x19 => PPPoECode::PADR,
+ 0x65 => PPPoECode::PADS,
+ 0xa7 => PPPoECode::PADT,
+ other => PPPoECode::Other(other),
+ }
+ }
+}
+
+impl From<u16> for PPPoETagType {
+ fn from(raw: u16) -> Self {
+ match raw {
+ 0x0000 => PPPoETagType::EndOfList,
+ 0x0101 => PPPoETagType::ServiceName,
+ 0x0102 => PPPoETagType::ACName,
+ 0x0103 => PPPoETagType::HostUniq,
+ 0x0104 => PPPoETagType::ACcookie,
+ 0x0105 => PPPoETagType::VendorSpecific,
+ 0x0110 => PPPoETagType::RelaySessionId,
+ 0x0201 => PPPoETagType::ServiceNameError,
+ 0x0202 => PPPoETagType::ACSystemError,
+ 0x0203 => PPPoETagType::GenericError,
+ other => PPPoETagType::Other(other),
+ }
+ }
+}
+
+fn version_type_decode(input: &[u8]) -> IResult<&[u8], (u8, u8)> {
+ bits::bits::<_, _, Error<_>, _, _>(sequence::tuple((
+ bits::streaming::take(4u8),
+ bits::streaming::take(4u8),
+ )))(input)
+}
+
+fn pppoe_tag_decode(input: &[u8]) -> IResult<&[u8], PPPoETag> {
+ let (input, tag_type) = number::complete::be_u16(input)?;
+ let (input, tag_length) = number::complete::be_u16(input)?;
+ let (input, tag_value) = nom::bytes::complete::take(tag_length)(input)?;
+ Ok((
+ input,
+ PPPoETag {
+ tag_type: tag_type.into(),
+ tag_length,
+ tag_value: tag_value.to_vec(),
+ },
+ ))
+}
+
+fn pppoe_tags_decode(input: &[u8]) -> IResult<&[u8], Vec<PPPoETag>> {
+ let mut tags = Vec::new();
+ let mut remain = input;
+ loop {
+ let (input, tag) = pppoe_tag_decode(remain)?;
+ let tag_type = tag.tag_type;
+ remain = input;
+ tags.push(tag);
+ if remain.is_empty() || tag_type == PPPoETagType::EndOfList {
+ break;
+ }
+ }
+ Ok((remain, tags))
+}
+
+impl Decode for PPPoEHeader {
+ type Iterm = PPPoEHeader;
+ fn decode(input: &[u8]) -> IResult<&[u8], PPPoEHeader> {
+ let (input, (version, type_)) = version_type_decode(input)?;
+ /*
+ * https://datatracker.ietf.org/doc/html/rfc2516
+ *
+ * The VER field is four bits and MUST be set to 0x1 for this version of the PPPoE specification.
+ * The TYPE field is four bits and MUST be set to 0x1 for this version of the PPPoE specification.
+ */
+ match (version, type_) {
+ (0x1, 0x1) => {}
+ _ => {
+ return Err(nom::Err::Error(Error::new(
+ input,
+ nom::error::ErrorKind::Verify,
+ )))
+ }
+ }
+ let (input, code) = number::complete::be_u8(input)?;
+ let (input, session_id) = number::complete::be_u16(input)?;
+ let (input, payload_length) = number::complete::be_u16(input)?;
+ let (input, stage) = match code.into() {
+ PPPoECode::SessionData => {
+ let (input, ppp_protocol) = PPPProtocol::decode(input)?;
+ (input, PPPoEStage::Session(ppp_protocol))
+ }
+ _ => {
+ let (remain, tags) = pppoe_tags_decode(input)?;
+ (remain, PPPoEStage::Discovery(tags))
+ }
+ };
+
+ Ok((
+ input,
+ PPPoEHeader {
+ version,
+ type_,
+ code: code.into(),
+ session_id,
+ payload_length,
+ stage,
+ },
+ ))
+ }
+}
+
+/******************************************************************************
+ * TEST
+ ******************************************************************************/
+
+#[cfg(test)]
+mod tests {
+ use super::PPPoECode;
+ use super::PPPoEHeader;
+ use super::PPPoEStage;
+ use crate::protocol::codec::Decode;
+ use crate::protocol::ppp::PPPProtocol;
+ const LAST_SLICE: &'static [u8] = &[0xff];
+
+ #[test]
+ fn pppoe_header_decode() {
+ /*
+ * PPP-over-Ethernet Session
+ * 0001 .... = Version: 1
+ * .... 0001 = Type: 1
+ * Code: Session Data (0x00)
+ * Session ID: 0xb4bc
+ * Payload Length: 544
+ * Point-to-Point Protocol
+ * Protocol: Internet Protocol version 4 (0x0021)
+ */
+
+ let bytes = [
+ 0x11, 0x00, 0xb4, 0xbc, 0x02, 0x20, /* PPPoE */
+ 0x00, 0x21, /* PPP */
+ 0xff, /* Payload */
+ ];
+
+ let expectation = PPPoEHeader {
+ version: 1,
+ type_: 1,
+ code: PPPoECode::SessionData,
+ session_id: 0xb4bc,
+ payload_length: 544,
+ stage: PPPoEStage::Session(PPPProtocol::IPv4),
+ };
+
+ assert_eq!(PPPoEHeader::decode(&bytes), Ok((LAST_SLICE, expectation)));
+
+ // example
+ let result = PPPoEHeader::decode(&bytes);
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
+ }
+
+ // assert_eq!(1, 0);
+ }
+}
diff --git a/src/protocol/pptp.rs b/src/protocol/pptp.rs
index ce8bd58..ed64a26 100644
--- a/src/protocol/pptp.rs
+++ b/src/protocol/pptp.rs
@@ -204,10 +204,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -274,10 +277,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -316,10 +322,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -358,10 +367,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -398,10 +410,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -441,10 +456,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -516,10 +534,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -568,10 +589,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -639,10 +663,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -704,10 +731,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
@@ -759,10 +789,13 @@ mod tests {
// example
let result = PPTPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
// assert_eq!(1, 0);
diff --git a/src/protocol/udp.rs b/src/protocol/udp.rs
index 625c9e9..1d7b43b 100644
--- a/src/protocol/udp.rs
+++ b/src/protocol/udp.rs
@@ -100,10 +100,15 @@ mod tests {
// example
let result = UDPHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}
diff --git a/src/protocol/vlan.rs b/src/protocol/vlan.rs
index 17a82e1..6a1dbe0 100644
--- a/src/protocol/vlan.rs
+++ b/src/protocol/vlan.rs
@@ -84,10 +84,15 @@ mod tests {
// example
let result = VLANHeader::decode(&bytes);
- if let Ok((payload, header)) = result {
- println!("return: {:?}, payload: {}", header, payload.len());
- } else {
- println!("return: Incomplete data");
+ match result {
+ Ok((payload, header)) => {
+ println!("OK: {:?}, payload: {}", header, payload.len());
+ }
+ Err(e) => {
+ println!("ERR: {:?}", e);
+ }
}
+
+ // assert_eq!(1, 0);
}
}