Search in sources :

Example 11 with Type

use of org.onosproject.openstacknetworking.api.OpenstackNetwork.Type in project onos by opennetworkinglab.

the class OpenstackRoutingSnatHandler method setSourceNat.

private void setSourceNat(RouterInterface routerIface, boolean install) {
    Subnet osSubnet = osNetworkAdminService.subnet(routerIface.getSubnetId());
    Network osNet = osNetworkAdminService.network(osSubnet.getNetworkId());
    Type netType = osNetworkAdminService.networkType(osSubnet.getNetworkId());
    osNodeService.completeNodes(COMPUTE).forEach(cNode -> {
        setRulesToGateway(cNode, osNet.getProviderSegID(), IpPrefix.valueOf(osSubnet.getCidr()), netType, install);
    });
    if (getStatefulSnatFlag()) {
        setStatefulSnatRules(routerIface, install);
    } else {
        setReactiveSnatRules(routerIface, install);
    }
    final String updateStr = install ? MSG_ENABLED : MSG_DISABLED;
    log.info(updateStr + "external access for subnet({})", osSubnet.getCidr());
}
Also used : Type(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type) OpenstackNetworkingUtil.tunnelPortNumByNetType(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetType) Network(org.openstack4j.model.network.Network) OpenstackNetworkingUtil.externalPeerRouterFromSubnet(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.externalPeerRouterFromSubnet) Subnet(org.openstack4j.model.network.Subnet) OpenstackNetworkingUtil.getRouterFromSubnet(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getRouterFromSubnet)

Example 12 with Type

use of org.onosproject.openstacknetworking.api.OpenstackNetwork.Type in project onos by opennetworkinglab.

the class OpenstackRoutingFloatingIpHandler method setComputeNodeToGatewayHelper.

// a helper method
private void setComputeNodeToGatewayHelper(InstancePort instPort, Network osNet, Set<OpenstackNode> gateways, boolean install) {
    TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder().matchEthType(Ethernet.TYPE_IPV4).matchIPSrc(instPort.ipAddress().toIpPrefix()).matchEthDst(Constants.DEFAULT_GATEWAY_MAC);
    TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
    OpenstackNode selectedGatewayNode = getGwByComputeDevId(gateways, instPort.deviceId());
    if (selectedGatewayNode == null) {
        log.warn(ERR_FLOW + "no gateway node selected");
        return;
    }
    Type netType = osNetworkService.networkType(osNet.getId());
    switch(netType) {
        case VXLAN:
        case GRE:
        case GENEVE:
            PortNumber portNum = tunnelPortNumByNetId(instPort.networkId(), osNetworkService, osNodeService.node(instPort.deviceId()));
            if (portNum == null) {
                log.warn(ERR_FLOW + "no tunnel port");
                return;
            }
            sBuilder.matchTunnelId(Long.parseLong(osNet.getProviderSegID()));
            tBuilder.extension(buildExtension(deviceService, instPort.deviceId(), selectedGatewayNode.dataIp().getIp4Address()), instPort.deviceId()).setOutput(portNum);
            break;
        case VLAN:
            if (osNodeService.node(instPort.deviceId()).vlanPortNum() == null) {
                log.warn(ERR_FLOW + "no vlan port");
                return;
            }
            sBuilder.matchVlanId(VlanId.vlanId(osNet.getProviderSegID()));
            tBuilder.setOutput(osNodeService.node(instPort.deviceId()).vlanPortNum());
            break;
        default:
            log.warn(ERR_FLOW + "no supported network type");
    }
    osFlowRuleService.setRule(appId, instPort.deviceId(), sBuilder.build(), tBuilder.build(), PRIORITY_EXTERNAL_FLOATING_ROUTING_RULE, ROUTING_TABLE, install);
    log.trace("Succeeded to set flow rules from compute node to gateway on compute node");
}
Also used : Type(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type) EthType(org.onlab.packet.EthType) TrafficSelector(org.onosproject.net.flow.TrafficSelector) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) OpenstackNode(org.onosproject.openstacknode.api.OpenstackNode) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) PortNumber(org.onosproject.net.PortNumber)

Example 13 with Type

use of org.onosproject.openstacknetworking.api.OpenstackNetwork.Type in project onos by opennetworkinglab.

the class OpenstackNetworkingUiMessageHandler method traceRequestString.

