Subject : SAF(Service Access Facility)

Description :


1.소개
이 과정은 terminal 이나 modem 같은 serial device 를 제어하기위하여 사용되는
command 들을위한 SAF(service access facility) 의 특징을 설명하며 또한
SAF 는 remote print requests 와같은 network services 을 지원한다.

Solaris 2.x 환경은 terminal 과 network device 를 위한 STREAM-based character
I/O 을 사용하며 standard terminal I/O processing 을 위해 ldterm 이라고하는
STREAM module 을 사용하고 이 ldterm 은 line discipline module 라고 알려져있다.

2.SAF Overview
SAF 는 terminal 과 modem access , 그리고 remote print requests 와 같은
network service access 를 control 한다.

SAF는 local 과 network resources 를 비슷한 방법으로 control  한다.

System 관리자는 하나또는 그이상의 port의 service 를 제공하기위해 
SAF's port monitors 를 구성해야한다.

3.SAF 구조

3-1. init process 는 sac 를 invoke, sac 는 saf 의 master process임.
3-2. sac 관현 command 는 port monitor 를 control 하는데 사용됨.
3-3. 하나의 port monitor 는 serial port device 또는 network port 를
     control 하는데 사용됨. 

4. SAC 의 초기화 과정
sac 는 모든 port monitors 의 overseer 이며 이것은 시스템이 /etc/inittab
file 의 하나의 entry 로서 run level 2  로 운용될때 구동된다. 시스템
콘솔을 위해 ttymon port monitor 가 있다.

sac 이 invoke 될었을때, system configuration script(/etc/saf/_sysconfig)
화일을 읽는데 이것은 environment 를 확인하기위해서이고 이것을 다읽은후에는
 administrative file(/etc/saf/_sactab)file 을 읽어 명시된 port monitor 를
구동한다.

sac 은 _sactab file 에 정의된 각 port monitor 를 위한 새로운 child process 
를 생성하며  각 port monitor 는  port monitor directory(zsmon,tcp) 밑의
_pmtab file(administrative) 를 읽어서 각 ports 에 구동할 service 를 확인한다.

5. Port Monitor Types
두개의 port monitor type 이 SAF 하에서 존재하는데 바로 ttymon 과 listen 이다.

5-1. ttymon Monitor
ttymon monitor 는 STREAMS-based TTY port monitor 로서 ports , terminal modes,
baud rates, login process 를 invoke 하며 또한 다른 특별한 service 고 invoke.

sac 하에서 구동되는 ttymon monitor 의 instance 는 sacadm command 로써 구성될수
있으며 multiple ports 도 가능하다. 한번 하나의 port monitor 의 한 instance 가
생성되면,  ttymon 관련 information 인 제공될 service, 추가될 기능을 pmadm 과
ttyadm  command 로써 사용가능하다.

5-2. listen Monitor
sac 하에서 돌아가는 network listener daemon 으로 remote print requests 와 그러한
서비스를 제공하기위해 해당 servers 를 구동하는 일련의 과정과 같은 service 
request 을 위한  network endpoint 상에서 listen 한다.
각 listen 의 instance 는 sacadm command 로써 구성되면 listen-specific 
info (server providing the service) 는 pmadm 과 nlsadmin command 로써 구성됨.

6. TTY Port Monitor 
6-1.Terminal 초기화 과정
 한번 sac 에 의해 ttymon monitor instance 가 invoke 되면, 다음과 같은 과정으로
 해당 port 의 monitoring 을 시작한다.
1) ttymon 은 speed , terminal setting 를 해당포트에 우선 초기화를 한다.
이때 참조하는 화일은 /etc/ttydefs 이다.
2) user input 을 위해 prompt 를 내고 wait 한다.만약 user 가 Break key 를 사용
하여 speed 가 적절하지 않으면 ttymon 은 다음의 speed 를 찾아서 prompt 를 낸다.
3)적절한 input 이 들어오면,ttymon 은 필요하면 /var/adm/utmp entry 를 만들고
service environment 를 확립하고 그 port 에 적절한 service 를 invoke 한다.
4)service 가 끝난후, ttymon 은 /var/adm/utmp entry 를 clean 하고 만약 entry 
가 존재하면 그 port 를 초기상태로 돌린다. 

