IP addresses management¶
Using the global view¶
The addresses view provides access to all the addresses registered in the DB, as well as methods to create and remove them:
eth0 = ndb.interfaces['eth0']
# create an address
(ndb
.addresses
.create(address='10.0.0.1', prefixlen=24, index=eth0['index'])
.commit())
# remove it
(ndb
.addresses['10.0.0.1/24']
.remove()
.commit())
# list addresses
(ndb
.addresses
.summary()) # see also other view dump methods
Using ipaddr views¶
Interfaces also provide address views as subsets of the global address view:
(ndb
.interfaces['eth0']
.ipaddr
.summary())
It is possible use the same API as with the global address view:
(ndb
.interfaces['eth0']
.ipaddr
.create(address='10.0.0.1', prefixlen=24) # index is implied
.commit())
Using interface methods¶
Interfaces provide also simple methods to manage addresses:
(ndb
.interfaces['eth0']
.del_ip('172.16.0.1/24') # remove an existing address
.del_ip(family=AF_INET) # remove all IPv4 addresses
.add_ip('10.0.0.1/24') # add a new IP address
.add_ip(address='10.0.0.2', prefixlen=24) # if you prefer keyword args
.set('state', 'up')
.commit())
Functions add_ip() and del_ip() return the interface object, so they can be chained as in the example above, and the final commit() will commit all the changes in the chain.
The keywords to del_ip() are the same object field names that may be used in the selectors or report filters:
(ndb
.interfaces['eth0']
.del_ip(prefixlen=25) # remove all addresses with mask /25
.commit())
A match function that may be passed to the del_ip() is the same as for addresses.dump().select_records(), and it gets a named tuple as the argument. The fields are named in the same way as address objects fields. So if you want to filter addresses by a pattern or the prefixlen field with a match function, you may use:
(ndb
.interfaces['eth0']
.del_ip(lambda x: x.address.startswith('192.168'))
.commit())
(ndb
.interfaces['eth1']
.del_ip(lambda x: x.prefixlen == 25)
.commit())
An empty del_ip() removes all the IP addresses on the interface:
(ndb
.interfaces['eth0']
.del_ip() # flush all the IP:s
.commit())
Accessing one address details¶
Access an address as a separate RTNL object:
print(ndb.addresses['10.0.0.1/24'])
Please notice that address objects are read-only, you may not change them, only remove old ones, and create new.