Skip to content

Commit 35d39ab

Browse files
committed
bond: align FromStr/Display strings with iproute2
- Change BondXmitHashPolicy Display/FromStr strings to match iproute2: "layer34"->"layer3+4", "layer23"->"layer2+3", "encap23"->"encap2+3", "encap34"->"encap3+4", "vlan-src-mac"->"vlan+srcmac" - Add BOND_AD_ACTOR_PORT_PRIO constant and ActorPortPrio variant to BondAdSelect with Display/FromStr support Unit tests for both BondXmitHashPolicy and BondAdSelect FromStr are updated. Signed-off-by: Gris Ge <cnfourt@gmail.com>
1 parent 192cb0c commit 35d39ab

2 files changed

Lines changed: 25 additions & 15 deletions

File tree

src/link/link_info/bond.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -436,11 +436,11 @@ impl std::fmt::Display for BondXmitHashPolicy {
436436
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
437437
let kernel_name = match self {
438438
BondXmitHashPolicy::Layer2 => "layer2",
439-
BondXmitHashPolicy::Layer34 => "layer34",
440-
BondXmitHashPolicy::Layer23 => "layer23",
441-
BondXmitHashPolicy::Encap23 => "encap23",
442-
BondXmitHashPolicy::Encap34 => "encap34",
443-
BondXmitHashPolicy::VlanSrcMac => "vlan-src-mac",
439+
BondXmitHashPolicy::Layer34 => "layer3+4",
440+
BondXmitHashPolicy::Layer23 => "layer2+3",
441+
BondXmitHashPolicy::Encap23 => "encap2+3",
442+
BondXmitHashPolicy::Encap34 => "encap3+4",
443+
BondXmitHashPolicy::VlanSrcMac => "vlan+srcmac",
444444
BondXmitHashPolicy::Other(d) => {
445445
return write!(f, "unknown-variant ({d})")
446446
}
@@ -455,11 +455,11 @@ impl std::str::FromStr for BondXmitHashPolicy {
455455
fn from_str(s: &str) -> Result<Self, Self::Err> {
456456
Ok(match s {
457457
"layer2" => Self::Layer2,
458-
"layer34" => Self::Layer34,
459-
"layer23" => Self::Layer23,
460-
"encap23" => Self::Encap23,
461-
"encap34" => Self::Encap34,
462-
"vlan-src-mac" => Self::VlanSrcMac,
458+
"layer3+4" => Self::Layer34,
459+
"layer2+3" => Self::Layer23,
460+
"encap2+3" => Self::Encap23,
461+
"encap3+4" => Self::Encap34,
462+
"vlan+srcmac" => Self::VlanSrcMac,
463463
_ => {
464464
return Err(DecodeError::from(format!(
465465
"unknown bond xmit hash policy: {s}"
@@ -723,13 +723,15 @@ impl From<BondLacpRate> for u8 {
723723
const BOND_AD_STABLE: u8 = 0;
724724
const BOND_AD_BANDWIDTH: u8 = 1;
725725
const BOND_AD_COUNT: u8 = 2;
726+
const BOND_AD_ACTOR_PORT_PRIO: u8 = 3;
726727

727728
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
728729
#[non_exhaustive]
729730
pub enum BondAdSelect {
730731
Stable,
731732
Bandwidth,
732733
Count,
734+
ActorPortPrio,
733735
Other(u8),
734736
}
735737

@@ -739,6 +741,7 @@ impl From<u8> for BondAdSelect {
739741
BOND_AD_STABLE => Self::Stable,
740742
BOND_AD_BANDWIDTH => Self::Bandwidth,
741743
BOND_AD_COUNT => Self::Count,
744+
BOND_AD_ACTOR_PORT_PRIO => Self::ActorPortPrio,
742745
_ => Self::Other(d),
743746
}
744747
}
@@ -750,6 +753,7 @@ impl From<BondAdSelect> for u8 {
750753
BondAdSelect::Stable => BOND_AD_STABLE,
751754
BondAdSelect::Bandwidth => BOND_AD_BANDWIDTH,
752755
BondAdSelect::Count => BOND_AD_COUNT,
756+
BondAdSelect::ActorPortPrio => BOND_AD_ACTOR_PORT_PRIO,
753757
BondAdSelect::Other(d) => d,
754758
}
755759
}
@@ -761,6 +765,7 @@ impl std::fmt::Display for BondAdSelect {
761765
BondAdSelect::Stable => "stable",
762766
BondAdSelect::Bandwidth => "bandwidth",
763767
BondAdSelect::Count => "count",
768+
BondAdSelect::ActorPortPrio => "actor_port_prio",
764769
BondAdSelect::Other(d) => {
765770
return write!(f, "unknown-variant ({d})")
766771
}
@@ -777,6 +782,7 @@ impl std::str::FromStr for BondAdSelect {
777782
"stable" => Self::Stable,
778783
"bandwidth" => Self::Bandwidth,
779784
"count" => Self::Count,
785+
"actor_port_prio" => Self::ActorPortPrio,
780786
_ => {
781787
return Err(DecodeError::from(format!(
782788
"unknown bond ad select: {s}"

src/link/tests/bond.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -276,13 +276,13 @@ fn test_bond_primary_reselect_from_str() {
276276
fn test_bond_xmit_hash_policy_from_str() {
277277
use std::str::FromStr;
278278
assert_eq!(BondXmitHashPolicy::Layer2, "layer2".parse().unwrap());
279-
assert_eq!(BondXmitHashPolicy::Layer34, "layer34".parse().unwrap());
280-
assert_eq!(BondXmitHashPolicy::Layer23, "layer23".parse().unwrap());
281-
assert_eq!(BondXmitHashPolicy::Encap23, "encap23".parse().unwrap());
282-
assert_eq!(BondXmitHashPolicy::Encap34, "encap34".parse().unwrap());
279+
assert_eq!(BondXmitHashPolicy::Layer34, "layer3+4".parse().unwrap());
280+
assert_eq!(BondXmitHashPolicy::Layer23, "layer2+3".parse().unwrap());
281+
assert_eq!(BondXmitHashPolicy::Encap23, "encap2+3".parse().unwrap());
282+
assert_eq!(BondXmitHashPolicy::Encap34, "encap3+4".parse().unwrap());
283283
assert_eq!(
284284
BondXmitHashPolicy::VlanSrcMac,
285-
"vlan-src-mac".parse().unwrap()
285+
"vlan+srcmac".parse().unwrap()
286286
);
287287
assert!(BondXmitHashPolicy::from_str("bogus").is_err());
288288
}
@@ -310,5 +310,9 @@ fn test_bond_ad_select_from_str() {
310310
assert_eq!(BondAdSelect::Stable, "stable".parse().unwrap());
311311
assert_eq!(BondAdSelect::Bandwidth, "bandwidth".parse().unwrap());
312312
assert_eq!(BondAdSelect::Count, "count".parse().unwrap());
313+
assert_eq!(
314+
BondAdSelect::ActorPortPrio,
315+
"actor_port_prio".parse().unwrap()
316+
);
313317
assert!(BondAdSelect::from_str("bogus").is_err());
314318
}

0 commit comments

Comments
 (0)