]> git.proxmox.com Git - mirror_ifupdown2.git/blobdiff - docs/source/userguide.rst
Doc updates + cleanup
[mirror_ifupdown2.git] / docs / source / userguide.rst
diff --git a/docs/source/userguide.rst b/docs/source/userguide.rst
new file mode 100644 (file)
index 0000000..c06e9d2
--- /dev/null
@@ -0,0 +1,447 @@
+.. index:: ifupdown
+
+.. _ifupdown:
+
+**********
+User Guide
+**********
+
+Keep the following points in mind before you start configuring interfaces using 
+``ifupdown2``:
+
+* IPv4 and IPv6 addresses for an interface can be listed in the same ``iface`` 
+  section. For examples, see ``/usr/share/doc/python-ifupdown2/examples/``.
+
+* Do not use a legacy interface alias. They are only supported for backward 
+  compatibility with ``ifupdown``. They do get configured, but ``ifquery`` has 
+  problems recognizing them.
+  
+* ``ifupdown`` only understands interfaces that were configured using 
+  ``ifupdown``. Any interfaces created with a command other than ``ifupdown`` 
+  (like ``brctl``) must be de-configured in the same manner.
+
+* Use globs for port lists wherever applicable. Regular expressions work as well, 
+  however regular expressions require all matching interfaces to be present in 
+  the ``interfaces`` file. And declaring all interfaces in the ``interfaces`` 
+  file leads to losing all the advantages that built-in interfaces provide.
+
+* Extensions to ``ifquery`` help with validation and debugging.
+
+* By default, ``ifupdown`` is quiet; use the verbose option ``-v`` when you want 
+  to know what is going on when bringing an interface down or up.
+  
+Contents
+========
+* `Commands`_
+* `Man Pages`_
+* `Configuration Files`_
+* `ifupdown Built-in Interfaces`_
+* `ifupdown Interface Dependencies`_
+* `Configuring IP Addresses`_
+* `Specifying User Commands`_
+* `Sourcing Interface File Snippets`_
+* `Using Globs for Port Lists`_
+* `Using Templates`_
+* `Using ifquery to Validate and Debug Interface Configurations`_
+* `Useful Links`_
+
+Commands
+========
+
+* ifdown
+* ifquery
+* ifreload
+* ifup
+
+Man Pages
+=========
+
+* man ifdown(8)
+* man ifquery(8)
+* man ifreload
+* man ifup(8)
+* man ifupdown-addons-interfaces(5)
+* man interfaces(5)
+
+Configuration Files
+===================
+
+* /etc/network/interfaces
+
+    
+ifupdown Built-in Interfaces
+============================
+
+``ifupdown`` understands VLAN interfaces and physical interfaces that may appear
+as dependents. There is no need to list them unless they need the specific
+configuration or they need to match a regular expression used in the
+``interfaces`` file. Use globs to avoid limitations with regular expressions.
+
+For example, swp1.100 and swp2.100 below do not need an entry in the 
+``interfaces`` file::
+
+    auto br-100
+    iface br-100
+        address 10.0.12.2/24
+        address 2001:dad:beef::3/64
+        bridge-ports swp1.100 swp2.100
+        bridge-stp on
+
+
+
+ifupdown Interface Dependencies
+===============================
+
+``ifupdown`` understands interface dependency relationships. When ``ifup`` and
+``ifdown`` are run with all interfaces, they always run with all interfaces
+in dependency order. When run with the interface list on the command line, the
+default behavior is to not run with dependents. But if there are any built-in 
+dependents, they will be brought up or down.
+
+To run with dependents when you specify the interface list, use the 
+``--with-depends`` option. ``--with-depends`` walks through all dependents
+in the dependency tree rooted at the interface you specify. Consider the
+following example configuration::
+
+    auto bond1
+    iface bond1
+        address 100.0.0.2/16
+        bond-slaves swp29 swp30
+        bond-mode 802.3ad
+        bond-miimon 100
+        bond-use-carrier 1
+        bond-lacp-rate 1
+        bond-min-links 1
+        bond-xmit-hash-policy layer3+4
+
+    auto bond2
+    iface bond2
+        address 100.0.0.5/16
+        bond-slaves swp31 swp32
+        bond-mode 802.3ad
+        bond-miimon 100
+        bond-use-carrier 1
+        bond-lacp-rate 1
+        bond-min-links 1
+        bond-xmit-hash-policy layer3+4
+
+    auto br2001
+    iface br2001
+        address 12.0.1.3/24
+        bridge-ports bond1.2001 bond2.2001
+        bridge-stp on
+
+Specifying ``ifup --with-depends br2001`` brings up all dependents: bond1.2001, 
+bond2.2001, bond1, bond2, bond1.2001, bond2.2001, swp29, swp30, swp31, swp32.
+
+Similarly, specifying ``ifdown --with-depends br2001`` brings down all 
+dependents: bond1.2001, bond2.2001, bond1, bond2, bond1.2001, bond2.2001, swp29, 
+swp30, swp31, swp32. 
+
+.. warning:: ``ifdown`` always deletes logical interfaces after bringing them 
+   down. Use the ``--admin-state`` option if you only want to administratively 
+   bring the interface up or down. In terms of the above example, 
+   ``ifdown br2001`` deletes ``br2001``.
+
+To guide you through which interfaces will be brought down and up, use the
+``--print-dependency`` option to get the list of dependents.
+
+Use ``ifup --print-dependency=list -a`` to get the dependency list of all 
+interfaces::
+
+    cumulus@switch:~$ sudo ifup --print-dependency=list -a
+    lo : None
+    eth0 : None
+    bond0 : ['swp25', 'swp26']
+    bond1 : ['swp29', 'swp30']
+    bond2 : ['swp31', 'swp32']
+    br0 : ['bond1', 'bond2']
+    bond1.2000 : ['bond1']
+    bond2.2000 : ['bond2']
+    br2000 : ['bond1.2000', 'bond2.2000']
+    bond1.2001 : ['bond1']
+    bond2.2001 : ['bond2']
+    br2001 : ['bond1.2001', 'bond2.2001']
+    swp40 : None
+    swp25 : None
+    swp26 : None
+    swp29 : None
+    swp30 : None
+    swp31 : None
+    swp32 : None
+
+To print the dependency list of a single interface, use::
+
+    cumulus@switch:~$ sudo ifup --print-dependency=list br2001
+    br2001 : ['bond1.2001', 'bond2.2001']
+    bond1.2001 : ['bond1']
+    bond2.2001 : ['bond2']
+    bond1 : ['swp29', 'swp30']
+    bond2 : ['swp31', 'swp32']
+    swp29 : None
+    swp30 : None
+    swp31 : None
+    swp32 : None
+
+
+To print the dependency information of an interface in ``dot`` format::
+
+    cumulus@switch:~$ sudo ifup --print-dependency=dot br2001
+    /* Generated by GvGen v.0.9 (http://software.inl.fr/trac/wiki/GvGen) */
+    digraph G {
+        compound=true;
+        node1 [label="br2001"];
+        node2 [label="bond1.2001"];
+        node3 [label="bond2.2001"];
+        node4 [label="bond1"];
+        node5 [label="bond2"];
+        node6 [label="swp29"];
+        node7 [label="swp30"];
+        node8 [label="swp31"];
+        node9 [label="swp32"];
+        node1->node2;
+        node1->node3;
+        node2->node4;
+        node3->node5;
+        node4->node6;
+        node4->node7;
+        node5->node8;
+        node5->node9;
+    }
+
+You can use ``dot`` to render the graph on an external system where ``dot`` is
+installed.
+
+.. image:: images/interfaces.png
+
+
+To print the dependency information of the entire ``interfaces`` file::
+
+    cumulus@switch:~$ sudo ifup --print-dependency=dot -a >interfaces_all.dot
+
+.. image:: images/interfaces_all.png
+   :width: 800px
+
+
+.. note: The '--print-dependency' option is available with the ``ifup``, 
+   ``ifdown`` and ``ifquery`` commands.
+
+
+Configuring IP Addresses
+========================
+
+In ``/etc/network/interfaces``, list all IP addresses as shown below under the 
+``iface`` section (see ``man interfaces`` for more information)::
+
+    auto swp1
+    iface swp1
+        address 12.0.0.1/30
+        address 12.0.0.2/30
+
+The address method and address family are not mandatory. They default to 
+``inet``/``inet6`` and ``static`` by default, but ``inet``/``inet6`` **must** be 
+specified if you need to specify ``dhcp`` or ``loopback``.
+
+You can specify both IPv4 and IPv6 addresses under the same ``iface`` section::
+
+    auto swp1
+    iface swp1
+        address 12.0.0.1/30
+        address 12.0.0.2/30
+        address 2001:dee:eeef:2::1/64
+
+Specifying User Commands
+========================
+
+You can specify additional user commands in the ``interfaces`` file. As shown in 
+the example below, the interface stanzas in ``/etc/network/interfaces`` can have 
+a command that runs at pre-up, up, post-up, pre-down, down, and post-down::
+
+    auto swp1
+    iface swp1
+        address 12.0.0.1/30
+        up /sbin/foo bar
+
+Any valid command can be hooked in the sequencing of bringing an interface up or 
+down, although commands should be limited in scope to network-related commands 
+associated with the particular interface.  
+
+For example, it wouldn't make sense to install some Debian package on ``ifup`` 
+of swp1, even though that is technically possible. See ``man interfaces`` for 
+more details.
+
+Sourcing Interface File Snippets
+================================
+
+Sourcing interface files helps organize and manage the ``interfaces(5)`` file. 
+For example::
+
+    cumulus@switch:~$ cat /etc/network/interfaces
+    # The loopback network interface
+    auto lo
+    iface lo inet loopback
+
+    # The primary network interface
+    auto eth0
+    iface eth0 inet dhcp
+
+    source /etc/network/interfaces.d/bond0
+
+
+The contents of the sourced file used above are::
+
+    cumulus@switch:~$ cat /etc/network/interfaces.d/bond0
+    auto bond0
+    iface bond0
+        address 14.0.0.9/30
+        address 2001:ded:beef:2::1/64
+        bond-slaves swp25 swp26
+        bond-mode 802.3ad
+        bond-miimon 100
+        bond-use-carrier 1
+        bond-lacp-rate 1
+        bond-min-links 1
+        bond-xmit-hash-policy layer3+4
+               
+Using Globs for Port Lists
+==========================
+
+Some modules support globs to describe port lists. You can use globs to specify 
+bridge ports and bond slaves::
+
+    auto br0
+    iface br0
+        bridge-ports glob swp1-6.100
+
+    auto br1
+    iface br1
+        bridge-ports glob swp7-9.100  swp11.100 glob swp15-18.100
+
+Using Templates
+===============
+
+``ifupdown2`` supports Mako-style templates. For more information see
+`www.makotemplates.org <http://www.makotemplates.org/>`_. The Mako template 
+engine is run over the ``interfaces`` file before parsing.
+
+Use the template to declare cookie-cutter bridges in the ``interfaces`` file::
+
+    %for v in [11,12]:
+    auto vlan${v}
+    iface vlan${v}
+        address 10.20.${v}.3/24
+        bridge-ports glob swp19-20.${v}
+        bridge-stp on
+    %endfor
+
+
+And use it to declare addresses in the ``interfaces`` file::
+
+    %for i in [1,12]:
+    auto swp${i}
+    iface swp${i}
+        address 10.20.${i}.3/24
+
+
+Using ifquery to Validate and Debug Interface Configurations
+============================================================
+
+You use ``ifquery`` to print parsed ``interfaces`` file entries.
+
+To use ``ifquery`` to pretty print ``iface`` entries from the ``interfaces`` 
+file, run::
+
+    cumulus@switch:~$ sudo ifquery bond0
+    auto bond0
+    iface bond0
+        address 14.0.0.9/30
+        address 2001:ded:beef:2::1/64
+        bond-slaves swp25 swp26
+        bond-mode 802.3ad
+        bond-miimon 100
+        bond-use-carrier 1
+        bond-lacp-rate 1
+        bond-min-links 1
+        bond-xmit-hash-policy layer3+4
+
+.. Use ``ifquery -a`` to pretty print all ``iface`` entries from the 
+   ``interfaces`` file.
+
+Use ``ifquery --check`` to check the current running state of an interface within 
+the ``interfaces`` file. It returns exit code ``0`` or ``1`` if the configuration 
+does not match::
+
+    cumulus@switch:~$ sudo ifquery --check bond0
+    iface bond0
+            bond-mode 802.3ad  (✓)
+            bond-miimon 100  (✓)
+            bond-use-carrier 1  (✓)
+            bond-lacp-rate 1  (✓)
+            bond-min-links 1  (✓)
+            bond-xmit-hash-policy layer3+4  (✓)
+            bond-slaves swp25 swp26  (✓)
+            address 14.0.0.9/30  (✓)
+            address 2001:ded:beef:2::1/64  (✓)
+
+.. note:: ``ifquery --check`` is an experimental feature.
+
+.. Use ``ifquery --check -a`` to check all interfaces.
+
+Use ``ifquery --running`` to print the running state of interfaces in the 
+``interfaces`` file format::
+
+    cumulus@switch:~$ sudo ifquery --running bond0
+    auto bond0
+    iface bond0
+        bond-xmit-hash-policy layer3+4
+        bond-miimon 100
+        bond-lacp-rate 1
+        bond-min-links 1
+        bond-slaves swp25 swp26
+        bond-mode 802.3ad
+        address 14.0.0.9/30
+        address 2001:ded:beef:2::1/64
+
+
+``ifquery --syntax-help`` provides help on all possible attributes supported in 
+the ``interfaces`` file. For complete syntax on the ``interfaces`` file, see 
+``man interfaces`` and ``man ifupdown-addons-interfaces``.
+
+``ifquery`` can dump information in JSON format::
+
+    cumulus@switch:~$ sudo ifquery --format=json bond0
+    {
+        "auto": true, 
+        "config": {
+            "bond-use-carrier": "1", 
+            "bond-xmit-hash-policy": "layer3+4", 
+            "bond-miimon": "100", 
+            "bond-lacp-rate": "1", 
+            "bond-min-links": "1", 
+            "bond-slaves": "swp25 swp26", 
+            "bond-mode": "802.3ad", 
+            "address": [
+                "14.0.0.9/30",
+                "2001:ded:beef:2::1/64"
+            ]
+        }, 
+        "addr_method": null, 
+        "name": "bond0", 
+        "addr_family": null
+    }
+
+.. By default ``ifquery`` outputs information in the ``interfaces`` format. Some 
+   options do take the ``--format`` option and can output in JSON format.
+
+
+Useful Links
+============
+
+* `<http://wiki.debian.org/NetworkConfiguration>`_
+* `<http://www.linuxfoundation.org/collaborate/workgroups/networking/bonding>`_
+* `<http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge>`_
+* `<http://www.linuxfoundation.org/collaborate/workgroups/networking/vlan>`_
+
+.. Caveats and Errata
+.. ==================
+