ACK Timeout / Session Timeout

Hello,

We have recently been trying to get our ACS working with NuCom routers (https://nucom.es/) and have been having some trouble with timeouts.

We decided to Port Mirror the WAN Ethernet so that we could see how the connection between the ACS and Router looked.

image

The router would get to a point in our provisioning script but would then seem to just stop responding. After checking the wireshark capture we saw that there was a time when the Router stopped sending packets for 5 seconds but then started again. It seems that the ACS, after seeing that the router hadn’t sent any packets duirng these 5 seconds decided that the comunication with the router had finished. This then causes a timeout in the cwmp-access log.

I have tried looking at the General Config Page (https://github.com/genieacs/genieacs/wiki/GenieACS-General-Config) and the config.coffee files to see if there was any sign of a “after 5 seconds kill connection” like code, but I haven’t managed to see anything.

Does anyone know why this might be happening and how I can fix it?

Thanks,
James

This is because of the keep-alive timeout which is 5 seconds. This shouldn’t be an issue if you go by the spec. The CPE should initiate a new TCP connection to continue the session.

See: https://nodejs.org/api/http.html#http_server_keepalivetimeout

Patch lib/server.coffee and see if that helps. I can add a config option to override the default keep-alive timeout.

Hi Zaid,

Thanks for the quick reply. The way I have done it is editting lib/server.coffee:

setTimeout(() ->
return if not callback

# Ignore HTTP requests from connection that may still be open
server.removeListener('request', listener)
server.setTimeout(1)
server.keepAliveTimeout(10000)

cb = callback
callback = null
setTimeout(cb, 1000)

Could you confirm that this is the way to do it?

Thank you,
James

Not quite. Add the following line:

server.keepAliveTimeout = 10000

Just before line starting with “server.listen(…”

Thanks Zaid,

With that it is now working :grinning:

Although, instead of lib/server.coffee we had to patch server.js

db.connect(function(err) {
  if (err) {
    throw err;
  }
  return cache.connect(function(err) {
    if (err) {
      throw err;
    }
    server.keepAliveTimeout = 10000;
    return server.listen(port, networkInterface);
  });
});

Thank you very much for your quick response.

James