private String traceRequestString(String srcIp, String dstIp, InstancePort srcInstancePort, OpenstackNetworkService osNetService, boolean uplink) {
    StringBuilder requestStringBuilder = new StringBuilder(DEFAULT_REQUEST_STRING);
    if (uplink) {
        requestStringBuilder.append(COMMA).append(IN_PORT).append(srcInstancePort.portNumber().toString()).append(COMMA).append(NW_SRC).append(srcIp).append(COMMA);
        Type netType = osNetService.networkType(srcInstancePort.networkId());
        if (netType == VXLAN || netType == VLAN || netType == GRE || netType == GENEVE) {
            if (srcIp.equals(dstIp)) {
                dstIp = osNetService.gatewayIp(srcInstancePort.portId());
                requestStringBuilder.append(DL_DST).append(DEFAULT_GATEWAY_MAC_STR).append(COMMA);
            } else if (!osNetService.ipPrefix(srcInstancePort.portId()).contains(IpAddress.valueOf(dstIp))) {
                requestStringBuilder.append(DL_DST).append(DEFAULT_GATEWAY_MAC_STR).append(COMMA);
            }
        } else {
            if (srcIp.equals(dstIp)) {
                dstIp = osNetService.gatewayIp(srcInstancePort.portId());
            }
        }
        requestStringBuilder.append(NW_DST).append(dstIp).append("\n");
    } else {
        requestStringBuilder.append(COMMA).append(NW_SRC).append(dstIp).append(COMMA);
        if (osNetService.networkType(srcInstancePort.networkId()).equals(VXLAN) || osNetService.networkType(srcInstancePort.networkId()).equals(VLAN)) {
            requestStringBuilder.append(TUN_ID).append(osNetService.segmentId(srcInstancePort.networkId())).append(COMMA);
        }
        requestStringBuilder.append(NW_DST).append(srcIp).append("\n");
    }
    return requestStringBuilder.toString();
}
Also used : Type(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type)

Example 14 with Type

use of org.onosproject.openstacknetworking.api.OpenstackNetwork.Type in project onos by opennetworkinglab.

the class OpenstackRoutingSnatHandler method setStatefulSnatRules.

