Search in sources :

Example 1 with Ipv6serviceConfig

use of org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ipv6service.config.rev181010.Ipv6serviceConfig in project netvirt by opendaylight.

the class Ipv6ConfigChangeListener method convertSwitchToControllerMode.

private void convertSwitchToControllerMode(Ipv6serviceConfig updated) {
    List<IVirtualNetwork> networks = ifMgr.getNetworkCache();
    for (IVirtualNetwork network : networks) {
        VirtualNetwork vnet = ifMgr.getNetwork(network.getNetworkUuid());
        VirtualPort routerPort = ifMgr.getRouterV6InterfaceForNetwork(network.getNetworkUuid());
        Collection<VirtualNetwork.DpnInterfaceInfo> dpnIfaceList = vnet.getDpnIfaceList();
        LOG.info("convertSwitchToControllerMode::Network : {} routerPort: {}", network, routerPort);
        final long networkElanTag = ifMgr.getNetworkElanTag(network.getNetworkUuid());
        // check if any VM is booted already before subnet is added to the router
        if (routerPort == null) {
            LOG.warn("convertSwitchToControllerMode:: RouterPort not available for network:{}", vnet.getNetworkUuid());
            continue;
        }
        for (VirtualNetwork.DpnInterfaceInfo dpnIfaceInfo : dpnIfaceList) {
            ifMgr.getNDExecutorService().execute(() -> {
                LOG.info("convertSwitchToControllerMode : Deleting Old flows on Switch Mode");
                ifMgr.checkVmBootBeforeSubnetAddRouter(dpnIfaceInfo, routerPort, networkElanTag, Ipv6ServiceConstants.DEL_FLOW);
                LOG.info("convertSwitchToControllerMode : Installing new flows on Controller Mode");
                MacAddress ifaceMac = MacAddress.getDefaultInstance(routerPort.getMacAddress());
                Ipv6Address llAddr = Ipv6Util.getIpv6LinkLocalAddressFromMac(ifaceMac);
                for (Ipv6Address ndTarget : routerPort.getIpv6Addresses()) {
                    LOG.info("convertSwitchToControllerMode:: Deleting NS punt Flow for : {}", ndTarget.getValue());
                    // TODO del can be removed as key is same for add flows too
                    ifMgr.programIcmpv6NsDefaultPuntFlows(routerPort, ndTarget, Ipv6ServiceConstants.DEL_FLOW);
                    dpnIfaceInfo.clearNdTargetFlowInfo();
                    ifMgr.programIcmpv6NSPuntFlowForAddress(routerPort.getNetworkID(), ndTarget, Ipv6ServiceConstants.ADD_FLOW);
                }
                ifMgr.programIcmpv6NSPuntFlowForAddress(routerPort.getNetworkID(), llAddr, Ipv6ServiceConstants.ADD_FLOW);
            });
        }
    }
}
Also used : IVirtualNetwork(org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork) IVirtualNetwork(org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork) MacAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress) Ipv6Address(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address)

Example 2 with Ipv6serviceConfig

use of org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.ipv6service.config.rev181010.Ipv6serviceConfig in project netvirt by opendaylight.

the class Ipv6ConfigChangeListener method convertControllerToSwitchMode.

private void convertControllerToSwitchMode(Ipv6serviceConfig updated) {
    List<IVirtualNetwork> networks = ifMgr.getNetworkCache();
    int lportTag;
    for (IVirtualNetwork network : networks) {
        VirtualNetwork vnet = ifMgr.getNetwork(network.getNetworkUuid());
        VirtualPort routerPort = ifMgr.getRouterV6InterfaceForNetwork(network.getNetworkUuid());
        Collection<VirtualNetwork.DpnInterfaceInfo> dpnIfaceList = vnet.getDpnIfaceList();
        LOG.info("convertControllerToSwitchMode:: Network : {} routerPort: {}", network, routerPort);
        final long networkElanTag = ifMgr.getNetworkElanTag(network.getNetworkUuid());
        // check if any VM is booted already before subnet is added to the router
        for (VirtualNetwork.DpnInterfaceInfo dpnIfaceInfo : dpnIfaceList) {
            ifMgr.getNDExecutorService().execute(() -> {
                LOG.info("convertControllerToSwitchMode : Deleting Old flows on Switch Mode");
                for (Ipv6Address ipv6Address : routerPort.getIpv6Addresses()) {
                    LOG.info("convertControllerToSwitchMode:: Deleting NS punt flow for : {}", ipv6Address.getValue());
                    ifMgr.programIcmpv6NSPuntFlowForAddress(network.getNetworkUuid(), ipv6Address, Ipv6ServiceConstants.DEL_FLOW);
                }
                ifMgr.checkVmBootBeforeSubnetAddRouter(dpnIfaceInfo, routerPort, networkElanTag, Ipv6ServiceConstants.ADD_FLOW);
                for (Ipv6Address ndTarget : routerPort.getIpv6Addresses()) {
                    LOG.info("convertControllerToSwitchM0ode:: Installing NS punt Flow for : {}", ndTarget.getValue());
                    ifMgr.programIcmpv6NsDefaultPuntFlows(routerPort, ndTarget, Ipv6ServiceConstants.ADD_FLOW);
                }
            });
        }
    }
}
Also used : IVirtualNetwork(org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork) IVirtualNetwork(org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork) Ipv6Address(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address)

Aggregations

IVirtualNetwork (org.opendaylight.netvirt.ipv6service.api.IVirtualNetwork)2 Ipv6Address (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address)2 MacAddress (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress)1