Routes management¶
Simple routes¶
Ordinary routes management is really simple:
# create a route
ndb.routes.create(
dst='10.0.0.0/24',
gateway='192.168.122.1'
).commit()
# retrieve a route and change it
with ndb.routes['10.0.0.0/24'] as route:
route.set(gateway='192.168.122.10')
# remove a route
with ndb.routes['10.0.0.0/24'] as route:
route.remove()
Multiple routing tables¶
But Linux systems have more than one routing table:
>>> set((x.table for x in ndb.routes.summary()))
{101, 5001, 5002, 254, 255}
The main routing table is 254. All the routes people mostly work with are in that table. To address routes in other routing tables, you can use dict specs:
ndb.routes.create(
dst='10.0.0.0/24',
gateway='192.168.122.1',
table=101
).commit()
with ndb.routes[{'table': 101, 'dst': '10.0.0.0/24'}] as route:
route.set('gateway', '192.168.122.10')
route.set('priority', 500)
with ndb.routes[{'table': 101, 'dst': '10.0.0.0/24'}] as route:
route.remove()
Route metrics¶
route['metrics'] attribute provides a dictionary-like object that reflects route metrics like hop limit, mtu etc:
# set up all metrics from a dictionary
with ndb.routes['10.0.0.0/24'] as route:
route.set('metrics', {'mtu': 1500, 'hoplimit': 20})
# fix individual metrics
with ndb.routes['10.0.0.0/24']['metrics'] as metrics:
metrics.set('mtu', 1500)
metrics.set('hoplimit', 20)
MPLS routes¶
See here: MPLS howto