def _intf_repr(self, ifent): """ Return the configuration for a network interface as a dict like interfaces(5). """ if not ifent or ifent["type"] not in (dumbnet.INTF_TYPE_LOOPBACK, dumbnet.INTF_TYPE_ETH): return ifent ret = {"name": ifent["name"]} if not ifent.has_key("addr"): ret["mtu"] = ifent["mtu"] ret["flags"] = ifent["flags"] ret["type"] = self.INTF_TYPES[ifent["type"]] ret["typeid"] = ifent["type"] if ret["type"] == "eth": ret["family"] = "inet" else: ret["family"] = "unknown" if ifent.has_key("link_addr"): ret["hwaddress"] = str(ifent["link_addr"]) return ret xaddr = ifent["addr"] if xaddr.addrtype == dumbnet.ADDR_TYPE_IP: ret["address"] = dumbnet.ip_ntoa(xaddr.ip) ret["netmask"] = network.format_ipv4(network.bitmask_to_mask_ipv4(xaddr.bits)) ret["broadcast"] = str(xaddr.bcast()) ret["network"] = str(xaddr.net()) ret["mtu"] = ifent["mtu"] ret["flags"] = ifent["flags"] ret["type"] = self.INTF_TYPES[ifent["type"]] ret["typeid"] = ifent["type"] ret["family"] = "inet" gw = self._intf_ipv4_gateway(ifent["name"]) if gw: ret["gateway"] = gw if ifent.has_key("dst_addr"): ret["pointopoint"] = str(ifent["dst_addr"]) if ifent.has_key("link_addr"): ret["hwaddress"] = str(ifent["link_addr"]) elif xaddr.addrtype == dumbnet.ADDR_TYPE_IP6: ret["address"] = dumbnet.ip6_ntoa(xaddr.ip6) ret["netmask"] = xaddr.bits ret["broadcast"] = str(xaddr.bcast()) ret["mtu"] = ifent["mtu"] ret["flags"] = ifent["flags"] ret["type"] = self.INTF_TYPES[ifent["type"]] ret["family"] = "inet6" if ifent.has_key("link_addr"): ret["hwaddress"] = str(ifent["link_addr"]) return ret
def _intf_ipv4_gateway(self, ifname): """ Return the default gateway if it belongs to the interface """ defgw = self.route.get(self.default_dst_ipv4) xaddr = dumbnet.intf.get(self, ifname)["addr"] route = self.route.get(xaddr) if not defgw or (route and defgw != route): return None defgwstr = str(defgw) address = network.parse_ipv4(dumbnet.ip_ntoa(xaddr.ip)) netmask = network.bitmask_to_mask_ipv4(xaddr.bits) if network.ipv4_in_network(network.parse_ipv4(defgwstr), netmask, network.mask_ipv4(netmask, address)): return defgwstr
def _intf_repr(self, ifent): """ Return the configuration for a network interface as a dict like interfaces(5). """ if not ifent \ or ifent['type'] not in (dumbnet.INTF_TYPE_LOOPBACK, dumbnet.INTF_TYPE_ETH): return ifent ret = {'name': ifent['name']} if not ifent.has_key('addr'): ret['mtu'] = ifent['mtu'] ret['flags'] = ifent['flags'] ret['type'] = self.INTF_TYPES[ifent['type']] ret['typeid'] = ifent['type'] if ret['type'] == 'eth': ret['family'] = 'inet' else: ret['family'] = 'unknown' if ifent.has_key('link_addr'): ret['hwaddress'] = str(ifent['link_addr']) return ret xaddr = ifent['addr'] if xaddr.addrtype == dumbnet.ADDR_TYPE_IP: ret['address'] = dumbnet.ip_ntoa(xaddr.ip) ret['netmask'] = network.format_ipv4( network.bitmask_to_mask_ipv4(xaddr.bits)) ret['broadcast'] = str(xaddr.bcast()) ret['network'] = str(xaddr.net()) ret['mtu'] = ifent['mtu'] ret['flags'] = ifent['flags'] ret['type'] = self.INTF_TYPES[ifent['type']] ret['typeid'] = ifent['type'] ret['family'] = 'inet' gw = self._intf_ipv4_gateway(ifent['name']) if gw: ret['gateway'] = gw if ifent.has_key('dst_addr'): ret['pointopoint'] = str(ifent['dst_addr']) if ifent.has_key('link_addr'): ret['hwaddress'] = str(ifent['link_addr']) elif xaddr.addrtype == dumbnet.ADDR_TYPE_IP6: ret['address'] = dumbnet.ip6_ntoa(xaddr.ip6) ret['netmask'] = xaddr.bits ret['broadcast'] = str(xaddr.bcast()) ret['mtu'] = ifent['mtu'] ret['flags'] = ifent['flags'] ret['type'] = self.INTF_TYPES[ifent['type']] ret['family'] = 'inet6' if ifent.has_key('link_addr'): ret['hwaddress'] = str(ifent['link_addr']) return ret