Skip to content

Commit 286d7b4

Browse files
committed
Refactor min / max tx freq. validation.
1 parent 0af7d7c commit 286d7b4

File tree

38 files changed

+215
-220
lines changed

38 files changed

+215
-220
lines changed

chirpstack-concentratord-2g4/src/concentrator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pub fn rx_setconf(config: &Configuration) -> Result<()> {
5353
}
5454

5555
pub fn tx_setconf(config: &Configuration) -> Result<()> {
56-
let enable = config.gateway.model_config.min_max_tx_freq.1 > 0;
56+
let enable = !config.gateway.model_config.tx_min_max_freqs.is_empty();
5757
info!("Configuring tx path, enable: {}", enable);
5858
hal::channel_tx_setconf(&hal::ChannelTxConfig { enable })
5959
}

chirpstack-concentratord-2g4/src/config/vendor/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pub mod semtech;
55
#[derive(Default, Clone)]
66
pub struct Configuration {
77
pub tty_path: String,
8-
pub min_max_tx_freq: (u32, u32),
8+
pub tx_min_max_freqs: Vec<(u32, u32)>,
99
pub reset_pin: Option<(String, u32)>,
1010
pub boot0_pin: Option<(String, u32)>,
1111
}

chirpstack-concentratord-2g4/src/config/vendor/multitech/mtac_lora_2g4.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::super::Configuration;
44
pub fn new(conf: &config::Configuration) -> Configuration {
55
Configuration {
66
tty_path: conf.gateway.get_com_dev_path("/dev/ttyACM0"),
7-
min_max_tx_freq: (2400000000, 2483500000),
7+
tx_min_max_freqs: vec![(2400000000, 2483500000)],
88
reset_pin: None,
99
boot0_pin: None,
1010
}

chirpstack-concentratord-2g4/src/config/vendor/rak/rak5148.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::super::Configuration;
44
pub fn new(conf: &config::Configuration) -> Configuration {
55
Configuration {
66
tty_path: conf.gateway.get_com_dev_path("/dev/ttyACM0"),
7-
min_max_tx_freq: (2400000000, 2483500000),
7+
tx_min_max_freqs: vec![(2400000000, 2483500000)],
88
reset_pin: None,
99
boot0_pin: None,
1010
}

chirpstack-concentratord-2g4/src/config/vendor/semtech/sx1280z3dsfgw1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use super::super::Configuration;
44
pub fn new(conf: &config::Configuration) -> Configuration {
55
Configuration {
66
tty_path: conf.gateway.get_com_dev_path("/dev/ttyACM0"),
7-
min_max_tx_freq: (2400000000, 2483500000),
7+
tx_min_max_freqs: vec![(2400000000, 2483500000)],
88
// pin configuration taken from:
99
// https://github.com/Lora-net/gateway_2g4_hal/blob/master/tools/rpi_configure_gpio.sh
1010
reset_pin: conf.gateway.get_mcu_reset_pin("/dev/gpiochip0", 32),

chirpstack-concentratord-2g4/src/handler/command.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,19 @@ fn handle_downlink(
9696
};
9797

9898
// validate frequency range
99-
let freqs = vendor_config.min_max_tx_freq;
100-
if tx_packet.freq_hz < freqs.0 || tx_packet.freq_hz > freqs.1 {
101-
error!("Frequency is not within min/max gateway frequency, downlink_id: {}, min_freq: {}, max_freq: {}", pl.downlink_id, freqs.0, freqs.1);
99+
if !vendor_config
100+
.tx_min_max_freqs
101+
.iter()
102+
.map(|(freq_min, freq_max)| {
103+
tx_packet.freq_hz >= *freq_min && tx_packet.freq_hz <= *freq_max
104+
})
105+
.collect::<Vec<bool>>()
106+
.contains(&true)
107+
{
108+
error!(
109+
"Frequency is not within min / max gateway frequencies, downlink_id: {}, freq: {}",
110+
pl.downlink_id, tx_packet.freq_hz
111+
);
102112
tx_ack.items[i].set_status(chirpstack_api::gw::TxAckStatus::TxFreq);
103113

104114
// try next

chirpstack-concentratord-sx1301/src/config/vendor/imst/ic880a.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ use super::super::Configuration;
99
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
1010
let region = conf.gateway.region.unwrap_or(Region::EU868);
1111

12-
let radio_min_max_tx_freq = match region {
13-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
14-
Region::IN865 => vec![(865000000, 867000000), (865000000, 867000000)],
15-
Region::RU864 => vec![(864000000, 870000000), (864000000, 870000000)],
12+
let tx_min_max_freqs = match region {
13+
Region::EU868 => vec![(863000000, 870000000)],
14+
Region::IN865 => vec![(865000000, 867000000)],
15+
Region::RU864 => vec![(864000000, 870000000)],
1616
_ => return Err(anyhow!("Region is not supported: {}", region)),
1717
};
1818

1919
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
2020

2121
Ok(Configuration {
22-
radio_min_max_tx_freq,
22+
tx_min_max_freqs,
2323
enforce_duty_cycle,
2424
radio_count: 2,
2525
clock_source: 1,

chirpstack-concentratord-sx1301/src/config/vendor/kerlink/ifemtocell.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ use super::super::Configuration;
88
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
99
let region = conf.gateway.region.unwrap_or(Region::EU868);
1010

11-
let radio_min_max_tx_freq = match region {
12-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
13-
Region::IN865 => vec![(865000000, 867000000), (865000000, 867000000)],
14-
Region::RU864 => vec![(864000000, 870000000), (864000000, 870000000)],
11+
let tx_min_max_freqs = match region {
12+
Region::EU868 => vec![(863000000, 870000000)],
13+
Region::IN865 => vec![(865000000, 867000000)],
14+
Region::RU864 => vec![(864000000, 870000000)],
1515
_ => return Err(anyhow!("Region is not supported: {}", region)),
1616
};
1717

1818
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
1919

2020
Ok(Configuration {
21-
radio_min_max_tx_freq,
21+
tx_min_max_freqs,
2222
enforce_duty_cycle,
2323
radio_count: 2,
2424
clock_source: 1,

chirpstack-concentratord-sx1301/src/config/vendor/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub struct Configuration {
2424
pub radio_rssi_offset: Vec<f32>,
2525
pub radio_tx_enabled: Vec<bool>,
2626
pub radio_type: Vec<hal::RadioType>,
27-
pub radio_min_max_tx_freq: Vec<(u32, u32)>,
27+
pub tx_min_max_freqs: Vec<(u32, u32)>,
2828
pub radio_tx_notch_freq: Vec<u32>,
2929
pub lora_multi_sf_bandwidth: u32,
3030
pub tx_gain_table: Vec<hal::TxGainConfig>,

chirpstack-concentratord-sx1301/src/config/vendor/multitech/mtac_lora_h_868.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ pub enum Port {
1313
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
1414
let region = conf.gateway.region.unwrap_or(Region::EU868);
1515

16-
let radio_min_max_tx_freq = match region {
17-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
16+
let tx_min_max_freqs = match region {
17+
Region::EU868 => vec![(863000000, 870000000)],
1818
_ => return Err(anyhow!("Region is not supported: {}", region)),
1919
};
2020

@@ -28,7 +28,7 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
2828
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
2929

3030
Ok(Configuration {
31-
radio_min_max_tx_freq,
31+
tx_min_max_freqs,
3232
enforce_duty_cycle,
3333
radio_count: 2,
3434
clock_source: 0,

chirpstack-concentratord-sx1301/src/config/vendor/multitech/mtac_lora_h_915.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ pub enum Port {
1313
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
1414
let region = conf.gateway.region.unwrap_or(Region::US915);
1515

16-
let radio_min_max_tx_freq = match region {
17-
Region::US915 => vec![(902000000, 928000000), (902000000, 928000000)],
16+
let tx_min_max_freqs = match region {
17+
Region::US915 => vec![(902000000, 928000000)],
1818
_ => return Err(anyhow!("Region is not supported: {}", region)),
1919
};
2020

@@ -26,7 +26,7 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
2626
};
2727

2828
Ok(Configuration {
29-
radio_min_max_tx_freq,
29+
tx_min_max_freqs,
3030
radio_count: 2,
3131
clock_source: 0,
3232
radio_rssi_offset: vec![-162.0, -162.0],

chirpstack-concentratord-sx1301/src/config/vendor/multitech/mtcap_lora_868.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ use super::super::Configuration;
88
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
99
let region = conf.gateway.region.unwrap_or(Region::EU868);
1010

11-
let radio_min_max_tx_freq = match region {
12-
Region::EU868 => vec![(902000000, 928000000), (902000000, 928000000)],
11+
let tx_min_max_freqs = match region {
12+
Region::EU868 => vec![(902000000, 928000000)],
1313
_ => return Err(anyhow!("Region is not supported: {}", region)),
1414
};
1515

1616
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
1717

1818
Ok(Configuration {
19-
radio_min_max_tx_freq,
19+
tx_min_max_freqs,
2020
enforce_duty_cycle,
2121
radio_count: 2,
2222
clock_source: 0,

chirpstack-concentratord-sx1301/src/config/vendor/multitech/mtcap_lora_915.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ use super::super::Configuration;
88
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
99
let region = conf.gateway.region.unwrap_or(Region::US915);
1010

11-
let radio_min_max_tx_freq = match region {
12-
Region::US915 => vec![(863000000, 870000000), (863000000, 870000000)],
11+
let tx_min_max_freqs = match region {
12+
Region::US915 => vec![(863000000, 870000000)],
1313
_ => return Err(anyhow!("Region is not supported: {}", region)),
1414
};
1515

1616
Ok(Configuration {
17-
radio_min_max_tx_freq,
17+
tx_min_max_freqs,
1818
radio_count: 2,
1919
clock_source: 0,
2020
radio_rssi_offset: vec![-162.0, -162.0],

chirpstack-concentratord-sx1301/src/config/vendor/rak/rak2245.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,18 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
4646
_ => return Err(anyhow!("Region is not supported: {}", region)),
4747
};
4848

49-
let radio_min_max_tx_freq = match region {
49+
let tx_min_max_freqs = match region {
5050
Region::AS923 | Region::AS923_2 | Region::AS923_3 | Region::AS923_4 => {
5151
vec![(915000000, 928000000), (915000000, 928000000)]
5252
}
53-
Region::AU915 => vec![(915000000, 928000000), (915000000, 928000000)],
54-
Region::CN470 => vec![(470000000, 510000000), (470000000, 510000000)],
55-
Region::EU433 => vec![(433050000, 434900000), (433050000, 434900000)],
56-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
57-
Region::IN865 => vec![(865000000, 867000000), (865000000, 867000000)],
58-
Region::KR920 => vec![(920900000, 923300000), (920900000, 923300000)],
59-
Region::RU864 => vec![(863000000, 870000000), (863000000, 870000000)],
60-
Region::US915 => vec![(902000000, 928000000), (902000000, 928000000)],
53+
Region::AU915 => vec![(915000000, 928000000)],
54+
Region::CN470 => vec![(470000000, 510000000)],
55+
Region::EU433 => vec![(433050000, 434900000)],
56+
Region::EU868 => vec![(863000000, 870000000)],
57+
Region::IN865 => vec![(865000000, 867000000)],
58+
Region::KR920 => vec![(920900000, 923300000)],
59+
Region::RU864 => vec![(863000000, 870000000)],
60+
Region::US915 => vec![(902000000, 928000000)],
6161
_ => return Err(anyhow!("Region is not supported: {}", region)),
6262
};
6363

@@ -469,7 +469,7 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
469469
Ok(Configuration {
470470
radio_rssi_offset,
471471
radio_type,
472-
radio_min_max_tx_freq,
472+
tx_min_max_freqs,
473473
tx_gain_table,
474474
enforce_duty_cycle,
475475
radio_count: 2,

chirpstack-concentratord-sx1301/src/config/vendor/rak/rak2246.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,18 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
4747
_ => return Err(anyhow!("Region is not supported: {}", region)),
4848
};
4949

50-
let radio_min_max_tx_freq = match region {
50+
let tx_min_max_freqs = match region {
5151
Region::AS923 | Region::AS923_2 | Region::AS923_3 | Region::AS923_4 => {
52-
vec![(923200000, 925000000), (923200000, 925000000)]
52+
vec![(923200000, 925000000)]
5353
}
54-
Region::AU915 => vec![(915000000, 928000000), (915000000, 928000000)],
55-
Region::CN470 => vec![(470000000, 510000000), (470000000, 510000000)],
56-
Region::EU433 => vec![(433050000, 434900000), (433050000, 434900000)],
57-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
58-
Region::IN865 => vec![(865000000, 867000000), (865000000, 867000000)],
59-
Region::KR920 => vec![(920900000, 923300000), (920900000, 923300000)],
60-
Region::RU864 => vec![(863000000, 870000000), (863000000, 870000000)],
61-
Region::US915 => vec![(902000000, 928000000), (902000000, 928000000)],
54+
Region::AU915 => vec![(915000000, 928000000)],
55+
Region::CN470 => vec![(470000000, 510000000)],
56+
Region::EU433 => vec![(433050000, 434900000)],
57+
Region::EU868 => vec![(863000000, 870000000)],
58+
Region::IN865 => vec![(865000000, 867000000)],
59+
Region::KR920 => vec![(920900000, 923300000)],
60+
Region::RU864 => vec![(863000000, 870000000)],
61+
Region::US915 => vec![(902000000, 928000000)],
6262
_ => return Err(anyhow!("Region is not supported: {}", region)),
6363
};
6464

@@ -280,7 +280,7 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
280280
tx_gain_table,
281281
radio_type,
282282
radio_rssi_offset,
283-
radio_min_max_tx_freq,
283+
tx_min_max_freqs,
284284
enforce_duty_cycle,
285285
radio_count: 2,
286286
clock_source: 1,

chirpstack-concentratord-sx1301/src/config/vendor/rak/rak2247.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,18 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
4545
_ => return Err(anyhow!("Region is not supported: {}", region)),
4646
};
4747

48-
let radio_min_max_tx_freq = match region {
48+
let tx_min_max_freqs = match region {
4949
Region::AS923 | Region::AS923_2 | Region::AS923_3 | Region::AS923_4 => {
50-
vec![(915000000, 928000000), (915000000, 928000000)]
50+
vec![(915000000, 928000000)]
5151
}
52-
Region::AU915 => vec![(915000000, 928000000), (915000000, 928000000)],
53-
Region::CN470 => vec![(470000000, 510000000), (470000000, 510000000)],
54-
Region::EU433 => vec![(433050000, 434900000), (433050000, 434900000)],
55-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
56-
Region::IN865 => vec![(865000000, 867000000), (865000000, 867000000)],
57-
Region::KR920 => vec![(920900000, 923300000), (920900000, 923300000)],
58-
Region::RU864 => vec![(863000000, 870000000), (863000000, 870000000)],
59-
Region::US915 => vec![(902000000, 928000000), (902000000, 928000000)],
52+
Region::AU915 => vec![(915000000, 928000000)],
53+
Region::CN470 => vec![(470000000, 510000000)],
54+
Region::EU433 => vec![(433050000, 434900000)],
55+
Region::EU868 => vec![(863000000, 870000000)],
56+
Region::IN865 => vec![(865000000, 867000000)],
57+
Region::KR920 => vec![(920900000, 923300000)],
58+
Region::RU864 => vec![(863000000, 870000000)],
59+
Region::US915 => vec![(902000000, 928000000)],
6060
_ => return Err(anyhow!("Region is not supported: {}", region)),
6161
};
6262

@@ -596,7 +596,7 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
596596
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
597597

598598
Ok(Configuration {
599-
radio_min_max_tx_freq,
599+
tx_min_max_freqs,
600600
radio_rssi_offset,
601601
tx_gain_table,
602602
enforce_duty_cycle,

chirpstack-concentratord-sx1301/src/config/vendor/risinghf/rhf0m301.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
1212
.region
1313
.ok_or_else(|| anyhow!("You must specify a region"))?;
1414

15-
let radio_min_max_tx_freq = match region {
16-
Region::US915 => vec![(923000000, 928000000), (923000000, 928000000)],
17-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
18-
Region::AU915 => vec![(915000000, 928000000), (915000000, 928000000)],
15+
let tx_min_max_freqs = match region {
16+
Region::US915 => vec![(923000000, 928000000)],
17+
Region::EU868 => vec![(863000000, 870000000)],
18+
Region::AU915 => vec![(915000000, 928000000)],
1919
_ => return Err(anyhow!("Region is not supported: {}", region)),
2020
};
2121

2222
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
2323

2424
Ok(Configuration {
25-
radio_min_max_tx_freq,
25+
tx_min_max_freqs,
2626
enforce_duty_cycle,
2727
radio_count: 2,
2828
clock_source: 1,

chirpstack-concentratord-sx1301/src/config/vendor/sandbox/lorago_port.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
1313
.region
1414
.ok_or_else(|| anyhow!("You must specify a region"))?;
1515

16-
let radio_min_max_tx_freq = match region {
17-
Region::AU915 => vec![(915000000, 928000000), (915000000, 928000000)],
18-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
19-
Region::US915 => vec![(923000000, 928000000), (923000000, 928000000)],
16+
let tx_min_max_freqs = match region {
17+
Region::AU915 => vec![(915000000, 928000000)],
18+
Region::EU868 => vec![(863000000, 870000000)],
19+
Region::US915 => vec![(923000000, 928000000)],
2020
_ => return Err(anyhow!("Region is not supported: {}", region)),
2121
};
2222

@@ -223,7 +223,7 @@ pub fn new(conf: &config::Configuration) -> Result<Configuration> {
223223
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
224224

225225
Ok(Configuration {
226-
radio_min_max_tx_freq,
226+
tx_min_max_freqs,
227227
tx_gain_table,
228228
enforce_duty_cycle,
229229
radio_count: 2,

chirpstack-concentratord-sx1301/src/config/vendor/wifx/lorix_one.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ use super::super::Configuration;
1010
pub fn new(conf: &config::Configuration) -> Result<Configuration> {
1111
let region = conf.gateway.region.unwrap_or(Region::EU868);
1212

13-
let radio_min_max_tx_freq = match region {
14-
Region::EU868 => vec![(863000000, 870000000), (863000000, 870000000)],
13+
let tx_min_max_freqs = match region {
14+
Region::EU868 => vec![(863000000, 870000000)],
1515
_ => return Err(anyhow!("Region is not supported: {}", region)),
1616
};
1717

1818
let enforce_duty_cycle = conf.gateway.model_flags.contains(&"ENFORCE_DC".to_string());
1919

2020
Ok(Configuration {
21-
radio_min_max_tx_freq,
21+
tx_min_max_freqs,
2222
enforce_duty_cycle,
2323
radio_count: 2,
2424
clock_source: 1,

0 commit comments

Comments
 (0)