]> git.proxmox.com Git - mirror_ifupdown2.git/blame - sbin/ifupdown
Some fixes + enhancements
[mirror_ifupdown2.git] / sbin / ifupdown
CommitLineData
a6f80f0e 1#!/usr/bin/python
2
3import sys
4import os
5import re
6import argparse
7from ifupdown.ifupdown_main import *
8
9import logging
10
11lockfile="/run/network/.lock"
12logger = None
13
14def run(args, op):
a6f80f0e 15 logger.debug('args = %s' %str(args))
16
17 try:
18 logger.debug('creating ifupdown object ..')
a6f80f0e 19 if op == 'up' or op == 'down':
eab25b7c 20 ifupdown_handle = ifupdown_main(force=args.force,
21 dryrun=args.noact,
22 nodepends=args.nodepends,
23 perfmode=args.perfmode,
24 njobs=args.jobs)
25 elif op == 'query':
26 ifupdown_handle = ifupdown_main(dryrun=args.noact,
27 nodepends=args.nodepends,
28 perfmode=args.perfmode)
a6f80f0e 29
30 iflist = args.iflist
31 if len(args.iflist) == 0:
32 iflist = None
33
34 logger.debug('calling %s' %op + ' for all interfaces ..')
35 if op == 'up':
eab25b7c 36 ifupdown_handle.up(args.all, args.CLASS, iflist)
a6f80f0e 37 elif op == 'down':
eab25b7c 38 ifupdown_handle.down(args.all, args.CLASS, iflist)
a6f80f0e 39 elif op == 'query':
40 if args.curstate == True:
41 qstate='curr'
42 elif args.presumedstate == True:
43 qstate='presumed'
44 elif args.presumedstatedetailed == True:
45 qstate='presumeddetailed'
46 else:
47 qstate=None
eab25b7c 48 ifupdown_handle.query(args.all, args.CLASS, iflist,
a6f80f0e 49 query_state=qstate)
50 except:
51 raise
52
a6f80f0e 53def init(args):
54 global logger
55
56 log_level = logging.WARNING
57
58 if args.verbose == True:
59 log_level = logging.INFO
60
61 if args.debug == True:
62 log_level = logging.DEBUG
63
64 try:
65 logging.basicConfig(level=log_level,
eab25b7c 66 format='%(levelname)s: %(message)s')
a6f80f0e 67 logger = logging.getLogger('ifupdown')
68 except:
69 raise
70
71
72def deinit():
eab25b7c 73 {}
a6f80f0e 74
75def update_argparser(argparser):
76
77 argparser.add_argument('iflist', metavar='IFACE',
78 nargs='*', help='interfaces list')
79 argparser.add_argument('-a', '--all', action='store_true',
eab25b7c 80 help='process all interfaces marked \"auto\"')
81 argparser.add_argument('-n', '--no-act', dest='noact',
82 action='store_true', help='print out what would happen,' +
83 'but don\'t do it')
a6f80f0e 84 argparser.add_argument('-v', '--verbose', dest='verbose',
85 action='store_true', help='verbose')
86 argparser.add_argument('-d', '--debug', dest='debug',
87 action='store_true',
88 help='output debug info')
89 argparser.add_argument('-q', '--quiet', dest='quiet',
90 action='store_true',
91 help=argparse.SUPPRESS)
eab25b7c 92 argparser.add_argument('--allow', dest='CLASS',
93 help='ignore non-\"allow-CLASS\" interfaces')
a6f80f0e 94 argparser.add_argument('--nodepends', dest='nodepends',
eab25b7c 95 action='store_true', help=argparse.SUPPRESS)
96 argparser.add_argument('--performance-mode', dest='perfmode',
97 action='store_true', help=argparse.SUPPRESS)
a6f80f0e 98
99
100def update_ifupdown_argparser(argparser):
101 argparser.add_argument('-f', '--force', dest='force',
102 action='store_true',
103 help='force run all operations')
104 argparser.add_argument('-j', '--jobs', dest='jobs', type=int,
105 default=-1, choices=range(1,12), help=argparse.SUPPRESS)
106
107def update_ifup_argparser(argparser):
108 update_ifupdown_argparser(argparser)
109
110def update_ifdown_argparser(argparser):
111 update_ifupdown_argparser(argparser)
112
113def update_ifquery_argparser(argparser):
114 group = argparser.add_mutually_exclusive_group(required=False)
eab25b7c 115 group.add_argument('-r', '--running-state', dest='curstate',
116 action='store_true',
117 help='query running state of an interface')
118
119 # presumed-state is state maintained by ifupdown
a6f80f0e 120 group.add_argument('--presumed-state', dest='presumedstate',
121 action='store_true', help=argparse.SUPPRESS)
eab25b7c 122
123 # presumed-state-detailed prints all details about the object stored
124 # by ifupdown
a6f80f0e 125 group.add_argument('--presumed-state-detailed',
126 dest='presumedstatedetailed',
127 action='store_true', help=argparse.SUPPRESS)
128
129def parse_args(argsv, op):
130 descr = 'interface management'
131
132 argparser = argparse.ArgumentParser(description=descr)
133 update_argparser(argparser)
134 if op == 'up':
135 update_ifup_argparser(argparser)
136 elif op == 'down':
137 update_ifdown_argparser(argparser)
138 elif op == 'query':
139 update_ifquery_argparser(argparser)
140
141 return argparser.parse_args(argsv)
142
143def main(argv):
144 """ main function """
145 try:
146 op = None
147 if re.search(r'ifup', argv[0]) != None:
148 op = 'up'
149 elif re.search(r'ifdown', argv[0]) != None:
150 op = 'down'
151 elif re.search(r'ifquery', argv[0]) != None:
152 op = 'query'
153 else:
154 print ('Unexpected executable.' +
155 ' Should be \'ifup\' or \'ifdown\' or \'ifquery\'')
156 exit(1)
157
158 # Command line arg parser
159 args = parse_args(argv[1:], op)
160 if len(args.iflist) > 0 and args.all is True:
161 print 'iflist and all are mutually exclusive'
162 exit(1)
163
164 init(args)
165 run(args, op)
166 except Exception, e:
eab25b7c 167 if str(e) == '':
168 exit(1)
169
a6f80f0e 170 if args.debug == True:
171 raise
172 else:
173 logger.error(str(e))
eab25b7c 174 exit(1)
a6f80f0e 175 finally:
176 deinit()
177
a6f80f0e 178if __name__ == "__main__":
179
180 if not os.geteuid() == 0:
181 print 'Error: Must be root to run this command'
182 exit(1)
183
184 """
eab25b7c 185 XXX: Cannot use this. A spawned dhclient process can hold the lock
a6f80f0e 186 if not utilities.lockFile(lockfile):
187 print 'Another instance of this program is already running.'
188 exit(0)
189 """
190
191 main(sys.argv)