Skip to content

Commit 62edcd2

Browse files
committed
update for API changes
1 parent 01cb72a commit 62edcd2

3 files changed

Lines changed: 63 additions & 33 deletions

File tree

cli/src/cmd_net.rs

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ use oxide::{
1616
types::{
1717
Address, AddressConfig, BgpAnnounceSetCreate, BgpAnnouncementCreate, BgpPeer,
1818
BgpPeerConfig, BgpPeerStatus, ImportExportPolicy, IpNet, LinkConfigCreate, LinkFec,
19-
LinkSpeed, LldpLinkConfigCreate, Name, NameOrId, Route, RouteConfig,
20-
SwitchInterfaceConfigCreate, SwitchInterfaceKind, SwitchInterfaceKind2, SwitchPort,
21-
SwitchPortConfigCreate, SwitchPortGeometry, SwitchPortGeometry2, SwitchPortRouteConfig,
22-
SwitchPortSettingsCreate, SwitchSlot,
19+
LinkSpeed, LldpLinkConfigCreate, Name, NameOrId, Route, RouteConfig, RouterPeerIpAddr,
20+
RouterPeerType, SwitchInterfaceConfigCreate, SwitchInterfaceKind, SwitchInterfaceKind2,
21+
SwitchPort, SwitchPortConfigCreate, SwitchPortGeometry, SwitchPortGeometry2,
22+
SwitchPortRouteConfig, SwitchPortSettingsCreate, SwitchSlot,
2323
},
2424
Client, ClientSystemHardwareExt, ClientSystemNetworkingExt,
2525
};
@@ -423,7 +423,10 @@ impl AuthenticatedCmd for CmdBgpFilter {
423423
let peer = config
424424
.peers
425425
.iter_mut()
426-
.find(|x| x.addr == Some(self.peer))
426+
.find(|x| match &x.addr {
427+
RouterPeerType::Numbered { ip } if **ip == self.peer => true,
428+
_ => false,
429+
})
427430
.ok_or(anyhow::anyhow!("specified peer does not exist"))?;
428431

429432
let list: Vec<IpNet> = self
@@ -504,7 +507,10 @@ impl AuthenticatedCmd for CmdBgpAuth {
504507
let peer = config
505508
.peers
506509
.iter_mut()
507-
.find(|x| x.addr == Some(self.peer))
510+
.find(|x| match &x.addr {
511+
RouterPeerType::Numbered { ip } if **ip == self.peer => true,
512+
_ => false,
513+
})
508514
.ok_or(anyhow::anyhow!("specified peer does not exist"))?;
509515

510516
peer.md5_auth_key = self.authstring.clone();
@@ -566,7 +572,10 @@ impl AuthenticatedCmd for CmdBgpLocalPref {
566572
let peer = config
567573
.peers
568574
.iter_mut()
569-
.find(|x| x.addr == Some(self.peer))
575+
.find(|x| match &x.addr {
576+
RouterPeerType::Numbered { ip } if **ip == self.peer => true,
577+
_ => false,
578+
})
570579
.ok_or(anyhow::anyhow!("specified peer does not exist"))?;
571580

572581
peer.local_pref = self.local_pref
@@ -1091,7 +1100,9 @@ impl AuthenticatedCmd for CmdBgpPeerSet {
10911100
let mut settings =
10921101
current_port_settings(client, &self.rack, self.switch.into(), &self.port).await?;
10931102
let peer = BgpPeer {
1094-
addr: Some(self.addr),
1103+
addr: RouterPeerType::Numbered {
1104+
ip: RouterPeerIpAddr(self.addr),
1105+
},
10951106
allowed_import: if self.allowed_imports.is_empty() {
10961107
ImportExportPolicy::NoFiltering
10971108
} else {
@@ -1121,22 +1132,33 @@ impl AuthenticatedCmd for CmdBgpPeerSet {
11211132
enforce_first_as: self.enforce_first_as,
11221133
hold_time: self.hold_time,
11231134
idle_hold_time: self.idle_hold_time,
1124-
interface_name: PHY0.try_into().unwrap(),
1135+
// interface_name: PHY0.try_into().unwrap(),
11251136
keepalive: self.keepalive,
11261137
local_pref: self.local_pref,
11271138
md5_auth_key: self.authstring.clone(),
11281139
min_ttl: self.min_ttl,
11291140
multi_exit_discriminator: self.multi_exit_discriminator,
11301141
remote_asn: self.remote_asn,
11311142
vlan_id: self.vlan_id,
1132-
router_lifetime: self.router_lifetime.unwrap_or(0),
1143+
// router_lifetime: self.router_lifetime.unwrap_or(0),
11331144
};
11341145
match settings
11351146
.bgp_peers
11361147
.iter_mut()
11371148
.find(|link| *link.link_name == PHY0)
11381149
{
1139-
Some(conf) => match conf.peers.iter_mut().find(|x| x.addr == peer.addr) {
1150+
Some(conf) => match conf.peers.iter_mut().find(|x| match (&x.addr, &peer.addr) {
1151+
(
1152+
RouterPeerType::Unnumbered { router_lifetime: a },
1153+
RouterPeerType::Unnumbered { router_lifetime: b },
1154+
) if **a == **b => true,
1155+
(RouterPeerType::Numbered { ip: a }, RouterPeerType::Numbered { ip: b })
1156+
if **a == **b =>
1157+
{
1158+
true
1159+
}
1160+
_ => false,
1161+
}) {
11401162
Some(p) => *p = peer,
11411163
None => conf.peers.push(peer),
11421164
},
@@ -1192,7 +1214,11 @@ impl AuthenticatedCmd for CmdBgpPeerDel {
11921214
.find(|link| *link.link_name == PHY0)
11931215
{
11941216
let before = config.peers.len();
1195-
config.peers.retain(|x| x.addr != Some(self.addr));
1217+
config.peers.retain(|x| match &x.addr {
1218+
RouterPeerType::Numbered { ip } if **ip == self.addr => true,
1219+
_ => false,
1220+
});
1221+
// != Some(self.addr));
11961222
let after = config.peers.len();
11971223
if before == after {
11981224
eprintln_nopipe!("no peers match the provided address");
@@ -1352,7 +1378,11 @@ impl AuthenticatedCmd for CmdPortConfig {
13521378
writeln!(
13531379
&mut tw,
13541380
"{}\t{}\t[{}]\t[{}]\t{:?}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}",
1355-
p.addr.map_or("-".to_string(), |a| a.to_string()),
1381+
match &p.addr {
1382+
RouterPeerType::Unnumbered { router_lifetime } =>
1383+
format!("({router_lifetime})"),
1384+
RouterPeerType::Numbered { ip } => ip.to_string(),
1385+
},
13561386
match &p.bgp_config {
13571387
NameOrId::Id(id) => bgp_configs[id].to_string(),
13581388
NameOrId::Name(name) => name.to_string(),

cli/tests/data/test_switch_port_settings_show.stdout

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Address Lot VLAN
2626
BGP Peer Config Export Import Communities Connect Retry Delay Open Enforce First AS Hold Time Idle Hold Time Keepalive Local Pref Md5 Auth Min TTL MED Remote ASN VLAN
2727
169.254.20.1 as65547 [198.51.100.0/24] [no filtering] [] 3 3 false 6 3 2 - - - - - -
2828
169.254.40.1 as65547 [203.0.113.0/24] [no filtering] [] 0 0 false 6 0 2 - - - - - 400
29-
- as65547 [203.0.113.0/24] [no filtering] [] 0 0 false 6 0 2 - - - - - 400
29+
(0) as65547 [203.0.113.0/24] [no filtering] [] 0 0 false 6 0 2 - - - - - 400
3030

3131
Destination Nexthop Vlan Preference
3232

cli/tests/test_net.rs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22
// License, v. 2.0. If a copy of the MPL was not distributed with this
33
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
44

5-
// Copyright 2025 Oxide Computer Company
5+
// Copyright 2026 Oxide Computer Company
66

77
use chrono::prelude::*;
88
use httpmock::MockServer;
99
use oxide::types::{
1010
AddressLot, AddressLotBlock, AddressLotBlockResultsPage, AddressLotKind, AddressLotResultsPage,
1111
BgpConfig, BgpConfigResultsPage, BgpPeer, ImportExportPolicy, LinkFec, LinkSpeed,
12-
MaxPathConfig, Name, NameOrId, SwitchPort, SwitchPortAddressView, SwitchPortConfig,
13-
SwitchPortGeometry2, SwitchPortLinkConfig, SwitchPortResultsPage, SwitchPortRouteConfig,
14-
SwitchPortSettings, SwitchSlot,
12+
MaxPathConfig, Name, NameOrId, RouterPeerIpAddr, RouterPeerType, SwitchPort,
13+
SwitchPortAddressView, SwitchPortConfig, SwitchPortGeometry2, SwitchPortLinkConfig,
14+
SwitchPortResultsPage, SwitchPortRouteConfig, SwitchPortSettings, SwitchSlot,
1515
};
1616
use oxide_httpmock::MockServerExt;
1717
use uuid::Uuid;
@@ -130,8 +130,9 @@ fn test_port_config() {
130130
],
131131
bgp_peers: vec![
132132
BgpPeer {
133-
interface_name: "phy0".try_into().unwrap(),
134-
addr: Some("169.254.10.1".parse().unwrap()),
133+
addr: RouterPeerType::Numbered {
134+
ip: RouterPeerIpAddr("169.254.10.1".parse().unwrap()),
135+
},
135136
bgp_config: NameOrId::Id(bgp_configs.items[0].id),
136137
allowed_export: ImportExportPolicy::Allow(vec!["198.51.100.0/24".parse().unwrap()]),
137138
allowed_import: ImportExportPolicy::NoFiltering,
@@ -148,11 +149,11 @@ fn test_port_config() {
148149
multi_exit_discriminator: None,
149150
remote_asn: None,
150151
vlan_id: None,
151-
router_lifetime: 0,
152152
},
153153
BgpPeer {
154-
interface_name: "phy0".try_into().unwrap(),
155-
addr: Some("169.254.30.1".parse().unwrap()),
154+
addr: RouterPeerType::Numbered {
155+
ip: RouterPeerIpAddr("169.254.30.1".parse().unwrap()),
156+
},
156157
bgp_config: NameOrId::Id(bgp_configs.items[0].id),
157158
allowed_export: ImportExportPolicy::Allow(vec!["203.0.113.0/24".parse().unwrap()]),
158159
allowed_import: ImportExportPolicy::NoFiltering,
@@ -169,7 +170,6 @@ fn test_port_config() {
169170
multi_exit_discriminator: None,
170171
remote_asn: None,
171172
vlan_id: Some(300),
172-
router_lifetime: 0,
173173
},
174174
],
175175
groups: Vec::new(),
@@ -226,8 +226,9 @@ fn test_port_config() {
226226
],
227227
bgp_peers: vec![
228228
BgpPeer {
229-
interface_name: "phy0".try_into().unwrap(),
230-
addr: Some("169.254.20.1".parse().unwrap()),
229+
addr: RouterPeerType::Numbered {
230+
ip: RouterPeerIpAddr("169.254.20.1".parse().unwrap()),
231+
},
231232
bgp_config: NameOrId::Id(bgp_configs.items[0].id),
232233
allowed_export: ImportExportPolicy::Allow(vec!["198.51.100.0/24".parse().unwrap()]),
233234
allowed_import: ImportExportPolicy::NoFiltering,
@@ -244,11 +245,11 @@ fn test_port_config() {
244245
multi_exit_discriminator: None,
245246
remote_asn: None,
246247
vlan_id: None,
247-
router_lifetime: 0,
248248
},
249249
BgpPeer {
250-
interface_name: "phy0".try_into().unwrap(),
251-
addr: Some("169.254.40.1".parse().unwrap()),
250+
addr: RouterPeerType::Numbered {
251+
ip: RouterPeerIpAddr("169.254.40.1".parse().unwrap()),
252+
},
252253
bgp_config: NameOrId::Id(bgp_configs.items[0].id),
253254
allowed_export: ImportExportPolicy::Allow(vec!["203.0.113.0/24".parse().unwrap()]),
254255
allowed_import: ImportExportPolicy::NoFiltering,
@@ -265,11 +266,11 @@ fn test_port_config() {
265266
multi_exit_discriminator: None,
266267
remote_asn: None,
267268
vlan_id: Some(400),
268-
router_lifetime: 0,
269269
},
270270
BgpPeer {
271-
interface_name: "phy0".try_into().unwrap(),
272-
addr: None,
271+
addr: RouterPeerType::Unnumbered {
272+
router_lifetime: 0.into(),
273+
},
273274
bgp_config: NameOrId::Id(bgp_configs.items[0].id),
274275
allowed_export: ImportExportPolicy::Allow(vec!["203.0.113.0/24".parse().unwrap()]),
275276
allowed_import: ImportExportPolicy::NoFiltering,
@@ -286,7 +287,6 @@ fn test_port_config() {
286287
multi_exit_discriminator: None,
287288
remote_asn: None,
288289
vlan_id: Some(400),
289-
router_lifetime: 0,
290290
},
291291
],
292292
groups: Vec::new(),

0 commit comments

Comments
 (0)