blob: 0e078e0a361947f87a5d77fb66fe6641ee629e0c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#compdef linux uml_moo uml_mconsole uml_switch tunctl
local curcontext="$curcontext" state st line expl suf ret=1
typeset -A opt_args
case $service in
uml_moo)
_arguments '1:COW file:_files -g \*cow\*' '2:new backing file:_files'
return
;;
uml_switch)
_arguments \
'-unix[listen on specified pair of sockets]:control socket: :data socket' \
'-hub[act like a hub]'
;;
uml_mconsole)
if (( CURRENT == 2 )); then
_wanted socket expl 'socket name' compadd {~/.uml,/tmp}/*/mconsole(N=:h:t) && ret=0
elif [[ $words[CURRENT-1] = config ]]; then
if [[ -prefix ubd || -prefix eth ]]; then
state=option
else
_wanted device expl device compadd -S '' ubd eth && ret=0
fi
elif [[ $words[CURRENT-1] = remove ]]; then
_wanted device expl device compadd ubd{0..7} eth{0..9} && ret=0
elif (( CURRENT == 3 )); then
_values 'command' \
'version[print the UML kernel version number]' \
'help[print help]' \
'halt[shutdown UML system immediately]' \
'reboot[reboot the UML system immediately]' \
'config[add a new device to the virtual machine]' \
'remove[delete a device from the virtual machine]' \
'sysrq[perform sysrq action]:key:((r\:turn\ of\ keyboard\ raw\ mode k\:secure\ access\ key b\:reboot o\:shutdown s\:sync u\:remount p\:dump\ registers t\:dump\ tasks m\:dump\ memory e\:SIGTERM\ to\ all i\:SIGKILL\ to\ all l\:SIGKILL\ to\ all\ inc.\ init h\:help {0..9}\:console\ log\ level))' \
'cad[invoke ctrl-alt-del handler]' \
'stop[pause the UML]' \
'go[continue the UML]' \
&& ret=0
else
_message 'no more arguments'
fi
;;
linux)
_arguments -C \
'(* -)--version[display kernel version number]' \
'(* -)--help[print usage information]' \
'(* -)--showconfig[show kernel configuration]' \
'(-)*:option:->option' && return
;;
tunctl)
_arguments \
'(-d)-b[brief output]' \
'-f[specify tun clone device]:tun clone device:_files' \
'(-d)-u[specify owner]:owner:_users' \
'(-b -u -t)-d[specify devicename to delete]:device name:(tap{0..9})' \
'(-d)-t[specify devicename]:device name:(tap{0..9})'
;;
esac
while [[ -n $state ]]; do
st=$state
unset state
case $st in
option)
if compset -P '(ssl|con)[0-9]#='; then
state=channel
continue
elif compset -P con; then
_message -e consoles 'console number'
return
elif compset -P ssl; then
_message -e serial 'serial line number'
return
elif compset -P 'ubd[0-7](|r)(|s)='; then
compset -P '*,'
_files && return
elif compset -P ubd; then
_message -e devices 'device number'
return
elif compset -P 'eth[0-9]##='; then
if compset -P 1 '*,'; then
_message -e options option
else
_wanted transports expl transports compadd -S, \
ethertap tuntap daemon mcast slip && return
fi
return
elif compset -P eth; then
_message -e ethernet number
return
fi
compadd -n -S '' con ssl ubd eth && ret=0
_values -C -w "option" \
'mem[specify amount of "physical" memory to allocate]:memory' \
'iomem[configure file as named IO memory region]:arg:->iomem' \
'gdb[attach gdb to specified channel]:channel:->channel' \
'gdb-pid[specify pid of debugger]:debugger pid:_pids' \
'debugtrace[cause tracing thread to wait for debugger]' \
'honeypot[put process stacks in the same location as on host]' \
'debug[start kernel under gdb control]' \
'root[specify root filesystem]:root device' \
'umid[specify name for this UML machine]:name' \
'uml_dir[location to place pid and umid files]:directory:_directories' \
'initrd[boot from initrd image]:initrd file:_files' \
'jail[enable protection of kernel memory from processes]' \
'*con[attach a console to a host channel]:channel:->channel' \
'*ssl[attach a serial line to a host channel]:channel:->channel' \
'fake_ide[create ide0 entries which map onto ubd devices]' \
'*ubd[associate device with host file]' \
'fakehd[change the ubd device name to "hd"]' \
'*eth[configure a network device]' \
'ncpus[specify number of virtual processors to start]:processors' \
'mode[force UML to run in specified mode]:mode:(tt)' \
'mconsole[request mconsole driver to send a message to socket]:socket' \
'xterm[specify alternate terminal emulator]:terminal emulator:->xterm' \
'dsp[specify host dsp device]:dsp device:_files' \
'mixer[specify host mixer device]:mixer device:_files' \
'umn[specify ip address for host side of slip device]' && ret=0
;;
iomem)
if compset -P '*,'; then
_files && ret=0
else
_message -e name
fi
;;
channel)
compset -P '*,' || suf=( -S , )
_values -S : ${suf/S/s} "channel" \
pty pts xterm \
'tty:tty:_files $suf' \
"fd:file descriptor:_file_descriptors $suf" && ret=0
;;
xterm)
if compset -P 2 '*,'; then
_wanted -x argument expl 'execute switch' compadd - -e -x && ret=0
elif compset -P 1 '*,'; then
_wanted -x argument expl 'title switch' compadd -S , - -t -T -title && ret=0
else
_wanted command expl 'terminal emulator' _command_names -e -S , && ret=0
fi
;;
esac
done
return ret
|