Allow mac to be set up loopbacks, iff not multicast

This commit is contained in:
Pim van Pelt
2022-04-09 20:47:23 +00:00
parent 1e0b99bc0f
commit 35edcff884
3 changed files with 22 additions and 0 deletions

View File

@ -14,6 +14,7 @@
import logging import logging
import config.lcp as lcp import config.lcp as lcp
import config.address as address import config.address as address
import config.mac as mac
def get_loopbacks(yaml): def get_loopbacks(yaml):
""" Return a list of all loopbacks. """ """ Return a list of all loopbacks. """
@ -73,5 +74,8 @@ def validate_loopbacks(yaml):
if not address.is_allowed(yaml, ifname, iface['addresses'], a): if not address.is_allowed(yaml, ifname, iface['addresses'], a):
msgs.append("loopback %s IP address %s conflicts with another" % (ifname, a)) msgs.append("loopback %s IP address %s conflicts with another" % (ifname, a))
result = False result = False
if 'mac' in iface and mac.is_multicast(iface['mac']):
msgs.append("loopback %s MAC address %s cannot be multicast" % (ifname, iface['mac']))
result = False
return result, msgs return result, msgs

View File

@ -29,6 +29,7 @@ bridgedomain-settings:
--- ---
loopback: loopback:
description: str(exclude='\'"',len=64,required=False) description: str(exclude='\'"',len=64,required=False)
mac: mac(required=False)
lcp: str(max=15,matches='[a-z]+[a-z0-9-]*',required=False) lcp: str(max=15,matches='[a-z]+[a-z0-9-]*',required=False)
mtu: int(min=128,max=9216,required=False) mtu: int(min=128,max=9216,required=False)
addresses: list(ip_interface(),min=1,max=6,required=False) addresses: list(ip_interface(),min=1,max=6,required=False)

View File

@ -0,0 +1,17 @@
test:
description: "Loopback MAC address can't be multicast"
errors:
expected:
- "loopback .* MAC address .* cannot be multicast"
count: 1
---
loopbacks:
loop0:
description: "Cool, local MACs are fine"
mac: 02:00:00:00:00:00
loop1:
description: "Cool, global unicast MACs are fine"
mac: 04:00:00:00:00:00
loop2:
description: "Not cool, multicast MACs"
mac: 01:00:00:00:00:00