Error codes cleanup & typo fix

This commit is contained in:
Rayhaan Jaufeerally committed 2026-04-18 13:22:24 +02:00
1 parent b26160ff40
commit 4ba644827d
2 files changed
+32 -17

No files matched your search

+30 -10
View File
@@ -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,
+2 -7
View File
@@ -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() }))
} }