1992.11.16

SUBJECT: MCP Administration 

MEANING OF THIS MEMO:
"SunLink Multiprotocol Communication Processor
 Software Installation and Configuration Guide"를 번역하면서
site 지원시 가졌던 의문의 해결과 경험들을 정리해 보았다.

CONTENTS:
0. Product Overview 
1. Diagnostics
2. Install and Configuration
3. Asynchronous Drivers를 만드는 방법
4. Synchronous Driver를 초기화하는 방법
5. Synchronous Driver를 검증하는 방법
6. Synchronous Driver의 device name을 만드는 방법
7. Diagnostic Commands
   7.1 "syncinit" command
   7.2 "syncloop" command
   7.3 "synstat" command

DESCRIPTION:
0. Product Overview 
   * MCP는 communication ports를 제공하고 또  몇 개의 SunLink product를 지원하는 등
     hardware와 software의 짬뽕을 칭할 때 사용하는 용어이다.
     지원되는 SunLink product란 BSC RJE, DDN, IR, SNA Peer-to-Peer, SNA 3270, X.25이다.
   * MCP는 workstation processor로 부터 low-level communication function들을
     부하 이동(offloading)하여 Sun system의 능력과 performance를 높여준다.
     - off load란 ?  여러 대의 컴퓨터 시스템이 있을 때, 
                     부하량이 작게 걸린 다른 컴퓨터로 작업을 옮기는 것.   
   * MCP가 Sun programming 환경과 결합하였을 때,
     MCP는 multi-vendor 호환이란 측면의 communication 구현에
     강력함과 유연성을 제공한다.                                 
   * VME bus slot 사용이 가능한 Sun-3, Sun-4에 MCP H/W와 S/W의 install이 가능하다.
   * 한 machine에 4개의 MCP board까지 사용 가능
   * 각 board마다
     두 개의 RS-449 port (0, 1 port)
     두 개의 RS-232-C/RS-423 port (2, 3 port)가 있다.
   * +- 각 port의 최대 전송 속도: 
     |      - "RS-232-C/RS-423" port의 경우 38.4 kbits/sec 즉 38,400 bps이다.
     |      - "RS-449" port의 경우 230 kbits/sec 즉 230,000 bps이다.
     +- board 당 최대 전송 속도: 
            500 kbits/sec 즉 500,000 bps이다. 
            board의 최대 전송 속도는  네 개의 port에 분산 할당된다.
            분산 할당의 의미를 예를 들어 설명하면,
            230 kbits/sec에서 동작하는 두 개의 RS-449 port와
            19.2 kbits/sec에서 동작하는 두 개의 RS-232-C port를 가질 수 있다.
            즉 "((230 k * 2) + (19.2 k * 2)) = 498.4 k  <  500 k" 라는 부등식이 성립.
   * 위에서 제시된 MCP board의 각 port의 전송 속도는
     모든 SunLink product들이 지원하는 것은 아니다.
     각 SunLink product의 최대 전송 속도는
     이들 SunLink product의 document를 참조하시라.

1. Diagnostics
   * MCP는 "syncloop"라는 loopback diagnostic command를 제공한다.
     이 "syscloop" test는 processor에서  'loopback 되는 지점'까지를 test한다.
     'loopback 되는 지점'은 internal, loopback plug, local modem, remote modem을 의미하고
     "syncloop" command 에서 mode를 지정함으로써 각각의 test가 가능해 진다.
   * loopback test는 문제가 board, cable, modem, transmission facility 중 
     어디서 발생하는지를 판단하는데 매우 유용하다.
   * MCP board를 설치한 후, board를 끼운 slot에 대응하여 backplane jumper를 제거한다.
     jumper가 적절치 못하면, MCP or SunLink software를 사용할 때
     예상치 못한 interrupt가 계속 발생할 것이다.