private void setStatefulSnatRules(RouterInterface routerIface, boolean install) {
    Subnet osSubnet = osNetworkAdminService.subnet(routerIface.getSubnetId());
    Network osNet = osNetworkAdminService.network(osSubnet.getNetworkId());
    Type netType = osNetworkAdminService.networkType(osSubnet.getNetworkId());
    if (netType == FLAT) {
        log.warn("FLAT typed network does not need SNAT rules");
        return;
    }
    Optional<Router> osRouter = osRouterService.routers().stream().filter(router -> routerIface.getId().equals(router.getId())).findAny();
    if (!osRouter.isPresent()) {
        log.warn("Cannot find a router attached with the given router interface {} ", routerIface);
        return;
    }
    IpAddress natAddress = externalGatewayIpSnatEnabled(osRouter.get(), osNetworkAdminService);
    if (natAddress == null) {
        log.debug("NAT address is not found");
        return;
    }
    IpAddress extRouterAddress = getGatewayIpAddress(osRouter.get());
    if (extRouterAddress == null) {
        log.warn("External router address is not found");
        return;
    }
    ExternalPeerRouter externalPeerRouter = osNetworkService.externalPeerRouter(extRouterAddress);
    if (externalPeerRouter == null) {
        log.warn("External peer router not found");
        return;
    }
    Map<OpenstackNode, PortRange> gwPortRangeMap = getAssignedPortsForGateway(ImmutableList.copyOf(osNodeService.nodes(GATEWAY)));
    osNodeService.completeNodes(GATEWAY).forEach(gwNode -> {
        if (install) {
            PortRange gwPortRange = gwPortRangeMap.get(gwNode);
            Map<String, PortRange> netPortRangeMap = getAssignedPortsForNet(getNetIdByRouterId(routerIface.getId()), gwPortRange.min(), gwPortRange.max());
            PortRange netPortRange = netPortRangeMap.get(osNet.getId());
            setStatefulSnatUpstreamRule(gwNode, natAddress, Long.parseLong(osNet.getProviderSegID()), externalPeerRouter, netPortRange.min(), netPortRange.max(), install);
        } else {
            setStatefulSnatUpstreamRule(gwNode, natAddress, Long.parseLong(osNet.getProviderSegID()), externalPeerRouter, 0, 0, install);
        }
    });
}
Also used : ConsistentMap(org.onosproject.store.service.ConsistentMap) InstancePort(org.onosproject.openstacknetworking.api.InstancePort) PortNumber(org.onosproject.net.PortNumber) DeviceService(org.onosproject.net.device.DeviceService) Constants(org.onosproject.openstacknetworking.api.Constants) InstancePortEvent(org.onosproject.openstacknetworking.api.InstancePortEvent) DriverService(org.onosproject.net.driver.DriverService) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) USE_STATEFUL_SNAT_DEFAULT(org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT_DEFAULT) StorageService(org.onosproject.store.service.StorageService) Type(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type) Map(java.util.Map) ApplicationId(org.onosproject.core.ApplicationId) KryoNamespaces(org.onosproject.store.serializers.KryoNamespaces) MastershipService(org.onosproject.mastership.MastershipService) ExternalPeerRouter(org.onosproject.openstacknetworking.api.ExternalPeerRouter) OpenstackNodeService(org.onosproject.openstacknode.api.OpenstackNodeService) Deactivate(org.osgi.service.component.annotations.Deactivate) Set(java.util.Set) PacketService(org.onosproject.net.packet.PacketService) OpenstackNetworkingUtil.externalGatewayIpSnatEnabled(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.externalGatewayIpSnatEnabled) USE_STATEFUL_SNAT(org.onosproject.openstacknetworking.impl.OsgiPropertyConstants.USE_STATEFUL_SNAT) RulePopulatorUtil(org.onosproject.openstacknetworking.util.RulePopulatorUtil) InstancePortListener(org.onosproject.openstacknetworking.api.InstancePortListener) OPENSTACK_NETWORKING_APP_ID(org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID) OpenstackNetworkingUtil.externalPeerRouterFromSubnet(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.externalPeerRouterFromSubnet) PRIORITY_EXTERNAL_ROUTING_RULE(org.onosproject.openstacknetworking.api.Constants.PRIORITY_EXTERNAL_ROUTING_RULE) DeviceId(org.onosproject.net.DeviceId) ROUTING_TABLE(org.onosproject.openstacknetworking.api.Constants.ROUTING_TABLE) Dictionary(java.util.Dictionary) Tools(org.onlab.util.Tools) OpenstackNode(org.onosproject.openstacknode.api.OpenstackNode) Network(org.openstack4j.model.network.Network) ComponentContext(org.osgi.service.component.ComponentContext) KryoNamespace(org.onlab.util.KryoNamespace) RouterInterface(org.openstack4j.model.network.RouterInterface) Component(org.osgi.service.component.annotations.Component) GW_COMMON_TABLE(org.onosproject.openstacknetworking.api.Constants.GW_COMMON_TABLE) TrafficSelector(org.onosproject.net.flow.TrafficSelector) OpenstackNetworkAdminService(org.onosproject.openstacknetworking.api.OpenstackNetworkAdminService) DEFAULT_GATEWAY_MAC(org.onosproject.openstacknetworking.api.Constants.DEFAULT_GATEWAY_MAC) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) Port(org.openstack4j.model.network.Port) TpPort(org.onlab.packet.TpPort) ComponentConfigService(org.onosproject.cfg.ComponentConfigService) VlanId(org.onlab.packet.VlanId) MoreObjects(com.google.common.base.MoreObjects) IPv4(org.onlab.packet.IPv4) OpenstackRouterListener(org.onosproject.openstacknetworking.api.OpenstackRouterListener) ConfigProperty(org.onosproject.cfg.ConfigProperty) LeadershipService(org.onosproject.cluster.LeadershipService) DefaultOutboundPacket(org.onosproject.net.packet.DefaultOutboundPacket) OpenstackRouterService(org.onosproject.openstacknetworking.api.OpenstackRouterService) CoreService(org.onosproject.core.CoreService) Tools.groupedThreads(org.onlab.util.Tools.groupedThreads) OpenstackNetworkListener(org.onosproject.openstacknetworking.api.OpenstackNetworkListener) TCP(org.onlab.packet.TCP) ByteBuffer(java.nio.ByteBuffer) Ethernet(org.onlab.packet.Ethernet) OpenstackNodeListener(org.onosproject.openstacknode.api.OpenstackNodeListener) VLAN(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.VLAN) OpenstackNetworkEvent(org.onosproject.openstacknetworking.api.OpenstackNetworkEvent) NodeId(org.onosproject.cluster.NodeId) Serializer(org.onosproject.store.service.Serializer) ImmutableSet(com.google.common.collect.ImmutableSet) OpenstackFlowRuleService(org.onosproject.openstacknetworking.api.OpenstackFlowRuleService) PacketProcessor(org.onosproject.net.packet.PacketProcessor) Executors.newSingleThreadExecutor(java.util.concurrent.Executors.newSingleThreadExecutor) Collectors(java.util.stream.Collectors) OpenstackNetworkingUtil.getPropertyValueAsBoolean(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getPropertyValueAsBoolean) Sets(com.google.common.collect.Sets) Objects(java.util.Objects) List(java.util.List) InboundPacket(org.onosproject.net.packet.InboundPacket) PRIORITY_SNAT_RULE(org.onosproject.openstacknetworking.api.Constants.PRIORITY_SNAT_RULE) FLAT(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type.FLAT) PacketContext(org.onosproject.net.packet.PacketContext) Optional(java.util.Optional) ClusterService(org.onosproject.cluster.ClusterService) IpPrefix(org.onlab.packet.IpPrefix) PRIORITY_STATEFUL_SNAT_RULE(org.onosproject.openstacknetworking.api.Constants.PRIORITY_STATEFUL_SNAT_RULE) GATEWAY(org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY) COMPUTE(org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE) RulePopulatorUtil.buildExtension(org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildExtension) OpenstackRouterEvent(org.onosproject.openstacknetworking.api.OpenstackRouterEvent) OpenstackNetworkService(org.onosproject.openstacknetworking.api.OpenstackNetworkService) OpenstackNetworkingUtil.tunnelPortNumByNetType(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetType) ImmutableList(com.google.common.collect.ImmutableList) Router(org.openstack4j.model.network.Router) IP(org.openstack4j.model.network.IP) Activate(org.osgi.service.component.annotations.Activate) ExecutorService(java.util.concurrent.ExecutorService) IpAddress(org.onlab.packet.IpAddress) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) Logger(org.slf4j.Logger) ExternalGateway(org.openstack4j.model.network.ExternalGateway) ExtensionTreatment(org.onosproject.net.flow.instructions.ExtensionTreatment) Subnet(org.openstack4j.model.network.Subnet) Maps(com.google.common.collect.Maps) UDP(org.onlab.packet.UDP) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) CT_NAT_SRC_FLAG(org.onosproject.openstacknetworking.util.RulePopulatorUtil.CT_NAT_SRC_FLAG) OpenstackNodeEvent(org.onosproject.openstacknode.api.OpenstackNodeEvent) DistributedSet(org.onosproject.store.service.DistributedSet) OpenstackNetworkingUtil.getRouterFromSubnet(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getRouterFromSubnet) Modified(org.osgi.service.component.annotations.Modified) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) OpenstackNetworkingUtil.deriveResourceName(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName) Reference(org.osgi.service.component.annotations.Reference) InstancePortService(org.onosproject.openstacknetworking.api.InstancePortService) ExternalPeerRouter(org.onosproject.openstacknetworking.api.ExternalPeerRouter) Router(org.openstack4j.model.network.Router) OpenstackNode(org.onosproject.openstacknode.api.OpenstackNode) ExternalPeerRouter(org.onosproject.openstacknetworking.api.ExternalPeerRouter) Type(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type) OpenstackNetworkingUtil.tunnelPortNumByNetType(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetType) Network(org.openstack4j.model.network.Network) IpAddress(org.onlab.packet.IpAddress) OpenstackNetworkingUtil.externalPeerRouterFromSubnet(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.externalPeerRouterFromSubnet) Subnet(org.openstack4j.model.network.Subnet) OpenstackNetworkingUtil.getRouterFromSubnet(org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getRouterFromSubnet)