6-2 using Autobaud
ttymon monitor 는 해당 port 에 autobaud 가 enable 되면 자동적으로 그 port 에 
baud rate 를 결정하게된다. user 는 반드시 ttymon monitor 가 baud rate 와
prompt 를 인식하기전에 Return 를 눌러야된다. 현재, baud rate 는 autobaud
110,1200,2400,4800,9600 에의해 결정되어질수가 있다.

6-3. Bidirectional Service
만약, 하나의 port 가 bidirectional service 로 구성되어있다면, ttymon monitor 는 user 가 하나의 service  에 연결할수있도록 가능하게 한다. 그리고 port 가
free 이면 tip 과 같은 communication commands 가 dialing out 를 할수있도록함.

7.sacadm  command
/usr/sbin/sacadm  command 는 ttymon 과 listen 같은 port monitor 를 더하거나
없애는데 사용된다. 한번, port monitor 의 instance 가 추가되고 그것의 
service 가 정의되면, 시스템이 reboot 후에 다음과 같은 action 이 일어난다.
* sac process 은 /etc/saf/_sactab file 을 읽어 구동될 port monitor 를 알아냄.
* 각각의 port monitor(ex:zsmon,tcp) 의 instance 가 가지고 있는(sub-dir)의
/etc/saf/zsmon/_pmtab or /etc/saf/tcp/_pmtab file 을 읽어서 구동될 service 를
확인한다.
다른 sacadm 기능은 port monitor 의 각각 현재의 상태를 listing 하고 그들의
operational states 를 바꿀수 있다.

*Operational States
sacadm command 는 port monitors 의 각 state 를 control 할수가있다.
1)Port monitors 는 그들이 추가될때에 default  로 구동되고 enable 된다.
2)Port monitors 는 그들이  delete될때   default  로 stop, disable 된다.
3)Port monitors 는 그들이  enable될때   service를 위하여 request 를 accept. 
4)Port monitors 는 그들이  disable될때  existing services를 계속하며
새로운 service 가 추가될때 거절할수가 있다. 
5)모든 port monitor services 는 rmemfdl 죽을때에 종료된.

7-1. Adding ttymon Port Monitors

sacadm command 는 초기에 ttymon port monitor 를 추가하기위해 사용된다.

Command format:
sacadm -a -p pmtag -t type -c command -v version

options:
-a : add option
-p : pmtag(name variable ,  여기서는 zsmon)
-t : port monitor type (ttymon or listen)
-c : port monitor 를 구동할 command string.
-v : port monitor version number (/usr/sbin/ttyadm -V)

Ex:
hyundai3# sacadm -l
PMTAG          PMTYPE         FLGS RCNT STATUS     COMMAND
tcp            listen         -    999  ENABLED    /usr/lib/saf/listen tcp # 
zsmon          ttymon         -    0    ENABLED    /usr/lib/saf/ttymon # 

hyundai3# sacadm -a -p zsmon1 -t ttymon -c /usr/lib/saf/ttymon -v 1

hyundai3# sacadm -l
PMTAG          PMTYPE         FLGS RCNT STATUS     COMMAND
tcp            listen         -    999  ENABLED    /usr/lib/saf/listen tcp # 
zsmon          ttymon         -    0    ENABLED    /usr/lib/saf/ttymon # 
zsmon1         ttymon         -    0    STARTING   /usr/lib/saf/ttymon # 
hyundai3# 


7-2. Listing TTY Monitors
-l option 은 모든 port monitors 의 현재상태를 check.

7-3. Killing a TTY Monitors

hyundai3# sacadm -k -p zsmon0
Invalid request, zsmon0 does not exist
hyundai3# sacadm -k -p zsmon1
hyundai3# sacadm -l -p zsmon1
PMTAG          PMTYPE         FLGS RCNT STATUS     COMMAND
zsmon1         ttymon         -    0    NOTRUNNING /usr/lib/saf/ttymon # 


7-4. Starting a TTY Monitors

hyundai3# sacadm -s -p zsmon1
hyundai3# sacadm -l -p zsmon1
PMTAG          PMTYPE         FLGS RCNT STATUS     COMMAND
zsmon1         ttymon         -    0    STARTING   /usr/lib/saf/ttymon #


7-5. Disabling a TTY Monitors

