Search in sources :

Example 1 with GW_ENTRY_TABLE

use of org.onosproject.kubevirtnetworking.api.Constants.GW_ENTRY_TABLE in project onos by opennetworkinglab.

the class KubevirtPrometheusAssuranceManager method publishSnatMetrics.

private void publishSnatMetrics() {
    if (prometheusExporter == null) {
        log.error("Prometheus Server isn't ready.");
        return;
    }
    String[] snatLabelValues = new String[3];
    routerService.routers().stream().filter(router -> router.enableSnat() && router.electedGateway() != null && router.peerRouter() != null && router.peerRouter().ipAddress() != null && router.peerRouter().macAddress() != null).forEach(router -> {
        KubevirtNode gateway = nodeService.node(router.electedGateway());
        if (gateway == null) {
            return;
        }
        String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
        if (routerSnatIp == null) {
            return;
        }
        flowRuleService.getFlowEntries(gateway.intgBridge()).forEach(flowEntry -> {
            if (((IndexTableId) flowEntry.table()).id() == GW_ENTRY_TABLE && flowEntry.priority() == PRIORITY_STATEFUL_SNAT_RULE) {
                snatLabelValues[0] = router.name();
                snatLabelValues[1] = routerSnatIp;
                snatLabelValues[2] = gateway.hostname();
                if (isSnatUpstreamFlorEntryForRouter(router, flowEntry)) {
                    pktSNATTx.labels(snatLabelValues).set(flowEntry.packets());
                    byteSNATTx.labels(snatLabelValues).set(flowEntry.bytes());
                } else if (isSnatDownstreamFlorEntryForRouter(routerSnatIp, flowEntry)) {
                    pktSNATRx.labels(snatLabelValues).set(flowEntry.packets());
                    byteSNATRx.labels(snatLabelValues).set(flowEntry.bytes());
                }
            }
        });
    });
}
Also used : ServletContextHandler(org.eclipse.jetty.servlet.ServletContextHandler) ScheduledFuture(java.util.concurrent.ScheduledFuture) KubevirtRouter(org.onosproject.kubevirtnetworking.api.KubevirtRouter) GATEWAY(org.onosproject.kubevirtnode.api.KubevirtNode.Type.GATEWAY) CoreService(org.onosproject.core.CoreService) DeviceService(org.onosproject.net.device.DeviceService) FlowEntry(org.onosproject.net.flow.FlowEntry) KubevirtPort(org.onosproject.kubevirtnetworking.api.KubevirtPort) KubevirtNodeService(org.onosproject.kubevirtnode.api.KubevirtNodeService) ETH_SRC(org.onosproject.net.flow.criteria.Criterion.Type.ETH_SRC) SharedScheduledExecutors(org.onlab.util.SharedScheduledExecutors) EthCriterion(org.onosproject.net.flow.criteria.EthCriterion) Component(org.osgi.service.component.annotations.Component) FlowRuleService(org.onosproject.net.flow.FlowRuleService) TrafficSelector(org.onosproject.net.flow.TrafficSelector) PRIORITY_STATEFUL_SNAT_RULE(org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_STATEFUL_SNAT_RULE) Gauge(io.prometheus.client.Gauge) Activate(org.osgi.service.component.annotations.Activate) IPCriterion(org.onosproject.net.flow.criteria.IPCriterion) Server(org.eclipse.jetty.server.Server) KubevirtFloatingIp(org.onosproject.kubevirtnetworking.api.KubevirtFloatingIp) PRIORITY_FLOATING_IP_UPSTREAM_RULE(org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_FLOATING_IP_UPSTREAM_RULE) IpAddress(org.onlab.packet.IpAddress) KubevirtRouterService(org.onosproject.kubevirtnetworking.api.KubevirtRouterService) KubevirtNode(org.onosproject.kubevirtnode.api.KubevirtNode) Logger(org.slf4j.Logger) KubevirtPrometheusAssuranceService(org.onosproject.kubevirtnetworking.api.KubevirtPrometheusAssuranceService) IndexTableId(org.onosproject.net.flow.IndexTableId) Deactivate(org.osgi.service.component.annotations.Deactivate) MetricsServlet(io.prometheus.client.exporter.MetricsServlet) ServletHolder(org.eclipse.jetty.servlet.ServletHolder) ETH_DST(org.onosproject.net.flow.criteria.Criterion.Type.ETH_DST) GW_ENTRY_TABLE(org.onosproject.kubevirtnetworking.api.Constants.GW_ENTRY_TABLE) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) TimeUnit(java.util.concurrent.TimeUnit) PRIORITY_FLOATING_IP_DOWNSTREAM_RULE(org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_FLOATING_IP_DOWNSTREAM_RULE) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) MacAddress(org.onlab.packet.MacAddress) Reference(org.osgi.service.component.annotations.Reference) IPV4_DST(org.onosproject.net.flow.criteria.Criterion.Type.IPV4_DST) KubevirtPortService(org.onosproject.kubevirtnetworking.api.KubevirtPortService) KubevirtNode(org.onosproject.kubevirtnode.api.KubevirtNode) IndexTableId(org.onosproject.net.flow.IndexTableId)

