Enforce checkstyle in bgp-linkstate
[bgpcep.git] / bgp / extensions / linkstate / src / main / java / org / opendaylight / protocol / bgp / linkstate / impl / tlvs / RouterIdTlvParser.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.bgp.linkstate.impl.tlvs;
9
10 import io.netty.buffer.ByteBuf;
11 import org.opendaylight.protocol.bgp.linkstate.spi.LinkstateTlvParser;
12 import org.opendaylight.protocol.util.ByteArray;
13 import org.opendaylight.protocol.util.ByteBufWriteUtil;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.OspfInterfaceIdentifier;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.isis.lan.identifier.IsIsRouterIdentifier;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.isis.lan.identifier.IsIsRouterIdentifierBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.CRouterIdentifier;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.IsisNodeCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.IsisNodeCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.IsisPseudonodeCase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.IsisPseudonodeCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.OspfNodeCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.OspfNodeCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.OspfPseudonodeCase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.OspfPseudonodeCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.isis.node._case.IsisNode;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.isis.node._case.IsisNodeBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.isis.pseudonode._case.IsisPseudonode;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.isis.pseudonode._case.IsisPseudonodeBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.ospf.node._case.OspfNodeBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.ospf.pseudonode._case.OspfPseudonode;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev180329.node.identifier.c.router.identifier.ospf.pseudonode._case.OspfPseudonodeBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IsoSystemIdentifier;
34 import org.opendaylight.yangtools.yang.common.QName;
35
36 public final class RouterIdTlvParser implements LinkstateTlvParser<CRouterIdentifier>,
37         LinkstateTlvParser.LinkstateTlvSerializer<CRouterIdentifier> {
38
39     private static final int OSPF_PSEUDONODE_ROUTER_ID_LENGTH = 8;
40     private static final int OSPF_ROUTER_ID_LENGTH = 4;
41     private static final int ISO_SYSTEM_ID_LENGTH = 6;
42     private static final int PSN_LENGTH = 1;
43
44     private static final int IGP_ROUTER_ID = 515;
45
46     @Override
47     public void serializeTlvBody(final CRouterIdentifier tlv, final ByteBuf body) {
48         if (tlv instanceof IsisNodeCase) {
49             final IsisNode isis = ((IsisNodeCase) tlv).getIsisNode();
50             body.writeBytes(isis.getIsoSystemId().getValue());
51         } else if (tlv instanceof IsisPseudonodeCase) {
52             final IsisPseudonode isis = ((IsisPseudonodeCase) tlv).getIsisPseudonode();
53             body.writeBytes(isis.getIsIsRouterIdentifier().getIsoSystemId().getValue());
54             ByteBufWriteUtil.writeUnsignedByte(isis.getPsn(), body);
55         } else if (tlv instanceof OspfNodeCase) {
56             ByteBufWriteUtil.writeUnsignedInt(((OspfNodeCase) tlv).getOspfNode().getOspfRouterId(), body);
57         } else if (tlv instanceof OspfPseudonodeCase) {
58             final OspfPseudonode node = ((OspfPseudonodeCase) tlv).getOspfPseudonode();
59             ByteBufWriteUtil.writeUnsignedInt(node.getOspfRouterId(), body);
60             ByteBufWriteUtil.writeUnsignedInt(node.getLanInterface().getValue(), body);
61         }
62     }
63
64     @Override
65     public CRouterIdentifier parseTlvBody(final ByteBuf value) {
66         if (value.readableBytes() == ISO_SYSTEM_ID_LENGTH || value.readableBytes() == ISO_SYSTEM_ID_LENGTH + PSN_LENGTH
67                 && value.getByte(ISO_SYSTEM_ID_LENGTH) == 0) {
68             return new IsisNodeCaseBuilder().setIsisNode(
69                     new IsisNodeBuilder().setIsoSystemId(new IsoSystemIdentifier(
70                         ByteArray.readBytes(value, ISO_SYSTEM_ID_LENGTH))).build()).build();
71         }
72         if (value.readableBytes() == ISO_SYSTEM_ID_LENGTH + PSN_LENGTH) {
73             final IsIsRouterIdentifier iri = new IsIsRouterIdentifierBuilder().setIsoSystemId(
74                     new IsoSystemIdentifier(ByteArray.readBytes(value, ISO_SYSTEM_ID_LENGTH))).build();
75             return new IsisPseudonodeCaseBuilder().setIsisPseudonode(new IsisPseudonodeBuilder()
76                 .setIsIsRouterIdentifier(iri).setPsn((short) value.readByte()).build()).build();
77         }
78         if (value.readableBytes() == OSPF_ROUTER_ID_LENGTH) {
79             return new OspfNodeCaseBuilder().setOspfNode(
80                     new OspfNodeBuilder().setOspfRouterId(value.readUnsignedInt()).build()).build();
81
82         }
83         if (value.readableBytes() == OSPF_PSEUDONODE_ROUTER_ID_LENGTH) {
84             return new OspfPseudonodeCaseBuilder().setOspfPseudonode(
85                     new OspfPseudonodeBuilder().setOspfRouterId(value.readUnsignedInt())
86                     .setLanInterface(new OspfInterfaceIdentifier(value.readUnsignedInt())).build()).build();
87         }
88         return null;
89     }
90
91     @Override
92     public int getType() {
93         return IGP_ROUTER_ID;
94     }
95
96     @Override
97     public QName getTlvQName() {
98         return CRouterIdentifier.QNAME;
99     }
100 }
101