hyundai3# sacadm -d -p zsmon1
hyundai3# sacadm -l -p zsmon1
PMTAG          PMTYPE         FLGS RCNT STATUS     COMMAND
zsmon1         ttymon         -    0    DISABLED   /usr/lib/saf/ttymon # 

7-6. Enabling a TTY Monitors

hyundai3# sacadm -e -p zsmon1
hyundai3# sacadm -l -p zsmon1
PMTAG          PMTYPE         FLGS RCNT STATUS     COMMAND
zsmon1         ttymon         -    0    ENABLED    /usr/lib/saf/ttymon # 
hyundai3# 

7-7. Removing a TTY Monitors

hyundai3# sacadm -r -p zsmon1
hyundai3# sacadm -l -p zsmon1
Invalid request, zsmon1 does not exist

8.pmadm command

/usr/sbin/pmadm command 는 add or remove  service 와 service 를 enable, disable 
에 사용되는 service administration command 이다.하나의 service 의 각 instance 는
그것의 service tag 에 의해 명시되며 보통 port monitor type 과 그 service 를
사용하는 특정 port 로 구성된다.예를 들면,
tty 라는 service tag 는 serial B 를 위한 service 를 나타냄.

* Service states : Services 는 port monitor 만큼 많은 states 를 가질필요가 없다.즉, 하나의 서비스는 실제적으로 하나의 process 이며 존재하거나 아니면 존재하지
않는다. service 를 관리할때 다음을 기억하라.
1) 하나의 service 의 invocation 은 default 로 그것이 추가될때에 enable 된다.
2) 하나의 service 는 그것이 enable 될때에 operate 된다.
3) 하나의 service 는 그것이 disable 될때에 stop 된다.

8-1.Adding Services to a TTY Monitor
하나의 port monitor 에 service 를 add 하는데 사용하는 command.

Example:

hyundai3#pmadm -a -p zsmon1 -s ttya -i root -fu -v 1 -m "`ttyadm -l 9600 -d /dev/term/a -T tvi925 -i 'terminal disabled' -s /usr/bin/login -S y`"

hyundai3# pmadm -l
PMTAG          PMTYPE         SVCTAG         FLGS ID       
zsmon1         ttymon         ttya           u    root     /dev/term/a - - /usr/bin/login - 9600 - login:  terminal disabled tvi925 y  # 
tcp            listen         lp             -    root     - - p - /var/spool/lp/fifos/listenS5 # 
tcp            listen         lpd            -    root     \x00020203000000000000000000000000 - p - /var/spool/lp/fifos/listenBSD # 
tcp            listen         0              -    root     \x00020ACE000000000000000000000000 - c - /usr/lib/saf/nlps_server # 
zsmon          ttymon         ttyb           u    root     /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login:  - tvi925 y  # 
zsmon          ttymon         ttya           u    root     /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat login:  - tvi925 y  #


Options:
-a : add
-p : port monitor 에 관련된 pmtag
-s : service tag
-i : service 에 할당될 identity.
-f : utmp 를 생성할 tag 인 u, 생성하지않을 x.
-m : ttyadm 관련 command.
-r : 하나의 port 를 위한 service 를 remove.

Service Tags: service tag 와 port monitor tag 의 조합은 uniquely 하나의
service instance 를 나타냄. 이것은  pmadm command 는 service (-s option) 과
port monitor instance (-p options) 은 가능한  service 를 나타내기때문임.

8-1.Listing One service

hyundai3# pmadm -l -s ttya
PMTAG          PMTYPE         SVCTAG         FLGS ID       
zsmon1         ttymon         ttya           u    root     /dev/term/a - - /usr/bin/login - 9600 - login:  terminal disabled tvi925 y  # 
zsmon          ttymon         ttya           u    root     /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat login:  - tvi925 y  #


8-2.Listing All service

hyundai3# pmadm -l -p zsmon
PMTAG          PMTYPE         SVCTAG         FLGS ID       
zsmon          ttymon         ttyb           u    root     /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login:  - tvi925 y  # 
zsmon          ttymon         ttya           u    root     /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat login:  - tvi925 y  #


8-3.Listing All port monitors

hyundai3# pmadm -l -p zsmon
PMTAG          PMTYPE         SVCTAG         FLGS ID       
zsmon          ttymon         ttyb           u    root     /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login:  - tvi925 y  # 
zsmon          ttymon         ttya           u    root     /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat login:  - tvi925 y  #


