diff options
Diffstat (limited to 'os_net_config/utils.py')
-rw-r--r-- | os_net_config/utils.py | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/os_net_config/utils.py b/os_net_config/utils.py index cd7ee65..e51d197 100644 --- a/os_net_config/utils.py +++ b/os_net_config/utils.py @@ -14,35 +14,76 @@ # License for the specific language governing permissions and limitations # under the License. +import glob import logging logger = logging.getLogger(__name__) +_SYS_CLASS_NET = '/sys/class/net' def write_config(filename, data): - with open(filename, "w") as f: + with open(filename, 'w') as f: f.write(str(data)) def get_file_data(filename): try: - with open(filename, "r") as f: + with open(filename, 'r') as f: return f.read() except IOError: logger.error("Error reading file: %s" % filename) - return "" + return '' def interface_mac(name): try: - with open('/sys/class/net/%s/address' % name, "r") as f: + with open('/sys/class/net/%s/address' % name, 'r') as f: return f.read().rstrip() except IOError: logger.error("Unable to read file: %s" % name) raise +def _is_active_nic(interface_name): + try: + if interface_name == 'lo': + return False + + addr_assign_type = None + with open(_SYS_CLASS_NET + '/%s/addr_assign_type' % interface_name, + 'r') as f: + addr_assign_type = int(f.read().rstrip()) + + carrier = None + with open(_SYS_CLASS_NET + '/%s/carrier' % interface_name, 'r') as f: + carrier = int(f.read().rstrip()) + + address = None + with open(_SYS_CLASS_NET + '/%s/address' % interface_name, 'r') as f: + address = f.read().rstrip() + + if addr_assign_type == 0 and carrier == 1 and address: + return True + else: + return False + except IOError: + return False + + +def ordered_active_nics(): + embedded_nics = [] + nics = [] + for name in glob.iglob(_SYS_CLASS_NET + '/*'): + nic = name[(len(_SYS_CLASS_NET) + 1):] + if _is_active_nic(nic): + if nic.startswith('em') or nic.startswith('eth'): + embedded_nics.append(nic) + else: + nics.append(nic) + return sorted(embedded_nics) + sorted(nics) + + def diff(filename, data): file_data = get_file_data(filename) logger.debug("Diff file data:\n%s" % file_data) |