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 set(self, d, name=None): """ Set the configuration for an interface from a dict like interfaces(5). """ if name is not None: d['name'] = name iface = self.get(d['name']) address = d.get('address', iface['address']) netmask = d.get('netmask', iface['netmask']) d['addr'] = dumbnet.addr("%s/%s" % (address, netmask)) newgateway = None delgateway = None if d.has_key('gateway'): if iface['type'] != 'eth' or iface['family'] != 'inet': raise NotImplementedError("This method only supports modify IPv4 gateway for ethernet interface") gwstr = network.format_ipv4(network.parse_ipv4("%s" % d['gateway'])) if iface.get('gateway', None) != gwstr: newgateway = dumbnet.addr("%s" % d['gateway']) # If d hasn't gateway but iface has a gateway, remove previous gateway. elif iface.has_key('gateway'): if iface['type'] != 'eth' or iface['family'] != 'inet': raise NotImplementedError("This method only supports modify IPv4 gateway for ethernet interface") delgateway = d['addr'] if d.has_key('pointopoint'): d['dst_addr'] = dumbnet.addr("%s" % d['pointopoint']) if d.has_key('hwaddress'): d['link_addr'] = dumbnet.addr("%s" % d['hwaddress'], dumbnet.ADDR_TYPE_ETH) dumbnet.intf.set(self, d) # If iface has previously a default gateway if delgateway: try: self.route.delete(self.default_dst_ipv4) except OSError, e: # If an error has occurred, rollback if iface.has_key('gateway'): del iface['gateway'] self.set(iface) raise OSError(str(e))
def set(self, d, name=None): """ Set the configuration for an interface from a dict like interfaces(5). """ if name is not None: d["name"] = name iface = self.get(d["name"]) address = d.get("address", iface["address"]) netmask = d.get("netmask", iface["netmask"]) d["addr"] = dumbnet.addr("%s/%s" % (address, netmask)) newgateway = None delgateway = None if d.has_key("gateway"): if iface["type"] != "eth" or iface["family"] != "inet": raise NotImplementedError("This method only supports modify IPv4 gateway for ethernet interface") gwstr = network.format_ipv4(network.parse_ipv4("%s" % d["gateway"])) if iface.get("gateway", None) != gwstr: newgateway = dumbnet.addr("%s" % d["gateway"]) # If d hasn't gateway but iface has a gateway, remove previous gateway. elif iface.has_key("gateway"): if iface["type"] != "eth" or iface["family"] != "inet": raise NotImplementedError("This method only supports modify IPv4 gateway for ethernet interface") delgateway = d["addr"] if d.has_key("pointopoint"): d["dst_addr"] = dumbnet.addr("%s" % d["pointopoint"]) if d.has_key("hwaddress"): d["link_addr"] = dumbnet.addr("%s" % d["hwaddress"], dumbnet.ADDR_TYPE_ETH) dumbnet.intf.set(self, d) # If iface has previously a default gateway if delgateway: try: self.route.delete(self.default_dst_ipv4) except OSError, e: # If an error has occurred, rollback if iface.has_key("gateway"): del iface["gateway"] self.set(iface) raise OSError(str(e))
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