2 * Copyright (c) 2013 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
8 package org.opendaylight.protocol.bgp.parser;
10 import java.util.List;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.Open;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.CParameters;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCase;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapability;
19 public final class AsNumberUtil {
21 private AsNumberUtil() {
22 throw new UnsupportedOperationException();
26 * Looks for As4Byte Capability in capabilities and extracts AS number.
28 * @param open remote BGP open message
31 public static AsNumber advertizedAsNumber(final Open open) {
32 // Look for AS4 capability very defensively
33 final List<BgpParameters> params = open.getBgpParameters();
35 for (final BgpParameters p : params) {
36 for (final OptionalCapabilities oc : p.getOptionalCapabilities()) {
37 final CParameters cp = oc.getCParameters();
38 if (cp instanceof As4BytesCase) {
39 final As4BytesCapability capa = ((As4BytesCase) cp).getAs4BytesCapability();
41 return capa.getAsNumber();
47 // Fallback to whatever is in the header
48 return new AsNumber(open.getMyAsNumber().longValue());