Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions net/src/eth/mac.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

//! Mac address type and logic.

use arrayvec::ArrayVec;
use arrayvec::{ArrayString, ArrayVec};
use std::{
fmt::{Debug, Display, LowerHex, UpperHex},
str::FromStr,
Expand Down Expand Up @@ -184,11 +184,15 @@ impl Mac {

impl Display for Mac {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use std::fmt::Write as _; // bring in scope
// MAC always renders as 17 chars
let mut buf = ArrayString::<17>::new();
write!(
f,
"{:<02x}:{:<02x}:{:<02x}:{:<02x}:{:<02x}:{:<02x}",
buf,
"{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}",
self.0[0], self.0[1], self.0[2], self.0[3], self.0[4], self.0[5]
)
)?;
f.pad(&buf)
}
}

Expand Down
25 changes: 21 additions & 4 deletions routing/src/cli/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ use crate::evpn::{RmacEntry, RmacStore, Vtep};

use chrono::DateTime;
use common::cliprovider::{Heading, line};

use lpm::prefix::{IpPrefix, Ipv4Prefix, Ipv6Prefix};
use lpm::trie::{PrefixMapTrie, TrieMap};
use net::vxlan::Vni;
Expand Down Expand Up @@ -118,6 +119,9 @@ impl Display for NhopKey {
impl Display for Nhop {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.key)?;
if self.invalid.get() {
write!(f, " (INVALID)")?;
}
fmt_nhop_resolvers(f, self, 2)
}
}
Expand Down Expand Up @@ -592,29 +596,42 @@ impl Display for IfTableAddress<'_> {
//========================= Rmac Store ================================//
macro_rules! RMAC_TBL_FMT {
() => {
" {:<5} {:<20} {:<18}"
" {:<5} {:<20} {:<18} {:<8}"
};
}
fn fmt_rmac_heading(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(
f,
"{}",
format_args!(RMAC_TBL_FMT!(), "vni", "address", "mac")
format_args!(RMAC_TBL_FMT!(), "vni", "address", "mac", "status")
)
}

impl Display for RmacEntry {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let valid = if self.is_stale() { "stale" } else { "ok" };
write!(
f,
"{}",
format_args!(RMAC_TBL_FMT!(), self.vni.as_u32(), self.address, self.mac)
format_args!(
RMAC_TBL_FMT!(),
self.vni.as_u32(),
self.address,
self.mac,
valid
)
)
}
}
impl Display for RmacStore {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
Heading(format!("Router macs ({})", self.len())).fmt(f)?;
Heading(format!(
"Router macs (entries: {} stale: {})",
self.len(),
self.stale()
))
.fmt(f)?;

fmt_rmac_heading(f)?;
for rmac in self.values() {
writeln!(f, "{rmac}")?;
Expand Down
Loading
Loading