Skip to content

Commit f089606

Browse files
committed
scratch
1 parent 2429191 commit f089606

File tree

1 file changed

+22
-95
lines changed

1 file changed

+22
-95
lines changed

args/src/lib.rs

Lines changed: 22 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,25 @@ use net::interface::IllegalInterfaceName;
5858
use net::interface::InterfaceName;
5959
use sha2::Digest;
6060
use std::borrow::Borrow;
61-
use std::fmt::Display;
6261
use std::io::{Read, Seek, SeekFrom, Write};
6362
use std::net::SocketAddr;
6463
use std::os::fd::{AsFd, AsRawFd, FromRawFd, OwnedFd, RawFd};
6564
use std::path::PathBuf;
6665
use std::str::FromStr;
6766

68-
#[derive(Debug, Clone, PartialEq, serde::Serialize)]
67+
#[derive(
68+
Debug, PartialEq, Eq, Clone, serde::Serialize, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive,
69+
)]
70+
#[rkyv(attr(derive(PartialEq, Eq, Debug)))]
6971
pub enum PortArg {
7072
PCI(PciAddress), // DPDK driver
7173
KERNEL(InterfaceName), // kernel driver
7274
}
7375

74-
#[derive(Debug, Clone, serde::Serialize)]
76+
#[derive(
77+
Debug, PartialEq, Eq, Clone, serde::Serialize, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive,
78+
)]
79+
#[rkyv(attr(derive(PartialEq, Eq, Debug)))]
7580
#[allow(unused)]
7681
pub struct InterfaceArg {
7782
pub interface: InterfaceName,
@@ -309,15 +314,7 @@ impl From<MemFile> for FinalizedMemFile {
309314

310315
/// Enum to represent either a TCP socket address or a UNIX socket path
311316
#[derive(
312-
Debug,
313-
Clone,
314-
PartialEq,
315-
Eq,
316-
serde::Serialize,
317-
serde::Deserialize,
318-
rkyv::Serialize,
319-
rkyv::Deserialize,
320-
rkyv::Archive,
317+
Debug, Clone, PartialEq, Eq, serde::Serialize, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive,
321318
)]
322319
#[rkyv(attr(derive(PartialEq, Eq, Debug)))]
323320
pub enum GrpcAddress {
@@ -345,14 +342,7 @@ pub enum GrpcAddress {
345342
/// - Use **Kernel** for development, testing, or environments without DPDK-compatible
346343
/// hardware.
347344
#[derive(
348-
Debug,
349-
PartialEq,
350-
Eq,
351-
serde::Serialize,
352-
serde::Deserialize,
353-
rkyv::Serialize,
354-
rkyv::Deserialize,
355-
rkyv::Archive,
345+
Debug, PartialEq, Eq, serde::Serialize, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive,
356346
)]
357347
#[serde(tag = "driver")]
358348
#[serde(rename_all = "snake_case")]
@@ -364,57 +354,6 @@ pub enum DriverConfigSection {
364354
Kernel(KernelDriverConfigSection),
365355
}
366356