Example 2 with GW_ENTRY_TABLE

use of org.onosproject.kubevirtnetworking.api.Constants.GW_ENTRY_TABLE in project onos by opennetworkinglab.

the class KubevirtFlowRuleManager method initializeGatewayNodePipeline.

protected void initializeGatewayNodePipeline(KubevirtNode kubevirtNode) {
    DeviceId deviceId = kubevirtNode.intgBridge();
    // for inbound to gateway entry table transition
    connectTables(deviceId, STAT_INBOUND_TABLE, GW_ENTRY_TABLE);
    // for gateway entry to gateway drop table transition
    connectTables(deviceId, GW_ENTRY_TABLE, GW_DROP_TABLE);
    // for setting up default gateway drop table
    setupGatewayNodeDropTable(deviceId);
    // for setting up default Forwarding table behavior which is NORMAL
    setupNormalTable(deviceId, FORWARDING_TABLE);
    kubevirtNode.phyIntfs().stream().filter(intf -> intf.physBridge() != null).forEach(phyIntf -> {
        setupNormalTable(phyIntf.physBridge(), STAT_INBOUND_TABLE);
    });
}
Also used : DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) GATEWAY(org.onosproject.kubevirtnode.api.KubevirtNode.Type.GATEWAY) CoreService(org.onosproject.core.CoreService) PortNumber(org.onosproject.net.PortNumber) DeviceService(org.onosproject.net.device.DeviceService) Tools.groupedThreads(org.onlab.util.Tools.groupedThreads) DefaultTrafficTreatment(org.onosproject.net.flow.DefaultTrafficTreatment) FlowRuleService(org.onosproject.net.flow.FlowRuleService) ApplicationId(org.onosproject.core.ApplicationId) NodeId(org.onosproject.cluster.NodeId) GW_DROP_TABLE(org.onosproject.kubevirtnetworking.api.Constants.GW_DROP_TABLE) Deactivate(org.osgi.service.component.annotations.Deactivate) Set(java.util.Set) GW_ENTRY_TABLE(org.onosproject.kubevirtnetworking.api.Constants.GW_ENTRY_TABLE) Executors(java.util.concurrent.Executors) Objects(java.util.Objects) EthType(org.onlab.packet.EthType) FlowRule(org.onosproject.net.flow.FlowRule) ACL_EGRESS_TABLE(org.onosproject.kubevirtnetworking.api.Constants.ACL_EGRESS_TABLE) ClusterService(org.onosproject.cluster.ClusterService) PRIORITY_ARP_DEFAULT_RULE(org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_ARP_DEFAULT_RULE) DeviceId(org.onosproject.net.DeviceId) Dictionary(java.util.Dictionary) FlowRuleOperationsContext(org.onosproject.net.flow.FlowRuleOperationsContext) DHCP_TABLE(org.onosproject.kubevirtnetworking.api.Constants.DHCP_TABLE) ARP_TABLE(org.onosproject.kubevirtnetworking.api.Constants.ARP_TABLE) KubevirtNetworkingUtil.getPropertyValueAsBoolean(org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.getPropertyValueAsBoolean) Tools(org.onlab.util.Tools) KubevirtFlowRuleService(org.onosproject.kubevirtnetworking.api.KubevirtFlowRuleService) ComponentContext(org.osgi.service.component.ComponentContext) FORWARDING_TABLE(org.onosproject.kubevirtnetworking.api.Constants.FORWARDING_TABLE) KubevirtNodeService(org.onosproject.kubevirtnode.api.KubevirtNodeService) Component(org.osgi.service.component.annotations.Component) WORKER(org.onosproject.kubevirtnode.api.KubevirtNode.Type.WORKER) TrafficSelector(org.onosproject.net.flow.TrafficSelector) Activate(org.osgi.service.component.annotations.Activate) DefaultTrafficSelector(org.onosproject.net.flow.DefaultTrafficSelector) ExecutorService(java.util.concurrent.ExecutorService) PROVIDER_NETWORK_ONLY_DEFAULT(org.onosproject.kubevirtnetworking.impl.OsgiPropertyConstants.PROVIDER_NETWORK_ONLY_DEFAULT) KUBEVIRT_NETWORKING_APP_ID(org.onosproject.kubevirtnetworking.api.Constants.KUBEVIRT_NETWORKING_APP_ID) ComponentConfigService(org.onosproject.cfg.ComponentConfigService) TrafficTreatment(org.onosproject.net.flow.TrafficTreatment) FlowRuleOperations(org.onosproject.net.flow.FlowRuleOperations) KubevirtNode(org.onosproject.kubevirtnode.api.KubevirtNode) Logger(org.slf4j.Logger) STAT_INBOUND_TABLE(org.onosproject.kubevirtnetworking.api.Constants.STAT_INBOUND_TABLE) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) KubevirtNodeEvent(org.onosproject.kubevirtnode.api.KubevirtNodeEvent) VTAP_INBOUND_TABLE(org.onosproject.kubevirtnetworking.api.Constants.VTAP_INBOUND_TABLE) KubevirtNodeListener(org.onosproject.kubevirtnode.api.KubevirtNodeListener) PROVIDER_NETWORK_ONLY(org.onosproject.kubevirtnetworking.impl.OsgiPropertyConstants.PROVIDER_NETWORK_ONLY) ConfigProperty(org.onosproject.cfg.ConfigProperty) Modified(org.osgi.service.component.annotations.Modified) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) Reference(org.osgi.service.component.annotations.Reference) LeadershipService(org.onosproject.cluster.LeadershipService) DeviceId(org.onosproject.net.DeviceId)

