Fix netid_type method.

It would panic in case all bits are set (which would be
an invalid DevAddr prefix type).
This commit is contained in:
Orne Brocaar
2023-05-17 15:12:19 +01:00
parent e3383baa02
commit 5146c87940

View File

@ -159,18 +159,18 @@ impl DevAddr {
*self == dev_addr *self == dev_addr
} }
pub fn netid_type(&self) -> u8 { pub fn netid_type(&self) -> Result<u8> {
for i in (0..=7).rev() { for i in (0..=7).rev() {
if self.0[0] & (1 << i) == 0 { if self.0[0] & (1 << i) == 0 {
return 7 - i; return Ok(7 - i);
} }
} }
panic!("netid_type bug"); Err(anyhow!("Invalid type prefix value"))
} }
pub fn nwkid(&self) -> Vec<u8> { pub fn nwkid(&self) -> Result<Vec<u8>> {
match self.netid_type() { Ok(match self.netid_type()? {
0 => self.get_nwkid(1, 6), 0 => self.get_nwkid(1, 6),
1 => self.get_nwkid(2, 6), 1 => self.get_nwkid(2, 6),
2 => self.get_nwkid(3, 9), 2 => self.get_nwkid(3, 9),
@ -180,7 +180,7 @@ impl DevAddr {
6 => self.get_nwkid(7, 15), 6 => self.get_nwkid(7, 15),
7 => self.get_nwkid(8, 17), 7 => self.get_nwkid(8, 17),
_ => vec![], _ => vec![],
} })
} }
pub fn set_dev_addr_prefix(&mut self, prefix: DevAddrPrefix) { pub fn set_dev_addr_prefix(&mut self, prefix: DevAddrPrefix) {
@ -334,14 +334,14 @@ mod tests {
#[test] #[test]
fn test_dev_addr_netid_type() { fn test_dev_addr_netid_type() {
for tst in tests() { for tst in tests() {
assert_eq!(tst.netid_type, tst.devaddr.netid_type()); assert_eq!(tst.netid_type, tst.devaddr.netid_type().unwrap());
} }
} }
#[test] #[test]
fn test_dev_addr_nwkid() { fn test_dev_addr_nwkid() {
for tst in tests() { for tst in tests() {
assert_eq!(tst.nwkid, tst.devaddr.nwkid()); assert_eq!(tst.nwkid, tst.devaddr.nwkid().unwrap());
} }
} }