]>
git.proxmox.com Git - mirror_ifupdown2.git/blob - sbin/ifupdown
7 from ifupdown
.ifupdownmain
import *
11 lockfile
="/run/network/.lock"
15 logger
.debug('args = %s' %str
(args
))
19 if len(args
.iflist
) == 0:
22 cachearg
=(False if (iflist
is not None or
23 args
.nocache
== True or
24 args
.perfmode
== True)
27 logger
.debug('creating ifupdown object ..')
28 if op
== 'up' or op
== 'down' or op
== 'reload':
29 ifupdown_handle
= ifupdownMain(force
=args
.force
,
30 withdepends
=args
.withdepends
,
31 perfmode
=args
.perfmode
,
36 ifupdown_handle
= ifupdownMain(withdepends
=args
.withdepends
,
37 perfmode
=args
.perfmode
,
42 logger
.debug('calling \'%s\'' %op
+ ' for all interfaces ..')
44 ifupdown_handle
.up(args
.all
, args
.CLASS
, iflist
,
45 excludepats
=args
.excludepats
,
46 printdependency
=args
.printdependency
)
48 ifupdown_handle
.down(args
.all
, args
.CLASS
, iflist
,
49 excludepats
=args
.excludepats
)
51 if args
.checkcurstate
== True:
52 qtype
='query-checkcurr'
53 elif args
.presumedstate
== True:
54 qtype
='query-presumed'
55 elif args
.presumedstatedetailed
== True:
56 qtype
='query-presumeddetailed'
57 elif args
.runningstate
== True:
59 iflist
= [i
for i
in os
.listdir('/sys/class/net/')
60 if os
.path
.isdir('/sys/class/net/%s' %i) == True]
62 elif args
.pretty
== True:
67 ifupdown_handle
.query(qtype
, args
.all
, args
.CLASS
, iflist
,
68 excludepats
=args
.excludepats
,
69 printdependency
=args
.printdependency
)
71 if iflist
is not None:
72 raise Exception('iflist is currently not supported with reload')
73 ifupdown_handle
.reload(args
.all
, args
.CLASS
, iflist
,
74 excludepats
=args
.excludepats
,
75 downchangediface
=args
.downchangediface
)
82 log_level
= logging
.WARNING
84 if args
.verbose
== True:
85 log_level
= logging
.INFO
87 if args
.debug
== True:
88 log_level
= logging
.DEBUG
91 logging
.basicConfig(level
=log_level
,
92 format
='%(levelname)s: %(message)s')
93 logger
= logging
.getLogger('ifupdown')
101 def update_argparser(argparser
):
102 """ base parser, common to all commands """
104 argparser
.add_argument('-a', '--all', action
='store_true', required
=False,
105 help='process all interfaces marked \"auto\"')
106 argparser
.add_argument('iflist', metavar
='IFACE',
107 nargs
='*', help='interface list separated by spaces')
109 argparser
.add_argument('-v', '--verbose', dest
='verbose',
110 action
='store_true', help='verbose')
111 argparser
.add_argument('-d', '--debug', dest
='debug',
113 help='output debug info')
114 argparser
.add_argument('-q', '--quiet', dest
='quiet',
116 help=argparse
.SUPPRESS
)
117 argparser
.add_argument('--allow', dest
='CLASS',
118 help='ignore non-\"allow-CLASS\" interfaces')
119 argparser
.add_argument('--with-depends', dest
='withdepends',
120 action
='store_true', help='run with all dependent interfaces')
121 argparser
.add_argument('--perfmode', dest
='perfmode',
122 action
='store_true', help=argparse
.SUPPRESS
)
123 argparser
.add_argument('-j', '--jobs', dest
='jobs', type=int,
124 default
=-1, choices
=range(1,12), help=argparse
.SUPPRESS
)
125 argparser
.add_argument('--nocache', dest
='nocache', action
='store_true',
126 help=argparse
.SUPPRESS
)
127 argparser
.add_argument('-X', '--exclude', dest
='excludepats',
129 help='Exclude interfaces from the list of interfaces' +
132 def update_ifupdown_argparser(argparser
):
133 """ common arg parser for ifup and ifdown """
134 argparser
.add_argument('-f', '--force', dest
='force',
136 help='force run all operations')
137 argparser
.add_argument('-n', '--no-act', dest
='noact',
138 action
='store_true', help='print out what would happen,' +
140 argparser
.add_argument('--print-dependency',
141 dest
='printdependency', choices
=['list', 'dot'],
142 help='print iface dependency')
144 def update_ifup_argparser(argparser
):
145 update_ifupdown_argparser(argparser
)
147 def update_ifdown_argparser(argparser
):
148 update_ifupdown_argparser(argparser
)
150 def update_ifquery_argparser(argparser
):
151 """ arg parser for ifquery options """
153 # -l is same as '-a', only here for backward compatibility
154 argparser
.add_argument('-l', '--list', action
='store_true', dest
='all',
155 help=argparse
.SUPPRESS
)
156 group
= argparser
.add_mutually_exclusive_group(required
=False)
157 group
.add_argument('-r', '--running-state', dest
='runningstate',
159 help='query running state of an interface')
161 group
.add_argument('-c', '--check-state', dest
='checkcurstate',
163 help='check running against config of an interface')
165 # presumed-state is state maintained by ifupdown
166 group
.add_argument('--presumed-state', dest
='presumedstate',
167 action
='store_true', help=argparse
.SUPPRESS
)
169 # presumed-state-detailed prints all details about the object stored
171 group
.add_argument('--presumed-state-detailed',
172 dest
='presumedstatedetailed',
173 action
='store_true', help=argparse
.SUPPRESS
)
175 group
.add_argument('--format', dest
='format', default
='nwifaces',
176 choices
=['nwifaces', 'json'], help=argparse
.SUPPRESS
)
178 group
.add_argument('--pretty', action
='store_true', dest
='pretty',
179 help='pretty print config file entries')
181 argparser
.add_argument('--print-dependency',
182 dest
='printdependency', choices
=['list', 'dot'],
183 help=argparse
.SUPPRESS
)
185 def update_ifreload_argparser(argparser
):
186 update_ifupdown_argparser(argparser
)
188 argparser
.add_argument('--down-changediface', dest
='downchangediface',
190 help='down interfaces that have changed before bringing them up')
192 def parse_args(argsv
, op
):
194 descr
= 'query interfaces (all or interface list)'
196 descr
= 'interface management'
198 argparser
= argparse
.ArgumentParser(description
=descr
)
199 update_argparser(argparser
)
201 update_ifup_argparser(argparser
)
203 update_ifdown_argparser(argparser
)
205 update_ifquery_argparser(argparser
)
207 update_ifreload_argparser(argparser
)
209 return argparser
.parse_args(argsv
)
212 """ main function """
215 if re
.search(r
'ifup', argv
[0]) != None:
217 elif re
.search(r
'ifdown', argv
[0]) != None:
219 elif re
.search(r
'ifquery', argv
[0]) != None:
221 elif re
.search(r
'ifreload', argv
[0]) != None:
224 print ('Unexpected executable.' +
225 ' Should be \'ifup\' or \'ifdown\' or \'ifquery\'')
228 # Command line arg parser
229 args
= parse_args(argv
[1:], op
)
230 if len(args
.iflist
) == 0 and args
.all
== False:
231 print '\'-a\' option or interface list are required'
234 if len(args
.iflist
) > 0 and args
.all
is True:
235 print '\'-a\' option and interface list are mutually exclusive'
244 if args
.debug
== True:
248 print '\nRerun the command with \'-d\' for a detailed errormsg'
253 if __name__
== "__main__":
255 if not os
.geteuid() == 0:
256 print 'Error: Must be root to run this command'
260 XXX: Cannot use this. A spawned dhclient process can hold the lock
261 if not utilities.lockFile(lockfile):
262 print 'Another instance of this program is already running.'