Example 15 with Type

use of org.onosproject.openstacknetworking.api.OpenstackNetwork.Type in project onos by opennetworkinglab.

the class OpenstackSecurityGroupHandler method buildTunnelId.

private void buildTunnelId(TrafficSelector.Builder sBuilder, String netId) {
    String segId = osNetService.segmentId(netId);
    Type netType = osNetService.networkType(netId);
    if (netType == VLAN) {
        sBuilder.matchVlanId(VlanId.vlanId(segId));
    } else if (netType == VXLAN || netType == GRE || netType == GENEVE) {
        sBuilder.matchTunnelId(Long.valueOf(segId));
    } else {
        log.debug("Cannot tag the VID due to lack of support of virtual network type {}", netType);
    }
}
Also used : Type(org.onosproject.openstacknetworking.api.OpenstackNetwork.Type)

Aggregations

Type (org.onosproject.openstacknetworking.api.OpenstackNetwork.Type)22 Network (org.openstack4j.model.network.Network)13 OpenstackNetworkingUtil.tunnelPortNumByNetType (org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.tunnelPortNumByNetType)12 Subnet (org.openstack4j.model.network.Subnet)10 DefaultTrafficSelector (org.onosproject.net.flow.DefaultTrafficSelector)9 DefaultTrafficTreatment (org.onosproject.net.flow.DefaultTrafficTreatment)9 TrafficSelector (org.onosproject.net.flow.TrafficSelector)9 TrafficTreatment (org.onosproject.net.flow.TrafficTreatment)9 OpenstackNode (org.onosproject.openstacknode.api.OpenstackNode)9 IpAddress (org.onlab.packet.IpAddress)8 PortNumber (org.onosproject.net.PortNumber)7 Set (java.util.Set)6 ExecutorService (java.util.concurrent.ExecutorService)6 Collectors (java.util.stream.Collectors)6 VlanId (org.onlab.packet.VlanId)6 Tools.groupedThreads (org.onlab.util.Tools.groupedThreads)6 CoreService (org.onosproject.core.CoreService)6 DeviceService (org.onosproject.net.device.DeviceService)6 OPENSTACK_NETWORKING_APP_ID (org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID)6 Objects (java.util.Objects)5