updating cwfs and moving installer in /rc/bin
This commit is contained in:
parent
7208d528bd
commit
67e93d6a0a
96 changed files with 549 additions and 1170 deletions
0
sys/lib/dist/pc/inst/bootfloppy → rc/bin/inst/bootfloppy
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootfloppy → rc/bin/inst/bootfloppy
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootplan9 → rc/bin/inst/bootplan9
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootplan9 → rc/bin/inst/bootplan9
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootsetup → rc/bin/inst/bootsetup
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootsetup → rc/bin/inst/bootsetup
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootwin9x → rc/bin/inst/bootwin9x
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootwin9x → rc/bin/inst/bootwin9x
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootwinnt → rc/bin/inst/bootwinnt
Normal file → Executable file
0
sys/lib/dist/pc/inst/bootwinnt → rc/bin/inst/bootwinnt
Normal file → Executable file
0
sys/lib/dist/pc/inst/configarch → rc/bin/inst/configarch
Normal file → Executable file
0
sys/lib/dist/pc/inst/configarch → rc/bin/inst/configarch
Normal file → Executable file
0
sys/lib/dist/pc/inst/configdist → rc/bin/inst/configdist
Normal file → Executable file
0
sys/lib/dist/pc/inst/configdist → rc/bin/inst/configdist
Normal file → Executable file
0
sys/lib/dist/pc/inst/configether → rc/bin/inst/configether
Normal file → Executable file
0
sys/lib/dist/pc/inst/configether → rc/bin/inst/configether
Normal file → Executable file
0
sys/lib/dist/pc/inst/configfs → rc/bin/inst/configfs
Normal file → Executable file
0
sys/lib/dist/pc/inst/configfs → rc/bin/inst/configfs
Normal file → Executable file
0
sys/lib/dist/pc/inst/configip → rc/bin/inst/configip
Normal file → Executable file
0
sys/lib/dist/pc/inst/configip → rc/bin/inst/configip
Normal file → Executable file
0
sys/lib/dist/pc/inst/confignet → rc/bin/inst/confignet
Normal file → Executable file
0
sys/lib/dist/pc/inst/confignet → rc/bin/inst/confignet
Normal file → Executable file
0
sys/lib/dist/pc/inst/configppp → rc/bin/inst/configppp
Normal file → Executable file
0
sys/lib/dist/pc/inst/configppp → rc/bin/inst/configppp
Normal file → Executable file
0
sys/lib/dist/pc/inst/copydist → rc/bin/inst/copydist
Normal file → Executable file
0
sys/lib/dist/pc/inst/copydist → rc/bin/inst/copydist
Normal file → Executable file
0
sys/lib/dist/pc/inst/defs → rc/bin/inst/defs
Normal file → Executable file
0
sys/lib/dist/pc/inst/defs → rc/bin/inst/defs
Normal file → Executable file
0
sys/lib/dist/pc/inst/download → rc/bin/inst/download
Normal file → Executable file
0
sys/lib/dist/pc/inst/download → rc/bin/inst/download
Normal file → Executable file
0
sys/lib/dist/pc/inst/finish → rc/bin/inst/finish
Normal file → Executable file
0
sys/lib/dist/pc/inst/finish → rc/bin/inst/finish
Normal file → Executable file
0
sys/lib/dist/pc/inst/fmtfossil → rc/bin/inst/fmtfossil
Normal file → Executable file
0
sys/lib/dist/pc/inst/fmtfossil → rc/bin/inst/fmtfossil
Normal file → Executable file
0
sys/lib/dist/pc/inst/fmtventi → rc/bin/inst/fmtventi
Normal file → Executable file
0
sys/lib/dist/pc/inst/fmtventi → rc/bin/inst/fmtventi
Normal file → Executable file
0
sys/lib/dist/pc/inst/gui → rc/bin/inst/gui
Normal file → Executable file
0
sys/lib/dist/pc/inst/gui → rc/bin/inst/gui
Normal file → Executable file
0
sys/lib/dist/pc/inst/halt → rc/bin/inst/halt
Normal file → Executable file
0
sys/lib/dist/pc/inst/halt → rc/bin/inst/halt
Normal file → Executable file
0
sys/lib/dist/pc/inst/hasmbr → rc/bin/inst/hasmbr
Normal file → Executable file
0
sys/lib/dist/pc/inst/hasmbr → rc/bin/inst/hasmbr
Normal file → Executable file
0
sys/lib/dist/pc/inst/hdrs → rc/bin/inst/hdrs
Normal file → Executable file
0
sys/lib/dist/pc/inst/hdrs → rc/bin/inst/hdrs
Normal file → Executable file
0
sys/lib/dist/pc/inst/is9660 → rc/bin/inst/is9660
Normal file → Executable file
0
sys/lib/dist/pc/inst/is9660 → rc/bin/inst/is9660
Normal file → Executable file
0
sys/lib/dist/pc/inst/isext2 → rc/bin/inst/isext2
Normal file → Executable file
0
sys/lib/dist/pc/inst/isext2 → rc/bin/inst/isext2
Normal file → Executable file
0
sys/lib/dist/pc/inst/isfat → rc/bin/inst/isfat
Normal file → Executable file
0
sys/lib/dist/pc/inst/isfat → rc/bin/inst/isfat
Normal file → Executable file
0
sys/lib/dist/pc/inst/isfossil → rc/bin/inst/isfossil
Normal file → Executable file
0
sys/lib/dist/pc/inst/isfossil → rc/bin/inst/isfossil
Normal file → Executable file
0
sys/lib/dist/pc/inst/isventi → rc/bin/inst/isventi
Normal file → Executable file
0
sys/lib/dist/pc/inst/isventi → rc/bin/inst/isventi
Normal file → Executable file
0
sys/lib/dist/pc/inst/isventiarenas → rc/bin/inst/isventiarenas
Normal file → Executable file
0
sys/lib/dist/pc/inst/isventiarenas → rc/bin/inst/isventiarenas
Normal file → Executable file
0
sys/lib/dist/pc/inst/isventiisect → rc/bin/inst/isventiisect
Normal file → Executable file
0
sys/lib/dist/pc/inst/isventiisect → rc/bin/inst/isventiisect
Normal file → Executable file
0
sys/lib/dist/pc/inst/main → rc/bin/inst/main
Normal file → Executable file
0
sys/lib/dist/pc/inst/main → rc/bin/inst/main
Normal file → Executable file
0
sys/lib/dist/pc/inst/mainloop → rc/bin/inst/mainloop
Normal file → Executable file
0
sys/lib/dist/pc/inst/mainloop → rc/bin/inst/mainloop
Normal file → Executable file
0
sys/lib/dist/pc/inst/mkini.awk → rc/bin/inst/mkini.awk
Normal file → Executable file
0
sys/lib/dist/pc/inst/mkini.awk → rc/bin/inst/mkini.awk
Normal file → Executable file
0
sys/lib/dist/pc/inst/mountdist → rc/bin/inst/mountdist
Normal file → Executable file
0
sys/lib/dist/pc/inst/mountdist → rc/bin/inst/mountdist
Normal file → Executable file
0
sys/lib/dist/pc/inst/mountfossil → rc/bin/inst/mountfossil
Normal file → Executable file
0
sys/lib/dist/pc/inst/mountfossil → rc/bin/inst/mountfossil
Normal file → Executable file
0
sys/lib/dist/pc/inst/mountfs → rc/bin/inst/mountfs
Normal file → Executable file
0
sys/lib/dist/pc/inst/mountfs → rc/bin/inst/mountfs
Normal file → Executable file
0
sys/lib/dist/pc/inst/moveoldfs → rc/bin/inst/moveoldfs
Normal file → Executable file
0
sys/lib/dist/pc/inst/moveoldfs → rc/bin/inst/moveoldfs
Normal file → Executable file
0
sys/lib/dist/pc/inst/partdisk → rc/bin/inst/partdisk
Normal file → Executable file
0
sys/lib/dist/pc/inst/partdisk → rc/bin/inst/partdisk
Normal file → Executable file
0
sys/lib/dist/pc/inst/prepdisk → rc/bin/inst/prepdisk
Normal file → Executable file
0
sys/lib/dist/pc/inst/prepdisk → rc/bin/inst/prepdisk
Normal file → Executable file
0
sys/lib/dist/pc/inst/replcfg → rc/bin/inst/replcfg
Normal file → Executable file
0
sys/lib/dist/pc/inst/replcfg → rc/bin/inst/replcfg
Normal file → Executable file
0
sys/lib/dist/pc/inst/startether → rc/bin/inst/startether
Normal file → Executable file
0
sys/lib/dist/pc/inst/startether → rc/bin/inst/startether
Normal file → Executable file
0
sys/lib/dist/pc/inst/startppp → rc/bin/inst/startppp
Normal file → Executable file
0
sys/lib/dist/pc/inst/startppp → rc/bin/inst/startppp
Normal file → Executable file
0
sys/lib/dist/pc/inst/startwin → rc/bin/inst/startwin
Normal file → Executable file
0
sys/lib/dist/pc/inst/startwin → rc/bin/inst/startwin
Normal file → Executable file
0
sys/lib/dist/pc/inst/stop → rc/bin/inst/stop
Normal file → Executable file
0
sys/lib/dist/pc/inst/stop → rc/bin/inst/stop
Normal file → Executable file
0
sys/lib/dist/pc/inst/stopether → rc/bin/inst/stopether
Normal file → Executable file
0
sys/lib/dist/pc/inst/stopether → rc/bin/inst/stopether
Normal file → Executable file
0
sys/lib/dist/pc/inst/stopppp → rc/bin/inst/stopppp
Normal file → Executable file
0
sys/lib/dist/pc/inst/stopppp → rc/bin/inst/stopppp
Normal file → Executable file
0
sys/lib/dist/pc/inst/textonly → rc/bin/inst/textonly
Normal file → Executable file
0
sys/lib/dist/pc/inst/textonly → rc/bin/inst/textonly
Normal file → Executable file
0
sys/lib/dist/pc/inst/watchfd → rc/bin/inst/watchfd
Normal file → Executable file
0
sys/lib/dist/pc/inst/watchfd → rc/bin/inst/watchfd
Normal file → Executable file
0
sys/lib/dist/pc/inst/xxx → rc/bin/inst/xxx
Normal file → Executable file
0
sys/lib/dist/pc/inst/xxx → rc/bin/inst/xxx
Normal file → Executable file
3
sys/lib/dist/mkfile
vendored
3
sys/lib/dist/mkfile
vendored
|
@ -5,6 +5,3 @@ cd:V: /tmp/9front.iso
|
|||
bind pc/plan9.ini.cd /n/src9/cfg/plan9.ini
|
||||
disk/mk9660 -9cj -B 386/9bootiso -p pc/cdproto -s /n/src9 -v 'Plan 9 Front' $target
|
||||
unmount /n/src9/cfg/plan9.ini
|
||||
|
||||
%.bz2: %
|
||||
bzip2 $prereq
|
||||
|
|
0
sys/lib/dist/pc/emptyfile
vendored
0
sys/lib/dist/pc/emptyfile
vendored
4
sys/lib/dist/pc/glenda/bin/rc/riostart
vendored
4
sys/lib/dist/pc/glenda/bin/rc/riostart
vendored
|
@ -1,4 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
window '0 0 100 100' games/clock
|
||||
window '80 80 610 360' /usr/glenda/lib/first.window
|
11
sys/lib/dist/pc/glenda/lib/first.window
vendored
11
sys/lib/dist/pc/glenda/lib/first.window
vendored
|
@ -1,11 +0,0 @@
|
|||
#!/bin/rc
|
||||
echo -n readme > /dev/label
|
||||
echo 'You have completed the Installation Process.'
|
||||
|
||||
cat<<'!'
|
||||
|
||||
Welcome to Plan 9.
|
||||
This is rc.
|
||||
!
|
||||
|
||||
exec rc
|
16
sys/lib/dist/pc/glenda/lib/profile
vendored
16
sys/lib/dist/pc/glenda/lib/profile
vendored
|
@ -1,16 +0,0 @@
|
|||
if(test -f '#m/mousectl') {
|
||||
echo -n accelerated > '#m/mousectl'
|
||||
echo -n 'res 3' > '#m/mousectl'
|
||||
}
|
||||
user=`{cat /dev/user}
|
||||
home=/usr/$user
|
||||
bind -a $home/bin/rc /bin
|
||||
bind -a $home/bin/$cputype /bin
|
||||
bind -c $home/tmp /tmp
|
||||
rio -si inst/gui
|
||||
echo
|
||||
echo
|
||||
echo 'failed to start rio. you can start a text-based installation by running'
|
||||
echo
|
||||
echo ' inst/textonly'
|
||||
echo
|
100
sys/lib/dist/pc/mkfile
vendored
100
sys/lib/dist/pc/mkfile
vendored
|
@ -1,100 +0,0 @@
|
|||
out=outside # outside web server
|
||||
s=/sys/lib/dist/pc
|
||||
x=`{bind -b /sys/lib/dist/bin/$cputype /bin}
|
||||
default:V: ndisk
|
||||
ls -l ndisk
|
||||
|
||||
SUB=`{ls sub inst}
|
||||
boot.raw:Q: proto $SUB
|
||||
rm -rf boot
|
||||
mkdir boot
|
||||
bind /dev/null /sys/log/timesync
|
||||
# make files writable for now.
|
||||
cat proto | sed 's!d000!d775!;s!000!664!;s!555!775!;s!444!664!' >proto.cp
|
||||
disk/mkfs -a proto.cp | disk/mkext -d boot
|
||||
@{
|
||||
cd boot/386
|
||||
strip init
|
||||
cd bin
|
||||
strip * */* >[2]/dev/null || status=''
|
||||
}
|
||||
cat proto | sed 's!/.*!!' >proto.cp
|
||||
disk/mkfs -a -s boot proto.cp | tee >{wc -c >[1=2]} |
|
||||
touchfs 1000000000 >boot.raw
|
||||
|
||||
boot.bz2:Q: boot.raw
|
||||
ls -l boot.raw
|
||||
bflz -n 32 < boot.raw >boot.bflz
|
||||
ls -l boot.bflz
|
||||
bzip2 -9 < boot.bflz >$target
|
||||
ls -l $target
|
||||
|
||||
root.bz2:Q: boot.bz2
|
||||
{
|
||||
echo bzfilesystem
|
||||
cat boot.bz2
|
||||
dd -if /dev/zero -bs 1024 -count 1 >[2]/dev/null
|
||||
} >$target
|
||||
ls -l $target
|
||||
|
||||
/sys/src/9/pc/9pcflop.gz: root.bz2
|
||||
@{
|
||||
rfork n
|
||||
cd /sys/src/9/pc
|
||||
mk 'CONF=pcflop' 9pcflop.gz
|
||||
}
|
||||
|
||||
/sys/src/9/pc/9pccd.gz:
|
||||
@{
|
||||
cd /sys/src/9/pc
|
||||
mk 'CONF=pccd' 9pccd.gz
|
||||
}
|
||||
|
||||
# disk/format apparently uses stat to obtain a file's real name, so
|
||||
# binding 9loadusb onto 9load will store the name 9loadusb in the
|
||||
# generated fat filesystem. the same is true for plan9.ini.cd and plan9.ini.
|
||||
|
||||
9load: /386/9loadlite
|
||||
# cp $prereq $target
|
||||
if (test -e /386/9loadnousb)
|
||||
cp /386/9loadnousb $target # cater to old bioses
|
||||
cp /386/9loadlitedebug 9loaddebug
|
||||
|
||||
ndisk: 9load /sys/src/9/pc/9pcflop.gz plan9.ini /lib/vgadb
|
||||
dd -if /dev/zero -of ndisk -bs 1024 -count 1440 >[2]/dev/null
|
||||
disk/format -f -b /386/pbs -d ndisk \
|
||||
9load /sys/src/9/pc/9pcflop.gz plan9.ini /lib/vgadb
|
||||
ls -l ndisk
|
||||
|
||||
# cannot list both 9pcflop.gz and 9pccd.gz because they cannot be built
|
||||
# in parallel. stupid mk
|
||||
cddisk:DV: 9load /sys/src/9/pc/9pcflop.gz plan9.ini.cd /lib/vgadb
|
||||
mk -a /sys/src/9/pc/9pccd.gz
|
||||
mk -a /sys/src/9/pc/9pcflop.gz
|
||||
rfork n
|
||||
cp -x plan9.ini.cd subst/plan9.ini
|
||||
dd -if /dev/zero -of cddisk -bs 1024 -count 2880 >[2]/dev/null
|
||||
disk/format -t 3½QD -f -b /386/pbs -d cddisk \
|
||||
9load /sys/src/9/pc/^(9pcflop.gz 9pccd.gz) \
|
||||
subst/plan9.ini /lib/vgadb
|
||||
ls -l cddisk
|
||||
|
||||
clean:V:
|
||||
if (! unmount 9load >[2]/dev/null)
|
||||
;
|
||||
rm -rf boot boot.bz2 boot.bflz boot.raw root.bz2 9pcflop ndisk 9load cddisk proto.cp 9loaddebug
|
||||
|
||||
install:V: ndisk 9loaddebug
|
||||
9fs $out
|
||||
dst=/n/$out/sys/lib/dist/web.protect
|
||||
cp 9loaddebug $dst
|
||||
gzip -9 < ndisk > $dst/plan9.flp.gz
|
||||
# mk clean
|
||||
|
||||
test:V: ndisk 9loaddebug
|
||||
cp 9loaddebug ../web.protect2/n9loaddebug
|
||||
cp ndisk ../web.protect2/ndisk
|
||||
|
||||
cd0:D: cddisk
|
||||
rm -f cd0
|
||||
disk/mk9660 -9cj -v 'Plan 9 4th Edition' -s . -p cd0.proto -b cddisk cd0
|
19
sys/lib/dist/pc/plan9.ini
vendored
19
sys/lib/dist/pc/plan9.ini
vendored
|
@ -1,19 +0,0 @@
|
|||
# very cautious settings to get started.
|
||||
# will defeat booting from usb devices.
|
||||
*nomp=1
|
||||
# *noahciload=1
|
||||
# *debugload=1
|
||||
*nodumpstack=1
|
||||
# this would disable ether and usb probing.
|
||||
# *nousbprobe=1
|
||||
# *noetherprobe=1
|
||||
distname=plan9
|
||||
partition=new
|
||||
mouseport=ask
|
||||
monitor=ask
|
||||
vgasize=ask
|
||||
dmamode=ask
|
||||
# serial console on COM1
|
||||
#console=0
|
||||
bootargs=local!#S/sdD0/data
|
||||
bootfile=/386/9pccd
|
10
sys/lib/dist/pc/plan9.ini.blank
vendored
10
sys/lib/dist/pc/plan9.ini.blank
vendored
|
@ -1,10 +0,0 @@
|
|||
THIS IS A 512 byte BLANK PLAN9.INI
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
20
sys/lib/dist/pc/plan9.ini.vmware
vendored
20
sys/lib/dist/pc/plan9.ini.vmware
vendored
|
@ -1,20 +0,0 @@
|
|||
# config for initial vmware booting
|
||||
|
||||
# very cautious settings to get started.
|
||||
# will defeat booting from usb devices.
|
||||
*nomp=1
|
||||
*nobiosload=1
|
||||
# *noahciload=1
|
||||
# *debugload=1
|
||||
# *nodumpstack=1
|
||||
|
||||
partition=new
|
||||
nobootprompt=local!/boot/bzroot
|
||||
bootfile=fd0!9pcflop.gz
|
||||
|
||||
mouseport=ps2
|
||||
monitor=xga
|
||||
vgasize=1024x768x16
|
||||
#adisk=/dev/sdD0/cdboot
|
||||
console=0
|
||||
baud=9600
|
175
sys/lib/dist/pc/proto
vendored
175
sys/lib/dist/pc/proto
vendored
|
@ -1,175 +0,0 @@
|
|||
386 d775 sys sys
|
||||
# 9load 555 sys sys
|
||||
init 555 sys sys
|
||||
# ld.com 555 sys sys
|
||||
mbr 555 sys sys
|
||||
pbs 555 sys sys
|
||||
pbslba 555 sys sys
|
||||
bin d775 sys sys
|
||||
auth d555 sys sys
|
||||
# i think factotum is only needed if we include cpu
|
||||
# factotum 555 sys sys
|
||||
aux d555 sys sys
|
||||
isvmware 555 sys sys
|
||||
mouse 555 sys sys /sys/lib/dist/pc/multi/mouse
|
||||
pcmcia 555 sys sys /sys/lib/dist/pc/multi/pcmcia
|
||||
# stub 555 sys sys
|
||||
vga 555 sys sys /sys/lib/dist/pc/multi/vga
|
||||
vmware 555 sys sys /sys/lib/dist/pc/sub/vmware
|
||||
# vmware 555 sys sys
|
||||
# vmwarefs 555 sys sys
|
||||
# vmmousepoll 555 sys sys
|
||||
zerotrunc 555 sys sys /sys/lib/dist/pc/multi/zerotrunc
|
||||
disk d555 sys sys
|
||||
fdisk 555 sys sys /sys/lib/dist/pc/multi/fdisk
|
||||
format 555 sys sys /sys/lib/dist/pc/multi/format
|
||||
# kfs 555 sys sys
|
||||
# kfscmd 555 sys sys
|
||||
mbr 555 sys sys /sys/lib/dist/pc/multi/mbr
|
||||
prep 555 sys sys /sys/lib/dist/pc/multi/prep
|
||||
fossil d555 sys sys
|
||||
fossil 555 sys sys
|
||||
flfmt 555 sys sys
|
||||
conf 555 sys sys
|
||||
ip d555 sys sys
|
||||
ipconfig 555 sys sys /sys/lib/dist/pc/multi/ipconfig
|
||||
ppp 555 sys sys /sys/lib/dist/pc/multi/ppp
|
||||
ndb d555 sys sys
|
||||
# csquery and dnsquery could go
|
||||
cs 555 sys sys /sys/lib/dist/pc/multi/cs
|
||||
# csquery 555 sys sys
|
||||
dns 555 sys sys /sys/lib/dist/pc/multi/dns
|
||||
# dnsquery 555 sys sys
|
||||
replica d555 sys sys
|
||||
applylog 555 sys sys
|
||||
changes 555 sys sys
|
||||
compactdb 555 sys sys /sys/lib/dist/pc/sub/compactdb
|
||||
pull 555 sys sys
|
||||
venti d555 sys sys
|
||||
# venti 555 sys sys
|
||||
# conf 555 sys sys
|
||||
# fmtarenas 555 sys sys
|
||||
# fmtindex 555 sys sys
|
||||
# fmtisect 555 sys sys
|
||||
9660srv 555 sys sys /sys/lib/dist/pc/multi/9660srv
|
||||
# acme could go
|
||||
# acme 555 sys sys
|
||||
awk 555 sys sys
|
||||
bargraph 555 sys sys /sys/lib/dist/bin/386/bargraph
|
||||
basename 555 sys sys /sys/lib/dist/pc/multi/basename
|
||||
cat 555 sys sys /sys/lib/dist/pc/multi/cat
|
||||
chgrp 555 sys sys /sys/lib/dist/pc/multi/chgrp
|
||||
chmod 555 sys sys /sys/lib/dist/pc/multi/chmod
|
||||
cleanname 555 sys sys /sys/lib/dist/pc/multi/cleanname
|
||||
cmp 555 sys sys /sys/lib/dist/pc/multi/cmp
|
||||
cdsh 555 sys sys /sys/lib/dist/bin/386/cdsh
|
||||
cp 555 sys sys /sys/lib/dist/pc/multi/cp
|
||||
# cpu could go
|
||||
# cpu 555 sys sys
|
||||
date 555 sys sys /sys/lib/dist/pc/multi/date
|
||||
dd 555 sys sys /sys/lib/dist/pc/multi/dd
|
||||
dossrv 555 sys sys /sys/lib/dist/pc/multi/dossrv
|
||||
echo 555 sys sys /sys/lib/dist/pc/multi/echo
|
||||
ed 555 sys sys /sys/lib/dist/pc/multi/ed
|
||||
# if cpu goes, exportfs could go
|
||||
# exportfs 555 sys sys
|
||||
ext2srv 555 sys sys /sys/lib/dist/pc/multi/ext2srv
|
||||
fcp 555 sys sys
|
||||
grep 555 sys sys /sys/lib/dist/pc/multi/grep
|
||||
hget 555 sys sys /sys/lib/dist/pc/multi/hget
|
||||
hoc 555 sys sys /sys/lib/dist/pc/multi/hoc
|
||||
ls 555 sys sys /sys/lib/dist/pc/multi/ls
|
||||
mc 555 sys sys /sys/lib/dist/pc/multi/mc
|
||||
mount 555 sys sys /sys/lib/dist/pc/multi/mount
|
||||
multi 555 sys sys /sys/lib/dist/bin/386/multi
|
||||
mv 555 sys sys /sys/lib/dist/pc/multi/mv
|
||||
# netkey 555 sys sys
|
||||
ps 555 sys sys /sys/lib/dist/pc/multi/ps
|
||||
rc 555 sys sys
|
||||
read 555 sys sys /sys/lib/dist/pc/multi/read
|
||||
rio 555 sys sys
|
||||
rm 555 sys sys /sys/lib/dist/pc/multi/rm
|
||||
sed 555 sys sys /sys/lib/dist/pc/multi/sed
|
||||
# snoopy could go
|
||||
# snoopy 555 sys sys
|
||||
sort 555 sys sys /sys/lib/dist/pc/multi/sort
|
||||
srv 555 sys sys /sys/lib/dist/pc/multi/srv
|
||||
# ssh 555 sys sys
|
||||
stats 555 sys sys
|
||||
syscall 555 sys sys /sys/lib/dist/pc/multi/syscall
|
||||
tail 555 sys sys /sys/lib/dist/pc/multi/tail
|
||||
tailfsrv 555 sys sys /sys/lib/dist/bin/386/tailfsrv
|
||||
tee 555 sys sys /sys/lib/dist/pc/multi/tee
|
||||
# telnet 555 sys sys
|
||||
test 555 sys sys /sys/lib/dist/pc/multi/test
|
||||
wc 555 sys sys /sys/lib/dist/pc/multi/wc
|
||||
xd 555 sys sys /sys/lib/dist/pc/multi/xd
|
||||
adm d555 adm adm
|
||||
timezone d555 sys sys
|
||||
local 555 sys sys
|
||||
lib d777 sys sys
|
||||
font d555 sys sys
|
||||
bit d555 sys sys
|
||||
lucidasans d555 sys sys
|
||||
lstr.12 444 sys sys
|
||||
typelatin1.7.font 444 sys sys
|
||||
# lucm d555 sys sys
|
||||
# latin1.9 444 sys sys
|
||||
# latin1.9.font 444 sys sys
|
||||
namespace 444 sys sys
|
||||
ndb d555 sys sys
|
||||
common 444 sys sys /sys/lib/dist/pc/sub/common
|
||||
local 444 sys sys /sys/lib/dist/pc/sub/local
|
||||
vgadb 666 sys sys /dev/null
|
||||
fd d555 sys sys
|
||||
mnt d777 sys sys
|
||||
arch d000 sys sys
|
||||
temp d000 sys sys
|
||||
vmware d000 sys sys
|
||||
wsys d000 sys sys
|
||||
n d777 sys sys
|
||||
a: d000 sys sys
|
||||
a d000 sys sys
|
||||
c: d000 sys sys
|
||||
c d000 sys sys
|
||||
9fat d000 sys sys
|
||||
kremvax d000 sys sys /sys/lib/dist/pc/empty
|
||||
newfs d000 sys sys
|
||||
dist d000 sys sys /sys/lib/dist/pc/empty
|
||||
distmedia d000 sys sys /sys/lib/dist/pc/empty
|
||||
rc d555 sys sys
|
||||
bin d775 sys sys
|
||||
inst d775 sys sys /sys/lib/dist/pc/empty
|
||||
+ - sys sys /sys/lib/dist/pc/inst
|
||||
9fat: 555 sys sys
|
||||
a: 555 sys sys /sys/lib/dist/pc/sub/a:
|
||||
bind 555 sys sys /sys/lib/dist/pc/sub/bind
|
||||
boota: 555 sys sys /sys/lib/dist/pc/sub/boota:
|
||||
bunzip2 555 sys sys /sys/lib/dist/pc/sub/bunzip2
|
||||
c: 555 sys sys
|
||||
dosmnt 555 sys sys
|
||||
kill 555 sys sys
|
||||
lc 555 sys sys
|
||||
mkdir 555 sys sys /sys/lib/dist/pc/sub/mkdir
|
||||
pci 555 sys sys
|
||||
pwd 555 sys sys /sys/lib/dist/pc/sub/pwd
|
||||
ramfs 555 sys sys /sys/lib/dist/pc/sub/ramfs
|
||||
replica d555 sys sys
|
||||
changes 555 sys sys
|
||||
defs 555 sys sys
|
||||
pull 555 sys sys
|
||||
slay 555 sys sys
|
||||
sleep 555 sys sys /sys/lib/dist/pc/sub/sleep
|
||||
termrc 555 sys sys /sys/lib/dist/pc/sub/termrc
|
||||
unmount 555 sys sys /sys/lib/dist/pc/sub/unmount
|
||||
window 555 sys sys
|
||||
lib d555 sys sys
|
||||
rcmain 444 sys sys
|
||||
sys d555 sys sys
|
||||
log d555 sys sys
|
||||
dns 444 sys sys /sys/lib/dist/pc/emptyfile
|
||||
timesync 444 sys sys /sys/lib/dist/pc/emptyfile
|
||||
tmp d555 sys sys
|
||||
usr d555 sys sys
|
||||
glenda d775 glenda glenda
|
||||
+ - glenda glenda /sys/lib/dist/pc/glenda
|
22
sys/lib/dist/pc/sub/D003753
vendored
22
sys/lib/dist/pc/sub/D003753
vendored
|
@ -1,22 +0,0 @@
|
|||
#!/bin/rc
|
||||
if(! test -f /srv/dos)
|
||||
dossrv >/dev/null </dev/null >[2]/dev/null
|
||||
unmount /n/a:>[2]/dev/null
|
||||
|
||||
if(~ $#adisk 1)
|
||||
; # do nothing
|
||||
if not if(~ $#bootfile 0)
|
||||
adisk=/dev/fd0disk
|
||||
if not {
|
||||
switch($bootfile) {
|
||||
case sd*
|
||||
adisk=`{echo $bootfile | sed 's#(sd..).*#/dev/\1/data#'}
|
||||
case fd*
|
||||
adisk=`{echo $bootfile | sed 's#(fd.).*#/dev/\1disk#'}
|
||||
case *
|
||||
echo 'unknown bootfile '^$bootfile^'; mail 9trouble@plan9.bell-labs.com'
|
||||
exit oops
|
||||
}
|
||||
}
|
||||
|
||||
mount -c /srv/dos /n/a: $adisk
|
24
sys/lib/dist/pc/sub/F004116
vendored
24
sys/lib/dist/pc/sub/F004116
vendored
|
@ -1,24 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
rfork e
|
||||
if(! test -f /srv/dos)
|
||||
dossrv >/dev/null </dev/null >[2]/dev/null
|
||||
unmount /n/a:>[2]/dev/null
|
||||
|
||||
switch($bootfile) {
|
||||
case sd*!cdboot!*
|
||||
# just look for the right file. bootfile isn''t trustworthy
|
||||
adisk=/dev/sd*/cdboot
|
||||
if(! ~ $#adisk 1)
|
||||
adisk=$adisk(1)
|
||||
case sd*
|
||||
adisk=`{echo $bootfile | sed 's#(sd..).*#/dev/\1/dos#'}
|
||||
case fd*
|
||||
adisk=`{echo $bootfile | sed 's#(fd.).*#/dev/\1disk#'}
|
||||
case *
|
||||
echo 'unknown bootfile '^$bootfile^'; mail 9trouble@plan9.bell-labs.com'
|
||||
exit oops
|
||||
}
|
||||
|
||||
mount -c /srv/dos /n/a: $adisk
|
||||
|
21
sys/lib/dist/pc/sub/bind
vendored
21
sys/lib/dist/pc/sub/bind
vendored
|
@ -1,21 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
rfork e
|
||||
flag=0
|
||||
while(~ $1 -*){
|
||||
switch($1){
|
||||
case -b
|
||||
flag=1
|
||||
case -a
|
||||
flag=2
|
||||
case -c
|
||||
flag=4
|
||||
case -ac -ca
|
||||
flag=6
|
||||
case -bc -cb
|
||||
flag=5
|
||||
}
|
||||
shift
|
||||
}
|
||||
|
||||
syscall bind $1 $2 $flag >[2]/dev/null
|
4
sys/lib/dist/pc/sub/bunzip2
vendored
4
sys/lib/dist/pc/sub/bunzip2
vendored
|
@ -1,4 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
exec /boot/kfs BUNZIP
|
||||
# kfs is bzfs
|
123
sys/lib/dist/pc/sub/common
vendored
123
sys/lib/dist/pc/sub/common
vendored
|
@ -1,123 +0,0 @@
|
|||
#
|
||||
# services
|
||||
#
|
||||
tcp=cs port=1
|
||||
tcp=echo port=7
|
||||
tcp=discard port=9
|
||||
tcp=systat port=11
|
||||
tcp=daytime port=13
|
||||
tcp=netstat port=15
|
||||
tcp=chargen port=19
|
||||
tcp=ftp-data port=20
|
||||
tcp=ftp port=21
|
||||
tcp=ssh port=22
|
||||
tcp=telnet port=23
|
||||
tcp=smtp port=25
|
||||
tcp=time port=37
|
||||
tcp=whois port=43
|
||||
tcp=domain port=53
|
||||
tcp=uucp port=64
|
||||
tcp=gopher port=70
|
||||
tcp=rje port=77
|
||||
tcp=finger port=79
|
||||
tcp=http port=80
|
||||
tcp=link port=87
|
||||
tcp=supdup port=95
|
||||
tcp=hostnames port=101
|
||||
tcp=iso-tsap port=102
|
||||
tcp=x400 port=103
|
||||
tcp=x400-snd port=104
|
||||
tcp=csnet-ns port=105
|
||||
tcp=pop-2 port=109
|
||||
tcp=pop3 port=110
|
||||
tcp=sunrpc port=111
|
||||
tcp=uucp-path port=117
|
||||
tcp=nntp port=119
|
||||
tcp=netbios port=139
|
||||
tcp=NeWS port=144
|
||||
tcp=print-srv port=170
|
||||
tcp=z39.50 port=210
|
||||
tcp=fsb port=400
|
||||
tcp=sysmon port=401
|
||||
tcp=proxy port=402
|
||||
tcp=proxyd port=404
|
||||
tcp=https port=443
|
||||
tcp=ssmtp port=465
|
||||
tcp=snntp port=563
|
||||
tcp=rexec port=512 restricted=
|
||||
tcp=login port=513 restricted=
|
||||
tcp=shell port=514 restricted=
|
||||
tcp=printer port=515
|
||||
tcp=courier port=530
|
||||
tcp=cscan port=531
|
||||
tcp=uucp port=540
|
||||
tcp=9fs port=564
|
||||
tcp=whoami port=565
|
||||
tcp=guard port=566
|
||||
tcp=ticket port=567
|
||||
tcp=fmclient port=729
|
||||
tcp=ingreslock port=1524
|
||||
tcp=webster port=2627
|
||||
tcp=weather port=3000
|
||||
tcp=Xdisplay port=6000
|
||||
tcp=styx port=6666
|
||||
tcp=mpeg port=6667
|
||||
tcp=rstyx port=6668
|
||||
tcp=infdb port=6669
|
||||
tcp=infsigner port=6671
|
||||
tcp=infcsigner port=6672
|
||||
tcp=inflogin port=6673
|
||||
tcp=bandt port=7330
|
||||
tcp=face port=32000
|
||||
tcp=ocpu port=17005
|
||||
tcp=ocpunote port=17006
|
||||
tcp=exportfs port=17007
|
||||
tcp=rexexec port=17009
|
||||
tcp=ncpu port=17010
|
||||
tcp=ncpunote port=17011
|
||||
tcp=cpu port=17013
|
||||
tcp=video port=17028
|
||||
tcp=vgen port=17029
|
||||
tcp=alefnslook port=17030
|
||||
tcp=411 port=17031
|
||||
tcp=flyboy port=17032
|
||||
|
||||
il=echo port=7
|
||||
il=discard port=9
|
||||
il=chargen port=19
|
||||
il=whoami port=565
|
||||
il=ticket port=566
|
||||
il=challbox port=567
|
||||
il=ocpu port=17005
|
||||
il=ocpunote port=17006
|
||||
il=exportfs port=17007
|
||||
il=9fs port=17008
|
||||
il=rexexec port=17009
|
||||
il=ncpu port=17010
|
||||
il=ncpunote port=17011
|
||||
il=tcpu port=17012
|
||||
il=cpu port=17013
|
||||
il=fsauth port=17020
|
||||
il=rexauth port=17021
|
||||
il=changekey port=17022
|
||||
il=chal port=17023
|
||||
il=check port=17024
|
||||
il=juke port=17026
|
||||
il=video port=17028
|
||||
il=vgen port=17029
|
||||
il=alefnslook port=17030
|
||||
il=ramfs port=17031
|
||||
|
||||
udp=echo port=7
|
||||
udp=tacacs port=49
|
||||
udp=tftp port=69
|
||||
udp=bootpc port=68
|
||||
udp=bootp port=67
|
||||
udp=dns port=53
|
||||
udp=ntp port=123
|
||||
udp=rip port=520
|
||||
udp=bfs port=2201
|
||||
udp=virgil port=2202
|
||||
udp=bandt2 port=7331
|
||||
|
||||
gre=ppp port=34827
|
4
sys/lib/dist/pc/sub/compactdb
vendored
4
sys/lib/dist/pc/sub/compactdb
vendored
|
@ -1,4 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
exec cat $*
|
||||
|
8
sys/lib/dist/pc/sub/local
vendored
8
sys/lib/dist/pc/sub/local
vendored
|
@ -1,8 +0,0 @@
|
|||
|
||||
#
|
||||
# files comprising the database, use as many as you like
|
||||
#
|
||||
database=
|
||||
file=/lib/ndb/local
|
||||
file=/lib/ndb/common
|
||||
|
3
sys/lib/dist/pc/sub/mkdir
vendored
3
sys/lib/dist/pc/sub/mkdir
vendored
|
@ -1,3 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
syscall create $1 0 020000000775 >[2]/dev/null
|
16
sys/lib/dist/pc/sub/ndist
vendored
16
sys/lib/dist/pc/sub/ndist
vendored
|
@ -1,16 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
s=/n/dist/dist/replica
|
||||
serverroot=/n/dist
|
||||
serverlog=$s/plan9.log
|
||||
serverproto=$s/plan9.proto
|
||||
fn servermount { status='' }
|
||||
fn serverupdate { status='' }
|
||||
|
||||
fn clientmount { status='' }
|
||||
c=/n/kfs/dist/replica
|
||||
clientroot=/n/kfs
|
||||
clientproto=$c/plan9.proto
|
||||
clientdb=$c/client/plan9.db
|
||||
clientexclude=(dist/replica/client)
|
||||
clientlog=$c/client/plan9.log
|
5
sys/lib/dist/pc/sub/pci
vendored
5
sys/lib/dist/pc/sub/pci
vendored
|
@ -1,5 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
rfork n
|
||||
bind '#$' /mnt
|
||||
cat /mnt/pci/*ctl
|
3
sys/lib/dist/pc/sub/pwd
vendored
3
sys/lib/dist/pc/sub/pwd
vendored
|
@ -1,3 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
syscall -o fd2path 0 buf 1024 < . >[2]/dev/null
|
4
sys/lib/dist/pc/sub/ramfs
vendored
4
sys/lib/dist/pc/sub/ramfs
vendored
|
@ -1,4 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
exec boot/kfs RAMFS $*
|
||||
# kfs is bzfs
|
8
sys/lib/dist/pc/sub/sleep
vendored
8
sys/lib/dist/pc/sub/sleep
vendored
|
@ -1,8 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
if(! ~ $#* 1) {
|
||||
echo 'usage: sleep n' >[1=2]
|
||||
exit usage
|
||||
}
|
||||
|
||||
syscall sleep $1^000 >/dev/null >[2]/dev/null
|
121
sys/lib/dist/pc/sub/termrc
vendored
121
sys/lib/dist/pc/sub/termrc
vendored
|
@ -1,121 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
if(~ $#debug 1 && ~ $debug yes)
|
||||
flag x +
|
||||
if not
|
||||
debug=0
|
||||
|
||||
if(~ $debug yes) echo env...
|
||||
sysname=gnot
|
||||
font=/lib/font/bit/lucidasans/typelatin1.7.font
|
||||
|
||||
for (i in '#P' '#f' '#m' '#t' '#v') {
|
||||
if(~ $debug yes) echo bind $i
|
||||
bind -a $i /dev >/dev/null >[2=1]
|
||||
}
|
||||
if(~ $debug yes) echo binddev done
|
||||
|
||||
for(disk in /dev/sd??) {
|
||||
if(test -f $disk/data && test -f $disk/ctl){
|
||||
disk/fdisk -p $disk/data >$disk/ctl >[2]/dev/null
|
||||
# if(~ $#nosddma 0)
|
||||
# echo dma on >$disk/ctl
|
||||
# if(~ $#nosdrwm 0)
|
||||
# echo rwm on >$disk/ctl
|
||||
}
|
||||
}
|
||||
|
||||
for (i in /sys/log/*) {
|
||||
if(~ $debug yes) echo bind $i
|
||||
bind /dev/null $i
|
||||
}
|
||||
|
||||
if(~ $debug yes) echo bindlog done
|
||||
|
||||
bind -a '#l' /net >/dev/null >[2=1]
|
||||
|
||||
dossrv
|
||||
boota:
|
||||
boota: # again, just in case a timeout made the earlier one fail
|
||||
cp /n/a:/plan9.ini /tmp/plan9.orig
|
||||
if(! ~ $cdboot yes){
|
||||
pci >/n/a:/pci.txt >[2]/dev/null
|
||||
cp /dev/kmesg /n/a:/boot.txt >[2]/dev/null
|
||||
}
|
||||
|
||||
# restore a partial install
|
||||
if(test -f /n/a:/9inst.cnf)
|
||||
cp /n/a:/9inst.cnf /tmp/vars
|
||||
|
||||
# make vgadb easier to edit
|
||||
if(test -f /n/a:/vgadb)
|
||||
cp /n/a:/vgadb /lib/vgadb
|
||||
|
||||
aux/vmware
|
||||
|
||||
# configure loopback device without touching /net/ndb
|
||||
{
|
||||
echo bind loopback /dev/null
|
||||
echo add 127.0.0.1 255.255.255.0
|
||||
} >/net/ipifc/clone
|
||||
|
||||
if(~ $#dmamode 0)
|
||||
dmamode=ask
|
||||
if(~ $dmamode ask){
|
||||
echo -n 'use DMA for ide drives[yes]: '
|
||||
dmamode=`{read}
|
||||
if(~ $#dmamode 0)
|
||||
dmamode=yes
|
||||
}
|
||||
if(~ $dmamode yes)
|
||||
for(i in /dev/sd*/ctl)
|
||||
if(test -f $i)
|
||||
{echo dma on; echo rwm on >[2]/dev/null} >$i
|
||||
|
||||
if(~ $installmode ask){
|
||||
echo -n 'install mode is (text, graphics)[graphics]: '
|
||||
installmode=`{read}
|
||||
if(~ $#installmode 0)
|
||||
installmode=graphics
|
||||
}
|
||||
if(~ $installmode text){
|
||||
mouseport=()
|
||||
vgasize=()
|
||||
monitor=()
|
||||
}
|
||||
if not
|
||||
installmode=graphics
|
||||
|
||||
if(~ $mouseport ask){
|
||||
echo -n 'mouseport is (ps2, ps2intellimouse, 0, 1, 2)[ps2]: '
|
||||
mouseport=`{read}
|
||||
if(~ $#mouseport 0)
|
||||
mouseport=ps2
|
||||
}
|
||||
if(~ $vgasize ask){
|
||||
echo -n 'vgasize [640x480x8]: '
|
||||
vgasize=`{read}
|
||||
if(~ $#vgasize 0)
|
||||
vgasize=640x480x8
|
||||
}
|
||||
if(~ $monitor ask){
|
||||
echo -n 'monitor is [xga]: '
|
||||
monitor=`{read}
|
||||
if(~ $#monitor 0)
|
||||
monitor=xga
|
||||
}
|
||||
if(~ $#mouseport 1) {
|
||||
aux/mouse $mouseport
|
||||
if(~ $#vgasize 1 && ! ~ $vgasize '') {
|
||||
vgasize=`{echo $vgasize}
|
||||
if(! ~ $cdboot yes)
|
||||
aux/vga -vip $vgasize >/n/a:/vgainfo.txt
|
||||
sleep 2 # wait for floppy to finish
|
||||
aux/vga -l $vgasize
|
||||
if(! ~ $#novgaaccel 0)
|
||||
echo -n 'hwaccel off' >'#v/vgactl' >[2]/dev/null
|
||||
if(! ~ $#novgablank 0)
|
||||
echo -n 'hwblank off' >'#v/vgactl' >[2]/dev/null
|
||||
}
|
||||
}
|
||||
|
3
sys/lib/dist/pc/sub/unmount
vendored
3
sys/lib/dist/pc/sub/unmount
vendored
|
@ -1,3 +0,0 @@
|
|||
#!/bin/rc
|
||||
|
||||
syscall unmount 0 $1 >[2]/dev/null
|
7
sys/lib/dist/pc/sub/users
vendored
7
sys/lib/dist/pc/sub/users
vendored
|
@ -1,7 +0,0 @@
|
|||
-1:adm:adm:
|
||||
0:none:none:
|
||||
1:tor:tor:
|
||||
2:glenda:glenda:
|
||||
10000:sys::
|
||||
10001:upas:upas:
|
||||
10002:bootes:bootes:
|
10
sys/lib/dist/pc/sub/vmware
vendored
10
sys/lib/dist/pc/sub/vmware
vendored
|
@ -1,10 +0,0 @@
|
|||
#!/bin/rc
|
||||
# vmware - if we're running in a vmware virtual machine, tweak set up
|
||||
if(aux/isvmware -s){
|
||||
echo hwaccel off >'#v/vgactl'
|
||||
echo -n off >'#P/i8253timerset'
|
||||
for (ctl in '#S'/sd[C-H]?/ctl)
|
||||
if (test -e $ctl && grep -s '^config .* dma ' $ctl &&
|
||||
! grep -s '^config (848A|.* dma 00000000 )' $ctl)
|
||||
echo 'dma on' >$ctl
|
||||
}
|
40
sys/lib/dist/pc/subst/plan9.ini
vendored
40
sys/lib/dist/pc/subst/plan9.ini
vendored
|
@ -1,40 +0,0 @@
|
|||
# config for initial cd booting
|
||||
|
||||
[menu]
|
||||
menuitem=install, Install Plan 9 from this CD
|
||||
menuitem=cdboot, Boot Plan 9 from this CD
|
||||
# menuitem=debug, Boot Plan 9 from this CD and debug 9load
|
||||
|
||||
[common]
|
||||
# very cautious settings to get started.
|
||||
# will defeat booting from usb devices.
|
||||
*nomp=1
|
||||
*nobiosload=1
|
||||
# *noahciload=1
|
||||
# *debugload=1
|
||||
*nodumpstack=1
|
||||
# this would disable ether and usb probing.
|
||||
# *nousbprobe=1
|
||||
# *noetherprobe=1
|
||||
partition=new
|
||||
mouseport=ask
|
||||
monitor=ask
|
||||
vgasize=ask
|
||||
dmamode=ask
|
||||
adisk=/dev/sdD0/cdboot
|
||||
cdboot=yes
|
||||
# console=0
|
||||
# baud=9600
|
||||
|
||||
[install]
|
||||
nobootprompt=local!/boot/bzroot
|
||||
bootfile=sdD0!cdboot!9pcflop.gz
|
||||
|
||||
[cdboot]
|
||||
bootargs=local!#S/sdD0/data
|
||||
bootfile=sdD0!cdboot!9pccd.gz
|
||||
|
||||
# [debug]
|
||||
# bootargs=local!#S/sdD0/data
|
||||
# bootfile=sdD0!cdboot!9pccd.gz
|
||||
# *debugload=1
|
22
sys/src/cmd/cwfs/64xbit.h
Normal file
22
sys/src/cmd/cwfs/64xbit.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* fundamental constants and types of the implementation
|
||||
* changing any of these changes the layout on disk
|
||||
*/
|
||||
|
||||
/* the glorious new, incompatible (on disk) 64-bit world */
|
||||
|
||||
/* keeping NAMELEN ≤ 50 bytes permits 3 Dentrys per mag disk sector */
|
||||
enum {
|
||||
NAMELEN = 144, /* max size of file name components */
|
||||
NDBLOCK = 6, /* number of direct blocks in Dentry */
|
||||
NIBLOCK = 4, /* max depth of indirect blocks */
|
||||
};
|
||||
|
||||
/*
|
||||
* file offsets & sizes, in bytes & blocks. typically long or vlong.
|
||||
* vlong is used in the code where would be needed if Off were just long.
|
||||
*/
|
||||
typedef vlong Off;
|
||||
|
||||
#undef COMPAT32
|
||||
#define swaboff swab8
|
|
@ -36,13 +36,10 @@ consserve1(void *)
|
|||
char *conline;
|
||||
|
||||
for (;;) {
|
||||
/* conslock(); */
|
||||
do {
|
||||
print("%s: ", service);
|
||||
if ((conline = Brdline(&bin, '\n')) == nil)
|
||||
print("\n");
|
||||
else {
|
||||
if ((conline = Brdline(&bin, '\n')) != nil) {
|
||||
conline[Blinelen(&bin)-1] = '\0';
|
||||
print("%s: %s\n", service, conline);
|
||||
cmd_exec(conline);
|
||||
}
|
||||
} while (conline != nil);
|
||||
|
|
|
@ -82,6 +82,11 @@ devcmpr(Device *d1, Device *d2)
|
|||
case Devwren:
|
||||
case Devworm:
|
||||
case Devlworm:
|
||||
if(d1->wren.file || d2->wren.file){
|
||||
if(d1->wren.file == nil || d2->wren.file == nil)
|
||||
return 1;
|
||||
return !!strcmp(d1->wren.file, d2->wren.file);
|
||||
}
|
||||
if(d1->wren.ctrl == d2->wren.ctrl)
|
||||
if(d1->wren.targ == d2->wren.targ)
|
||||
if(d1->wren.lun == d2->wren.lun)
|
||||
|
@ -222,7 +227,7 @@ config(void)
|
|||
{
|
||||
int c, m;
|
||||
Device *d;
|
||||
char *icp;
|
||||
char *icp, *s, *e;
|
||||
|
||||
if(f.error)
|
||||
return devnone;
|
||||
|
@ -248,7 +253,41 @@ config(void)
|
|||
d->type = Devnone;
|
||||
break;
|
||||
|
||||
case '/': /* /path/to/file mapped file */
|
||||
case '"': /* "/path/to/file" mapped file */
|
||||
case '\'': /* '/path/to/file' mapped file */
|
||||
Mapped:
|
||||
d->type = Devwren;
|
||||
if(c == '/'){
|
||||
s = f.charp-1;
|
||||
for(e = s+1; *e; e++)
|
||||
if(*e == ')' || *e == ']' || *e == '}')
|
||||
break;
|
||||
f.charp = e;
|
||||
} else {
|
||||
s = f.charp;
|
||||
if((e = strchr(s, c)) == nil){
|
||||
cdiag("unterminated string", c);
|
||||
return devnone;
|
||||
}
|
||||
f.charp = e+1;
|
||||
}
|
||||
d->wren.ctrl = -1;
|
||||
d->wren.targ = -1;
|
||||
d->wren.lun = -1;
|
||||
d->wren.file = malloc((e - s) + 1);
|
||||
memmove(d->wren.file, s, e - s);
|
||||
d->wren.file[e - s] = 0;
|
||||
break;
|
||||
|
||||
case 'w': /* w[#.]#[.#] wren [ctrl] unit [lun] */
|
||||
switch(*f.charp){
|
||||
case '/':
|
||||
case '"':
|
||||
case '\'':
|
||||
c = *f.charp++;
|
||||
goto Mapped;
|
||||
}
|
||||
case 'r': /* r# worm side */
|
||||
case 'l': /* l# labelled-worm side */
|
||||
icp = f.charp;
|
||||
|
|
31
sys/src/cmd/cwfs/cwfs64/conf.c
Normal file
31
sys/src/cmd/cwfs/cwfs64/conf.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* generic old-cw configuration */
|
||||
|
||||
#include "all.h"
|
||||
|
||||
#ifndef DATE
|
||||
#define DATE 1170808167L
|
||||
#endif
|
||||
|
||||
Timet fs_mktime = DATE; /* set by mkfile */
|
||||
|
||||
Startsb startsb[] = {
|
||||
"main", 2,
|
||||
nil,
|
||||
};
|
||||
|
||||
void
|
||||
localconfinit(void)
|
||||
{
|
||||
conf.nfile = 40000;
|
||||
conf.nodump = 0;
|
||||
// conf.nodump = 1; /* jukebox is r/o */
|
||||
conf.firstsb = 13219302;
|
||||
conf.recovsb = 0;
|
||||
conf.nlgmsg = 100;
|
||||
conf.nsmmsg = 500;
|
||||
}
|
||||
|
||||
int (*fsprotocol[])(Msgbuf*) = {
|
||||
serve9p2,
|
||||
nil,
|
||||
};
|
36
sys/src/cmd/cwfs/cwfs64/dat.h
Normal file
36
sys/src/cmd/cwfs/cwfs64/dat.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* generic old-cw configuration: 16K blocks, 32-bit sizes */
|
||||
|
||||
/*
|
||||
* The most fundamental constant.
|
||||
* The code will not compile with RBUFSIZE made a variable;
|
||||
* for one thing, RBUFSIZE determines FEPERBUF, which determines
|
||||
* the number of elements in a free-list-block array.
|
||||
*/
|
||||
#ifndef RBUFSIZE
|
||||
#define RBUFSIZE (16*1024) /* raw buffer size */
|
||||
#endif
|
||||
#include "64bit.h"
|
||||
/*
|
||||
* setting this to zero permits the use of discs of different sizes, but
|
||||
* can make jukeinit() quite slow while the robotics work through each disc
|
||||
* twice (once per side).
|
||||
*/
|
||||
enum { FIXEDSIZE = 1 };
|
||||
|
||||
|
||||
#include "portdat.h"
|
||||
|
||||
enum { MAXBANK = 2 };
|
||||
|
||||
typedef struct Mbank {
|
||||
ulong base;
|
||||
ulong limit;
|
||||
} Mbank;
|
||||
|
||||
typedef struct Mconf {
|
||||
Lock;
|
||||
Mbank bank[MAXBANK];
|
||||
int nbank;
|
||||
ulong memsize;
|
||||
} Mconf;
|
||||
extern Mconf mconf;
|
2
sys/src/cmd/cwfs/cwfs64/mkfile
Normal file
2
sys/src/cmd/cwfs/cwfs64/mkfile
Normal file
|
@ -0,0 +1,2 @@
|
|||
FS='64'
|
||||
<../portmkfile
|
31
sys/src/cmd/cwfs/cwfs64x/conf.c
Normal file
31
sys/src/cmd/cwfs/cwfs64x/conf.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* generic old-cw configuration */
|
||||
|
||||
#include "all.h"
|
||||
|
||||
#ifndef DATE
|
||||
#define DATE 1170808167L
|
||||
#endif
|
||||
|
||||
Timet fs_mktime = DATE; /* set by mkfile */
|
||||
|
||||
Startsb startsb[] = {
|
||||
"main", 2,
|
||||
nil,
|
||||
};
|
||||
|
||||
void
|
||||
localconfinit(void)
|
||||
{
|
||||
conf.nfile = 40000;
|
||||
conf.nodump = 0;
|
||||
// conf.nodump = 1; /* jukebox is r/o */
|
||||
conf.firstsb = 13219302;
|
||||
conf.recovsb = 0;
|
||||
conf.nlgmsg = 100;
|
||||
conf.nsmmsg = 500;
|
||||
}
|
||||
|
||||
int (*fsprotocol[])(Msgbuf*) = {
|
||||
serve9p2,
|
||||
nil,
|
||||
};
|
36
sys/src/cmd/cwfs/cwfs64x/dat.h
Normal file
36
sys/src/cmd/cwfs/cwfs64x/dat.h
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* generic old-cw configuration: 16K blocks, 32-bit sizes */
|
||||
|
||||
/*
|
||||
* The most fundamental constant.
|
||||
* The code will not compile with RBUFSIZE made a variable;
|
||||
* for one thing, RBUFSIZE determines FEPERBUF, which determines
|
||||
* the number of elements in a free-list-block array.
|
||||
*/
|
||||
#ifndef RBUFSIZE
|
||||
#define RBUFSIZE (16*1024) /* raw buffer size */
|
||||
#endif
|
||||
#include "64xbit.h"
|
||||
/*
|
||||
* setting this to zero permits the use of discs of different sizes, but
|
||||
* can make jukeinit() quite slow while the robotics work through each disc
|
||||
* twice (once per side).
|
||||
*/
|
||||
enum { FIXEDSIZE = 1 };
|
||||
|
||||
|
||||
#include "portdat.h"
|
||||
|
||||
enum { MAXBANK = 2 };
|
||||
|
||||
typedef struct Mbank {
|
||||
ulong base;
|
||||
ulong limit;
|
||||
} Mbank;
|
||||
|
||||
typedef struct Mconf {
|
||||
Lock;
|
||||
Mbank bank[MAXBANK];
|
||||
int nbank;
|
||||
ulong memsize;
|
||||
} Mconf;
|
||||
extern Mconf mconf;
|
2
sys/src/cmd/cwfs/cwfs64x/mkfile
Normal file
2
sys/src/cmd/cwfs/cwfs64x/mkfile
Normal file
|
@ -0,0 +1,2 @@
|
|||
FS='64x'
|
||||
<../portmkfile
|
|
@ -204,21 +204,36 @@ int
|
|||
checktag(Iobuf *p, int tag, Off qpath)
|
||||
{
|
||||
Tag *t;
|
||||
static Off lastaddr;
|
||||
ulong pc;
|
||||
|
||||
qpath &= ~QPDIR;
|
||||
t = (Tag*)(p->iobuf+BUFSIZE);
|
||||
if((tag != t->tag) || ((qpath != QPNONE) && (qpath != t->path))){
|
||||
pc = getcallerpc(&p);
|
||||
|
||||
if(qpath == QPNONE){
|
||||
print("checktag pc=%lux %Z(%llux) tag/path=%G/%llud; expected %G\n",
|
||||
pc, p->dev, (Wideoff)p->addr, t->tag, (Wideoff)t->path, tag);
|
||||
} else {
|
||||
print("checktag pc=%lux %Z(%llux) tag/path=%G/%llud; expected %G/%llud\n",
|
||||
pc, p->dev, (Wideoff)p->addr, t->tag, (Wideoff)t->path, tag, qpath);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
if(t->tag != tag) {
|
||||
if(p->flags & Bmod) {
|
||||
print("\ttag = %d/%llud; expected %lld/%d -- not flushed\n",
|
||||
print("\t%llux: tag = %G/%llud; expected %G/%d -- not flushed\n",
|
||||
t->tag, (Wideoff)t->path, (Wideoff)qpath, tag);
|
||||
return 2;
|
||||
}
|
||||
if(p->dev != nil && p->dev->type == Devcw)
|
||||
cwfree(p->dev, p->addr);
|
||||
if(p->addr != lastaddr)
|
||||
print("\ttag = %G/%llud; expected %G/%lld -- flushed (%lld)\n",
|
||||
t->tag, (Wideoff)t->path, tag, (Wideoff)qpath,
|
||||
(Wideoff)p->addr);
|
||||
print("\t%llux: tag = %G/%llud; expected %G/%lld -- flushed\n",
|
||||
(Wideoff)p->addr, t->tag, (Wideoff)t->path, tag, (Wideoff)qpath);
|
||||
|
||||
lastaddr = p->addr;
|
||||
p->dev = devnone;
|
||||
p->addr = -1;
|
||||
|
@ -226,13 +241,14 @@ checktag(Iobuf *p, int tag, Off qpath)
|
|||
return 2;
|
||||
}
|
||||
if(qpath != QPNONE) {
|
||||
if((qpath ^ t->path) & ~QPDIR) {
|
||||
if(1 || CHAT(0))
|
||||
print("\ttag/path = %llud; expected %d/%llux\n",
|
||||
(Wideoff)t->path, tag, (Wideoff)qpath);
|
||||
if(qpath ^ t->path) {
|
||||
print("\t%llux: tag/path = %G/%llud; expected %G/%llux\n",
|
||||
(Wideoff)p->addr, t->tag, (Wideoff)t->path, tag, (Wideoff)qpath);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ extern int oldcachefmt;
|
|||
|
||||
Map *devmap;
|
||||
|
||||
int sfd, rfd;
|
||||
Biobuf bin;
|
||||
|
||||
void
|
||||
|
@ -148,6 +149,57 @@ confinit(void)
|
|||
mapinit(conf.devmap);
|
||||
}
|
||||
|
||||
static int
|
||||
srvfd(char *s, int mode, int sfd)
|
||||
{
|
||||
int fd;
|
||||
char buf[32];
|
||||
|
||||
fd = create(s, ORCLOSE|OWRITE, mode);
|
||||
if(fd < 0){
|
||||
remove(s);
|
||||
fd = create(s, ORCLOSE|OWRITE, mode);
|
||||
if(fd < 0)
|
||||
panic(s);
|
||||
}
|
||||
sprint(buf, "%d", sfd);
|
||||
if(write(fd, buf, strlen(buf)) != strlen(buf))
|
||||
panic("srv write");
|
||||
return sfd;
|
||||
}
|
||||
|
||||
static void
|
||||
postservice(void)
|
||||
{
|
||||
char buf[3*NAMELEN];
|
||||
int p[2];
|
||||
|
||||
if(sfd < 0){
|
||||
if(pipe(p) < 0)
|
||||
panic("can't make a pipe");
|
||||
sfd = p[0];
|
||||
rfd = p[1];
|
||||
}
|
||||
|
||||
/* post 9p service */
|
||||
snprint(buf, sizeof(buf), "#s/%s", service);
|
||||
srvfd(buf, 0666, sfd);
|
||||
close(sfd);
|
||||
srvchan(rfd, buf);
|
||||
|
||||
if(pipe(p) < 0)
|
||||
panic("can't make a pipe");
|
||||
|
||||
/* post cmd service */
|
||||
snprint(buf, sizeof(buf), "#s/%s.cmd", service);
|
||||
srvfd(buf, 0222, p[0]);
|
||||
close(p[0]);
|
||||
|
||||
/* use it as stdin */
|
||||
dup(p[1], 0);
|
||||
close(p[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* compute BUFSIZE*(NDBLOCK+INDPERBUF+INDPERBUF+INDPERBUF+INDPERBUF⁴)
|
||||
* while watching for overflow; in that case, return 0.
|
||||
|
@ -224,8 +276,7 @@ printsizes(void)
|
|||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: %s [-cf][-a ann-str][-m dev-map] config-dev\n",
|
||||
argv0);
|
||||
fprint(2, "usage: %s [ -csC ] [ -a ann-str ] [ -m dev-map ] [-f config-dev ]\n", argv0);
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
|
@ -234,11 +285,13 @@ main(int argc, char **argv)
|
|||
{
|
||||
int i, nets = 0;
|
||||
char *ann;
|
||||
|
||||
|
||||
rfork(RFNOTEG);
|
||||
formatinit();
|
||||
machinit();
|
||||
conf.confdev = "n"; /* Devnone */
|
||||
conf.confdev = "/dev/sdC0/cwfs";
|
||||
|
||||
rfd = sfd = -1;
|
||||
|
||||
ARGBEGIN{
|
||||
case 'a': /* announce on this net */
|
||||
|
@ -250,12 +303,25 @@ main(int argc, char **argv)
|
|||
}
|
||||
annstrs[nets++] = ann;
|
||||
break;
|
||||
case 'c': /* use new, faster cache layout */
|
||||
case 's':
|
||||
sfd = dup(0, -1);
|
||||
rfd = dup(1, -1);
|
||||
close(0);
|
||||
if(open("/dev/cons", OREAD) < 0)
|
||||
open("#c/cons", OREAD);
|
||||
close(1);
|
||||
if(open("/dev/cons", OWRITE) < 0)
|
||||
open("#c/cons", OWRITE);
|
||||
break;
|
||||
case 'C': /* use new, faster cache layout */
|
||||
oldcachefmt = 0;
|
||||
break;
|
||||
case 'f': /* enter configuration mode first */
|
||||
case 'c':
|
||||
conf.configfirst++;
|
||||
break;
|
||||
case 'f': /* device / partition / file */
|
||||
conf.confdev = EARGF(usage());
|
||||
break;
|
||||
case 'm': /* name device-map file */
|
||||
conf.devmap = EARGF(usage());
|
||||
break;
|
||||
|
@ -264,9 +330,8 @@ main(int argc, char **argv)
|
|||
break;
|
||||
}ARGEND
|
||||
|
||||
if (argc != 1)
|
||||
if(argc != 0)
|
||||
usage();
|
||||
conf.confdev = argv[0]; /* config string for dev holding full config */
|
||||
|
||||
Binit(&bin, 0, OREAD);
|
||||
confinit();
|
||||
|
@ -304,6 +369,13 @@ main(int argc, char **argv)
|
|||
print("sysinit\n");
|
||||
sysinit();
|
||||
|
||||
srvinit();
|
||||
|
||||
/*
|
||||
* post filedescriptors to /srv
|
||||
*/
|
||||
postservice();
|
||||
|
||||
/*
|
||||
* Ethernet i/o processes
|
||||
*/
|
||||
|
@ -325,17 +397,15 @@ main(int argc, char **argv)
|
|||
*/
|
||||
newproc(wormcopy, 0, "wcp");
|
||||
|
||||
/*
|
||||
* "sync" copy process
|
||||
*/
|
||||
newproc(synccopy, 0, "scp");
|
||||
|
||||
/*
|
||||
* processes to read the console
|
||||
*/
|
||||
consserve();
|
||||
|
||||
/*
|
||||
* "sync" copy process
|
||||
* this doesn't return.
|
||||
*/
|
||||
procsetname("scp");
|
||||
synccopy();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -541,7 +611,7 @@ wormcopy(void *)
|
|||
* to get up-to-date.
|
||||
*/
|
||||
void
|
||||
synccopy(void)
|
||||
synccopy(void *)
|
||||
{
|
||||
int f;
|
||||
|
||||
|
@ -584,3 +654,4 @@ inqsize(char *file)
|
|||
free(data);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,14 @@ default:V: all
|
|||
|
||||
all allall first default clean nuke install installall safeinstall safeinstallall update man:V:
|
||||
cd cwfs && mk $target
|
||||
|
||||
emelie.%:V:
|
||||
cd emelie && mk $stem
|
||||
fs64.%:V:
|
||||
cd fs64 && mk $stem
|
||||
cwfs64.%:V:
|
||||
cd cwfs64 && mk $stem
|
||||
cwfs64x.%:V:
|
||||
cd cwfs64x && mk $stem
|
||||
|
||||
cleanall:V: clean emelie.clean fs64.clean
|
||||
cleanall:V: clean emelie.clean fs64.clean cwfs64.clean cwfs64x.clean
|
||||
|
|
|
@ -2,16 +2,6 @@
|
|||
|
||||
#include "all.h"
|
||||
#include "io.h"
|
||||
#include <fcall.h> /* 9p2000 */
|
||||
#include <thread.h>
|
||||
|
||||
enum {
|
||||
Maxfdata = 8192,
|
||||
Nqueue = 200, /* queue size (tunable) */
|
||||
|
||||
Netclosed = 0, /* Connection state */
|
||||
Netopen,
|
||||
};
|
||||
|
||||
/*
|
||||
* the kernel file server read packets directly from
|
||||
|
@ -40,14 +30,11 @@ enum {
|
|||
*/
|
||||
|
||||
typedef struct Network Network;
|
||||
typedef struct Netconn Netconn;
|
||||
typedef struct Conn9p Conn9p;
|
||||
|
||||
/* a network, not necessarily an ethernet */
|
||||
struct Network {
|
||||
int ctlrno;
|
||||
char iname[NAMELEN];
|
||||
char oname[NAMELEN];
|
||||
char name[NAMELEN];
|
||||
|
||||
char *dialstr;
|
||||
char anndir[40];
|
||||
|
@ -55,295 +42,18 @@ struct Network {
|
|||
int annfd; /* fd from announce */
|
||||
};
|
||||
|
||||
/* an open tcp (or other transport) connection */
|
||||
struct Netconn {
|
||||
Queue* reply; /* network output */
|
||||
char* raddr; /* remote caller's addr */
|
||||
Chan* chan; /* list of tcp channels */
|
||||
|
||||
int alloc; /* flag: allocated */
|
||||
|
||||
int state;
|
||||
Conn9p* conn9p; /* not reference-counted */
|
||||
|
||||
Lock;
|
||||
};
|
||||
|
||||
/*
|
||||
* incoming 9P network connection from a given machine.
|
||||
* typically will multiplex 9P sessions for multiple users.
|
||||
*/
|
||||
struct Conn9p {
|
||||
QLock;
|
||||
Ref;
|
||||
int fd;
|
||||
char* dir;
|
||||
Netconn*netconn; /* cross-connection */
|
||||
char* raddr;
|
||||
};
|
||||
|
||||
static Network netif[Maxnets];
|
||||
static struct {
|
||||
Lock;
|
||||
Chan* chan;
|
||||
} netchans;
|
||||
static Queue *netoq; /* only one network output queue is needed */
|
||||
|
||||
char *annstrs[Maxnets] = {
|
||||
"tcp!*!9fs",
|
||||
};
|
||||
|
||||
/* never returns nil */
|
||||
static Chan*
|
||||
getchan(Conn9p *conn9p)
|
||||
{
|
||||
Netconn *netconn;
|
||||
Chan *cp, *xcp;
|
||||
|
||||
lock(&netchans);
|
||||
|
||||
/* look for conn9p's Chan */
|
||||
xcp = nil;
|
||||
for(cp = netchans.chan; cp; cp = netconn->chan) {
|
||||
netconn = cp->pdata;
|
||||
if(!netconn->alloc)
|
||||
xcp = cp; /* remember free Chan */
|
||||
else if(netconn->raddr != nil &&
|
||||
strcmp(conn9p->raddr, netconn->raddr) == 0) {
|
||||
unlock(&netchans);
|
||||
return cp; /* found conn9p's Chan */
|
||||
}
|
||||
}
|
||||
|
||||
/* conn9p's Chan not found; if no free Chan, allocate & fill in one */
|
||||
cp = xcp;
|
||||
if(cp == nil) {
|
||||
cp = fs_chaninit(Devnet, 1, sizeof(Netconn));
|
||||
netconn = cp->pdata;
|
||||
netconn->chan = netchans.chan;
|
||||
netconn->state = Netopen; /* a guess */
|
||||
/* cross-connect netconn and conn9p */
|
||||
netconn->conn9p = conn9p; /* not reference-counted */
|
||||
conn9p->netconn = netconn;
|
||||
netchans.chan = cp;
|
||||
}
|
||||
|
||||
/* fill in Chan's netconn */
|
||||
netconn = cp->pdata;
|
||||
netconn->raddr = strdup(conn9p->raddr);
|
||||
|
||||
/* fill in Chan */
|
||||
cp->send = serveq;
|
||||
if (cp->reply == nil)
|
||||
cp->reply = netoq;
|
||||
netconn->reply = netoq;
|
||||
cp->protocol = nil;
|
||||
cp->msize = 0;
|
||||
cp->whotime = 0;
|
||||
strncpy(cp->whochan, conn9p->raddr, sizeof cp->whochan);
|
||||
// cp->whoprint = tcpwhoprint;
|
||||
netconn->alloc = 1;
|
||||
|
||||
unlock(&netchans);
|
||||
return cp;
|
||||
}
|
||||
|
||||
static char *
|
||||
fd2name(int fd)
|
||||
{
|
||||
char data[128];
|
||||
|
||||
if (fd2path(fd, data, sizeof data) < 0)
|
||||
return strdup("/GOK");
|
||||
return strdup(data);
|
||||
}
|
||||
|
||||
static void
|
||||
hangupdfd(int dfd)
|
||||
{
|
||||
int ctlfd;
|
||||
char *end, *data;
|
||||
|
||||
data = fd2name(dfd);
|
||||
close(dfd);
|
||||
|
||||
end = strstr(data, "/data");
|
||||
if (end != nil)
|
||||
strcpy(end, "/ctl");
|
||||
ctlfd = open(data, OWRITE);
|
||||
if (ctlfd >= 0) {
|
||||
hangup(ctlfd);
|
||||
close(ctlfd);
|
||||
}
|
||||
free(data);
|
||||
}
|
||||
|
||||
void
|
||||
closechan(int n)
|
||||
{
|
||||
Chan *cp;
|
||||
|
||||
for(cp = chans; cp; cp = cp->next)
|
||||
if(cp->whotime != 0 && cp->chan == n)
|
||||
fileinit(cp);
|
||||
}
|
||||
|
||||
void
|
||||
nethangup(Chan *cp, char *msg, int dolock)
|
||||
{
|
||||
Netconn *netconn;
|
||||
|
||||
netconn = cp->pdata;
|
||||
netconn->state = Netclosed;
|
||||
|
||||
if(msg != nil)
|
||||
print("hangup! %s %s\n", msg, netconn->raddr);
|
||||
|
||||
fileinit(cp);
|
||||
cp->whotime = 0;
|
||||
strcpy(cp->whoname, "<none>");
|
||||
|
||||
if(dolock)
|
||||
lock(&netchans);
|
||||
netconn->alloc = 0;
|
||||
free(netconn->raddr);
|
||||
netconn->raddr = nil;
|
||||
if(dolock)
|
||||
unlock(&netchans);
|
||||
}
|
||||
|
||||
void
|
||||
chanhangup(Chan *cp, char *msg, int dolock)
|
||||
{
|
||||
Netconn *netconn = cp->pdata;
|
||||
Conn9p *conn9p = netconn->conn9p;
|
||||
|
||||
if (conn9p->fd > 0)
|
||||
hangupdfd(conn9p->fd); /* drop it */
|
||||
nethangup(cp, msg, dolock);
|
||||
}
|
||||
|
||||
/*
|
||||
* returns length of next 9p message (including the length) and
|
||||
* leaves it in the first few bytes of abuf.
|
||||
*/
|
||||
static long
|
||||
size9pmsg(int fd, void *abuf, uint n)
|
||||
{
|
||||
int m;
|
||||
uchar *buf = abuf;
|
||||
|
||||
if (n < BIT32SZ)
|
||||
return -1; /* caller screwed up */
|
||||
|
||||
/* read count */
|
||||
m = readn(fd, buf, BIT32SZ);
|
||||
if(m != BIT32SZ){
|
||||
if(m < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
return GBIT32(buf);
|
||||
}
|
||||
|
||||
static int
|
||||
readalloc9pmsg(int fd, Msgbuf **mbp)
|
||||
{
|
||||
int m, len;
|
||||
uchar lenbuf[BIT32SZ];
|
||||
Msgbuf *mb;
|
||||
|
||||
*mbp = nil;
|
||||
len = size9pmsg(fd, lenbuf, BIT32SZ);
|
||||
if (len <= 0)
|
||||
return len;
|
||||
if(len <= BIT32SZ || len > IOHDRSZ+Maxfdata){
|
||||
werrstr("bad length in 9P2000 message header");
|
||||
return -1;
|
||||
}
|
||||
if ((mb = mballoc(len, nil, Mbeth1)) == nil)
|
||||
panic("readalloc9pmsg: mballoc failed");
|
||||
*mbp = mb;
|
||||
memmove(mb->data, lenbuf, BIT32SZ);
|
||||
len -= BIT32SZ;
|
||||
m = readn(fd, mb->data+BIT32SZ, len);
|
||||
if(m < len)
|
||||
return 0;
|
||||
return BIT32SZ+m;
|
||||
}
|
||||
|
||||
static void
|
||||
connection(void *v)
|
||||
{
|
||||
int n;
|
||||
char buf[64];
|
||||
Chan *chan9p;
|
||||
Conn9p *conn9p = v;
|
||||
Msgbuf *mb;
|
||||
NetConnInfo *nci;
|
||||
|
||||
incref(conn9p); /* count connections */
|
||||
nci = getnetconninfo(conn9p->dir, conn9p->fd);
|
||||
if (nci == nil)
|
||||
panic("connection: getnetconninfo(%s, %d) failed",
|
||||
conn9p->dir, conn9p->fd);
|
||||
conn9p->raddr = nci->raddr;
|
||||
|
||||
chan9p = getchan(conn9p);
|
||||
print("new connection on %s pid %d from %s\n",
|
||||
conn9p->dir, getpid(), conn9p->raddr);
|
||||
|
||||
/*
|
||||
* reading from a pipe or a network device
|
||||
* will give an error after a few eof reads.
|
||||
* however, we cannot tell the difference
|
||||
* between a zero-length read and an interrupt
|
||||
* on the processes writing to us,
|
||||
* so we wait for the error.
|
||||
*/
|
||||
while (conn9p->fd > 0 && (n = readalloc9pmsg(conn9p->fd, &mb)) >= 0) {
|
||||
if(n == 0)
|
||||
continue;
|
||||
mb->param = (uintptr)conn9p; /* has fd for replies */
|
||||
mb->chan = chan9p;
|
||||
|
||||
assert(mb->magic == Mbmagic);
|
||||
incref(conn9p); /* & count packets in flight */
|
||||
fs_send(serveq, mb); /* to 9P server processes */
|
||||
/* mb will be freed by receiving process */
|
||||
}
|
||||
|
||||
rerrstr(buf, sizeof buf);
|
||||
|
||||
qlock(conn9p);
|
||||
print("connection hung up from %s\n", conn9p->dir);
|
||||
if (conn9p->fd > 0) /* not poisoned yet? */
|
||||
hangupdfd(conn9p->fd); /* poison the fd */
|
||||
|
||||
nethangup(chan9p, "remote hung up", 1);
|
||||
closechan(chan9p->chan);
|
||||
|
||||
conn9p->fd = -1; /* poison conn9p */
|
||||
if (decref(conn9p) == 0) { /* last conn.? turn the lights off */
|
||||
free(conn9p->dir);
|
||||
qunlock(conn9p);
|
||||
free(conn9p);
|
||||
} else
|
||||
qunlock(conn9p);
|
||||
|
||||
freenetconninfo(nci);
|
||||
|
||||
if(buf[0] == '\0' || strstr(buf, "hungup") != nil)
|
||||
exits("");
|
||||
sysfatal("mount read, pid %d", getpid());
|
||||
}
|
||||
|
||||
static void
|
||||
neti(void *v)
|
||||
{
|
||||
int lisfd, accfd;
|
||||
Network *net;
|
||||
Conn9p *conn9p;
|
||||
NetConnInfo *nci;
|
||||
|
||||
net = v;
|
||||
print("net%di\n", net->ctlrno);
|
||||
|
@ -362,77 +72,23 @@ neti(void *v)
|
|||
continue;
|
||||
}
|
||||
|
||||
/* accepted that call */
|
||||
conn9p = malloc(sizeof *conn9p);
|
||||
conn9p->dir = strdup(net->lisdir);
|
||||
conn9p->fd = accfd;
|
||||
newproc(connection, conn9p, smprint("9P read %s", conn9p->dir));
|
||||
nci = getnetconninfo(net->lisdir, accfd);
|
||||
srvchan(accfd, nci->raddr);
|
||||
freenetconninfo(nci);
|
||||
close(lisfd);
|
||||
}
|
||||
}
|
||||
|
||||
/* only need one of these for all network connections, thus all interfaces */
|
||||
static void
|
||||
neto(void *)
|
||||
{
|
||||
int len, datafd;
|
||||
Msgbuf *mb;
|
||||
Conn9p *conn9p;
|
||||
|
||||
print("neto\n");
|
||||
for(;;) {
|
||||
/* receive 9P answer from 9P server processes */
|
||||
while((mb = fs_recv(netoq, 0)) == nil)
|
||||
continue;
|
||||
|
||||
if(mb->data == nil) {
|
||||
print("neto: pkt nil cat=%d free=%d\n",
|
||||
mb->category, mb->flags&FREE);
|
||||
if(!(mb->flags & FREE))
|
||||
mbfree(mb);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* send answer back over the network connection in the reply */
|
||||
len = mb->count;
|
||||
conn9p = (Conn9p *)mb->param;
|
||||
assert(conn9p);
|
||||
|
||||
qlock(conn9p);
|
||||
datafd = conn9p->fd;
|
||||
assert(len >= 0);
|
||||
/* datafd < 0 probably indicates poisoning by the read side */
|
||||
if (datafd < 0 || write(datafd, mb->data, len) != len) {
|
||||
print( "network write error (%r);");
|
||||
print(" closing connection for %s\n", conn9p->dir);
|
||||
nethangup(getchan(conn9p), "network write error", 1);
|
||||
if (datafd > 0)
|
||||
hangupdfd(datafd); /* drop it */
|
||||
conn9p->fd = -1; /* poison conn9p */
|
||||
}
|
||||
mbfree(mb);
|
||||
if (decref(conn9p) == 0)
|
||||
panic("neto: zero ref count");
|
||||
qunlock(conn9p);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
netstart(void)
|
||||
{
|
||||
int netorun = 0;
|
||||
Network *net;
|
||||
|
||||
if(netoq == nil)
|
||||
netoq = newqueue(Nqueue, "network reply");
|
||||
for(net = &netif[0]; net < &netif[Maxnets]; net++){
|
||||
if(net->dialstr == nil)
|
||||
continue;
|
||||
sprint(net->oname, "neto");
|
||||
if (netorun++ == 0)
|
||||
newproc(neto, nil, net->oname);
|
||||
sprint(net->iname, "net%di", net->ctlrno);
|
||||
newproc(neti, net, net->iname);
|
||||
sprint(net->name, "net%di", net->ctlrno);
|
||||
newproc(neti, net, net->name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ mconfinit(void)
|
|||
}
|
||||
Bterm(bp);
|
||||
if (pgsize > 0 && userpgs > 0)
|
||||
size = (((userpgs - userused)*3LL)/4)*pgsize;
|
||||
size = (((userpgs - userused)*1LL)/4)*pgsize;
|
||||
}
|
||||
mconf.memsize = size;
|
||||
mbp = mconf.bank;
|
||||
|
|
|
@ -699,6 +699,7 @@ enum
|
|||
Devfloppy, /* floppy drive */
|
||||
Devswab, /* swab data between mem and device */
|
||||
Devmirr, /* mirror devices */
|
||||
Devsrv, /* pipes and network connections */
|
||||
MAXDEV
|
||||
};
|
||||
|
||||
|
|
|
@ -197,6 +197,7 @@ void schedinit(void);
|
|||
int scsiio(Device*, int, uchar*, int, void*, int);
|
||||
void scsiinit(void);
|
||||
Off scsiread(int, void*, long);
|
||||
Devsize scsiseek(int, Devsize);
|
||||
Off scsiwrite(int, void*, long);
|
||||
char* sdof(Device*);
|
||||
void sec2rtc(Timet, Rtc *);
|
||||
|
@ -229,7 +230,7 @@ void unlock(Lock*);
|
|||
void newproc(void(*)(void *), void*, char*);
|
||||
void wormcopy(void *);
|
||||
void wormprobe(void);
|
||||
void synccopy(void);
|
||||
void synccopy(void *);
|
||||
long wormsearch(Device*, int, long, long);
|
||||
int wormread(Device*, Off, void*);
|
||||
Devsize wormsize(Device*);
|
||||
|
@ -243,3 +244,6 @@ int wrenwrite(Device*, Off, void*);
|
|||
void cmd_exec(char*);
|
||||
void cmd_install(char*, char*, void (*)(int, char*[]));
|
||||
ulong flag_install(char*, char*);
|
||||
void srvinit(void);
|
||||
Chan *srvchan(int, char *);
|
||||
|
||||
|
|
|
@ -27,10 +27,12 @@ OFILES=\
|
|||
time.$O\
|
||||
uidgid.$O\
|
||||
wren.$O\
|
||||
srv.$O\
|
||||
|
||||
HFILES=\
|
||||
../32bit.h\
|
||||
../64bit.h\
|
||||
../64xbit.h\
|
||||
../9p1.h\
|
||||
../all.h\
|
||||
dat.h\
|
||||
|
|
209
sys/src/cmd/cwfs/srv.c
Normal file
209
sys/src/cmd/cwfs/srv.c
Normal file
|
@ -0,0 +1,209 @@
|
|||
#include "all.h"
|
||||
#include "io.h"
|
||||
#include <fcall.h> /* 9p2000 */
|
||||
#include <thread.h>
|
||||
|
||||
enum {
|
||||
Maxfdata = 8192,
|
||||
Nqueue = 200, /* queue size (tunable) */
|
||||
Nsrvo = 8, /* number of write workers */
|
||||
};
|
||||
|
||||
typedef struct Srv Srv;
|
||||
struct Srv
|
||||
{
|
||||
Ref;
|
||||
char *name;
|
||||
Chan *chan;
|
||||
int fd;
|
||||
char buf[64];
|
||||
};
|
||||
|
||||
static struct {
|
||||
Lock;
|
||||
Chan *hd;
|
||||
} freechans;
|
||||
|
||||
static Queue *srvoq;
|
||||
|
||||
void
|
||||
chanhangup(Chan *chan, char *msg, int dolock)
|
||||
{
|
||||
Srv *srv;
|
||||
|
||||
USED(dolock);
|
||||
USED(msg);
|
||||
|
||||
fileinit(chan);
|
||||
if(chan->type != Devsrv)
|
||||
return;
|
||||
srv = chan->pdata;
|
||||
if(srv == nil || srv->chan != chan)
|
||||
return;
|
||||
close(srv->fd);
|
||||
srv->fd = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
srvput(Srv *srv)
|
||||
{
|
||||
Chan *chan;
|
||||
|
||||
if(decref(srv))
|
||||
return;
|
||||
|
||||
print("%s closed\n", srv->name);
|
||||
|
||||
chanhangup(srv->chan, "", 0);
|
||||
memset(srv->buf, 0, sizeof(srv->buf));
|
||||
chan = srv->chan;
|
||||
lock(&freechans);
|
||||
srv->chan = freechans.hd;
|
||||
freechans.hd = chan;
|
||||
unlock(&freechans);
|
||||
}
|
||||
|
||||
static void
|
||||
srvo(void *)
|
||||
{
|
||||
Srv *srv;
|
||||
Msgbuf *mb;
|
||||
char buf[ERRMAX];
|
||||
|
||||
print("srvo\n");
|
||||
|
||||
for(;;){
|
||||
mb = fs_recv(srvoq, 0);
|
||||
if(mb == nil)
|
||||
continue;
|
||||
if(mb->data == nil){
|
||||
if(!(mb->flags & FREE))
|
||||
mbfree(mb);
|
||||
continue;
|
||||
}
|
||||
srv = (Srv*)mb->param;
|
||||
while((srv->fd >= 0) && (write(srv->fd, mb->data, mb->count) != mb->count)){
|
||||
rerrstr(buf, sizeof(buf));
|
||||
if(strstr(buf, "interrupt"))
|
||||
continue;
|
||||
|
||||
if(buf[0])
|
||||
print("srvo %s: %s\n", srv->name, buf);
|
||||
chanhangup(srv->chan, buf, 0);
|
||||
break;
|
||||
}
|
||||
mbfree(mb);
|
||||
srvput(srv);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
srvi(void *aux)
|
||||
{
|
||||
Srv *srv = aux;
|
||||
Msgbuf *mb, *ms;
|
||||
uchar *b, *p, *e;
|
||||
int n, m;
|
||||
char buf[ERRMAX];
|
||||
|
||||
print("srvi %s\n", srv->name);
|
||||
|
||||
if((mb = mballoc(IOHDRSZ+Maxfdata, srv->chan, Mbeth1)) == nil)
|
||||
panic("srvi %s: mballoc failed", srv->name);
|
||||
b = mb->data;
|
||||
p = b;
|
||||
e = b + mb->count;
|
||||
|
||||
Read:
|
||||
while((srv->fd >= 0) && ((n = read(srv->fd, p, e - p)) >= 0)){
|
||||
p += n;
|
||||
while((p - b) >= BIT32SZ){
|
||||
m = GBIT32(b);
|
||||
if((m < BIT32SZ) || (m > mb->count)){
|
||||
werrstr("bad length in 9P2000 message header");
|
||||
goto Error;
|
||||
}
|
||||
if((n = (p - b) - m) < 0){
|
||||
e = b + m;
|
||||
goto Read;
|
||||
}
|
||||
if(m <= SMALLBUF){
|
||||
if((ms = mballoc(m, srv->chan, Mbeth1)) == nil)
|
||||
panic("srvi %s: mballoc failed", srv->name);
|
||||
memmove(ms->data, b, m);
|
||||
} else {
|
||||
ms = mb;
|
||||
if((mb = mballoc(mb->count, srv->chan, Mbeth1)) == nil)
|
||||
panic("srvi %s: mballoc failed", srv->name);
|
||||
ms->count = m;
|
||||
}
|
||||
if(n > 0)
|
||||
memmove(mb->data, b + m, n);
|
||||
b = mb->data;
|
||||
p = b + n;
|
||||
|
||||
incref(srv);
|
||||
ms->param = (uint)srv;
|
||||
fs_send(serveq, ms);
|
||||
}
|
||||
e = b + mb->count;
|
||||
}
|
||||
|
||||
Error:
|
||||
rerrstr(buf, sizeof(buf));
|
||||
if(strstr(buf, "interrupt"))
|
||||
goto Read;
|
||||
|
||||
if(buf[0])
|
||||
print("srvi %s: %s\n", srv->name, buf);
|
||||
chanhangup(srv->chan, buf, 0);
|
||||
srvput(srv);
|
||||
|
||||
mbfree(mb);
|
||||
}
|
||||
|
||||
Chan*
|
||||
srvchan(int fd, char *name)
|
||||
{
|
||||
Chan *chan;
|
||||
Srv *srv;
|
||||
|
||||
lock(&freechans);
|
||||
if(chan = freechans.hd){
|
||||
srv = chan->pdata;
|
||||
freechans.hd = srv->chan;
|
||||
unlock(&freechans);
|
||||
} else {
|
||||
unlock(&freechans);
|
||||
chan = fs_chaninit(Devsrv, 1, sizeof(*srv));
|
||||
srv = chan->pdata;
|
||||
}
|
||||
chan->reply = srvoq;
|
||||
if(chan->send == nil)
|
||||
chan->send = serveq;
|
||||
chan->protocol = nil;
|
||||
chan->msize = 0;
|
||||
chan->whotime = 0;
|
||||
|
||||
incref(srv);
|
||||
srv->chan = chan;
|
||||
srv->fd = fd;
|
||||
snprint(srv->buf, sizeof(srv->buf), "srvi %s", name);
|
||||
srv->name = strchr(srv->buf, ' ')+1;
|
||||
newproc(srvi, srv, srv->buf);
|
||||
|
||||
return chan;
|
||||
}
|
||||
|
||||
void
|
||||
srvinit(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if(srvoq != nil)
|
||||
return;
|
||||
|
||||
srvoq = newqueue(Nqueue, "srvoq");
|
||||
for(i=0; i<Nsrvo; i++)
|
||||
newproc(srvo, nil, "srvo");
|
||||
}
|
|
@ -614,7 +614,9 @@ Zfmt(Fmt* fmt)
|
|||
case Devlworm:
|
||||
if (c == '\0')
|
||||
c = 'l';
|
||||
if(d->wren.ctrl == 0 && d->wren.lun == 0)
|
||||
if(d->wren.file)
|
||||
snprint(s, sizeof(s), "%c\"%s\"", c, d->wren.file);
|
||||
else if(d->wren.ctrl == 0 && d->wren.lun == 0)
|
||||
sprint(s, "%c%d", c, d->wren.targ);
|
||||
else
|
||||
sprint(s, "%c%d.%d.%d", c, d->wren.ctrl, d->wren.targ,
|
||||
|
|
|
@ -116,5 +116,6 @@ wrenwrite(Device *d, Off b, void *c)
|
|||
cons.nwrenwe++;
|
||||
r = 1;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue