]>
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 args
.nocache
== True else True
23 logger
.debug('creating ifupdown object ..')
24 if op
== 'up' or op
== 'down' or op
== 'reload':
25 ifupdown_handle
= ifupdownMain(force
=args
.force
,
26 withdepends
=args
.withdepends
,
27 perfmode
=args
.perfmode
,
32 ifupdown_handle
= ifupdownMain(withdepends
=args
.withdepends
,
33 perfmode
=args
.perfmode
,
38 logger
.debug('calling %s' %op
+ ' for all interfaces ..')
40 ifupdown_handle
.up(args
.all
, args
.CLASS
, iflist
,
41 excludepats
=args
.excludepats
,
42 printdependency
=args
.printdependency
)
44 ifupdown_handle
.down(args
.all
, args
.CLASS
, iflist
,
45 excludepats
=args
.excludepats
)
47 if args
.checkcurstate
== True:
48 qtype
='query-checkcurr'
49 elif args
.presumedstate
== True:
50 qtype
='query-presumed'
51 elif args
.presumedstatedetailed
== True:
52 qtype
='query-presumeddetailed'
53 elif args
.runningstate
== True:
55 iflist
= [i
for i
in os
.listdir('/sys/class/net/')
56 if os
.path
.isdir('/sys/class/net/%s' %i) == True]
59 elif args
.pretty
== True:
64 ifupdown_handle
.query(qtype
, args
.all
, args
.CLASS
, iflist
,
65 excludepats
=args
.excludepats
)
67 if iflist
is not None:
68 raise Exception('iflist is currently not supported with reload')
70 ifupdown_handle
.reload(args
.all
, args
.CLASS
, iflist
,
71 excludepats
=args
.excludepats
)
78 log_level
= logging
.WARNING
80 if args
.verbose
== True:
81 log_level
= logging
.INFO
83 if args
.debug
== True:
84 log_level
= logging
.DEBUG
87 logging
.basicConfig(level
=log_level
,
88 format
='%(levelname)s: %(message)s')
89 logger
= logging
.getLogger('ifupdown')
97 def update_argparser(argparser
):
98 """ base parser, common to all commands """
99 argparser
.add_argument('-a', '--all', action
='store_true',
100 help='process all interfaces marked \"auto\"')
101 argparser
.add_argument('iflist', metavar
='IFACE',
102 nargs
='*', help='interfaces list')
103 argparser
.add_argument('-v', '--verbose', dest
='verbose',
104 action
='store_true', help='verbose')
105 argparser
.add_argument('-d', '--debug', dest
='debug',
107 help='output debug info')
108 argparser
.add_argument('-q', '--quiet', dest
='quiet',
110 help=argparse
.SUPPRESS
)
111 argparser
.add_argument('--allow', dest
='CLASS',
112 help='ignore non-\"allow-CLASS\" interfaces')
113 argparser
.add_argument('--with-depends', dest
='withdepends',
114 action
='store_true', help='run with all dependencies')
115 argparser
.add_argument('--perfmode', dest
='perfmode',
116 action
='store_true', help=argparse
.SUPPRESS
)
117 argparser
.add_argument('-j', '--jobs', dest
='jobs', type=int,
118 default
=-1, choices
=range(1,12), help=argparse
.SUPPRESS
)
119 argparser
.add_argument('--nocache', dest
='nocache', action
='store_true',
120 help=argparse
.SUPPRESS
)
121 argparser
.add_argument('-X', '--exclude', dest
='excludepats',
122 action
='append', help='exclude interfaces from the list of '
123 + 'interfaces to operate on by a PATTERN '
124 + '(note that this option doesn\'t disable mappings)')
127 def update_ifupdown_argparser(argparser
):
128 """ common arg parser for ifup and ifdown """
129 argparser
.add_argument('-f', '--force', dest
='force',
131 help='force run all operations')
132 argparser
.add_argument('-n', '--no-act', dest
='noact',
133 action
='store_true', help='print out what would happen,' +
135 argparser
.add_argument('--print-dependency',
136 dest
='printdependency', choices
=['list', 'dot'],
137 help='print iface dependency')
139 def update_ifup_argparser(argparser
):
140 update_ifupdown_argparser(argparser
)
142 def update_ifdown_argparser(argparser
):
143 update_ifupdown_argparser(argparser
)
145 def update_ifquery_argparser(argparser
):
146 """ arg parser for ifquery options """
148 # -l is same as '-a', only hear for backward compatibility
149 argparser
.add_argument('-l', '--list', action
='store_true', dest
='all',
150 help=argparse
.SUPPRESS
)
151 group
= argparser
.add_mutually_exclusive_group(required
=False)
152 group
.add_argument('-r', '--running-state', dest
='runningstate',
154 help='query running state of an interface')
156 group
.add_argument('-c', '--check-state', dest
='checkcurstate',
158 help='check running against config of an interface')
160 # presumed-state is state maintained by ifupdown
161 group
.add_argument('--presumed-state', dest
='presumedstate',
162 action
='store_true', help=argparse
.SUPPRESS
)
164 # presumed-state-detailed prints all details about the object stored
166 group
.add_argument('--presumed-state-detailed',
167 dest
='presumedstatedetailed',
168 action
='store_true', help=argparse
.SUPPRESS
)
170 group
.add_argument('--format', dest
='format', default
='nwifaces',
171 choices
=['nwifaces', 'json'], help=argparse
.SUPPRESS
)
173 group
.add_argument('--pretty', action
='store_true', dest
='pretty',
174 help='pretty print config file entries')
176 def update_ifreload_argparser(argparser
):
177 update_ifupdown_argparser(argparser
)
179 def parse_args(argsv
, op
):
181 descr
= 'interface query'
183 descr
= 'interface management'
185 argparser
= argparse
.ArgumentParser(description
=descr
)
186 update_argparser(argparser
)
188 update_ifup_argparser(argparser
)
190 update_ifdown_argparser(argparser
)
192 update_ifquery_argparser(argparser
)
194 update_ifreload_argparser(argparser
)
196 return argparser
.parse_args(argsv
)
199 """ main function """
202 if re
.search(r
'ifup', argv
[0]) != None:
204 elif re
.search(r
'ifdown', argv
[0]) != None:
206 elif re
.search(r
'ifquery', argv
[0]) != None:
208 elif re
.search(r
'ifreload', argv
[0]) != None:
211 print ('Unexpected executable.' +
212 ' Should be \'ifup\' or \'ifdown\' or \'ifquery\'')
215 # Command line arg parser
216 args
= parse_args(argv
[1:], op
)
217 if len(args
.iflist
) > 0 and args
.all
is True:
218 print 'interface list cannot be specified with all option'
227 if args
.debug
== True:
231 print '\nRerun the command with \'-d\' for a detailed errormsg'
236 if __name__
== "__main__":
238 if not os
.geteuid() == 0:
239 print 'Error: Must be root to run this command'
243 XXX: Cannot use this. A spawned dhclient process can hold the lock
244 if not utilities.lockFile(lockfile):
245 print 'Another instance of this program is already running.'