diff --git a/chirpstack/src/api/internal.rs b/chirpstack/src/api/internal.rs index 11ee025e..50e6bec1 100644 --- a/chirpstack/src/api/internal.rs +++ b/chirpstack/src/api/internal.rs @@ -802,7 +802,11 @@ impl InternalService for Internal { out.regions.push(api::RegionListItem { id: region_config.id.clone(), - description: region_config.description.clone(), + description: if region_config.description.is_empty() { + region_config.id.clone() + } else { + region_config.description.clone() + }, region: region_config.common_name.to_proto().into(), }); } @@ -830,7 +834,11 @@ impl InternalService for Internal { for region_conf in &conf.regions { if req.id == region_conf.id { out.id = region_conf.id.clone(); - out.description = region_conf.description.clone(); + out.description = if region_conf.description.is_empty() { + region_conf.id.clone() + } else { + region_conf.description.clone() + }; out.region = region_conf.common_name.to_proto().into(); out.user_info = region_conf.user_info.clone(); out.rx1_delay = region_conf.network.rx1_delay as u32; diff --git a/chirpstack/src/config.rs b/chirpstack/src/config.rs index c05a68b0..b99e40a9 100644 --- a/chirpstack/src/config.rs +++ b/chirpstack/src/config.rs @@ -50,7 +50,7 @@ impl Default for Configuration { backend_interfaces: Default::default(), roaming: Default::default(), keks: Vec::new(), - regions: vec![Default::default()], + regions: vec![], } } } @@ -168,7 +168,7 @@ impl Default for Network { Network { net_id: NetID::from_be_bytes([0x00, 0x00, 0x00]), dev_addr_prefixes: vec![], - enabled_regions: vec!["eu868".into()], + enabled_regions: vec![], device_session_ttl: Duration::from_secs(60 * 60 * 24 * 31), deduplication_delay: Duration::from_millis(200), get_downlink_data_delay: Duration::from_millis(100), @@ -516,43 +516,17 @@ pub struct Region { impl Default for Region { fn default() -> Self { Region { - id: "eu868".to_string(), - description: "EU868".to_string(), + id: "".to_string(), + description: "".to_string(), common_name: CommonName::EU868, user_info: "".into(), - network: RegionNetwork { - installation_margin: 10.0, - rx1_delay: 1, - rx2_frequency: 869525000, - gateway_prefer_min_margin: 10.0, - downlink_tx_power: -1, - min_dr: 0, - max_dr: 5, - uplink_max_eirp: 16.0, - class_b: ClassB { - ping_slot_dr: 0, - ping_slot_frequency: 868100000, - }, - extra_channels: Vec::new(), - enabled_uplink_channels: Vec::new(), - ..Default::default() - }, - gateway: RegionGateway { - force_gws_private: false, - channels: vec![], - backend: GatewayBackend { - enabled: "mqtt".into(), - mqtt: GatewayBackendMqtt { - topic_prefix: "eu868".into(), - ..Default::default() - }, - }, - }, + network: RegionNetwork::default(), + gateway: RegionGateway::default(), } } } -#[derive(Default, Serialize, Deserialize, Clone)] +#[derive(Serialize, Deserialize, Clone)] #[serde(default)] pub struct RegionNetwork { pub installation_margin: f32, @@ -579,6 +553,35 @@ pub struct RegionNetwork { pub dwell_time_400ms: bool, } +impl Default for RegionNetwork { + fn default() -> Self { + RegionNetwork { + installation_margin: 10.0, + rx_window: 0, + rx1_delay: 1, + rx1_dr_offset: 0, + rx2_dr: 0, + rx2_frequency: 0, + rx2_prefer_on_rx1_dr_lt: 0, + rx2_prefer_on_link_budget: false, + gateway_prefer_min_margin: 10.0, + downlink_tx_power: -1, + adr_disabled: false, + min_dr: 0, + max_dr: 0, + uplink_dwell_time_400ms: false, + downlink_dwell_time_400ms: false, + uplink_max_eirp: 0.0, + rejoin_request: RejoinRequest::default(), + class_b: ClassB::default(), + extra_channels: vec![], + enabled_uplink_channels: vec![], + repeater_compatible: false, + dwell_time_400ms: false, + } + } +} + #[derive(Default, Serialize, Deserialize, Clone)] #[serde(default)] pub struct RejoinRequest { diff --git a/chirpstack/src/test/mod.rs b/chirpstack/src/test/mod.rs index 89cd2d06..573aaba3 100644 --- a/chirpstack/src/test/mod.rs +++ b/chirpstack/src/test/mod.rs @@ -34,6 +34,41 @@ pub async fn prepare<'a>() -> std::sync::MutexGuard<'a, ()> { "postgres://chirpstack_test:chirpstack_test@postgres/chirpstack_test?sslmode=disable" .to_string(); conf.redis.servers = vec!["redis://redis/".to_string()]; + conf.network.enabled_regions = vec!["eu868".to_string()]; + conf.regions = vec![config::Region { + id: "eu868".to_string(), + description: "EU868".to_string(), + common_name: lrwn::region::CommonName::EU868, + user_info: "".into(), + network: config::RegionNetwork { + installation_margin: 10.0, + rx1_delay: 1, + rx2_frequency: 869525000, + gateway_prefer_min_margin: 10.0, + downlink_tx_power: -1, + min_dr: 0, + max_dr: 5, + uplink_max_eirp: 16.0, + class_b: config::ClassB { + ping_slot_dr: 0, + ping_slot_frequency: 868100000, + }, + extra_channels: Vec::new(), + enabled_uplink_channels: Vec::new(), + ..Default::default() + }, + gateway: config::RegionGateway { + force_gws_private: false, + channels: vec![], + backend: config::GatewayBackend { + enabled: "mqtt".into(), + mqtt: config::GatewayBackendMqtt { + topic_prefix: "eu868".into(), + ..Default::default() + }, + }, + }, + }]; config::set(conf); // setup storage diff --git a/chirpstack/src/test/otaa_test.rs b/chirpstack/src/test/otaa_test.rs index 9b2292fe..9e5e63e3 100644 --- a/chirpstack/src/test/otaa_test.rs +++ b/chirpstack/src/test/otaa_test.rs @@ -1220,7 +1220,7 @@ async fn run_test(t: &Test) { reset_redis().await.unwrap(); - let mut conf: config::Configuration = Default::default(); + let mut conf: config::Configuration = (*config::get()).clone(); for f in &t.extra_uplink_channels { conf.regions[0] .network