*/
package org.opendaylight.protocol.bgp.parser.impl.message.open;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.UnsignedBytes;
+
import io.netty.buffer.ByteBuf;
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
-import com.google.common.base.Preconditions;
-import com.google.common.primitives.UnsignedBytes;
-
public final class MultiProtocolCapabilityHandler implements CapabilityParser, CapabilitySerializer {
- public static final int CODE = 1;
+ public static final int CODE = 1;
- private final AddressFamilyRegistry afiReg;
- private final SubsequentAddressFamilyRegistry safiReg;
+ private final AddressFamilyRegistry afiReg;
+ private final SubsequentAddressFamilyRegistry safiReg;
- public MultiProtocolCapabilityHandler(final AddressFamilyRegistry afiReg, final SubsequentAddressFamilyRegistry safiReg) {
- this.afiReg = Preconditions.checkNotNull(afiReg);
- this.safiReg = Preconditions.checkNotNull(safiReg);
- }
+ public MultiProtocolCapabilityHandler(final AddressFamilyRegistry afiReg, final SubsequentAddressFamilyRegistry safiReg) {
+ this.afiReg = Preconditions.checkNotNull(afiReg);
+ this.safiReg = Preconditions.checkNotNull(safiReg);
+ }
- @Override
- public MultiprotocolCase parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException {
- final int afiVal = buffer.readUnsignedShort();
- final Class<? extends AddressFamily> afi = this.afiReg.classForFamily(afiVal);
- if (afi == null) {
- throw new BGPParsingException("Address Family Identifier: '" + afiVal + "' not supported.");
- }
- // skip reserved
- buffer.skipBytes(1);
- final int safiVal = UnsignedBytes.toInt(buffer.readByte());
- final Class<? extends SubsequentAddressFamily> safi = this.safiReg.classForFamily(safiVal);
- if (safi == null) {
- throw new BGPParsingException("Subsequent Address Family Identifier: '" + safiVal + "' not supported.");
- }
- return new MultiprotocolCaseBuilder().setMultiprotocolCapability(
- new MultiprotocolCapabilityBuilder().setAfi(afi).setSafi(safi).build()).build();
- }
+ @Override
+ public MultiprotocolCase parseCapability(final ByteBuf buffer) throws BGPDocumentedException, BGPParsingException {
+ final int afiVal = buffer.readUnsignedShort();
+ final Class<? extends AddressFamily> afi = this.afiReg.classForFamily(afiVal);
+ if (afi == null) {
+ throw new BGPParsingException("Address Family Identifier: '" + afiVal + "' not supported.");
+ }
+ // skip reserved
+ buffer.skipBytes(1);
+ final int safiVal = UnsignedBytes.toInt(buffer.readByte());
+ final Class<? extends SubsequentAddressFamily> safi = this.safiReg.classForFamily(safiVal);
+ if (safi == null) {
+ throw new BGPParsingException("Subsequent Address Family Identifier: '" + safiVal + "' not supported.");
+ }
+ return new MultiprotocolCaseBuilder().setMultiprotocolCapability(
+ new MultiprotocolCapabilityBuilder().setAfi(afi).setSafi(safi).build()).build();
+ }
- @Override
- public byte[] serializeCapability(final CParameters capability) {
- final MultiprotocolCase mp = (MultiprotocolCase) capability;
+ @Override
+ public byte[] serializeCapability(final CParameters capability) {
+ final MultiprotocolCase mp = (MultiprotocolCase) capability;
- final Class<? extends AddressFamily> afi = mp.getMultiprotocolCapability().getAfi();
- final Integer afival = this.afiReg.numberForClass(afi);
- Preconditions.checkArgument(afival != null, "Unhandled address family " + afi);
+ final Class<? extends AddressFamily> afi = mp.getMultiprotocolCapability().getAfi();
+ final Integer afival = this.afiReg.numberForClass(afi);
+ Preconditions.checkArgument(afival != null, "Unhandled address family " + afi);
- final Class<? extends SubsequentAddressFamily> safi = mp.getMultiprotocolCapability().getSafi();
- final Integer safival = this.safiReg.numberForClass(safi);
- Preconditions.checkArgument(safival != null, "Unhandled subsequent address family " + safi);
+ final Class<? extends SubsequentAddressFamily> safi = mp.getMultiprotocolCapability().getSafi();
+ final Integer safival = this.safiReg.numberForClass(safi);
+ Preconditions.checkArgument(safival != null, "Unhandled subsequent address family " + safi);
- return CapabilityUtil.formatCapability(
- CODE,
- new byte[] { UnsignedBytes.checkedCast(afival / 256), UnsignedBytes.checkedCast(afival % 256), 0,
- UnsignedBytes.checkedCast(safival) });
- }
+ return CapabilityUtil.formatCapability(CODE, new byte[] { UnsignedBytes.checkedCast(afival / 256),
+ UnsignedBytes.checkedCast(afival % 256), 0, UnsignedBytes.checkedCast(safival) });
+ }
}
\ No newline at end of file