NordicSemiconductor / NAT-TestServer

Receives NAT test messages from the NAT-TestFirmware and logs them and timeout occurances to S3
BSD 3-Clause "New" or "Revised" License
3 stars 0 forks source link

Run the server anywhere #12

Open metc opened 4 years ago

metc commented 4 years ago

Hi,

This is an interesting project. It is necessary to know and understand NAT timeouts and the values configured by each carrier when developing cellular-IoT applications in order to configure the keepalive value correctly and save power on the client-side (embedded device running on battery).

Example use-case: for quick tests in the field, I can run the client and connect to a know IPv4 or IPv6 address. I do not necessarily need DNS. I get logs from the client application and I should be able to find the NAT timeout value without logs from the server.

I see that the server is tightly coupled to a cloud provider, AWS in this case. Would it be possible to provide a version of the server application (as a native Go application or as a Docker image) that I could run anywhere (on any Linux host or Docker platform)? Server-side logs could simply be printed to stdout or to a file.

I am asking for a more simple version compared to what you already provide.

Nother question: the imei (part of the scheme) can be used to identify each client. Does the server support multiple connections (I did not look at the server implementation yet)?

coderbyheart commented 4 years ago

Example use-case: for quick tests in the field, I can run the client and connect to a know IPv4 or IPv6 address. I do not necessarily need DNS. I get logs from the client application and I should be able to find the NAT timeout value without logs from the server.

You can achieve your quick test using our existing server (nat-test.thingy.rocks) by observing the logs on the device side, it will print the discovered timeouts.

I see that the server is tightly coupled to a cloud provider, AWS in this case. Would it be possible to provide a version of the server application (as a native Go application or as a Docker image) that I could run anywhere (on any Linux host or Docker platform)? Server-side logs could simply be printed to stdout or to a file.

Yes, this is easily possible (and where we originally started): the saveLog routine can be replaced with a simpler variant that logs to stdout:

https://github.com/NordicSemiconductor/NAT-TestServer/blob/b31c0a3929b33f1b96442bac7da39005438aef89/server.go#L73

Nother question: the imei (part of the scheme) can be used to identify each client. Does the server support multiple connections (I did not look at the server implementation yet)?

Yes, the IMEI is just informative, the server handles connections based on UDP/TCP source addresses and handles multiple connections concurrently.