2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.protocol.rsvp.parser.impl.te;
11 import com.google.common.base.Preconditions;
12 import io.netty.buffer.ByteBuf;
13 import java.util.ArrayList;
14 import java.util.List;
15 import org.opendaylight.protocol.rsvp.parser.spi.subobjects.AbstractRSVPObjectParser;
16 import org.opendaylight.protocol.util.Ipv6Util;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.RsvpTeObject;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.Ipv6DetourObject;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.Ipv6DetourObjectBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.ipv6.detour.object.AvoidNode;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.ipv6.detour.object.AvoidNodeBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.ipv6.detour.object.PlrId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.ipv6.detour.object.PlrIdBuilder;
25 public final class DetourObjectIpv6Parser extends AbstractRSVPObjectParser {
27 public static final short CLASS_NUM = 63;
28 public static final short CTYPE = 8;
31 protected RsvpTeObject localParseObject(final ByteBuf byteBuf) {
32 final ByteBuf plrId = byteBuf.readSlice(byteBuf.capacity() / 2);
33 final Ipv6DetourObjectBuilder ipv6Case = new Ipv6DetourObjectBuilder();
35 final List<PlrId> plrIdList = new ArrayList<>();
37 while (plrId.isReadable()) {
38 final PlrIdBuilder plr = new PlrIdBuilder();
39 plr.setPlrId(Ipv6Util.noZoneAddressForByteBuf(plrId));
40 plrIdList.add(plr.build());
43 final List<AvoidNode> avoidNodeList = new ArrayList<>();
44 while (byteBuf.isReadable()) {
45 final AvoidNodeBuilder plr = new AvoidNodeBuilder();
46 plr.setAvoidNode(Ipv6Util.noZoneAddressForByteBuf(byteBuf));
47 avoidNodeList.add(plr.build());
50 return ipv6Case.setPlrId(plrIdList).setAvoidNode(avoidNodeList).build();
54 public void localSerializeObject(final RsvpTeObject teLspObject, final ByteBuf byteAggregator) {
55 Preconditions.checkArgument(teLspObject instanceof Ipv6DetourObject, "DetourObject is mandatory.");
56 final Ipv6DetourObject detourObject = (Ipv6DetourObject) teLspObject;
58 final List<PlrId> pList = detourObject.getPlrId();
59 final List<AvoidNode> aList = detourObject.getAvoidNode();
60 serializeAttributeHeader(pList.size() * Ipv6Util.IPV6_LENGTH + aList.size() * Ipv6Util.IPV6_LENGTH,
62 CTYPE, byteAggregator);
64 for (final PlrId plrId : pList) {
65 byteAggregator.writeBytes(Ipv6Util.byteBufForAddress(plrId.getPlrId()));
68 for (final AvoidNode avoidNode : aList) {
69 byteAggregator.writeBytes(Ipv6Util.byteBufForAddress(avoidNode.getAvoidNode()));