Skip to content

Commit e3d5504

Browse files
committed
answerfile: LACP bonding support
Signed-off-by: Yann Dirson <yann.dirson@vates.fr>
1 parent 5028d8b commit e3d5504

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

answerfile.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,10 +352,35 @@ def parseFCoEInterface(self):
352352

353353
return results
354354

355+
def parseBonding(self, nethw):
356+
nodes = getElementsByTagName(self.top_node, ['bonding'])
357+
if len(nodes) > 1:
358+
raise AnswerfileException("<bonding> must appear only once")
359+
if nodes:
360+
node = nodes[0]
361+
bond_name = getStrAttribute(node, ['name'], mandatory=True)
362+
if bond_name != "bond0":
363+
raise AnswerfileException("<bonding> name must be 'bond0'")
364+
365+
bond_mode = getStrAttribute(node, ['mode'], mandatory=True)
366+
if bond_mode != "lacp":
367+
raise AnswerfileException("<bonding> mode must be 'lacp'")
368+
369+
bond_members_str = getStrAttribute(node, ['members'], mandatory=True)
370+
bond_members = bond_members_str.split(",")
371+
if len(bond_members) < 2:
372+
raise AnswerfileException("<bonding> members must be at least two")
373+
for member in bond_members:
374+
if member not in nethw:
375+
raise AnswerfileException("<bonding> member %r not in detected NICs" % (member,))
376+
377+
netutil.configure_bonding_interface(nethw, bond_name, bond_mode, bond_members)
378+
355379
def parseInterface(self):
356380
results = {}
357381
node = getElementsByTagName(self.top_node, ['admin-interface'], mandatory=True)[0]
358382
nethw = netutil.scanConfiguration()
383+
self.parseBonding(nethw)
359384

360385
if_name = getStrAttribute(node, ['name'])
361386
if_hwaddr = getStrAttribute(node, ['hwaddr'])

doc/answerfile.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,14 @@ Format of 'source' and 'driver-source'
198198
Specifies additional devices to be included in the local SR.
199199

200200

201+
<bonding name="bond0" mode="lacp" members="eth,eth[,eth]*"/>
202+
203+
Join given ethernet interfaces using LACP bonding. Name of
204+
resulting interface must be "bond0". It can be then be used with
205+
206+
<admin-interface name="bond0"/>
207+
208+
201209
<admin-interface name="eth"/> | <admin-interface hwaddr="mac"/>
202210

203211
Specifies the initial management interface.

0 commit comments

Comments
 (0)