2 * Copyright (c) 2018 AT&T Intellectual Property. 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.rib.impl;
10 import static java.util.Objects.requireNonNull;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.Update;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateMessage;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.AttributesBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.AttributesReach;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.AttributesUnreach;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.AttributesUnreachBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.attributes.unreach.MpUnreachNlriBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
24 public final class BgpPeerUtil {
25 private BgpPeerUtil() {
30 * Creates UPDATE message that contains EOR marker for specified address family.
32 * @param key of family for which we need EOR
33 * @return UPDATE message with EOR marker
35 public static Update createEndOfRib(final TablesKey key) {
36 final var builder = new UpdateBuilder();
37 final var afi = key.getAfi();
38 final var safi = key.getSafi();
39 if (!Ipv4AddressFamily.VALUE.equals(afi) || !UnicastSubsequentAddressFamily.VALUE.equals(safi)) {
40 builder.setAttributes(new AttributesBuilder()
41 .addAugmentation(new AttributesUnreachBuilder()
42 .setMpUnreachNlri(new MpUnreachNlriBuilder()
44 .setSafi(key.getSafi())
49 return builder.build();
53 * Verify presence of EOR marker in UPDATE message.
55 * @param msg UPDATE message to be checked
56 * @return True if message contains EOR marker, otherwise return False
58 public static boolean isEndOfRib(final UpdateMessage msg) {
59 if (msg.getNlri() == null && msg.getWithdrawnRoutes() == null) {
60 if (msg.getAttributes() != null) {
61 final AttributesUnreach pa = msg.getAttributes().augmentation(AttributesUnreach.class);
62 if (pa != null && msg.getAttributes().augmentation(AttributesReach.class) == null) {
63 //only MP_UNREACH_NLRI allowed in EOR
64 if (pa.getMpUnreachNlri() != null && pa.getMpUnreachNlri().getWithdrawnRoutes() == null) {
65 // EOR message contains only MPUnreach attribute and no NLRI
70 // true for empty IPv4 Unicast
78 * DTO for transferring LLGR advertizements.
80 * @deprecated This class is deprecated for refactoring.
82 // FIXME: there should be no need for this class, as we should be able to efficiently translate TableKey classes
83 // and rely on yang-parser-api.
85 public static final class LlGracefulRestartDTO {
87 private final TablesKey tableKey;
88 private final int staleTime;
89 private final boolean forwardingFlag;
91 public LlGracefulRestartDTO(final TablesKey tableKey, final int staleTime, final boolean forwardingFlag) {
92 this.tableKey = requireNonNull(tableKey);
93 this.staleTime = staleTime;
94 this.forwardingFlag = forwardingFlag;
97 public TablesKey getTableKey() {
101 public int getStaleTime() {
105 public boolean isForwarding() {
106 return forwardingFlag;