about summary refs log tree commit diff
path: root/Completion/Linux/Command/_uml
blob: f2deb74840ef72a31a65ef48fd493ccdc678b63f (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 'console number'
	return
      elif compset -P ssl; then
	_message 'serial line number'
	return
      elif compset -P 'ubd[0-7](|r)(|s)='; then
        compset -P '*,'
        _files && return
      elif compset -P ubd; then
        _message 'device number'
	return
      elif compset -P 'eth[0-9]##='; then
        if compset -P 1 '*,'; then
	  _message option
	else
	  _wanted transports expl transports compadd -S, \
	    ethertap tuntap daemon mcast slip && return
        fi
	return
      elif compset -P eth; then
        _message number
	return
      fi
      compadd -n -S '' con ssl ubd eth && ret=0
      _values -C "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]:terminam 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 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