@@ -71,6 +71,7 @@ use omicron_common::address::CRUCIBLE_PORT;
71
71
use omicron_common:: address:: DENDRITE_PORT ;
72
72
use omicron_common:: address:: DNS_HTTP_PORT ;
73
73
use omicron_common:: address:: DNS_PORT ;
74
+ use omicron_common:: address:: LLDP_PORT ;
74
75
use omicron_common:: address:: MGS_PORT ;
75
76
use omicron_common:: address:: RACK_PREFIX ;
76
77
use omicron_common:: address:: SLED_PREFIX ;
@@ -470,6 +471,7 @@ enum SwitchService {
470
471
ManagementGatewayService ,
471
472
Wicketd { baseboard : Baseboard } ,
472
473
Dendrite { asic : DendriteAsic } ,
474
+ Lldpd { baseboard : Baseboard } ,
473
475
Tfport { pkt_source : String , asic : DendriteAsic } ,
474
476
Uplink ,
475
477
MgDdm { mode : String } ,
@@ -483,6 +485,7 @@ impl crate::smf_helper::Service for SwitchService {
483
485
SwitchService :: ManagementGatewayService => "mgs" ,
484
486
SwitchService :: Wicketd { .. } => "wicketd" ,
485
487
SwitchService :: Dendrite { .. } => "dendrite" ,
488
+ SwitchService :: Lldpd { .. } => "lldpd" ,
486
489
SwitchService :: Tfport { .. } => "tfport" ,
487
490
SwitchService :: Uplink { .. } => "uplink" ,
488
491
SwitchService :: MgDdm { .. } => "mg-ddm" ,
@@ -1019,7 +1022,10 @@ impl ServiceManager {
1019
1022
let mut devices = vec ! [ ] ;
1020
1023
for svc_details in zone_args. sled_local_services ( ) {
1021
1024
match svc_details {
1022
- SwitchService :: Dendrite { asic : DendriteAsic :: TofinoAsic } => {
1025
+ SwitchService :: Dendrite {
1026
+ asic : DendriteAsic :: TofinoAsic ,
1027
+ ..
1028
+ } => {
1023
1029
if let Ok ( Some ( n) ) = tofino:: get_tofino ( ) {
1024
1030
if let Ok ( device_path) = n. device_path ( ) {
1025
1031
devices. push ( device_path) ;
@@ -1032,6 +1038,7 @@ impl ServiceManager {
1032
1038
}
1033
1039
SwitchService :: Dendrite {
1034
1040
asic : DendriteAsic :: SoftNpuPropolisDevice ,
1041
+ ..
1035
1042
} => {
1036
1043
devices. push ( "/dev/tty03" . into ( ) ) ;
1037
1044
}
@@ -2374,6 +2381,15 @@ impl ServiceManager {
2374
2381
None
2375
2382
} ;
2376
2383
2384
+ let sidecar_revision = match & self . inner . sidecar_revision {
2385
+ SidecarRevision :: Physical ( rev) => rev. to_string ( ) ,
2386
+ SidecarRevision :: SoftZone ( rev)
2387
+ | SidecarRevision :: SoftPropolis ( rev) => format ! (
2388
+ "softnpu_front_{}_rear_{}" ,
2389
+ rev. front_port_count, rev. rear_port_count
2390
+ ) ,
2391
+ } ;
2392
+
2377
2393
if let Some ( gateway) = maybe_gateway {
2378
2394
running_zone. add_default_route ( gateway) . map_err ( |err| {
2379
2395
Error :: ZoneCommand { intent : "Adding Route" . to_string ( ) , err }
@@ -2596,19 +2612,7 @@ impl ServiceManager {
2596
2612
"config/port_config" ,
2597
2613
"/opt/oxide/dendrite/misc/sidecar_config.toml" ,
2598
2614
) ?;
2599
- let sidecar_revision =
2600
- match self . inner . sidecar_revision {
2601
- SidecarRevision :: Physical ( ref rev) => rev,
2602
- _ => {
2603
- return Err ( Error :: SidecarRevision (
2604
- anyhow:: anyhow!(
2605
- "expected physical \
2606
- sidecar revision"
2607
- ) ,
2608
- ) )
2609
- }
2610
- } ;
2611
- smfh. setprop ( "config/board_rev" , sidecar_revision) ?;
2615
+ smfh. setprop ( "config/board_rev" , & sidecar_revision) ?;
2612
2616
}
2613
2617
DendriteAsic :: TofinoStub => smfh. setprop (
2614
2618
"config/port_config" ,
@@ -2710,6 +2714,39 @@ impl ServiceManager {
2710
2714
2711
2715
smfh. refresh ( ) ?;
2712
2716
}
2717
+ SwitchService :: Lldpd { baseboard } => {
2718
+ info ! ( self . inner. log, "Setting up lldpd service" ) ;
2719
+
2720
+ match baseboard {
2721
+ Baseboard :: Gimlet {
2722
+ identifier, model, ..
2723
+ }
2724
+ | Baseboard :: Pc { identifier, model, .. } => {
2725
+ smfh. setprop (
2726
+ "config/scrimlet_id" ,
2727
+ identifier,
2728
+ ) ?;
2729
+ smfh. setprop (
2730
+ "config/scrimlet_model" ,
2731
+ model,
2732
+ ) ?;
2733
+ }
2734
+ Baseboard :: Unknown => { }
2735
+ }
2736
+ smfh. setprop (
2737
+ "config/board_rev" ,
2738
+ & sidecar_revision,
2739
+ ) ?;
2740
+
2741
+ smfh. delpropvalue ( "config/address" , "*" ) ?;
2742
+ for address in & request. zone . addresses {
2743
+ smfh. addpropvalue (
2744
+ "config/address" ,
2745
+ & format ! ( "[{}]:{}" , address, LLDP_PORT ) ,
2746
+ ) ?;
2747
+ }
2748
+ smfh. refresh ( ) ?;
2749
+ }
2713
2750
SwitchService :: Uplink => {
2714
2751
// Nothing to do here - this service is special and
2715
2752
// configured in
@@ -3509,13 +3546,14 @@ impl ServiceManager {
3509
3546
| SledMode :: Scrimlet { asic : DendriteAsic :: TofinoAsic } => {
3510
3547
vec ! [
3511
3548
SwitchService :: Dendrite { asic: DendriteAsic :: TofinoAsic } ,
3549
+ SwitchService :: Lldpd { baseboard: baseboard. clone( ) } ,
3512
3550
SwitchService :: ManagementGatewayService ,
3513
3551
SwitchService :: Tfport {
3514
3552
pkt_source: "tfpkt0" . to_string( ) ,
3515
3553
asic: DendriteAsic :: TofinoAsic ,
3516
3554
} ,
3517
3555
SwitchService :: Uplink ,
3518
- SwitchService :: Wicketd { baseboard } ,
3556
+ SwitchService :: Wicketd { baseboard: baseboard . clone ( ) } ,
3519
3557
SwitchService :: Mgd ,
3520
3558
SwitchService :: MgDdm { mode: "transit" . to_string( ) } ,
3521
3559
]
@@ -3527,9 +3565,10 @@ impl ServiceManager {
3527
3565
data_links = vec ! [ "vioif0" . to_owned( ) ] ;
3528
3566
vec ! [
3529
3567
SwitchService :: Dendrite { asic } ,
3568
+ SwitchService :: Lldpd { baseboard: baseboard. clone( ) } ,
3530
3569
SwitchService :: ManagementGatewayService ,
3531
3570
SwitchService :: Uplink ,
3532
- SwitchService :: Wicketd { baseboard } ,
3571
+ SwitchService :: Wicketd { baseboard: baseboard . clone ( ) } ,
3533
3572
SwitchService :: Mgd ,
3534
3573
SwitchService :: MgDdm { mode: "transit" . to_string( ) } ,
3535
3574
SwitchService :: Tfport {
@@ -3557,9 +3596,10 @@ impl ServiceManager {
3557
3596
}
3558
3597
vec ! [
3559
3598
SwitchService :: Dendrite { asic } ,
3599
+ SwitchService :: Lldpd { baseboard: baseboard. clone( ) } ,
3560
3600
SwitchService :: ManagementGatewayService ,
3561
3601
SwitchService :: Uplink ,
3562
- SwitchService :: Wicketd { baseboard } ,
3602
+ SwitchService :: Wicketd { baseboard: baseboard . clone ( ) } ,
3563
3603
SwitchService :: Mgd ,
3564
3604
SwitchService :: MgDdm { mode: "transit" . to_string( ) } ,
3565
3605
SwitchService :: Tfport {
@@ -3823,7 +3863,10 @@ impl ServiceManager {
3823
3863
smfh. refresh ( ) ?;
3824
3864
}
3825
3865
SwitchService :: Dendrite { .. } => {
3826
- info ! ( self . inner. log, "configuring dendrite zone" ) ;
3866
+ info ! (
3867
+ self . inner. log,
3868
+ "configuring dendrite service"
3869
+ ) ;
3827
3870
if let Some ( info) = self . inner . sled_info . get ( ) {
3828
3871
smfh. setprop ( "config/rack_id" , info. rack_id ) ?;
3829
3872
smfh. setprop (
@@ -3881,6 +3924,17 @@ impl ServiceManager {
3881
3924
) ;
3882
3925
}
3883
3926
}
3927
+ SwitchService :: Lldpd { .. } => {
3928
+ info ! ( self . inner. log, "configuring lldp service" ) ;
3929
+ smfh. delpropvalue ( "config/address" , "*" ) ?;
3930
+ for address in & request. addresses {
3931
+ smfh. addpropvalue (
3932
+ "config/address" ,
3933
+ & format ! ( "[{}]:{}" , address, LLDP_PORT ) ,
3934
+ ) ?;
3935
+ }
3936
+ smfh. refresh ( ) ?;
3937
+ }
3884
3938
SwitchService :: Tfport { .. } => {
3885
3939
// Since tfport and dpd communicate using localhost,
3886
3940
// the tfport service shouldn't need to be
0 commit comments