367-
/// Description of a network device by its bus address.
368-
///
369-
/// Currently supports PCI-addressed devices, which is the standard addressing
370-
/// scheme for NICs in modern systems.
371-
///
372-
/// # Example
373-
///
374-
/// ```
375-
/// use dataplane_args::NetworkDeviceDescription;
376-
/// use hardware::pci::address::PciAddress;
377-
///
378-
/// // PCI device at bus 0000:01:00.0
379-
/// let device = NetworkDeviceDescription::Pci(
380-
/// PciAddress::try_from("0000:01:00.0").unwrap()
381-
/// );
382-
/// ```
383-
#[derive(
384-
Debug,
385-
Ord,
386-
PartialEq,
387-
PartialOrd,
388-
Eq,
389-
Hash,
390-
Clone,
391-
serde::Serialize,
392-
serde::Deserialize,
393-
rkyv::Serialize,
394-
rkyv::Deserialize,
395-
rkyv::Archive,
396-
)]
397-
#[rkyv(attr(derive(PartialEq, Eq, Debug)))]
398-
pub enum NetworkDeviceDescription {
399-
/// The PCI address of the network device to be used
400-
Pci(hardware::pci::address::PciAddress),
401-
/// The kernel's name for net network interface
402-
Kernel(InterfaceName),
403-
}
404-
405-
impl Display for NetworkDeviceDescription {
406-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
407-
match self {
408-
NetworkDeviceDescription::Pci(addr) => {
409-
write!(f, "pci@{addr}")
410-
}
411-
NetworkDeviceDescription::Kernel(name) => {
412-
write!(f, "kernel@{name}")
413-
}
414-
}
415-
}
416-
}
417-
418357
/// Configuration for the DPDK (Data Plane Development Kit) driver.
419358
///
420359
/// DPDK provides kernel-bypass networking for high-performance packet processing.
@@ -425,7 +364,6 @@ impl Display for NetworkDeviceDescription {
425364
PartialEq,
426365
Eq,
427366
serde::Serialize,
428-
serde::Deserialize,
429367
rkyv::Serialize,
430368
rkyv::Deserialize,
431369
rkyv::Archive,
@@ -449,7 +387,6 @@ pub struct DpdkDriverConfigSection {
449387
PartialEq,
450388
Eq,
451389
serde::Serialize,
452-
serde::Deserialize,
453390
rkyv::Serialize,
454391
rkyv::Deserialize,
455392
rkyv::Archive,
@@ -470,7 +407,6 @@ pub struct KernelDriverConfigSection {
470407
PartialEq,
471408
Eq,
472409
serde::Serialize,
473-
serde::Deserialize,
474410
rkyv::Serialize,
475411
rkyv::Deserialize,
476412
rkyv::Archive,
@@ -492,7 +428,6 @@ pub struct CliConfigSection {
492428
PartialEq,
493429
Eq,
494430
serde::Serialize,
495-
serde::Deserialize,
496431
rkyv::Serialize,
497432
rkyv::Deserialize,
498433
rkyv::Archive,
@@ -510,7 +445,6 @@ pub struct MetricsConfigSection {
510445
PartialEq,
511446
Eq,
512447
serde::Serialize,
513-
serde::Deserialize,
514448
rkyv::Serialize,
515449
rkyv::Deserialize,
516450
rkyv::Archive,
@@ -533,7 +467,6 @@ pub struct TracingConfigSection {
533467
PartialEq,
534468
Eq,
535469
serde::Serialize,
536-
serde::Deserialize,
537470
rkyv::Serialize,
538471
rkyv::Deserialize,
539472
rkyv::Archive,
@@ -559,7 +492,6 @@ pub enum TracingDisplayOption {
559492
PartialEq,
560493
Eq,
561494
serde::Serialize,
562-
serde::Deserialize,
563495
rkyv::Serialize,
564496
rkyv::Deserialize,
565497
rkyv::Archive,
@@ -578,14 +510,7 @@ pub struct TracingShowSection {
578510
/// Defines how the dataplane communicates with FRR (Free Range Routing) and
579511
/// related routing components.
580512
#[derive(
581-
Debug,
582-
PartialEq,
583-
Eq,
584-
serde::Serialize,
585-
serde::Deserialize,
586-
rkyv::Serialize,
587-
rkyv::Deserialize,
588-
rkyv::Archive,
513+
Debug, PartialEq, Eq, serde::Serialize, rkyv::Serialize, rkyv::Deserialize, rkyv::Archive,
589514
)]
590515
#[rkyv(attr(derive(PartialEq, Eq, Debug)))]
591516
pub struct RoutingConfigSection {
@@ -604,7 +529,6 @@ pub struct RoutingConfigSection {
604529
PartialEq,
605530
Eq,
606531
serde::Serialize,
607-
serde::Deserialize,
608532
rkyv::Serialize,
609533
rkyv::Deserialize,
610534
rkyv::Archive,
@@ -638,7 +562,6 @@ pub struct ConfigServerSection {
638562
PartialEq,
639563
Eq,
640564
serde::Serialize,
641-
serde::Deserialize,
642565
rkyv::Serialize,
643566
rkyv::Deserialize,
644567
rkyv::Archive,
@@ -668,7 +591,6 @@ pub struct LaunchConfiguration {
668591
PartialEq,
669592
Eq,
670593
serde::Serialize,
671-
serde::Deserialize,
672594
rkyv::Serialize,
673595
rkyv::Deserialize,
674596
rkyv::Archive,
@@ -1119,6 +1041,8 @@ pub enum InvalidCmdArguments {
11191041
InvalidDriver(String),
11201042
#[error("Must specify driver as dpdk or kernel")]
11211043
NoDriverSpecified,
1044+
#[error("No network interfaces specified")]
1045+
NoInterfacesSpecified,
11221046
#[error(transparent)]
11231047
UnsupportedByDriver(#[from] UnsupportedByDriver),
11241048
}
@@ -1152,14 +1076,15 @@ impl TryFrom<CmdArgs> for LaunchConfiguration {
11521076
let eal_args = value
11531077
.interfaces()
11541078
.map(|nic| match nic.port {
1155-
NetworkDeviceDescription::Pci(pci_address) => {
1079+
Some(PortArg::PCI(pci_address)) => {
11561080
Ok(["--allow".to_string(), format!("{pci_address}")])
11571081
}
1158-
NetworkDeviceDescription::Kernel(interface_name) => {
1082+
Some(PortArg::KERNEL(interface_name)) => {
11591083
Err(InvalidCmdArguments::UnsupportedByDriver(
11601084
UnsupportedByDriver::Dpdk(interface_name.clone()),
11611085
))
11621086
}
1087+
None => Err(InvalidCmdArguments::NoInterfacesSpecified),
11631088
})
11641089
.collect::<Result<Vec<_>, _>>()?
11651090
.into_iter()
@@ -1512,7 +1437,7 @@ mod tests {
15121437
use hardware::pci::function::Function;
15131438
use net::interface::InterfaceName;
15141439

1515-
use crate::{InterfaceArg, NetworkDeviceDescription};
1440+
use crate::{InterfaceArg, PortArg};
15161441
use std::str::FromStr;
15171442

15181443
#[test]
@@ -1522,20 +1447,22 @@ mod tests {
15221447
assert_eq!(spec.interface.as_ref(), "GbEth1.9000");
15231448
assert_eq!(
15241449
spec.port,
1525-
NetworkDeviceDescription::Pci(PciAddress::new(
1450+
Some(PortArg::PCI(PciAddress::new(
15261451
Domain::from(0),
15271452
Bus::new(2),
15281453
Device::try_from(1).unwrap(),
15291454
Function::try_from(7).unwrap()
1530-
))
1455+
)))
15311456
);
15321457

15331458
// interface + port as kernel interface
15341459
let spec = InterfaceArg::from_str("GbEth1.9000=kernel@enp2s1.100").unwrap();
15351460
assert_eq!(spec.interface.as_ref(), "GbEth1.9000");
15361461
assert_eq!(
15371462
spec.port,
1538-
NetworkDeviceDescription::Kernel(InterfaceName::try_from("enp2s1.100").unwrap())
1463+
Some(PortArg::KERNEL(
1464+
InterfaceName::try_from("enp2s1.100").unwrap()
1465+
))
15391466
);
15401467

15411468
// bad pci address

0 commit comments

Comments
 (0)