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 IDzsmon1 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 작성자 : 이승훈 수정일자 : 수정자 :