@Override public Action deserialize(ByteBuf message) { ActionBuilder actionBuilder = deserializeHeader(message); ActionSetNshc1Builder builder = new ActionSetNshc1Builder(); NxActionSetNshc1Builder nxActionSetNspBuilder = new NxActionSetNshc1Builder(); message.skipBytes(padding); nxActionSetNspBuilder.setNshc(message.readUnsignedInt()); builder.setNxActionSetNshc1(nxActionSetNspBuilder.build()); actionBuilder.setActionChoice(builder.build()); return actionBuilder.build(); }
/** * @param version openflow version * @param inputPacket input packet * @param datapathid datapath id * @param xid tx id * @return PacketOutInput required by OF Library */ public static PacketOutInput toPacketOutInput( final TransmitPacketInput inputPacket, final short version, final Long xid, final BigInteger datapathid) { LOG.trace("toPacketOutInput for datapathId:{}, xid:{}", datapathid, xid); // Build Port ID from TransmitPacketInput.Ingress PortNumber inPortNr = null; Long bufferId = OFConstants.OFP_NO_BUFFER; Iterable<PathArgument> inArgs = null; PacketOutInputBuilder builder = new PacketOutInputBuilder(); if (inputPacket.getIngress() != null) { inArgs = inputPacket.getIngress().getValue().getPathArguments(); } if (inArgs != null && Iterables.size(inArgs) >= 3) { inPortNr = getPortNumber(Iterables.get(inArgs, 2), version); } else { // The packetOut originated from the controller inPortNr = new PortNumber(0xfffffffdL); } // Build Buffer ID to be NO_OFP_NO_BUFFER if (inputPacket.getBufferId() != null) { bufferId = inputPacket.getBufferId(); } PortNumber outPort = null; NodeConnectorRef outRef = inputPacket.getEgress(); Iterable<PathArgument> outArgs = outRef.getValue().getPathArguments(); if (Iterables.size(outArgs) >= 3) { outPort = getPortNumber(Iterables.get(outArgs, 2), version); } else { // TODO : P4 search for some normal exception new Exception("PORT NR not exist in Egress"); } List<Action> actions = null; List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> inputActions = inputPacket.getAction(); if (inputActions != null) { actions = ActionConvertor.getActions(inputActions, version, datapathid, null); } else { actions = new ArrayList<>(); // TODO VD P! wait for way to move Actions (e.g. augmentation) ActionBuilder aBuild = new ActionBuilder(); OutputActionCaseBuilder outputActionCaseBuilder = new OutputActionCaseBuilder(); OutputActionBuilder outputActionBuilder = new OutputActionBuilder(); outputActionBuilder.setPort(outPort); outputActionBuilder.setMaxLength(OFConstants.OFPCML_NO_BUFFER); outputActionCaseBuilder.setOutputAction(outputActionBuilder.build()); aBuild.setActionChoice(outputActionCaseBuilder.build()); actions.add(aBuild.build()); } builder.setAction(actions); builder.setData(inputPacket.getPayload()); builder.setVersion(version); builder.setXid(xid); builder.setInPort(inPortNr); builder.setBufferId(bufferId); // -------------------------------------------------------- return builder.build(); }