Aggregations

CoreService (org.onosproject.core.CoreService)2 GW_ENTRY_TABLE (org.onosproject.kubevirtnetworking.api.Constants.GW_ENTRY_TABLE)2 KubevirtNode (org.onosproject.kubevirtnode.api.KubevirtNode)2 GATEWAY (org.onosproject.kubevirtnode.api.KubevirtNode.Type.GATEWAY)2 KubevirtNodeService (org.onosproject.kubevirtnode.api.KubevirtNodeService)2 DeviceService (org.onosproject.net.device.DeviceService)2 FlowRuleService (org.onosproject.net.flow.FlowRuleService)2 TrafficSelector (org.onosproject.net.flow.TrafficSelector)2 Activate (org.osgi.service.component.annotations.Activate)2 Component (org.osgi.service.component.annotations.Component)2 Deactivate (org.osgi.service.component.annotations.Deactivate)2 Reference (org.osgi.service.component.annotations.Reference)2 ReferenceCardinality (org.osgi.service.component.annotations.ReferenceCardinality)2 Logger (org.slf4j.Logger)2 LoggerFactory.getLogger (org.slf4j.LoggerFactory.getLogger)2 Gauge (io.prometheus.client.Gauge)1 MetricsServlet (io.prometheus.client.exporter.MetricsServlet)1 Dictionary (java.util.Dictionary)1 Objects (java.util.Objects)1 Set (java.util.Set)1