2. Install and Configuration
   1) 확인 (Sun4 경우)
          # ls -l /export/exec/sun*
          lrwxrwxrwx 1 root    4 May 24 03:46  /export/exec/sun4 -> /usr
      없으면 symbolic link를 만들어 준다.
          # cd /export/exec
          # ln -s /usr sun4
   2) # extract_unbundled 수행
   3) # cd /usr/sunlink/mcp/sys
      # install.mcp
          ..........
        ┌──────────────────────────┐
        │ Do you need MCP async (ALM-2) devices (yes or no)? │
        └──────────────────────────┘
          asynchronous application이 있어 MCP port 중 어느 하나를 사용하려면 y 를 친다.

          아래의 세 질문은 SunLink gateway product에 의해 사용되는 driver를
          install할지 여부를 묻는다.

        ┌───────────────────────┐
        │ Do you need MCP 'hdlc' devices (yes or no)?  │
        └───────────────────────┘
          HDLC driver는 DDN, IR, OSI, X.25 SunLink product들에 의해 사용된다.
          "syncloop" diagnostic command를 사용할 계획이라면, HDLC driver를 가져야 한다.
          MCP port에서 위의 SunLink product들을 사용할 계획이거나 "syncloop"를 사용하려면
          y 를 치시라.

        ┌───────────────────────┐
        │ Do you need MCP 'sdlc' devices (yes or no)?  │
        └───────────────────────┘
          Peer-to-Peer, SNA 3270 SunLink product가 SDLC driver를 사용한다.
          이들 product들이 MCP port를 사용할 계획이라면 y 를 치시라.

        ┌───────────────────────┐
        │ Do you need MCP 'bsc' devices (yes or no)?   │
        └───────────────────────┘
          BSC driver는 BSC RJE SunLink product에 의해 사용된다.  사용하려면 y 를 치시라.

          아래 표는 SunLink product 각각이 필요로 하는 driver를 요약해 놓았다.
                 ┌─────────┰─────────┐
                 │ SunLink Product  ┃  Required Driver │
                 ┝━━━━━━━━━╋━━━━━━━━━┥
                 │ BSC RJE          ┃  BSC             │
                 ├─────────╂─────────┤
                 │ Peer-to-Peer     ┃  SDLC            │
                 │ SNA 3270         ┃                  │
                 ├─────────╂─────────┤
                 │ DDN, IR          ┃  HDLC            │
                 │ OSI, X.25        ┃                  │
                 └─────────┸─────────┘

   3) 새로운 kernel을 root directory로 copy한 후 rebooting한다.
      # /usr/share/sys/sun4//vmunix /
   4) booting 시 "mcp0 at vme32d16 0x100000 vec 0x8a"와 같은 메시지가 보이면 OK !




3. Asynchronous Drivers를 만드는 방법
   * asynchronous driver를 사용하기 위해 install.mcp를 돌려 환경을 잡았다면,
     아래 명령을 수행하여 /dev directory에 asynchronous driver를 만들어 준다.
       # /dev/MAKEDEV mcp#
     'mcp#'의 #는 0-3까지의 board number를 의미한다.
   * MAKEDEV는 /dev directory에 "ttyLN"의 형태로 entry를 만든다.
     'L'은 mcp board number에 대응하여 h 에서 k까지 표현 가능.
     'N'은  port number로 hexa0-F 까지 표현됨.
        "# /dev/MAKEDEV mcp0" 하면 /dev밑에  ttyh1 - ttyhf 가 만들어 진다.
        "# /dev/MAKEDEV mcp1" 하면 /dev밑에  ttyi1 - ttyif 가 만들어 진다.
        "# /dev/MAKEDEV mcp2" 하면 /dev밑에  ttyj1 - ttyjf 가 만들어 진다.
        "# /dev/MAKEDEV mcp3" 하면 /dev밑에  ttyk1 - ttykf 가 만들어 진다.

   ※ 이 memo는 ALM(Asynchronous Line Multiplexer) board를 설명하는 것이 아님을 기억! 
      ALM board의 경우 16개의 async port가 있어 "# /dev/MAKEDEV mcp0" 하면
      /dev 밑에 ttyh0-ttyhf까지 16개의  device가 생긴다. 
      (ALM board의 device name은 MCP board와 동일하다)

   * MCP의 경우 각 board당 사용할 수 있는 port는 최대 4개임을 상기하시라.
     더우기 4개 중 2, 3번 port 즉 3번째 4번째의 RS-232-C/RS-423 port만을 
     async port로 사용할 수 있다.
     그렇다면 MCP board에서 async port로 사용할 수 있는 device의 이름은
         mcp0의 경우  /dev/ttyh2, /dev/ttyh3 뿐이다.
         mcp1의 경우  /dev/ttyi2, /dev/ttyi3 뿐이다.
         mcp2의 경우  /dev/ttyj2, /dev/ttyj3 뿐이다.
         mcp3의 경우  /dev/ttyk2, /dev/ttyk3 뿐이다.
     이 경우 kernel configuration file의 MCP line의 flags field를 적절히 수정해야 한다.
    ┌───────────────────────────────────────────┐
    │device mcp1 at vme32d16 ? csr 0x01010000 flags 0x1ffff priority 4 vector mcpintr ox8a │
    └───────────────────────────────────────────┘
     default flags field 값은 0x1ffff이다.
     이는 'modem carrier detect signal'이 OFF임을 의미.
     'asynchronous modem'에 연결하려면 이 field의 값이 ON으로 바뀌어야 한다.
     이 field의 값을 ON으로 하려면, 각 port에 따라 달라진다. 아래 표를 참조하시라.
     ┌───────────┰──────┐
     │ MCP port linked to   ┃  Value of  │
     │ 'asynchronous modem' ┃    flags   │
     ┝━━━━━━━━━━━╋━━━━━━┥
     │    port 2            ┃  0x1fffb   │
     │    port 3            ┃  0x1fff7   │
     │    port 2 and 3      ┃  0x1fff3   │
     └───────────┸──────┘

