diff --git a/schema.yaml b/schema.yaml index a4d3aee..f82f8de 100644 --- a/schema.yaml +++ b/schema.yaml @@ -7,14 +7,16 @@ bondethernet: --- interface: description: str(exclude='\'"',required=False) - lcp: str(max=8,matches='[a-z]+[a-z0-9-]{,7}',required=False) mac: mac(required=False) + lcp: str(max=8,matches='[a-z]+[a-z0-9-]{,7}',required=False) + mtu: int(min=128,max=9216,required=False) addresses: list(ip_interface(),min=1,max=6,required=False) sub-interfaces: map(include('sub-interface'),key=int(min=1,max=4294967295),required=False) --- sub-interface: description: str(exclude='\'"',required=False) lcp: str(max=8,matches='[a-z]+[a-z0-9-]{,7}',required=False) + mtu: int(min=128,max=9216,required=False) addresses: list(ip_interface(),required=False) encapsulation: include('encapsulation',required=False) --- @@ -23,4 +25,3 @@ encapsulation: dot1ad: int(min=1,max=4095,required=False) inner-dot1q: int(min=1,max=4095,required=False) exact-match: bool(required=False) - diff --git a/validator/interface.py b/validator/interface.py index b7c0e96..992c6fb 100644 --- a/validator/interface.py +++ b/validator/interface.py @@ -121,6 +121,10 @@ def interface(args, yaml): msgs.append("interface %s does not exist in bondethernets" % ifname) result = False + if 'mtu' in iface: + iface_mtu = iface['mtu'] + else: + iface_mtu = 1500 iface_lcp = has_lcp(yaml, ifname) iface_address = has_address(yaml, ifname) @@ -132,6 +136,10 @@ def interface(args, yaml): for sub_id, sub_iface in yaml['interfaces'][ifname]['sub-interfaces'].items(): sub_ifname = "%s.%d" % (ifname, sub_id) logger.debug("sub-interface %s" % sub_iface) + if 'mtu' in sub_iface: + if sub_iface['mtu'] > iface_mtu: + msgs.append("sub-interface %s has MTU %d higher than parent MTU %d" % (sub_ifname, sub_iface['mtu'], iface_mtu)) + result = False if has_lcp(yaml, sub_ifname): if not iface_lcp: msgs.append("sub-interface %s has LCP but %s does not have LCP" % (sub_ifname, ifname))