8-4.Disabling a Service

hyundai3# pmadm -d -p zsmon -s ttya
hyundai3# pmadm -l -p zsmon   
PMTAG          PMTYPE         SVCTAG         FLGS ID       
zsmon          ttymon         ttyb           u    root     /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login:  - tvi925 y  # 
zsmon          ttymon         ttya           ux   root     /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat login:  - tvi925 y  #


8-5.Enabling a Service

hyundai3# pmadm -e -p zsmon -s ttya
hyundai3# pmadm -l -p zsmon
PMTAG          PMTYPE         SVCTAG         FLGS ID       
zsmon          ttymon         ttyb           u    root     /dev/term/b I - /usr/bin/login - 9600 ldterm,ttcompat ttyb login:  - tvi925 y  # 
zsmon          ttymon         ttya           u    root     /dev/term/a I - /usr/bin/login - 9600 ldterm,ttcompat login:  - tvi925 y  #
hyundai3# 

9. TTY Monitor-Specific Command (ttyadm, nlsadmin)

두개의 port monitor types  이 있다.

*ttyadm : TTY monitors 를 구성하기위하여 사용됨
*nlsadmin : network listeners 를 구성하는데 사용됨.

Example:
hyundai3#pmadm -a -p zsmon1 -s ttyc -i root -fu -v 1 -m "`ttyadm -l 9600 -d /dev/term/a -T tvi925 -i 'terminal disabled' -s /usr/bin/login -S y`"

ttyadm Options:
-l : /etc/ttydefs file 의 baud rate)
-d : 그 device 의 full path name
-T : Terminal type name
-i : service 가 disable 될때 표시될 messages.
-s : service program 의 full path name
-S y : software carrier detect 를 turn on.

10. SAF file log information

10-1)/var/saf/_log : sac's log file

hyundai3# pwd
/var/saf
hyundai3# ls -F
_log     tcp/     zsmon/   zsmon1/
hyundai3# 
hyundai3# more _log
.....
Thu Aug  8 12:26:05 1996; 298; *** SAC starting ***
Thu Aug  8 12:26:05 1996; 298; can not open _pid file for 
Thu Aug  8 12:26:05 1996; 298; can not open _pid file for 
Thu Aug  8 12:26:06 1996; 301; starting port monitor 
Thu Aug  8 12:26:06 1996; 298; port monitor  changed state from STARTING to ENABLED
Thu Aug  8 12:35:00 1996; 365; *** SAC starting ***
Thu Aug  8 12:35:00 1996; 367; starting port monitor 
Thu Aug  8 12:35:00 1996; 365; port monitor  changed state from STARTING to ENABLED
.....
10-1)/var/saf/pmtag/_log : pmtag  log file
hyundai3# cd /var/saf
hyundai3# ls
_log    tcp     zsmon   zsmon1
hyundai3# cd zsmon
hyundai3# ls -al
총 70
drwxr-xr-x   2 root     sys          512  8월  8일  11:55 .
drwxr-xr-x   5 bin      bin          512  9월 11일  16:13 ..
-rw-r--r--   1 root     sys        33233  9월 11일  16:35 log

hyundai3# more log
Thu Aug  8 12:26:06 1996; 301;  
Thu Aug  8 12:26:06 1996; 301; ********** ttymon starting **********
Thu Aug  8 12:26:06 1996; 301; PMTAG:            zsmon
Thu Aug  8 12:26:06 1996; 301; Starting state: enabled
Thu Aug  8 12:26:06 1996; 301; Got SC_ENA
.....

11.Summary

11-1)SAF controls terminal and modem access and network service access,
such as remote print requests.

11-2)sac process is started by init from an entry in the /etc/inittab file.

11-3) listen and ttymon port monitors are started by entries in the
sac process' configuration file.

11-4) ttymon port monitor initializes the speed and terminal settings for
each port and then invokes the service when valid input is received.

11-5) sacadm command is used to add an instance of a port monitor

11-6) pmadm command is used to associate a port monitor instance with a service

11-7) ttyadm command is embedded in the pmadm command to format the 
TTY-specific information.


Revision History

작성일자 : 96.09.05
작성자 : 이승훈

수정일자 :
수정자 :