1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

delete old file sbin/ifupdown

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
This commit is contained in:
Julien Fortin
2018-03-13 17:26:17 +11:00
parent 82421c8d29
commit 1344b9c55c

View File

@@ -1,496 +0,0 @@
#!/usr/bin/python
#
# Copyright 2014 Cumulus Networks, Inc. All rights reserved.
# Author: Roopa Prabhu, roopa@cumulusnetworks.com
#
# ifupdown --
# tool to configure network interfaces
#
import sys
import os
import argcomplete
import argparse
import ConfigParser
import StringIO
import logging
import logging.handlers
import resource
from ifupdown.ifupdownmain import *
from ifupdown.utils import *
lockfile="/run/network/.lock"
configfile="/etc/network/ifupdown2/ifupdown2.conf"
configmap_g=None
logger = None
interfacesfileiobuf=None
ENVPATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
def run_up(args):
logger.debug('args = %s' %str(args))
try:
iflist = args.iflist
if len(args.iflist) == 0:
iflist = None
logger.debug('creating ifupdown object ..')
cachearg=(False if (iflist or args.nocache or
args.perfmode or args.noact)
else True)
ifupdown_handle = ifupdownMain(config=configmap_g,
force=args.force,
withdepends=args.withdepends,
perfmode=args.perfmode,
dryrun=args.noact,
cache=cachearg,
addons_enable=not args.noaddons,
statemanager_enable=not args.noaddons,
interfacesfile=args.interfacesfile,
interfacesfileiobuf=interfacesfileiobuf,
interfacesfileformat=args.interfacesfileformat)
if args.noaddons:
ifupdown_handle.up(['up'], args.all, args.CLASS, iflist,
excludepats=args.excludepats,
printdependency=args.printdependency,
syntaxcheck=args.syntaxcheck, type=args.type,
skipupperifaces=args.skipupperifaces)
else:
ifupdown_handle.up(['pre-up', 'up', 'post-up'],
args.all, args.CLASS, iflist,
excludepats=args.excludepats,
printdependency=args.printdependency,
syntaxcheck=args.syntaxcheck, type=args.type,
skipupperifaces=args.skipupperifaces)
except:
raise
def run_down(args):
logger.debug('args = %s' %str(args))
try:
iflist = args.iflist
logger.debug('creating ifupdown object ..')
ifupdown_handle = ifupdownMain(config=configmap_g, force=args.force,
withdepends=args.withdepends,
perfmode=args.perfmode,
dryrun=args.noact,
addons_enable=not args.noaddons,
statemanager_enable=not args.noaddons,
interfacesfile=args.interfacesfile,
interfacesfileiobuf=interfacesfileiobuf,
interfacesfileformat=args.interfacesfileformat)
ifupdown_handle.down(['pre-down', 'down', 'post-down'],
args.all, args.CLASS, iflist,
excludepats=args.excludepats,
printdependency=args.printdependency,
usecurrentconfig=args.usecurrentconfig,
type=args.type)
except:
raise
def run_query(args):
logger.debug('args = %s' %str(args))
try:
iflist = args.iflist
if args.checkcurr:
qop='query-checkcurr'
elif args.running:
qop='query-running'
elif args.raw:
qop='query-raw'
elif args.syntaxhelp:
qop = 'query-syntax'
elif args.printdependency:
qop = 'query-dependency'
elif args.printsavedstate:
qop = 'query-savedstate'
else:
qop='query'
cachearg=(False if (iflist or args.nocache or
args.perfmode or args.syntaxhelp or
(qop != 'query-checkcurr' and
qop != 'query-running')) else True)
if not iflist and qop == 'query-running':
iflist = [i for i in os.listdir('/sys/class/net/')
if os.path.isdir('/sys/class/net/%s' %i)]
logger.debug('creating ifupdown object ..')
ifupdown_handle = ifupdownMain(config=configmap_g,
withdepends=args.withdepends,
perfmode=args.perfmode,
cache=cachearg,
interfacesfile=args.interfacesfile,
interfacesfileiobuf=interfacesfileiobuf,
interfacesfileformat=args.interfacesfileformat)
ifupdown_handle.query([qop], args.all, args.CLASS, iflist,
excludepats=args.excludepats,
printdependency=args.printdependency,
format=args.format, type=args.type)
except:
raise
def run_reload(args):
logger.debug('args = %s' %str(args))
try:
logger.debug('creating ifupdown object ..')
ifupdown_handle = ifupdownMain(config=configmap_g,
withdepends=args.withdepends,
perfmode=args.perfmode)
ifupdown_handle.reload(['pre-up', 'up', 'post-up'],
['pre-down', 'down', 'post-down'],
auto=args.all, allow=None, ifacenames=None,
excludepats=args.excludepats,
usecurrentconfig=args.usecurrentconfig,
currentlyup=args.currentlyup)
except:
raise
def init(args):
global logger
global interfacesfileiobuf
log_level = logging.WARNING
if args.verbose:
log_level = logging.INFO
if args.debug:
log_level = logging.DEBUG
try:
if hasattr(args, 'syslog') and args.syslog:
root_logger = logging.getLogger()
syslog_handler = logging.handlers.SysLogHandler(address='/dev/log',
facility=logging.handlers.SysLogHandler.LOG_DAEMON)
logging.addLevelName(logging.ERROR, 'error')
logging.addLevelName(logging.WARNING, 'warning')
logging.addLevelName(logging.DEBUG, 'debug')
logging.addLevelName(logging.INFO, 'info')
root_logger.setLevel(log_level)
syslog_handler.setFormatter(logging.Formatter(
'%(name)s: %(levelname)s: %(message)s'))
root_logger.addHandler(syslog_handler)
logger = logging.getLogger('ifupdown')
else:
logging.basicConfig(level=log_level,
format='%(levelname)s: %(message)s')
logging.addLevelName(logging.ERROR, 'error')
logging.addLevelName(logging.WARNING, 'warning')
logging.addLevelName(logging.DEBUG, 'debug')
logging.addLevelName(logging.INFO, 'info')
logger = logging.getLogger('ifupdown')
except:
raise
# If interfaces file is stdin, read
if hasattr(args, 'interfacesfile') and args.interfacesfile == '-':
interfacesfileiobuf = sys.stdin.read()
def deinit():
{}
def update_argparser(argparser):
""" base parser, common to all commands """
argparser.add_argument('-a', '--all', action='store_true', required=False,
help='process all interfaces marked \"auto\"')
argparser.add_argument('iflist', metavar='IFACE',
nargs='*', help='interface list separated by spaces. ' +
'IFACE list is mutually exclusive with -a option.')
argparser.add_argument('-v', '--verbose', dest='verbose',
action='store_true', help='verbose')
argparser.add_argument('-d', '--debug', dest='debug',
action='store_true',
help='output debug info')
argparser.add_argument('-q', '--quiet', dest='quiet',
action='store_true',
help=argparse.SUPPRESS)
argparser.add_argument('--allow', dest='CLASS',
help='ignore non-\"allow-CLASS\" interfaces')
argparser.add_argument('-w', '--with-depends', dest='withdepends',
action='store_true', help='run with all dependent interfaces.'+
' This option is redundant when \'-a\' is specified. With ' +
'\'-a\' interfaces are always executed in dependency order')
argparser.add_argument('--perfmode', dest='perfmode',
action='store_true', help=argparse.SUPPRESS)
#argparser.add_argument('-j', '--jobs', dest='jobs', type=int,
# default=-1, choices=range(1,12), help=argparse.SUPPRESS)
argparser.add_argument('--nocache', dest='nocache', action='store_true',
help=argparse.SUPPRESS)
argparser.add_argument('-X', '--exclude', dest='excludepats',
action='append',
help='Exclude interfaces from the list of interfaces' +
' to operate on. Can be specified multiple times.')
argparser.add_argument('-i', '--interfaces', dest='interfacesfile',
default='/etc/network/interfaces',
help='use interfaces file instead of default ' +
'/etc/network/interfaces')
argparser.add_argument('-t', '--interfaces-format',
dest='interfacesfileformat',
default='native',
choices=['native', 'json'],
help='interfaces file format')
argparser.add_argument('-T', '--type',
dest='type',
default=None,
choices=['iface', 'vlan'],
help='type of interface entry (iface or vlan).' +
'This option can be used in case of ambiguity between ' +
'a vlan interface and an iface interface of the same name')
def update_ifupdown_argparser(argparser):
""" common arg parser for ifup and ifdown """
argparser.add_argument('-f', '--force', dest='force',
action='store_true',
help='force run all operations')
argparser.add_argument('-l', '--syslog', dest='syslog',
action='store_true',
help=argparse.SUPPRESS)
group = argparser.add_mutually_exclusive_group(required=False)
group.add_argument('-n', '--no-act', dest='noact',
action='store_true', help='print out what would happen,' +
'but don\'t do it')
group.add_argument('-p', '--print-dependency',
dest='printdependency', choices=['list', 'dot'],
help='print iface dependency')
group.add_argument('--no-scripts', '--admin-state',
dest='noaddons', action='store_true',
help='dont run any addon modules/scripts. Only bring the ' +
'interface administratively up/down')
def update_ifup_argparser(argparser):
argparser.add_argument('-s', '--syntax-check', dest='syntaxcheck',
action='store_true',
help='Only run the interfaces file parser')
argparser.add_argument('-k', '--skip-upperifaces', dest='skipupperifaces',
action='store_true',
help='ifup by default tries to add newly created interfaces' +
' into its upper/parent interfaces. Eg. if a bridge port is' +
' created as a result of ifup on the port, ifup automatically' +
' adds the port to the bridge. This option can be used to ' +
'disable this default behaviour')
update_ifupdown_argparser(argparser)
def update_ifdown_argparser(argparser):
update_ifupdown_argparser(argparser)
argparser.add_argument('-u', '--use-current-config',
dest='usecurrentconfig', action='store_true',
help='By default ifdown looks at the saved state for ' +
'interfaces to bring down. This option allows ifdown to ' +
'look at the current interfaces file. Useful when your ' +
'state file is corrupted or you want down to use the latest '
'from the interfaces file')
def update_ifquery_argparser(argparser):
""" arg parser for ifquery options """
# -l is same as '-a', only here for backward compatibility
argparser.add_argument('-l', '--list', action='store_true', dest='all',
help=argparse.SUPPRESS)
group = argparser.add_mutually_exclusive_group(required=False)
group.add_argument('-r', '--running', dest='running',
action='store_true',
help='query running state of an interface')
group.add_argument('-c', '--check', dest='checkcurr',
action='store_true',
help='check interface file contents against ' +
'running state of an interface')
group.add_argument('-x', '--raw', action='store_true', dest='raw',
help='print raw config file entries')
group.add_argument('--print-savedstate', action='store_true',
dest='printsavedstate',
help=argparse.SUPPRESS)
argparser.add_argument('-o', '--format', dest='format', default='native',
choices=['native', 'json'],
help='interface display format')
argparser.add_argument('-p', '--print-dependency',
dest='printdependency', choices=['list', 'dot'],
help='print interface dependency')
argparser.add_argument('-s', '--syntax-help', action='store_true',
dest='syntaxhelp',
help='print supported interface config syntax')
def update_ifreload_argparser(argparser):
""" parser for ifreload """
group = argparser.add_mutually_exclusive_group(required=True)
group.add_argument('-a', '--all', action='store_true',
help='process all interfaces marked \"auto\"')
group.add_argument('-c', '--currently-up', dest='currentlyup',
action='store_true',
help='only reload auto and other interfaces that are ' +
'currently up')
argparser.add_argument('iflist', metavar='IFACE',
nargs='*', help=argparse.SUPPRESS)
argparser.add_argument('-n', '--no-act', dest='noact',
action='store_true', help=argparse.SUPPRESS)
argparser.add_argument('-v', '--verbose', dest='verbose',
action='store_true', help='verbose')
argparser.add_argument('-d', '--debug', dest='debug',
action='store_true',
help='output debug info')
argparser.add_argument('-w', '--with-depends', dest='withdepends',
action='store_true', help=argparse.SUPPRESS)
argparser.add_argument('--perfmode', dest='perfmode',
action='store_true', help=argparse.SUPPRESS)
argparser.add_argument('--nocache', dest='nocache', action='store_true',
help=argparse.SUPPRESS)
argparser.add_argument('-X', '--exclude', dest='excludepats',
action='append',
help=argparse.SUPPRESS)
#argparser.add_argument('-j', '--jobs', dest='jobs', type=int,
# default=-1, choices=range(1,12), help=argparse.SUPPRESS)
#argparser.add_argument('-i', '--interfaces', dest='interfacesfile',
# default='/etc/network/interfaces',
# help='use interfaces file instead of default ' +
# '/etc/network/interfaces')
argparser.add_argument('-u', '--use-current-config',
dest='usecurrentconfig', action='store_true',
help='By default ifreload looks at saved state for ' +
'interfaces to bring down. With this option ifreload will'
' only look at the current interfaces file. Useful when your ' +
'state file is corrupted or you want down to use the latest '
'from the interfaces file')
argparser.add_argument('-l', '--syslog', dest='syslog',
action='store_true',
help=argparse.SUPPRESS)
argparser.add_argument('-f', '--force', dest='force',
action='store_true',
help='force run all operations')
def parse_args(argsv, op):
if op == 'query':
descr = 'query interfaces (all or interface list)'
elif op == 'reload':
descr = 'reload interface configuration.'
else:
descr = 'interface management'
argparser = argparse.ArgumentParser(description=descr)
if op == 'reload':
update_ifreload_argparser(argparser)
else:
update_argparser(argparser)
if op == 'up':
update_ifup_argparser(argparser)
elif op == 'down':
update_ifdown_argparser(argparser)
elif op == 'query':
update_ifquery_argparser(argparser)
elif op == 'reload':
update_ifreload_argparser(argparser)
argcomplete.autocomplete(argparser)
return argparser.parse_args(argsv)
handlers = {'up' : run_up,
'down' : run_down,
'query' : run_query,
'reload' : run_reload }
def validate_args(op, args):
#if op == 'up' and args.syntaxcheck:
# if args.iflist or args.all:
# print 'ignoring interface options ..'
# return True
if op == 'query' and args.syntaxhelp:
return True
if op == 'reload':
if not args.all and not args.currentlyup:
print '\'-a\' or \'-c\' option is required'
return False
elif (not args.iflist and
not args.all and not args.CLASS):
print '\'-a\' option or interface list are required'
return False
if args.iflist and args.all:
print '\'-a\' option and interface list are mutually exclusive'
return False
if op != 'reload' and args.CLASS and (args.all or args.iflist):
print ('\'--allow\' option is mutually exclusive ' +
'with interface list and \'-a\'')
return False
return True
def read_config(args):
global configmap_g
config = open(configfile, 'r').read()
configStr = '[ifupdown2]\n' + config
configFP = StringIO.StringIO(configStr)
parser = ConfigParser.RawConfigParser()
parser.readfp(configFP)
configmap_g = dict(parser.items('ifupdown2'))
# Preprocess config map
configval = configmap_g.get('multiple_vlan_aware_bridge_support', '0')
if configval == '0':
# if multiple bridges not allowed, set the bridge-vlan-aware
# attribute in the 'no_repeats' config, so that the ifupdownmain
# module can catch it appropriately
configmap_g['no_repeats'] = {'bridge-vlan-aware' : 'yes'}
configval = configmap_g.get('link_master_slave', '0')
if configval == '1':
# link_master_slave is only valid when all is set
if hasattr(args, 'all') and not args.all:
configmap_g['link_master_slave'] = '0'
configval = configmap_g.get('delay_admin_state_change', '0')
if configval == '1':
# reset link_master_slave if delay_admin_state_change is on
configmap_g['link_master_slave'] = '0'
def main(argv):
""" main function """
args = None
try:
op = None
if argv[0].endswith('ifup'):
op = 'up'
elif argv[0].endswith('ifdown'):
op = 'down'
elif argv[0].endswith('ifquery'):
op = 'query'
elif argv[0].endswith('ifreload'):
op = 'reload'
else:
print ('Unexpected executable.' +
' Should be \'ifup\' or \'ifdown\' or \'ifquery\'')
exit(1)
# Command line arg parser
args = parse_args(argv[1:], op)
if not validate_args(op, args):
exit(1)
if not sys.argv[0].endswith('ifquery') and not os.geteuid() == 0:
print 'error: must be root to run this command'
exit(1)
if not sys.argv[0].endswith('ifquery') and not utils.lockFile(lockfile):
print 'Another instance of this program is already running.'
exit(0)
read_config(args)
init(args)
handlers.get(op)(args)
except Exception, e:
if not str(e):
exit(1)
if args and args.debug:
raise
else:
if logger:
logger.error(str(e))
else:
print str(e)
#if args and not args.debug:
# print '\nrerun the command with \'-d\' for a detailed errormsg'
exit(1)
finally:
deinit()
if __name__ == "__main__":
# required during boot
os.putenv('PATH', ENVPATH)
resource.setrlimit(resource.RLIMIT_CORE, (0,0))
main(sys.argv)