Forward join-accept message loop

Hi @Johan_Scheepers In both the tests RSSI was in range of -45 to -40. While connecting to cloud TTN it worked without any issues.

In the localhost setup I’m using docker image version 3.20.2-arm64. Certificates are created with cfssl and these files have permissions for user and group 886:886. (sudo chown 886:886 ./cert.pem ./key.pem)

This is the ttn-lw-stack-docker.yml file

# Identity Server configuration
# Email configuration for "192.168.0.247"
is:
  email:
    sender-name: 'dex'
    sender-address: 'dex@email.com'
    network:
      name: 'Things Net'
      console-url: 'https://192.168.0.247/console'
      identity-server-url: 'https://192.168.0.247/oauth'

  # Web UI configuration for "192.168.0.247":
  oauth:
    ui:
      canonical-url: 'https://192.168.0.247/oauth'
      is:
        base-url: 'https://192.168.0.247/api/v3'

# HTTP server configuration
http:
  cookie:
    block-key: 'd60d57dd7b146cbfbad28369d832913a2bccd4ce2976c4616156f5ea37498449'                # generate 32 bytes (openssl rand -hex 32)
    hash-key: '6f2c5976d35e410e4077fd289b75501342c65fa0029776480c27e48cd40f845e4a4f9f2a8687aabb86b423844b9f421d2241d0ce2ac7217f2c1d38128526119a'                 # generate 64 bytes (openssl rand -hex 64)
  metrics:
    password: 'metrics'               
  pprof:
    password: 'pprof'                 

# If using custom certificates:
tls:
  source: file
  root-ca: /run/secrets/ca.pem
  certificate: /run/secrets/cert.pem
  key: /run/secrets/key.pem


# If Gateway Server enabled, defaults for "192.168.0.247":
gs:
  mqtt:
    public-address: '192.168.0.247:1882'
    public-tls-address: '192.168.0.247:8882'
  mqtt-v2:
    public-address: '192.168.0.247:1881'
    public-tls-address: '192.168.0.247:8881'

# If Gateway Configuration Server enabled, defaults for "192.168.0.247":
gcs:
  basic-station:
    default:
      lns-uri: 'wss://192.168.0.247:8887'
  the-things-gateway:
    default:
      mqtt-server: 'mqtts://192.168.0.247:8881'

# Web UI configuration for "192.168.0.247":
console:
  ui:
    canonical-url: 'https://192.168.0.247/console'
    is:
      base-url: 'https://192.168.0.247/api/v3'
    gs:
      base-url: 'https://192.168.0.247/api/v3'
    gcs:
      base-url: 'https://192.168.0.247/api/v3'
    ns:
      base-url: 'https://192.168.0.247/api/v3'
    as:
      base-url: 'https://192.168.0.247/api/v3'
    js:
      base-url: 'https://192.168.0.247/api/v3'
    qrg:
      base-url: 'https://192.168.0.247/api/v3'
    edtc:
      base-url: 'https://192.168.0.247/api/v3'

  oauth:
    authorize-url: 'https://192.168.0.247/oauth/authorize'
    token-url: 'https://192.168.0.247/oauth/token'
    logout-url: 'https://192.168.0.247/oauth/logout'
    client-id: 'console'
    client-secret: 'console'          # choose or generate a secret

# If Application Server enabled, defaults for "192.168.0.247":
as:
  mqtt:
    public-address: '192.168.0.247:1883'
    public-tls-address: '192.168.0.247:8883'
  webhooks:
    downlink:
      public-address: '192.168.0.247:1885/api/v3'

# If Device Claiming Server enabled, defaults for "192.168.0.247":
dcs:
  oauth:
    authorize-url: 'https://192.168.0.247/oauth/authorize'
    token-url: 'https://192.168.0.247/oauth/token'
    logout-url: 'https://192.168.0.247/oauth/logout'
    client-id: 'device-claiming'
    client-secret: 'device-claiming'          # choose or generate a secret
  ui:
    canonical-url: 'https://192.168.0.247/claim'
    as:
      base-url: 'https://192.168.0.247/api/v3'
    dcs:
      base-url: 'https://192.168.0.247/api/v3'
    is:
      base-url: 'https://192.168.0.247/api/v3'
    ns:
      base-url: 'https://192.168.0.247/api/v3'

RSSI changed

I moved the node much further and now with RSSI between -50 to -60 the issue still remains the same

    "rssi": -56,
   "channel_rssi": -56,
{
  "name": "ns.down.join.schedule.attempt",
  "time": "2022-08-09T20:07:26.359300344Z",
  "identifiers": [
    {
      "device_ids": {
        "device_id": "eui-79739dd7cae90dcf",
        "application_ids": {
          "application_id": "app01"
        },
        "dev_eui": "79739DD7CAE90DCF",
        "join_eui": "0000000000000000"
      }
    }
  ],
  "data": {
    "@type": "type.googleapis.com/ttn.lorawan.v3.DownlinkMessage",
    "raw_payload": "ILvnN4mYQp2sNBjR79AeXM8=",
    "payload": {
      "m_hdr": {
        "m_type": "JOIN_ACCEPT"
      },
      "join_accept_payload": {
        "join_nonce": "000000",
        "net_id": "000000",
        "dev_addr": "012121F8",
        "dl_settings": {
          "rx2_dr": 8
        },
        "rx_delay": 5
      }
    },
    "request": {
      "downlink_paths": [
        {
          "uplink_token": "ChIKEAoEZ3cwMRIIBO9a9gNIok4Q+L+EURoMCPz8ypcGEKPpk+8BIMDBk4v5BA=="
        }
      ],
      "rx1_delay": 5,
      "rx1_data_rate": {
        "lora": {
          "bandwidth": 500000,
          "spreading_factor": 10
        }
      },
      "rx1_frequency": "925100000",
      "rx2_data_rate": {
        "lora": {
          "bandwidth": 500000,
          "spreading_factor": 12
        }
      },
      "rx2_frequency": "923300000",
      "priority": "HIGHEST",
      "frequency_plan_id": "US_902_928_FSB_2"
    },
    "correlation_ids": [
      "gs:conn:01GA23B0D4PSK5TWPFFX0RHNAK",
      "gs:up:host:01GA23B0DT5FF46F081MPNB1DK",
      "gs:uplink:01GA23G5JP667PQZKF4NNS1ACP",
      "ns:downlink:01GA23G7CQZTFNG8G86T5YN11R",
      "ns:transmission:01GA23G7CQ7CHNVBP0N7Z0D04M",
      "ns:uplink:01GA23G5JRZHANAEAQBE52C1W0",
      "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01GA23G5JQF4X579JY1RRG3ENH"
    ]
  },
  "correlation_ids": [
    "gs:conn:01GA23B0D4PSK5TWPFFX0RHNAK",
    "gs:up:host:01GA23B0DT5FF46F081MPNB1DK",
    "gs:uplink:01GA23G5JP667PQZKF4NNS1ACP",
    "ns:downlink:01GA23G7CQZTFNG8G86T5YN11R",
    "ns:transmission:01GA23G7CQ7CHNVBP0N7Z0D04M",
    "ns:uplink:01GA23G5JRZHANAEAQBE52C1W0",
    "rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01GA23G5JQF4X579JY1RRG3ENH"
  ],
  "origin": "d71b89d6ca68",
  "visibility": {
    "rights": [
      "RIGHT_APPLICATION_TRAFFIC_READ"
    ]
  },
  "unique_id": "01GA23G7CQE3X3Z4Q78NKZ2E1T"
}