BUG-113: move LinkstateAttributeParser
[bgpcep.git] / bgp / parser-impl / src / main / java / org / opendaylight / protocol / bgp / parser / impl / message / update / AggregatorAttributeParser.java
1 package org.opendaylight.protocol.bgp.parser.impl.message.update;
2
3 import org.opendaylight.protocol.bgp.parser.spi.AttributeParser;
4 import org.opendaylight.protocol.concepts.IPv4;
5 import org.opendaylight.protocol.util.ByteArray;
6 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
7 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.Aggregator;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.path.attributes.AggregatorBuilder;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributesBuilder;
11
12 final class AggregatorAttributeParser implements AttributeParser {
13         static final int TYPE = 7;
14
15         /**
16          * Parse AGGREGATOR from bytes
17          * 
18          * @param bytes byte array to be parsed
19          * @return {@link Aggregator} BGP Aggregator
20          */
21         private static Aggregator parseAggregator(final byte[] bytes) {
22                 final AsNumber asNumber = new AsNumber(ByteArray.bytesToLong(ByteArray.subByte(bytes, 0, AsPathSegmentParser.AS_NUMBER_LENGTH)));
23                 final Ipv4Address address = new Ipv4Address(IPv4.FAMILY.addressForBytes(
24                                 ByteArray.subByte(bytes, AsPathSegmentParser.AS_NUMBER_LENGTH, 4)).toString());
25                 return new AggregatorBuilder().setAsNumber(asNumber).setNetworkAddress(address).build();
26         }
27
28         @Override
29         public void parseAttribute(final byte[] bytes, final PathAttributesBuilder builder) {
30                 builder.setAggregator(parseAggregator(bytes));
31         }
32 }