4. Synchronous Driver를 초기화하는 방법
   synchronous serial port를 초기화하기 위한 command로 "syncinit"가 있다.
   data transfer가 시작되기 전에 serial port driver를 초기화하기 위해서는
   system booting시 "syncinit"이 수행될 필요가 있다.
   SunLink product는 "syncinit"를 자동적으로 수행하는 script를 가진다.

5. Synchronous Driver를 검증하는 방법
   아래 것은 single mcp board를 가지고 SDLC와 HDLC device driver를 install한 경우
   보여지는 결과이다.
   # netstat -i -a
     Name   Mtu    Net/Dest    Address    Ipkts   Ierrs  Opkts  Oerrs Collis Queue
     ie0    1500   swp-2a      xinu       1611877 0      87347  2     11653  0
     mcph0  1152                          101     0      101    0     0      0
     mcps0  267                           0       0      0      0     0      0
     mcph1  1152                          0       0      0      0     0      0
     mcps1  267                           0       0      0      0     0      0
     mcph2  1152                          10001   0      10001  0     0      0
     mcps2  267                           0       0      0      0     0      0
     mcph3  1152                          1001    0      1001   0     0      0
     mcps3  267                           0       0      0      0     0      0
     lo0    1536   loopback     localhost 3756    0      3756   0     0      0
     ifd0   4096                          11103   0      11103  0     0      0

