TODO:
====
-- support old ifupdown state file /run/network/ifstate. B
+- support old ifupdown state file /run/network/ifstate. Because some app's seem to use it
- support -i interfaces file
- support for debian ifupdown methods: tunnel, v4tunnel, 6to4, ppp, wvdial, ipv4ll
- support for debian ifupdown ipv6 auto method
set -f
exclusions=$(process_exclusions)
log_action_begin_msg "Configuring network interfaces"
- if ifup -a $verbose --perfmode --force
+ if ifup -a $verbose --perfmode
then
log_action_end_msg $?
else
check_network_swap
log_action_begin_msg "Deconfiguring network interfaces"
- if ifdown -a --exclude=lo $verbose --perfmode --force; then
+ if ifdown -a --exclude=lo $verbose --perfmode; then
log_action_end_msg $?
else
log_action_end_msg $?
ifupdown_init
log_action_begin_msg "Reloading network interfaces configuration"
- if ifreload -a --force
+ if ifreload -a
then
log_action_end_msg $?
else
ifupdown_init
log_action_begin_msg "Reconfiguring network interfaces"
- ifdown -a --exclude=lo $verbose --perfmode --force || true
+ ifdown -a --exclude=lo $verbose --perfmode || true
set -f
exclusions=$(process_exclusions)
if ifup -a --exclude=lo $verbose --perfmode
ifquery --running --with-depends br0
ifquery --running -a
+ # print dependency info in list format
+ ifquery --print-dependency=list -a
+ ifquery --print-dependency=list br2000
+
+ # print dependency info in dot format
+ ifquery --print-dependency=dot -a
+ ifquery --print-dependency=dot br2000
+
+ # Create an image (png) from the dot format.
+ ifquery --print-dependency=dot -a > interfaces.dot
+ dot -Tpng interfaces.dot > interfaces.png
+
+
SEE ALSO
========
ifup(8)
These options come from addon modules. see interfaces-addons(5) for
these options.
+ ifupdown2 supports python-mako style templates in the interfaces file.
+ See examples section for details.
+
METHODS
=======
Both inet and inet6 address family interfaces can use the following
source /etc/network/interfaces.d/*
- For more examples with addon config
+ # Using mako style templates
+ % for v in [11,12]:
+ auto vlan${v}
+ iface vlan${v} inet static
+ address 10.20.${v}.3/24
+ % endfor
+ For more examples see interfaces-addons(5)
FILES
=====
return sorted_graphs_list
- @classmethod
- def add_to_dot_old(cls, dependency_graph, gvgraph, v, parentgvitem):
- dependents = dependency_graph.get(v, [])
- if dependents is None:
- return
- if len(dependents) > 1:
- # if more than one dependents .., add them to a box
- box = gvgraph.newItem(v)
- for d in dependents:
- dnode = gvgraph.newItem(d, box)
- cls.add_to_dot(dependency_graph, gvgraph, d, dnode)
- if parentgvitem is not None: gvgraph.newLink(parentgvitem,
- dnode)
- else:
- for d in dependents:
- dnode = gvgraph.newItem(d)
- cls.add_to_dot(dependency_graph, gvgraph, d, dnode)
- if parentgvitem is not None: gvgraph.newLink(parentgvitem,
- dnode)
-
- @classmethod
- def add_to_dot(cls, dependency_graph, gvgraph, v, parentgvitem):
- vnode = gvgraph.newItem(v)
- if parentgvitem is not None: gvgraph.newLink(parentgvitem, vnode)
- dependents = dependency_graph.get(v, [])
- if dependents is None:
- return
- for d in dependents:
- cls.add_to_dot(dependency_graph, gvgraph, d, vnode)
-
- @classmethod
- def generate_dot(cls, dependency_graph, v):
- gvgraph = GvGen()
- cls.add_to_dot(dependency_graph, gvgraph, v, None)
- gvgraph.dot(name=v)
-
@classmethod
def generate_dots(cls, dependency_graph, indegrees):
- roots = [k for k, v in indegrees.items() if v == 0]
- if roots is None:
- return
- map(lambda r: cls.generate_dot(dependency_graph, r), roots)
+ gvgraph = GvGen()
+ graphnodes = {}
+ for v in dependency_graph.keys():
+ graphnodes[v] = gvgraph.newItem(v)
+ for i, v in graphnodes.items():
+ dlist = dependency_graph.get(i, [])
+ if not dlist:
+ continue
+ for d in dlist:
+ gvgraph.newLink(v, graphnodes.get(d))
+ gvgraph.dot()
class ifaceJsonEncoder(json.JSONEncoder):
def default(self, o):
+ retconfig = {}
+ if o.config:
+ for k, v in o.config.items():
+ if len(v) == 1:
+ retconfig[k] = v[0]
+ else:
+ retconfig[k] = v
+
return OrderedDict({'name' : o.name,
'addr_method' : o.addr_method,
'addr_family' : o.addr_family,
'auto' : o.auto,
- 'config' : o.config})
+ 'config' : retconfig})
class iface():
""" config flags """
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.syntaxhelp) else True)
- ifupdown_handle = ifupdownMain(withdepends=args.withdepends,
- perfmode=args.perfmode,
- njobs=args.jobs,
- cache=cachearg)
if args.checkcurr:
qop='query-checkcurr'
elif args.running:
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)
+ logger.debug('creating ifupdown object ..')
+ ifupdown_handle = ifupdownMain(withdepends=args.withdepends,
+ perfmode=args.perfmode,
+ njobs=args.jobs,
+ cache=cachearg)
+
ifupdown_handle.query([qop], args.all, args.CLASS, iflist,
excludepats=args.excludepats,
printdependency=args.printdependency,