Lines 61-82
class DeviceError(ValueError):
|
Link Here
|
---|
|
61 |
ValueError.__init__(self, msg) |
61 |
ValueError.__init__(self, msg) |
62 |
|
62 |
|
63 |
|
63 |
|
64 |
class IP4Set(set): |
|
|
65 |
def add(self, ip): |
66 |
set.add(self, ipaddr.IPv4Address(ip)) |
67 |
|
68 |
def __contains__(self, ip): |
69 |
return set.__contains__(self, ipaddr.IPv4Address(ip)) |
70 |
|
71 |
|
72 |
class IP6Set(set): |
73 |
def add(self, ip): |
74 |
set.add(self, ipaddr.IPv6Address(ip)) |
75 |
|
76 |
def __contains__(self, ip): |
77 |
return set.__contains__(self, ipaddr.IPv6Address(ip)) |
78 |
|
79 |
|
80 |
class Interfaces(dict): |
64 |
class Interfaces(dict): |
81 |
"""All network interfaces""" |
65 |
"""All network interfaces""" |
82 |
|
66 |
|
Lines 108-117
class Interfaces(dict):
|
Link Here
|
---|
|
108 |
device = Device.from_dict(values, self) |
92 |
device = Device.from_dict(values, self) |
109 |
self[device.name] = device |
93 |
self[device.name] = device |
110 |
|
94 |
|
111 |
# def finalize(self): |
|
|
112 |
# self.check_consistency() |
113 |
# return self.to_ucr() |
114 |
|
115 |
def to_ucr(self): |
95 |
def to_ucr(self): |
116 |
"""Returns a UCR representation of all interfaces""" |
96 |
"""Returns a UCR representation of all interfaces""" |
117 |
ucr.load() |
97 |
ucr.load() |
Lines 143-166
class Interfaces(dict):
|
Link Here
|
---|
|
143 |
self.set_device_order() |
123 |
self.set_device_order() |
144 |
|
124 |
|
145 |
def check_unique_ip4_address(self): |
125 |
def check_unique_ip4_address(self): |
146 |
all_ip4s = IP4Set() |
126 |
all_ip4s = set() |
|
|
127 |
for network, device in self.all_ip4_networks(): |
128 |
address = network.ip |
129 |
if address not in all_ip4s: |
130 |
all_ip4s.add(address) |
131 |
else: |
132 |
raise DeviceError(_('Duplicated IP address: %r') % (address,), device.name) |
133 |
|
134 |
def check_ip4_reachable(self, address): |
135 |
try: |
136 |
address = ipaddr.IPv4Address(address) |
137 |
except ipaddr.AddressValueError: |
138 |
return False |
139 |
for network, _device in self.all_ip4_networks(): |
140 |
if address in network: |
141 |
return True |
142 |
return False |
143 |
|
144 |
def all_ip4_networks(self): |
147 |
for device in self.values(): |
145 |
for device in self.values(): |
148 |
if not device.ip4dynamic: |
146 |
if device.ip4dynamic: |
149 |
for address, netmask in device.ip4: |
147 |
continue |
150 |
# check for duplicated IP's |
148 |
for address, netmask in device.ip4: |
151 |
if address in all_ip4s: |
149 |
yield (ipaddr.IPv4Network("%s/%s" % (address, netmask)), device) |
152 |
raise DeviceError(_('Duplicated IP address: %r') % (address), device.name) |
|
|
153 |
all_ip4s.add(address) |
154 |
|
150 |
|
155 |
def check_unique_ip6_address(self): |
151 |
def check_unique_ip6_address(self): |
156 |
all_ip6s = IP6Set() |
152 |
all_ip6s = set() |
|
|
153 |
for network, device in self.all_ip6_networks(): |
154 |
address = network.ip |
155 |
if address not in all_ip6s: |
156 |
all_ip6s.add(address) |
157 |
else: |
158 |
raise DeviceError(_('Duplicated IP address: %r') % (address,), device.name) |
159 |
|
160 |
def check_ip6_reachable(self, address): |
161 |
try: |
162 |
address = ipaddr.IPv6Address(address) |
163 |
except ipaddr.AddressValueError: |
164 |
return False |
165 |
for network, _device in self.all_ip6_networks(): |
166 |
if address in network: |
167 |
return True |
168 |
return False |
169 |
|
170 |
def all_ip6_networks(self): |
157 |
for device in self.values(): |
171 |
for device in self.values(): |
158 |
if not device.ip6dynamic: |
172 |
if device.ip6dynamic: |
159 |
for address, prefix, identifier in device.ip6: |
173 |
continue |
160 |
# check for duplicated IP's |
174 |
for address, prefix, _identifier in device.ip6: |
161 |
if address in all_ip6s: |
175 |
yield (ipaddr.IPv4Network("%s/%s" % (address, prefix)), device) |
162 |
raise DeviceError(_('Duplicated IP address: %r') % (address), device.name) |
|
|
163 |
all_ip6s.add(address) |
164 |
|
176 |
|
165 |
def set_device_order(self): |
177 |
def set_device_order(self): |
166 |
if not any(isinstance(device, (VLAN, Bridge, Bond)) for device in self.values()): |
178 |
if not any(isinstance(device, (VLAN, Bridge, Bond)) for device in self.values()): |