@@ -71,6 +71,12 @@ const BOND_ARP_VALIDATE_ALL: u32 =
71
71
const BOND_ARP_FILTER : u32 = BOND_ARP_VALIDATE_ALL + 1 ;
72
72
const BOND_ARP_FILTER_ACTIVE : u32 = BOND_ARP_FILTER | BOND_ARP_VALIDATE_ACTIVE ;
73
73
const BOND_ARP_FILTER_BACKUP : u32 = BOND_ARP_FILTER | BOND_ARP_VALIDATE_BACKUP ;
74
+ const BOND_XMIT_POLICY_LAYER2 : u8 = 0 ;
75
+ const BOND_XMIT_POLICY_LAYER34 : u8 = 1 ;
76
+ const BOND_XMIT_POLICY_LAYER23 : u8 = 2 ;
77
+ const BOND_XMIT_POLICY_ENCAP23 : u8 = 3 ;
78
+ const BOND_XMIT_POLICY_ENCAP34 : u8 = 4 ;
79
+ const BOND_XMIT_POLICY_VLAN_SRCMAC : u8 = 5 ;
74
80
const BOND_OPT_ARP_ALL_TARGETS_ANY : u32 = 0 ;
75
81
const BOND_OPT_ARP_ALL_TARGETS_ALL : u32 = 1 ;
76
82
@@ -274,6 +280,63 @@ impl std::fmt::Display for BondArpValidate {
274
280
}
275
281
}
276
282
283
+ #[ derive( Debug , Clone , Copy , Eq , PartialEq , Default ) ]
284
+ pub enum BondXmitHashPolicy {
285
+ #[ default]
286
+ Layer2 ,
287
+ Layer34 ,
288
+ Layer23 ,
289
+ Encap23 ,
290
+ Encap34 ,
291
+ VlanSrcMac ,
292
+ Other ( u8 ) ,
293
+ }
294
+
295
+ impl From < BondXmitHashPolicy > for u8 {
296
+ fn from ( value : BondXmitHashPolicy ) -> Self {
297
+ match value {
298
+ BondXmitHashPolicy :: Layer2 => BOND_XMIT_POLICY_LAYER2 ,
299
+ BondXmitHashPolicy :: Layer34 => BOND_XMIT_POLICY_LAYER34 ,
300
+ BondXmitHashPolicy :: Layer23 => BOND_XMIT_POLICY_LAYER23 ,
301
+ BondXmitHashPolicy :: Encap23 => BOND_XMIT_POLICY_ENCAP23 ,
302
+ BondXmitHashPolicy :: Encap34 => BOND_XMIT_POLICY_ENCAP34 ,
303
+ BondXmitHashPolicy :: VlanSrcMac => BOND_XMIT_POLICY_VLAN_SRCMAC ,
304
+ BondXmitHashPolicy :: Other ( d) => d,
305
+ }
306
+ }
307
+ }
308
+
309
+ impl From < u8 > for BondXmitHashPolicy {
310
+ fn from ( value : u8 ) -> Self {
311
+ match value {
312
+ BOND_XMIT_POLICY_LAYER2 => BondXmitHashPolicy :: Layer2 ,
313
+ BOND_XMIT_POLICY_LAYER34 => BondXmitHashPolicy :: Layer34 ,
314
+ BOND_XMIT_POLICY_LAYER23 => BondXmitHashPolicy :: Layer23 ,
315
+ BOND_XMIT_POLICY_ENCAP23 => BondXmitHashPolicy :: Encap23 ,
316
+ BOND_XMIT_POLICY_ENCAP34 => BondXmitHashPolicy :: Encap34 ,
317
+ BOND_XMIT_POLICY_VLAN_SRCMAC => BondXmitHashPolicy :: VlanSrcMac ,
318
+ d => BondXmitHashPolicy :: Other ( d) ,
319
+ }
320
+ }
321
+ }
322
+
323
+ impl std:: fmt:: Display for BondXmitHashPolicy {
324
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
325
+ let kernel_name = match self {
326
+ BondXmitHashPolicy :: Layer2 => "layer2" ,
327
+ BondXmitHashPolicy :: Layer34 => "layer34" ,
328
+ BondXmitHashPolicy :: Layer23 => "layer23" ,
329
+ BondXmitHashPolicy :: Encap23 => "encap23" ,
330
+ BondXmitHashPolicy :: Encap34 => "encap34" ,
331
+ BondXmitHashPolicy :: VlanSrcMac => "vlan-src-mac" ,
332
+ BondXmitHashPolicy :: Other ( d) => {
333
+ return write ! ( f, "unknown-variant ({d})" )
334
+ }
335
+ } ;
336
+ f. write_str ( kernel_name)
337
+ }
338
+ }
339
+
277
340
#[ derive( Debug , Clone , Copy , Eq , PartialEq , Default ) ]
278
341
pub enum BondArpAllTargets {
279
342
#[ default]
@@ -397,7 +460,7 @@ pub enum InfoBond {
397
460
Primary ( u32 ) ,
398
461
PrimaryReselect ( u8 ) ,
399
462
FailOverMac ( u8 ) ,
400
- XmitHashPolicy ( u8 ) ,
463
+ XmitHashPolicy ( BondXmitHashPolicy ) ,
401
464
ResendIgmp ( u32 ) ,
402
465
NumPeerNotif ( u8 ) ,
403
466
AllPortsActive ( u8 ) ,
@@ -462,10 +525,10 @@ impl Nla for InfoBond {
462
525
fn emit_value ( & self , buffer : & mut [ u8 ] ) {
463
526
match self {
464
527
Self :: Mode ( value) => buffer[ 0 ] = ( * value) . into ( ) ,
528
+ Self :: XmitHashPolicy ( value) => buffer[ 0 ] = ( * value) . into ( ) ,
465
529
Self :: UseCarrier ( value)
466
530
| Self :: PrimaryReselect ( value)
467
531
| Self :: FailOverMac ( value)
468
- | Self :: XmitHashPolicy ( value)
469
532
| Self :: NumPeerNotif ( value)
470
533
| Self :: AllPortsActive ( value)
471
534
| Self :: AdLacpActive ( value)
@@ -612,7 +675,8 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoBond {
612
675
) ,
613
676
IFLA_BOND_XMIT_HASH_POLICY => Self :: XmitHashPolicy (
614
677
parse_u8 ( payload)
615
- . context ( "invalid IFLA_BOND_XMIT_HASH_POLICY value" ) ?,
678
+ . context ( "invalid IFLA_BOND_XMIT_HASH_POLICY value" ) ?
679
+ . into ( ) ,
616
680
) ,
617
681
IFLA_BOND_RESEND_IGMP => Self :: ResendIgmp (
618
682
parse_u32 ( payload)
0 commit comments