6. Synchronous Driver의 device name을 만드는 방법
   * synchronous driver의 device name은 mcp로 시작한다.
     mcp뒤에 HDLC는 h가 SDLC는 s가 BSC는 b가 붙는다.  즉 mcph, mcps, mcpb 등이다.
     또 이들 뒤에 port number가 붙는다.
     아래 표는 HDLC driver를 사용하는 경우이다.
     SDLC, BSC의 경우는 "Port Name" field의 h 대신 s나 b를 주면 된다.

        ┌───┰───┰───┰────────┰─────┰────┐
        │Board ┃Port  ┃Port  ┃ Netstat Symbol ┃  Port    ┃board의 │
        │      ┃Number┃Name  ┃                ┃  Type    ┃port순서│
        ┝━━━╇━━━╇━━━╇━━━━━━━━╇━━━━━╇━━━━┥
        │ mcp0 │  0   │mcph0 │     mcph0      │ RS-449   │ 첫번째 │
        │      │  1   │mcph1 │     mcph1      │ RS-449   │ 세번째 │
        │      │  2   │mcph2 │     mcph2      │ RS-232-C │ 두번째 │
        │      │  3   │mcph3 │     mcph3      │ RS-232-C │ 네변째 │
        ├───┼───┼───┤                │          │        │
        │ mcp1 │  4   │mcph4 │     mcph4      │ RS-449   │ 첫번째 │
        │      │  5   │mcph5 │     mcph5      │ RS-449   │ 세번째 │
        │      │  6   │mcph6 │     mcph6      │ RS-232-C │ 두번째 │
        │      │  7   │mcph7 │     mcph7      │ RS-232-C │ 네번째 │
        ├───┼───┼───┤                │          │        │
        │ mcp2 │  8   │mcph8 │     mcph8      │ RS-449   │ 첫번째 │
        │      │  9   │mcph9 │     mcph9      │ RS-449   │ 세번째 │
        │      │      ├───┼────────┤          │        │
        │      │  10  │mcph10│     mcph:      │ RS-232-C │ 두번째 │
        │      │  11  │mcph11│     mcph;      │ RS-232-C │ 네번째 │
        ├───┼───┼───┤                │          │        │
        │ mcp3 │  12  │mcph12│     mcph<      │ RS-449   │ 첫번째 │
        │      │  13  │mcph13│     mcph=      │ RS-449   │ 세번째 │
        │      │  14  │mcph14│     mcph>      │ RS-232-C │ 두번째 │
        │      │  15  │mcph15│     mcph?      │ RS-232-C │ 네번째 │
        └───┴───┴───┴────────┴─────┴────┘

   * 예를 들어 보면,
     -  "mcpb7" 은 두번째 board(mcp1)의 네번째 port(port number 7)로서
        BSC driver를 사용할 때 사용한다는 의미. 
     -  "mcps?" 는 네번째 board(mcp3)의 네번째 port(port number 15)로서 
        SDLC driver를 사용할 때 사용한다는 의미.

   * 위 표에서 보았듯이 'port name으로 사용되는 port number'는
     'board 자체의 port number'와는 아무 상관이 없다.
     'board 자체의 port number'는 각 board마다 0-3까지 numbering된다.
     - port 0,1 : RS-449
     - port 2,3 : RS-232-C

                 mcp0       mcp1       mcp2       mcp3
               ┌──┐   ┌──┐   ┌──┐   ┌──┐
               │    │   │    │   │    │   │    │
        port0  │ ● │   │ ● │   │ ● │   │ ● │  RS-449
               │    │   │    │   │    │   │    │
        port2  │ ● │   │ ● │   │ ● │   │ ● │  RS-232-C/RS-423
               │    │   │    │   │    │   │    │
        port1  │ ● │   │ ● │   │ ● │   │ ● │  RS-449
               │    │   │    │   │    │   │    │
        port3  │ ● │   │ ● │   │ ● │   │ ● │  RS-232-C/RS-423
               │    │   │    │   │    │   │    │
               └──┘   └──┘   └──┘   └──┘

     예를 들어 보면,(Sun Manual에 잘못되어 있던 것을 수정한 것임)
     -  "mcph6" 은 '두번째 board(mcp1)의 세번째 port'(= port2 = port number 6)
        즉 RS-232-C port로 HDLC driver를 사용할 때 사용한다는 의미.
     -  "mcps8" 은 '세번째 board(mcp2)의 첫번째 port'(= port0 = port number 8)
        즉 RS-449로 SDLC driver를 사용할 때 사용한다는 의미.

