mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-06-19 07:48:12 +00:00
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:
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user