Error codes cleanup & typo fix
This commit is contained in:
1 parent
b26160ff40
commit
4ba644827d
2 files changed
+32
-17
No files matched your search
+30
-10
@@ -2,6 +2,13 @@ use serde::{Deserialize, Serialize};
|
||||
use strum::FromRepr;
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
#[error("Unknown BGP error code {code} subcode {subcode}")]
|
||||
pub struct UnknownErrorCode {
|
||||
pub code: u8,
|
||||
pub subcode: u8,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Error, Serialize, Deserialize)]
|
||||
#[repr(u8)]
|
||||
pub enum BgpError {
|
||||
@@ -31,17 +38,30 @@ pub enum BgpError {
|
||||
}
|
||||
|
||||
impl BgpError {
|
||||
pub fn from_code_subcode(code: u8, subcode: u8) -> Result<Self, ()> {
|
||||
pub fn from_code_subcode(code: u8, subcode: u8) -> Result<Self, UnknownErrorCode> {
|
||||
let err = || UnknownErrorCode { code, subcode };
|
||||
match code {
|
||||
1 => Ok(Self::MsgHeader(MsgHeaderSubcode::try_from(subcode)?)),
|
||||
2 => Ok(Self::OpenMsg(OpenMsgSubcode::try_from(subcode)?)),
|
||||
3 => Ok(Self::UpdateMsg(UpdateMsgSubcode::try_from(subcode)?)),
|
||||
1 => Ok(Self::MsgHeader(
|
||||
MsgHeaderSubcode::try_from(subcode).map_err(|_| err())?,
|
||||
)),
|
||||
2 => Ok(Self::OpenMsg(
|
||||
OpenMsgSubcode::try_from(subcode).map_err(|_| err())?,
|
||||
)),
|
||||
3 => Ok(Self::UpdateMsg(
|
||||
UpdateMsgSubcode::try_from(subcode).map_err(|_| err())?,
|
||||
)),
|
||||
4 => Ok(Self::HoldTimer),
|
||||
5 => Ok(Self::FsmError(FsmSubcode::try_from(subcode)?)),
|
||||
6 => Ok(Self::Cease(CeaseSubcode::try_from(subcode)?)),
|
||||
7 => Ok(Self::RouteRefresh(RouteRefreshSubcode::try_from(subcode)?)),
|
||||
5 => Ok(Self::FsmError(
|
||||
FsmSubcode::try_from(subcode).map_err(|_| err())?,
|
||||
)),
|
||||
6 => Ok(Self::Cease(
|
||||
CeaseSubcode::try_from(subcode).map_err(|_| err())?,
|
||||
)),
|
||||
7 => Ok(Self::RouteRefresh(
|
||||
RouteRefreshSubcode::try_from(subcode).map_err(|_| err())?,
|
||||
)),
|
||||
8 => Ok(Self::SendHoldTimer),
|
||||
_ => Err(()),
|
||||
_ => Err(err()),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +89,7 @@ pub enum MsgHeaderSubcode {
|
||||
BadMessageLength = 2,
|
||||
|
||||
#[error("Bad message type")]
|
||||
BadMessagType = 3,
|
||||
BadMessageType = 3,
|
||||
}
|
||||
|
||||
impl TryFrom<u8> for MsgHeaderSubcode {
|
||||
@@ -115,7 +135,7 @@ impl TryFrom<u8> for OpenMsgSubcode {
|
||||
#[repr(u8)]
|
||||
pub enum UpdateMsgSubcode {
|
||||
#[error("Malformed attribute list")]
|
||||
MalforedAttrs = 1,
|
||||
MalformedAttrs = 1,
|
||||
|
||||
#[error("Unrecognized well known attribute")]
|
||||
UnrecognizedWellKnownAttr = 2,
|
||||
|
||||
@@ -1443,13 +1443,8 @@ impl NotificationMessage {
|
||||
let (buf, error_code) = be_u8(buf)?;
|
||||
let (buf, error_subcode) = be_u8(buf)?;
|
||||
|
||||
let error = BgpError::from_code_subcode(error_code, error_subcode).map_err(|_| {
|
||||
Failure(BgpParserError::Eyre(eyre!(
|
||||
"Unknown NOTIFICATION error code {} subcode {}",
|
||||
error_code,
|
||||
error_subcode
|
||||
)))
|
||||
})?;
|
||||
let error = BgpError::from_code_subcode(error_code, error_subcode)
|
||||
.map_err(|e| Failure(BgpParserError::Eyre(e.into())))?;
|
||||
|
||||
Ok((&[], Self { error, data: buf.to_vec() }))
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user