+++ /dev/null
-/*
- * Copyright (c) 2015 Cisco Systems, 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.protocol.bgp.flowspec;
-
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.base.Preconditions;
-import io.netty.buffer.ByteBuf;
-import java.util.ArrayList;
-import java.util.List;
-import org.opendaylight.protocol.bgp.flowspec.handlers.AbstractOperandParser;
-import org.opendaylight.protocol.bgp.flowspec.handlers.FlowspecTypeParser;
-import org.opendaylight.protocol.bgp.flowspec.handlers.FlowspecTypeSerializer;
-import org.opendaylight.protocol.bgp.flowspec.handlers.NumericOneByteOperandParser;
-import org.opendaylight.protocol.bgp.flowspec.handlers.NumericTwoByteOperandParser;
-import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.NumericOperand;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.flowspec.destination.flowspec.FlowspecType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.flowspec.destination.flowspec.flowspec.type.DestinationPortCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.flowspec.destination.flowspec.flowspec.type.DestinationPortCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.flowspec.destination.flowspec.flowspec.type.destination.port._case.DestinationPorts;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.flowspec.destination.flowspec.flowspec.type.destination.port._case.DestinationPortsBuilder;
-
-public final class FSDestinationPortHandler implements FlowspecTypeParser, FlowspecTypeSerializer {
- public static final int DESTINATION_PORT_VALUE = 5;
-
- @Override
- public void serializeType(FlowspecType fsType, ByteBuf output) {
- Preconditions.checkArgument(fsType instanceof DestinationPortCase, "DestinationPortCase class is mandatory!");
- output.writeByte(DESTINATION_PORT_VALUE);
- NumericTwoByteOperandParser.INSTANCE.serialize(((DestinationPortCase) fsType).getDestinationPorts(), output);
- }
-
- @Override
- public FlowspecType parseType(ByteBuf buffer) {
- requireNonNull(buffer, "input buffer is null, missing data to parse.");
- return new DestinationPortCaseBuilder().setDestinationPorts(parseDestinationPort(buffer)).build();
- }
-
- private static List<DestinationPorts> parseDestinationPort(final ByteBuf nlri) {
- final List<DestinationPorts> ports = new ArrayList<>();
- boolean end = false;
- // we can do this as all fields will be rewritten in the cycle
- final DestinationPortsBuilder builder = new DestinationPortsBuilder();
- while (!end) {
- final byte b = nlri.readByte();
- final NumericOperand op = NumericOneByteOperandParser.INSTANCE.parse(b);
- builder.setOp(op);
- final short length = AbstractOperandParser.parseLength(b);
- builder.setValue(ByteArray.bytesToInt(ByteArray.readBytes(nlri, length)));
- end = op.isEndOfList();
- ports.add(builder.build());
- }
- return ports;
- }
-}