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
ÀÛ¼ºÀÚ : À̽ÂÈÆ

¼öÁ¤ÀÏÀÚ :
¼öÁ¤ÀÚ :