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