def _setup_network_on_host(self, context, network):
        """Sets up network on this host."""
        if context.is_admin: 
            if not objects.Network.in_use_on_host(context, network['id'],
                                                  None):
                return 
        
        if not network.vpn_public_address:
            address = CONF.vpn_ip
            network.vpn_public_address = address
            network.save()
        else:
            address = network.vpn_public_address
        network.dhcp_server = self._get_dhcp_ip(context, network)

        self._initialize_network(network)

        # NOTE(): only ensure this forward if the address hasn't been set
        #             manually.
        if address == CONF.vpn_ip and hasattr(self.driver,
                                               "ensure_vpn_forward"):
            self.l3driver.add_vpn(CONF.vpn_ip,
                    network.vpn_public_port,
                    network.vpn_private_address)
        if not CONF.fake_network:
            dev = self.driver.get_dev(network)
            # NOTE(): dhcp DB queries require elevated context
            if network.enable_dhcp:
                elevated = context.elevated()
                self.driver.update_dhcp(elevated, dev, network)
            if CONF.use_ipv6:
                self.driver.update_ra(context, dev, network)
                gateway = utils.get_my_linklocal(dev)
                network.gateway_v6 = gateway
                network.save()
Beispiel #2
0
    def _setup_network(self, context, network_ref):
        """Sets up network on this host."""
        if not network_ref['vpn_public_address']:
            net = {}
            address = FLAGS.vpn_ip
            net['vpn_public_address'] = address
            network_ref = db.network_update(context, network_ref['id'], net)
        else:
            address = network_ref['vpn_public_address']
        network_ref['dhcp_server'] = self._get_dhcp_ip(context, network_ref)
        self.driver.ensure_vlan_bridge(network_ref['vlan'],
                                       network_ref['bridge'],
                                       network_ref['bridge_interface'],
                                       network_ref)

        # NOTE(vish): only ensure this forward if the address hasn't been set
        #             manually.
        if address == FLAGS.vpn_ip and hasattr(self.driver,
                                               "ensure_vlan_forward"):
            self.driver.ensure_vlan_forward(FLAGS.vpn_ip,
                                            network_ref['vpn_public_port'],
                                            network_ref['vpn_private_address'])
        if not FLAGS.fake_network:
            self.driver.update_dhcp(context, network_ref)
            if(FLAGS.use_ipv6):
                self.driver.update_ra(context, network_ref)
                gateway = utils.get_my_linklocal(network_ref['bridge'])
                self.db.network_update(context, network_ref['id'],
                                       {'gateway_v6': gateway})
Beispiel #3
0
    def _setup_network(self, context, network_ref):
        """Sets up network on this host."""
        if not network_ref["vpn_public_address"]:
            net = {}
            address = FLAGS.vpn_ip
            net["vpn_public_address"] = address
            network_ref = db.network_update(context, network_ref["id"], net)
        else:
            address = network_ref["vpn_public_address"]
        network_ref["dhcp_server"] = self._get_dhcp_ip(context, network_ref)

        mac_address = self.generate_mac_address()
        dev = self.driver.plug(network_ref, mac_address)
        self.driver.initialize_gateway_device(dev, network_ref)

        # NOTE(vish): only ensure this forward if the address hasn't been set
        #             manually.
        if address == FLAGS.vpn_ip and hasattr(self.driver, "ensure_vpn_forward"):
            self.driver.ensure_vpn_forward(
                FLAGS.vpn_ip, network_ref["vpn_public_port"], network_ref["vpn_private_address"]
            )
        if not FLAGS.fake_network:
            self.driver.update_dhcp(context, dev, network_ref)
            if FLAGS.use_ipv6:
                self.driver.update_ra(context, dev, network_ref)
                gateway = utils.get_my_linklocal(dev)
                self.db.network_update(context, network_ref["id"], {"gateway_v6": gateway})
Beispiel #4
0
 def _setup_network(self, context, network_ref):
     """Sets up network on this host."""
     network_ref['dhcp_server'] = self._get_dhcp_ip(context, network_ref)
     self.driver.ensure_bridge(network_ref['bridge'],
                               network_ref['bridge_interface'], network_ref)
     if not FLAGS.fake_network:
         self.driver.update_dhcp(context, network_ref)
         if (FLAGS.use_ipv6):
             self.driver.update_ra(context, network_ref)
             gateway = utils.get_my_linklocal(network_ref['bridge'])
             self.db.network_update(context, network_ref['id'],
                                    {'gateway_v6': gateway})
Beispiel #5
0
    def _setup_network_on_host(self, context, network):
        """Sets up network on this host."""
        network["dhcp_server"] = self._get_dhcp_ip(context, network)
        self.l3driver.initialize_gateway(network)

        if FLAGS.quantum_use_dhcp and not FLAGS.fake_network:
            dev = self.driver.get_dev(network)
            self.driver.update_dhcp(context, dev, network)
            if FLAGS.use_ipv6:
                self.driver.update_ra(context, dev, network)
                gateway = utils.get_my_linklocal(dev)
                self.db.network_update(context, network["id"], {"gateway_v6": gateway})
Beispiel #6
0
 def _setup_network(self, context, network_ref):
     """Sets up network on this host."""
     network_ref['dhcp_server'] = self._get_dhcp_ip(context, network_ref)
     self.driver.ensure_bridge(network_ref['bridge'],
                               network_ref['bridge_interface'],
                               network_ref)
     if not FLAGS.fake_network:
         self.driver.update_dhcp(context, network_ref)
         if(FLAGS.use_ipv6):
             self.driver.update_ra(context, network_ref)
             gateway = utils.get_my_linklocal(network_ref['bridge'])
             self.db.network_update(context, network_ref['id'],
                                    {'gateway_v6': gateway})
