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