Quickstart

Introduction

The debinterface.Interfaces class contains a list of debinterface.Adapters objects, each one representing a network adapter from your computer. Internally, debinterface.Interfaces uses debinterface.InterfacesReader, debinterface.InterfacesWriter and debinterface.AdapterValidation to read, write and try to validate your interfaces.

Warning

I cannot stress enough that validation cannot be bullet proof, so be very cautious of what you modify !

You’ll also find two simple classes to manipulate Dnsmasq DNS ranges (debinterface.DnsmasqRange) and Hostapd debinterface.Hostapd config files. Please read the source code before using them to check they fit your usage.

Code examples

Quickstart

import debinterface

# Parse the interfaces file
interfaces = debinterface.Interfaces()

# Get a collection of objects representing the network adapters to print their names and static IP address:
adapters = interfaces.adapters
for adapter in adapters:
    ip = 'IP address is DHCP defined'
    if adapter.attributes['source'] == 'static':
        ip = adapter.attributes['address']
    print(adapter.attributes['name'], ip)

# If you need to use raw python objects, each adapter has an 'export()' method that returns a dictionary of its options.
for adapter in adapters:
    item = adapter.export()
    print(item['name'])

Adapter edition

Any changes made with setter methods will be reflected with the new write. Numerous methods exist in the debinterface.Adapters to update common fields, and you have a special method for less common ones

import debinterface

interfaces = debinterface.Interfaces()
adapter = interfaces.getAdapter("eth0")

# Update Gateway with provided setter
adapter.setGateway("192.168.1.4")

# Update hwaddress with the special setter
adapter.setUnknown('hwaddress', 'ether 02:1b:b1:ef:b0:01')
interfaces.writeInterfaces()

Adapter creation

import debinterface

options = {
        'addrFam': 'inet',
        'broadcast': '192.168.0.255',
        'name': 'eth9999',
        'up': ['ethtool -s eth0 wol g'],
        'gateway': '192.168.0.254',
        'down': [],
        'source': 'static',
        'netmask': '255.255.255.0',
        'address': '192.168.0.250'
    }

itfs = debinterface.Interfaces()
itfs.addAdapter(options)

Adapter up and down

You can up and down an adapter easily

import debinterface

interfaces = debinterface.Interfaces()

# Activate eth1
interfaces.upAdapter("eth1")

# Deactivate wlan0 and check for errors
success, details = interfaces.downAdapter("wlan0")
if not success:
    print details

Backups and disaster recovery

Before a write, a backup is always created and any write error will trigger a restore. A backup of your old interfaces file will be generated when writing over the previous interfaces file By defaults these paths are used :

  • INTERFACES_PATH=’/etc/network/interfaces’
  • BACKUP_PATH=’/etc/network/interfaces.old’

Paths can be customized when instanciating the Interfaces class:

import debinterface

interfaces = debinterface.Interfaces(interfaces_path='/home/interfaces', backup_path='/another/custom/path')

Lazy reading

By defaults, interfaces file is read when instanciating the Interfaces class, but you can do it lazyly if needed:

import debinterface

interfaces = debinterface.Interfaces(update_adapters=False)
interfaces.updateAdapters()