7. Diagnostic Commands
   * "syncinit"는 synchronous serial port를 초기화한다.
     "syncloop", "syncstat"는 'synchronous MCP port'를 사용하는 application에서 발생하는
     문제를 진단하고 해결할 때 사용된다.
   * 앞서 언급했던 MCP port name은 이들 command를 사용할 때 필요할 것이다.
   * 현재 release(SunLink 6.0)에선, "syncloop"가 HDLC driver에서만 동작한다.
     따라서 "syncloop" command line에선 mcph# 만이 사용될 것. (mcps#, mcpb#등은 안됨)

   7.1 "syncinit" command
       * /usr/sunlink/sync/syncinit는 synchronous serial line의 clocking parameter를
         초기화하고 제어한다.
         data 전송이 일어나기 전에 serial port driver를 초기화하려면,
         system booting시에 이 command를 실행해야 한다.
 
        ┌───────────────────────────┐
        │ atom# syncinit mcph1                                 │
        │ speed=9600, loolback=no, nrzi=no, txc=txc, rxc=rxc   │
        └───────────────────────────┘

        ┌───────────────────────────┐
        │ atom# syncinit  [speed=] \          │
        │    [loopback=[yes|no]] \                             │
        │    [nrzi=[yes|no]] \                                 │
        │    [txc=[txc|rxc|baud]] \                            │
        │    [rxc=[rxc|txc|baud]]                              │
        └───────────────────────────┘
       * speed :
         - serial line의 speed.   bit per second
         - 대부분 실제 line speed는 Sun hardware가 아니라 modem에 의해 결정된다.
           ☆ 매우 빠른 speed를 주기 위해 syncinit를 사용할 때,
              실제 speed는 의도했던 것과는 다를 수 있다.
              이는 speed가 serial chip clocking frequency의 
              가장 가까운 integral multiple(?)로 짤려지기(rounded to) 때문이다.
       * loopback :
         - serial chip의 internal loopback 상태를 set하고 보여 준다.
         - internal loopback은 external loopback 장비를 붙이지 않고
           serial port를 test하는데 유용하다.
         - 뒤에서 볼 syncloop command는 loopback testing에서
           port를 초기화하기 위해 syncinit를 실행한다.
       * nrzi :
         - 이 parameter는 transmit시에 encoding하고 receive할 때 decoding하는
           NRZI(non-return-to-zero inverted) 사용을 제어한다.
         - NRZI encoding은 어떤 modem을 사용할 때 필요할 것이다.
         - NRZI encoding의 default value "nrzi=no" 의 사용을 권고한다.
         - 이 parameter는 point-to-point link의 양쪽 끝 모두에 동일하게 set되어야 한다.
       * txc, rxc :
         - 이 parameter는 전송되고 수신되는 data의 각각의 clocking이
           어디에서 비롯되는지 즉 origin이 어디인지를 set하는 것이다.
         - 각 colck은 txc, rxc, baud 중 하나를 선택할 수 있다.
           그 의미는 txc : imcoming transmit clock  (modem clock)
                     rxc : imcoming receive clock  (modem clock)
                     baud : internal baud rate generator  (system clock)
         - local port들과 MCP의 네 개 port 모두의 default는 "txc=txc", "rxc=rxc"이다.
         - syncinit command에서 "txc=baud"와 speed parameter는
           modem clocking이 아닌 data rate를 제어한다.
           ☆ "rxc=baud"는 모든 MCP port에서 지원되기는 하지만
              internal loopback mode(loopback=yes)와 함께 사용될 때만 유용할 것이다.
         - 'sender clocking'이란
           modem의 개입이나 modem eliminator 없이 test하고자 하는 두 system간의
           cabling만으로 test가 가능한 방법.  clocking configuration의 한 방법임.
           'sender clocking'을 configure하기 위해선 "txc=baud", "rxc=rxc"를 set한다. 
           이는 수신쪽에서 receive clock으로 받을 수 있는 clock signal을
           송신쪽에서 생성하게끔 해준다. 
         - 'data flow의 각 방향은 독립적인 clocking을 가진다'는 점을 꼭 기억하시라!
           (그러므로 두 방향은 다른 speed를 가질 수 있고,
           각 system의 "speed" option에 의해 양 방향 각각의 speed가 결정된다.)

   7.2 "syncloop" command
       * 이 command는 loopback test를 수행하고
         아래의 요소들을 check한다.
         - software configuration
         - CPU to MCP board communication
         - the correct operation of the MCP board
         - the RS-232-C or RS-449 ports and cables
         - the local and remote modems
         - the phone line
       * "syncloop"는 지정된 MCP port에 "ifd" device를 연결하기 위해 
         "iflayer" command를 부른다. 
         그리고 나서 대부분의 경우 serial port를 초기화하기 위한 
         "syncinit" command를 수행하고 packet을 내보낸다.
         다음으로 "syncloop"는 수신되는 것을 검사하기 위해 imcoming packet들을 읽어들인다.
       * "ifd" device는 공유될 수 없다.
         동시에 두 개의 "syncloop"를 수행하거나
         다른 SunLink product가 동일 machine에서 수행되는 동안 "syncloop"를 사용하려 한다면,
         "device busy" message를 만날 수 있다.
         이런 경우를 만나면 다음에 설명할 "netstat" command를 써서
         어떤 "ifd" device가 사용중에 있는지를 확인하시라.
         "ifd" device의 이름은 "ifd#"의 형태를 가지고 #는 0-15까지의 수를 나타낸다.
       * "syncloop" format 
        ┌───────────────────────────┐
        │ atom# syncloop [options]                   │
        └───────────────────────────┘
         은 앞서 설명했고
         "syncloop"는 HDLC driver(mcph[0-15])에서만 동작한다는 것도 역시 앞에서 설명했다. 
         SDLC, BSC driver에서 이 명령을 사용하면 error message가 뜰 것이다.

       * Options to the "syncloop" command
        ┌──────────────────────────────────┐
        │Options    Parameter                Descripiton                     │
        ┝━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┥
        │ -i      ifd_number      "ifd" device가 사용할 것을 명시한다.       │
        │                         default device가 /dev/ifd0 ( -i 0 )이다.   │
        │                                                                    │
        │ -c      packet_count    data 전송시 사용하는 packet 수를 양수로    │
        │                         표시하며 default는 100이다.                │
        │                                                                    │     
        │ -l      packet_length   양수로 byte로 packet length를 표시한다.    │
        │                         default는 100이고 사용자가 정의할 수 있는  │
        │                         최대 packet length는 1152이다.             │
        │                                                                    │       
        │ -s      line_speed      Bit rate in bits/sec.                      │
        │                                                                    │        
        │ -t      test_type       다음에 설명될 test environment를 의미하며  │
        │                         1-4까지 option이 있다.                     │
        │                                                                    │  
        │ -d      hex_data_byte   각 packet의 byte 내용으로서 hexadecimal    │
        │                         number를 명시한다.                         │
        │                         default는 사용될 random data이다.          │
        │                                                                    │ 
        │ -v                      vervose mode.  data error가 발생하면       │
        │                         받은 data가 display된다.                   │
        └──────────────────────────────────┘

       * 다음은 test_type option 없이 "syncloop"만을 치면 display되는 것을 보여준다.
        ┌───────────────────────────┐
        │ atom# syncloop mcph1                                 │
        │ [Using /dev/ifd0 ]                                   │
        │ [iflayer ifd0 mcph1 ]                                │
        │ Enter test type:                                     │
        │ 1: Internal Test                                     │
        │ 2: Test using loopback plugs                         │
        │ 3: Test using local or remote modem loopback         │
        │ 4: Other, previously set, special mode               │
        │ >                                                    │
        └───────────────────────────┘

       * 각 test_type option에서 필요한 장비
        ┌──────────────────┐
        │ Test Option    Equipment           │
        ┝━━━━━━━━━━━━━━━━━━┥
        │ Option 1       none needed         │
        │ Option 2       loopback plug       │
        │ Option 3       modem(s)            │
        │ Option 4       uses previous setup │
        └──────────────────┘
     
       * test_type Options
         1) Test Option 1 - Internal Test
            - 이 option은 "internal clocking"과 internal loopback을 사용하고
            - 아래 "syncinit" command를 수행시킨다.
              ┌─────────────────────────────┐
              │ syncinit   loop=yes txc=baud rxc=baud   │
              └─────────────────────────────┘
            - test data packet은 해당 MCP port로 보내질 것이고 내부적으로 looped back될 것이다.
         2) Test Option 2 - Test Loopback Plugs
            - 이 option은 "internal clocking"을 사용하고 아래 "syncinit" command를 수행시킨다.
              ┌─────────────────────────────┐
              │ syncinit   loop=no txc=baud rxc=rxc     │
              └─────────────────────────────┘
            - test data packet은 CPU와 MCP port간을 loopback plug를 통과해 돌아올 것이다.
            - 이 option을 사용하기 전에,
              테스할 port에 적절한 loopback plug(RS-232-C or RS-449)를 설치하시라.
         3) Test Option 3 - Test Local or Remote Modem Loopback
            - 이 option은 modem에 의해 setting되는 "external clocking"을 사용하고
              아래 "syncinit" command를 수행시킨다.
              ┌─────────────────────────────┐
              │ syncinit   loop=no txc=txc rxc=rxc      │
              └─────────────────────────────┘
            - 이 option을 사용하기 전에 하고자 하는 테스트에 맞춰 local/remote modem을 setting한다.
            - local modem이 loopback point가 된다면, local modem을 local loopback으로 setting한다.
            - remote modem이 loopback point가 된다면, local modem을 normal mode로 setting하고
              remote modem을 remote loopback으로 setting한다.
            - local/remote loopback mode로 modem을 test하는 것은 
              MCP port와 external cable을 체크할 뿐 아니라 modem의 적절한 동작을 함께 검증한다.
            - 대부분의 synchronous modem은 'local loopback(= analog loopback)'과
              'remote loopback (= digital loopback)'을 지원한다.
              전화선 양 끝에 있는 두 modem을 제어할 수 있을 때, 
              traffic generator로써 local Sun Workstation을 사용하여 완벽한 test가 가능하다. 
            - 가장 포괄적인 테스트로서의 이 option은
              normal mode에서 local modem의 사용시 이상 여부,
              전화선이나 전용선과 같은 transmission facility이상 유무,
              remote loopback mode에서 remote modem operating의 이상 여부 등을 테스트 한다.
            - "syncloop"는 local과 remote modem loopback testing을 동일하게 취급한다.
              이는 두 경우 모두 modem에 의해 clocking이 제공되기 때문이다.
              즉 modem clock을 사용하기 때문이란 것이다.
              data가 local/remote modem을 통해 loopback되고 안되고는 
              modem이 어떻게 setup되 있는지에 달려 있다.  
              만약 local modem loopback test가 성공하고 remote modem loopback이 실패하면 
              전화선이나 양쪽 modem들을 주의깊게 check해 보시라.
         4) Test Option 4 - Use Previously Set Mode
            앞의 세가지 "syncloop" test option 먹히지 않는 port에 대해 이 option을 사용.
            이 option에는 automatic "syncinit" 실행이 없다.
            따라서 "syncinit"를 먼저 수행시키고 나서
            나름대로의 clocking과 loopback option들을 지정하여 "syncloop"를 사용해야 한다.

   7.3 "synstat" command
       * synchronous serial line의 performance와 error의 통계를 얻는데 사용된다.
       * 첫 번째 argument는 항상 serial port의 이름이다.
         그외의 다른 argument 없이 "syncstat"를 실행시키면
         system booting 이후 기록된 통계를 볼 수 있다.
         예를 들어
         ┌─────────────────────────────────┐
         │ atom# syncstat mcps1                                             │
         │ speed  ipkts  opkts  undrun  ovrrun  abort  crc  isize  osize    │
         │ 9600   15716  17121       0       0      1    3     98     89    │
         └─────────────────────────────────┘
       * "speed" field는 "syncinit"에 의해 setting되는 line speed이다.
       * 정확한 통계를 얻기 위해서는, modem clocking인 경우,
         modem clocking에 일치하는 값인지를 확인하여야 한다.
       * 그 외 field를 살펴 보면
            - "ipkts"는 input packet의 total 갯수이다.
            - "opkts"는 output packet의 total 갯수이다.
            - "undrun"는 transmitter underrun error의 갯수이다.
            - "ovrrun"는 receiver overrun error의 갯수이다.
            - "abort"는 abort된 received frame의 갯수이다.
            - "crc"는 CRC error(error detection method)에서 받은 frame의 갯수
            - "isize"는 input packet의 평균 size이다.
            - "osize"는 output packet의 평균 size이다.
       * "syncstat" command에