Java tutorial
/* * Copyright (c) 2016, 2017 Ericsson Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.sfc.scfofrenderer.utils; import com.google.common.collect.Iterables; import org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI; import org.opendaylight.sfc.provider.api.SfcProviderServiceFunctionMetadataAPI; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.RspName; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfName; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SffName; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.md.rev140701.service.function.metadata.ContextMetadata; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.path.first.hop.info.RenderedServicePathFirstHop; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath; import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.rendered.service.path.RenderedServicePathHop; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* * This class has some overlap function with SfcProviderRenderedPathAPI.java * Todo: will move all functions to SfcProviderRenderedPathAPI.java */ public class SfcNshHeader { private static final Logger LOG = LoggerFactory.getLogger(SfcNshHeader.class); private Ipv4Address vxlanIpDst; private PortNumber vxlanUdpPort; private Long nshNsp; private Short nshStartNsi; private Short nshEndNsi; private Long nshMetaC1; private Long nshMetaC2; private Long nshMetaC3; private Long nshMetaC4; private SffName sffName; private SfName sfName; private RenderedServicePath rsp; public SfcNshHeader() { } public Ipv4Address getVxlanIpDst() { return vxlanIpDst; } public SfcNshHeader setVxlanIpDst(Ipv4Address vxlanIpDst) { this.vxlanIpDst = vxlanIpDst; return this; } public PortNumber getVxlanUdpPort() { return vxlanUdpPort; } public SfcNshHeader setVxlanUdpPort(PortNumber vxlanUdpPort) { this.vxlanUdpPort = vxlanUdpPort; return this; } public Long getNshNsp() { return nshNsp; } public SfcNshHeader setNshNsp(Long nshNsp) { this.nshNsp = nshNsp; return this; } public Short getNshStartNsi() { return nshStartNsi; } public SfcNshHeader setNshStartNsi(Short nshStartNsi) { this.nshStartNsi = nshStartNsi; return this; } public Short getNshEndNsi() { return nshEndNsi; } public SfcNshHeader setNshEndNsi(Short nshEndNsi) { this.nshEndNsi = nshEndNsi; return this; } public Long getNshMetaC1() { return this.nshMetaC1; } public SfcNshHeader setNshMetaC1(Long nshMetaC1) { this.nshMetaC1 = nshMetaC1; return this; } public Long getNshMetaC2() { return this.nshMetaC2; } public SfcNshHeader getNshMetaC2(Long nshMetaC2) { this.nshMetaC2 = nshMetaC2; return this; } public SfcNshHeader setNshMetaC2(Long nshMetaC2) { this.nshMetaC2 = nshMetaC2; return this; } public Long getNshMetaC3() { return nshMetaC3; } public SfcNshHeader setNshMetaC3(Long nshMetaC3) { this.nshMetaC3 = nshMetaC3; return this; } public Long getNshMetaC4() { return nshMetaC4; } public SfcNshHeader setNshMetaC4(Long nshMetaC4) { this.nshMetaC4 = nshMetaC4; return this; } public SffName getSffName() { return sffName; } public SfcNshHeader setSffName(SffName sffName) { this.sffName = sffName; return this; } public SfName getFirstSfName() { return sfName; } public SfcNshHeader setFirstSfName(SfName sfName) { this.sfName = sfName; return this; } public RenderedServicePath getRsp() { return rsp; } public SfcNshHeader setRsp(RenderedServicePath theRsp) { rsp = theRsp; return this; } public static SfcNshHeader getSfcNshHeader(RenderedServicePath theRsp) { RenderedServicePathHop theFirstHop = theRsp.getRenderedServicePathHop().get(0); RenderedServicePathHop lastRspHop = Iterables.getLast(theRsp.getRenderedServicePathHop()); if (lastRspHop == null) { LOG.error("getSfcNshHeader: last rsp hop is null\n"); return null; } RenderedServicePathFirstHop rspFirstHop = SfcProviderRenderedPathAPI .readRenderedServicePathFirstHop(theRsp.getName()); if (rspFirstHop == null) { LOG.error("getSfcNshHeader: rsp first hop is null\n"); return null; } SfcNshHeader sfcNshHeader = new SfcNshHeader().setRsp(theRsp).setNshNsp(theRsp.getPathId()) .setNshStartNsi(theRsp.getStartingIndex()) .setNshEndNsi((short) (lastRspHop.getServiceIndex().intValue() - 1)) .setSffName(lastRspHop.getServiceFunctionForwarder()) .setFirstSfName(theFirstHop.getServiceFunctionName()); if (rspFirstHop.getIp() != null) { sfcNshHeader.setVxlanIpDst(rspFirstHop.getIp().getIpv4Address()).setVxlanUdpPort(rspFirstHop.getPort()); } String context = theRsp.getContextMetadata(); if (context == null) { LOG.error("getSfcNshHeader: context is null\n"); } ContextMetadata md = SfcProviderServiceFunctionMetadataAPI.readContextMetadata(context); if (md == null) { LOG.error("getSfcNshHeader: metadata is null\n"); } else { sfcNshHeader.setNshMetaC1(md.getContextHeader1()).setNshMetaC2(md.getContextHeader2()) .setNshMetaC3(md.getContextHeader3()).setNshMetaC4(md.getContextHeader4()); } return sfcNshHeader; } public static SfcNshHeader getSfcNshHeader(RspName rspName) { if (rspName == null) { LOG.error("getSfcNshHeader: rspName is null\n"); return null; } RenderedServicePath renderedServicePath = SfcProviderRenderedPathAPI.readRenderedServicePath(rspName); if (renderedServicePath == null) { LOG.error("getSfcNshHeader: rsp is null\n"); return null; } RenderedServicePathFirstHop rspFirstHop = SfcProviderRenderedPathAPI .readRenderedServicePathFirstHop(rspName); if (rspFirstHop == null) { LOG.error("getSfcNshHeader: rsp first hop is null\n"); return null; } if (renderedServicePath.getRenderedServicePathHop() == null) { LOG.error("getSfcNshHeader: getRenderedServicePathHop is null\n"); return null; } RenderedServicePathHop lastRspHop = Iterables.getLast(renderedServicePath.getRenderedServicePathHop()); if (lastRspHop == null) { LOG.error("getSfcNshHeader: last rsp hop is null\n"); return null; } RenderedServicePathHop theFirstHop = renderedServicePath.getRenderedServicePathHop().get(0); SfcNshHeader sfcNshHeader = new SfcNshHeader().setRsp(renderedServicePath) .setNshNsp(renderedServicePath.getPathId()).setNshStartNsi(rspFirstHop.getStartingIndex()) .setNshEndNsi((short) (lastRspHop.getServiceIndex().intValue() - 1)) .setSffName(lastRspHop.getServiceFunctionForwarder()) .setFirstSfName(theFirstHop.getServiceFunctionName()); if (rspFirstHop.getIp() != null) { sfcNshHeader.setVxlanIpDst(rspFirstHop.getIp().getIpv4Address()).setVxlanUdpPort(rspFirstHop.getPort()); } String context = renderedServicePath.getContextMetadata(); if (context == null) { LOG.error("getSfcNshHeader: context is null\n"); } ContextMetadata md = SfcProviderServiceFunctionMetadataAPI.readContextMetadata(context); if (md == null) { LOG.error("getSfcNshHeader: metadata is null\n"); } else { sfcNshHeader.setNshMetaC1(md.getContextHeader1()).setNshMetaC2(md.getContextHeader2()) .setNshMetaC3(md.getContextHeader3()).setNshMetaC4(md.getContextHeader4()); } return sfcNshHeader; } }