Exemple #1
0
    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
Exemple #2
0
    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))
Exemple #3
0
    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))
Exemple #4
0
    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