Beispiel #7
0
    def _setup_network_on_host(self, context, network):
        """Sets up network on this host."""
        network['dhcp_server'] = self._get_dhcp_ip(context, network)
        self.l3driver.initialize_gateway(network)

        if FLAGS.quantum_use_dhcp and not FLAGS.fake_network:
            dev = self.driver.get_dev(network)
            self.driver.update_dhcp(context, dev, network)
            if FLAGS.use_ipv6:
                self.driver.update_ra(context, dev, network)
                gateway = utils.get_my_linklocal(dev)
                self.db.network_update(context, network['id'],
                                       {'gateway_v6': gateway})
Beispiel #8
0
    def _setup_network(self, context, network_ref):
        """Sets up network on this host."""
        network_ref["dhcp_server"] = self._get_dhcp_ip(context, network_ref)

        mac_address = self.generate_mac_address()
        dev = self.driver.plug(network_ref, mac_address)
        self.driver.initialize_gateway_device(dev, network_ref)

        if not FLAGS.fake_network:
            self.driver.update_dhcp(context, dev, network_ref)
            if FLAGS.use_ipv6:
                self.driver.update_ra(context, dev, network_ref)
                gateway = utils.get_my_linklocal(dev)
                self.db.network_update(context, network_ref["id"], {"gateway_v6": gateway})
def update_ra(context, network_id):
    network_ref = db.network_get(context, network_id)

    conffile = _ra_file(network_ref['bridge'], 'conf')
    with open(conffile, 'w') as f:
        conf_str = """
interface %s
{
   AdvSendAdvert on;
   MinRtrAdvInterval 3;
   MaxRtrAdvInterval 10;
   prefix %s
   {
        AdvOnLink on;
        AdvAutonomous on;
   };
};
""" % (network_ref['bridge'], network_ref['cidr_v6'])
        f.write(conf_str)

    # Make sure radvd can actually read it (it setuid()s to "nobody")
    os.chmod(conffile, 0644)

    pid = _ra_pid_for(network_ref['bridge'])

    # if radvd is already running, then tell it to reload
    if pid:
        out, _err = _execute('cat',
                             '/proc/%d/cmdline' % pid,
                             check_exit_code=False)
        if conffile in out:
            try:
                _execute('sudo', 'kill', pid)
            except Exception as exc:  # pylint: disable=W0703
                LOG.debug(_("killing radvd threw %s"), exc)
        else:
            LOG.debug(_("Pid %d is stale, relaunching radvd"), pid)
    command = _ra_cmd(network_ref)
    _execute(*command)
    db.network_update(
        context, network_id,
        {"gateway_v6": utils.get_my_linklocal(network_ref['bridge'])})
Beispiel #10
0
def update_ra(context, network_id):
    network_ref = db.network_get(context, network_id)

    conffile = _ra_file(network_ref["bridge"], "conf")
    with open(conffile, "w") as f:
        conf_str = """
interface %s
{
   AdvSendAdvert on;
   MinRtrAdvInterval 3;
   MaxRtrAdvInterval 10;
   prefix %s
   {
        AdvOnLink on;
        AdvAutonomous on;
   };
};
""" % (
            network_ref["bridge"],
            network_ref["cidr_v6"],
        )
        f.write(conf_str)

    # Make sure radvd can actually read it (it setuid()s to "nobody")
    os.chmod(conffile, 0644)

    pid = _ra_pid_for(network_ref["bridge"])

    # if radvd is already running, then tell it to reload
    if pid:
        out, _err = _execute("cat /proc/%d/cmdline" % pid, check_exit_code=False)
        if conffile in out:
            try:
                _execute("sudo kill %d" % pid)
            except Exception as exc:  # pylint: disable-msg=W0703
                LOG.debug(_("killing radvd threw %s"), exc)
        else:
            LOG.debug(_("Pid %d is stale, relaunching radvd"), pid)
    command = _ra_cmd(network_ref)
    _execute(command)
    db.network_update(context, network_id, {"ra_server": utils.get_my_linklocal(network_ref["bridge"])})
Beispiel #11
0
def update_ra(context, network_id):
    network_ref = db.network_get(context, network_id)

    conffile = _ra_file(network_ref['bridge'], 'conf')
    with open(conffile, 'w') as f:
        conf_str = """
interface %s
{
   AdvSendAdvert on;
   MinRtrAdvInterval 3;
   MaxRtrAdvInterval 10;
   prefix %s
   {
        AdvOnLink on;
        AdvAutonomous on;
   };
};
""" % (network_ref['bridge'], network_ref['cidr_v6'])
        f.write(conf_str)

    # Make sure radvd can actually read it (it setuid()s to "nobody")
    os.chmod(conffile, 0644)

    pid = _ra_pid_for(network_ref['bridge'])

    # if radvd is already running, then tell it to reload
    if pid:
        out, _err = _execute('cat', '/proc/%d/cmdline'
                             % pid, check_exit_code=False)
        if conffile in out:
            try:
                _execute('sudo', 'kill', pid)
            except Exception as exc:  # pylint: disable=W0703
                LOG.debug(_('killing radvd threw %s'), exc)
        else:
            LOG.debug(_('Pid %d is stale, relaunching radvd'), pid)
    command = _ra_cmd(network_ref)
    _execute(*command)
    db.network_update(context, network_id,
                      {'gateway_v6':
                       utils.get_my_linklocal(network_ref['bridge'])})