Exemple #1
0
    def _configure_vrrp_router(self, vrrp_version, priority, ip_addr,
                               switch_index, vrid):
        switches = self.switches
        self.logger.debug('%s', switches.dps)
        dpid = sorted(switches.dps.keys())[switch_index]
        self.logger.debug('%s', lib_dpid.dpid_to_str(dpid))
        self.logger.debug('%s', switches.port_state)
        # hack: use the smallest port no to avoid picking OVS local port
        port_no = sorted(switches.port_state[dpid].keys())[0]
        self.logger.debug('%d', port_no)
        port = switches.port_state[dpid][port_no]
        self.logger.debug('%s', port)
        mac = port.hw_addr
        self.logger.debug('%s', mac)

        interface = vrrp_event.VRRPInterfaceOpenFlow(mac, ip_addr, None, dpid,
                                                     port_no)
        self.logger.debug('%s', interface)

        config = vrrp_event.VRRPConfig(version=vrrp_version,
                                       vrid=vrid,
                                       priority=priority,
                                       ip_addresses=[ip_addr])
        self.logger.debug('%s', config)

        rep = vrrp_api.vrrp_config(self, interface, config)
        self.logger.debug('%s', rep)
        return rep
    def _configure_vrrp_router(self, vrrp_version, priority,
                               primary_ip_address, ifname, vrid):
        interface = vrrp_event.VRRPInterfaceNetworkDevice(
            lib_mac.DONTCARE_STR, primary_ip_address, None, ifname)
        self.logger.debug('%s', interface)

        vip = '10.0.%d.1' % vrid
        ip_addresses = [vip]
        config = vrrp_event.VRRPConfig(version=vrrp_version,
                                       vrid=vrid,
                                       priority=priority,
                                       ip_addresses=ip_addresses)
        self.logger.debug('%s', config)

        rep = vrrp_api.vrrp_config(self, interface, config)
        self.logger.debug('%s', rep)

        return rep
    def _config(self, msgid, params):
        self.logger.debug('handle vrrp_config request')
        try:
            param_dict = params[0]
        except:
            raise RPCError('parameters are missing')

        if_params = self._params_to_dict(param_dict,
                                         ('primary_ip_address', 'device_name'))
        # drop vlan support later
        if_params['vlan_id'] = None
        if_params['mac_address'] = mac.DONTCARE_STR
        try:
            interface = vrrp_event.VRRPInterfaceNetworkDevice(**if_params)
        except:
            raise RPCError('parameters are invalid, %s' % (str(param_dict)))

        config_params = self._params_to_dict(
            param_dict,
            (
                'vrid',  # mandatory
                'ip_addresses',  # mandatory
                'version',
                'admin_state',
                'priority',
                'advertisement_interval',
                'preempt_mode',
                'preempt_delay',
                'statistics_interval'))
        try:
            ip_addr = config_params.pop('ip_addresses')
            config_params['ip_addresses'] = [ip_addr]
            config = vrrp_event.VRRPConfig(**config_params)
        except:
            raise RPCError('parameters are invalid, %s' % (str(param_dict)))

        config_result = vrrp_api.vrrp_config(self, interface, config)

        api_result = [
            config_result.config.vrid, config_result.config.priority,
            str(netaddr.IPAddress(config_result.config.ip_addresses[0]))
        ]
        return api_result