Lorawan-stack: CLI 需要 NS 和 AS 在 JS 中创建设备

创建于 2019-06-21  ·  6评论  ·  资料来源: TheThingsNetwork/lorawan-stack

概括

CLI 需要 NS 和 AS 在 JS 中创建设备

重现步骤

  1. 创建一个只有JS字段的设备,即$ ttn-lw-cli dev create test-app test-dev --join-eui 0102030405060708 --dev-eui 01020304050607ff --root-keys.app-key.key 01020304050607080102030405060708 --resets-join-nonces=true --net-id=000001 --network-server-address 000001

你现在看到了什么?

  • 由于abp未设置, supports_join被设置,这是一个NS字段,触发创建/更新的NS命中
  • 在设备创建时, NS 无论如何都会被击中
  • 但是 NS 需要设置设备配置文件,即 LoRaWAN MAC 和 PHY 版本

你想看什么?

我希望只能在 JS 中创建设备

您建议如何实施?

强制 CLI 不调用 JS/NS/AS。 这类似于控制台,当组件不存在时,我们禁用该功能。

你能自己做这个并提交一个拉取请求吗?

会审核

bug in progress ucli

所有6条评论

此外,CLI 当前要求在所有情况下都设置lorawan_version ,而仅在创建 ABP 设备以验证会话密钥时才需要。 建议;

diff --git a/cmd/ttn-lw-cli/commands/end_devices.go b/cmd/ttn-lw-cli/commands/end_devices.go
index 2fd69e78..b20c9297 100644
--- a/cmd/ttn-lw-cli/commands/end_devices.go
+++ b/cmd/ttn-lw-cli/commands/end_devices.go
@@ -294,19 +294,6 @@ var (
                paths = append(paths, ttnpb.FlattenPaths(decodedPaths, endDeviceFlattenPaths)...)
            }

-           var macVersion ttnpb.MACVersion
-           s, err := setEndDeviceFlags.GetString("lorawan_version")
-           if err != nil {
-               return err
-           }
-
-           if err := macVersion.UnmarshalText([]byte(s)); err != nil {
-               return err
-           }
-           if err := macVersion.Validate(); err != nil {
-               return errInvalidMACVerson
-           }
-
            setDefaults, _ := cmd.Flags().GetBool("defaults")
            if setDefaults {
                device.NetworkServerAddress = getHost(config.NetworkServerGRPCAddress)
@@ -344,6 +331,17 @@ var (
                        "session.keys.app_s_key.key",
                        "session.dev_addr",
                    )
+                   var macVersion ttnpb.MACVersion
+                   s, err := setEndDeviceFlags.GetString("lorawan_version")
+                   if err != nil {
+                       return err
+                   }
+                   if err := macVersion.UnmarshalText([]byte(s)); err != nil {
+                       return err
+                   }
+                   if err := macVersion.Validate(); err != nil {
+                       return errInvalidMACVerson
+                   }
                    if macVersion.Compare(ttnpb.MAC_V1_1) >= 0 {
                        device.Session.SessionKeys.SNwkSIntKey = &ttnpb.KeyEnvelope{Key: generateKey()}
                        device.Session.SessionKeys.NwkSEncKey = &ttnpb.KeyEnvelope{Key: generateKey()}

抄送@rvolosatovs

我认为添加 ( --skip-is ,) --skip-ns--skip-as--skip-js标志可能是一个想法,以允许高级用户跳过创建/更新(IS/)NS/AS/JS。 --skip-is可能有点棘手,我认为我们不应该允许它用于创建。

据我所知,MAC 版本非常有用,也适用于 OTAA 设备。 如果不是现在,将来拥有它仍然很有价值,所以我认为将它保留在原处是明智的。

我认为添加 ( --skip-is ,) --skip-ns--skip-as--skip-js标志可能是一个想法,以允许高级用户跳过创建/更新(IS/)NS/AS/JS。 --skip-is可能有点棘手,我认为我们不应该允许它用于创建。

当有关..._grpc_address为空时跳过它们怎么样?

据我所知,MAC 版本非常有用,也适用于 OTAA 设备。 如果不是现在,将来拥有它仍然很有价值,所以我认为将它保留在原处是明智的。

不知道何时在 JS 上配置设备,例如在选择终端设备固件之前很久就配置安全元素。 JS 也不关心 MAC 版本,它在连接流中与从 NS 中选择的 MAC 版本一起使用。

我认为在决定在哪里创建终端设备时查看地址配置不是一个好主意,很容易犯错误(当忘记配置 env var 时)。 跳过特定服务器类型上的终端设备创建是一种特殊用例,值得明确标记,并且不应在省略某些配置时隐式决定(可能是偶然的)。


删除 MAC 版本超出了 IMO 的范围,应该在继续之前与

跳过特定服务器类型上的终端设备创建是一种特殊用例,值得明确标记,并且不应在省略某些配置时隐式决定(可能是偶然的)。

独立 AS 和独立 JS 不是特殊用例。 让我们为每个组件启用布尔值,然后像控制台一样,默认情况下true

关于lorawan_version - 我同意@johanstokking ,我们只需要在 CLI 中使用它来创建 ABP 设备,所以没有理由要求它。
bool旗帜听起来不错!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

johanstokking picture johanstokking  ·  8评论

adamsondelacruz picture adamsondelacruz  ·  7评论

adriansmares picture adriansmares  ·  8评论

kschiffer picture kschiffer  ·  7评论

rvolosatovs picture rvolosatovs  ·  9评论