### Serial connection ¶

It is not trivial to run online `nncp-daemon`, `nncp-call` and `nncp-caller` commands over the serial link, because it is link without built-in error detection. For efficient usage you have to use some kind of window-sliding error correction protocol, like Kermit, ZMODEM, UUCP’s g-protocol and similar well known ones.

However TCP is already satisfying and existing protocol for the same purposes. So it would be more easier to bring up the IP interconnection and use TCP over it. Most distributions already have PPP protocol out-of-box.

Ordinary man page for `ppp` in FreeBSD is enough for being able to setup it:

- Enable PPP-aware default terminal to run `ppplogin` script:

      /etc/gettytab:
          default:pp=/usr/local/bin/ppplogin:...

      /usr/local/bin/ppplogin:
          #!/bin/sh
          exec /usr/sbin/ppp -direct incoming

- Enable listening on necessary UART:

      /etc/ttys:
          ttyU0 "/usr/libexec/getty 3wire.115200" vt100 on

- Create `incoming` PPP profile, allowing authenticated `ppp` user to log in:

      /etc/ppp/ppp.conf:
          incoming:
              allow ppp
              disable deflate pred1 mppe protocomp vjcomp ipcp dns
              enable lqr # null-modem cables might not have carrier detection
      /etc/ppp/ppp.secret:
          ppp	PASSWORD

- Configure PPP client to access that server:

      /etc/ppp/ppp.conf:
          outgoing:
              set device /dev/cuaU0
              set speed 115200
              set dial
              set login
              set authname ppp
              set authkey PASSWORD
              disable deflate pred1 mppe protocomp vjcomp ipcp dns
              enable lqr

That configuration does not negotiate any kind of IPv4 addresses, routing or DNS servers. Also all compression is turned off, because NNCP’s traffic is encrypted and uncompressible. Only IPV6CP will negotiate IPv6 link-local addresses, on which you can run multicast discovered daemons for simplicity.