Network interfaces¶
List interfaces¶
List interface keys:
with NDB(log='on') as ndb:
for key in ndb.interfaces:
print(key)
NDB views support some dict methods: items(), values(), keys():
with NDB(log='on') as ndb:
for key, nic in ndb.interfaces.items():
nic.set('state', 'up')
nic.commit()
Get interface objects¶
The keys may be used as selectors to get interface objects:
for key in ndb.interfaces:
print(ndb.interfaces[key])
Also possible selector formats are dict() and simple string. The latter means the interface name:
eth0 = ndb.interfaces['eth0']
Dict selectors are necessary to get interfaces by other properties:
wrk1_eth0 = ndb.interfaces[{'target': 'worker1.sample.com',
'ifname': 'eth0'}]
wrk2_eth0 = ndb.interfaces[{'target': 'worker2.sample.com',
'address': '52:54:00:22:a1:b7'}]
Change nic properties¶
Changing MTU and MAC address:
with ndb.interfaces['eth0'] as eth0:
eth0['mtu'] = 1248
eth0['address'] = '00:11:22:33:44:55'
# --> <-- eth0.commit() is called by the context manager
One can change a property either using the assignment statement, or using the .set() routine:
# same code
with ndb.interfaces['eth0'] as eth0:
eth0.set('mtu', 1248)
eth0.set('address', '00:11:22:33:44:55')
The .set() routine returns the object itself, that makes possible chain calls:
# same as above
with ndb.interfaces['eth0'] as eth0:
eth0.set('mtu', 1248).set('address', '00:11:22:33:44:55')
# or
with ndb.interfaces['eth0'] as eth0:
(eth0
.set('mtu', 1248)
.set('address', '00:11:22:33:44:55'))
# or without the context manager, call commit() explicitly
(ndb
.interfaces['eth0']
.set('mtu', 1248)
.set('address', '00:11:22:33:44:55')
.commit())
Create virtual interfaces¶
Create a bridge and add a port, eth0:
(ndb
.interfaces
.create(ifname='br0', kind='bridge')
.commit())
(ndb
.interfaces['eth0']
.set('master', ndb.interfaces['br0']['index'])
.commit())
Bridge and bond ports¶
Add bridge and bond ports one can use specific API:
(
ndb.interfaces['br0']
.add_port('eth0')
.add_port('eth1')
.set('br_max_age', 1024)
.set('br_forward_delay', 1500)
.commit()
)
(
ndb.interfaces['bond0']
.add_port('eth0')
.add_port('eth1')
.commit()
)
To remove a port:
(
ndb.interfaces['br0']
.del_port('eth0')
.commit()
)
Or by setting the master property on a port, in the same way as with IPRoute:
index = ndb.interfaces['br0']['index']
# add a port to a bridge
(
ndb.interfaces['eth0']
.set('master', index)
.commit()
)
# remove a port from a bridge
(
ndb.interfaces['eth0']
.set('master', 0)
.commit()
)