Update MRI projects for Aluminium
[bgpcep.git] / bgp / parser-api / src / main / java / org / opendaylight / protocol / bgp / parser / GracefulRestartUtil.java
1 /*
2  * Copyright (c) 2018 AT&T Intellectual Property. 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.parser;
9
10 import com.google.common.annotations.Beta;
11 import java.util.Map;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParameters;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapability.RestartFlags;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.GracefulRestartCapabilityBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapability;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.LlGracefulRestartCapabilityBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.Tables.AfiFlags;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.graceful.restart.capability.TablesKey;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
27 import org.opendaylight.yangtools.yang.common.Uint16;
28
29 /**
30  * Utility class for dealing with Graceful Restart.
31  */
32 public final class GracefulRestartUtil {
33     /**
34      * GR capability advertizing inactive GR.
35      */
36     public static final @NonNull GracefulRestartCapability EMPTY_GR_CAPABILITY = new GracefulRestartCapabilityBuilder()
37             .setRestartFlags(new RestartFlags(Boolean.FALSE))
38             .setRestartTime(Uint16.ZERO)
39             .build();
40
41     /**
42      * LLGR capability advertizing no tables.
43      */
44     public static final @NonNull LlGracefulRestartCapability EMPTY_LLGR_CAPABILITY =
45             new LlGracefulRestartCapabilityBuilder().build();
46
47     private GracefulRestartUtil() {
48
49     }
50
51     @Beta
52     public static @NonNull Tables gracefulRestartTable(final @NonNull Class<? extends AddressFamily> afi,
53             final @NonNull Class<? extends SubsequentAddressFamily> safi, final boolean forwardingState) {
54         return gracefulRestartTable(new TablesKey(afi, safi), forwardingState);
55     }
56
57     @Beta
58     public static @NonNull Tables gracefulRestartTable(final @NonNull TablesKey table, final boolean forwardingState) {
59         return new TablesBuilder().withKey(table).setAfiFlags(new AfiFlags(forwardingState)).build();
60     }
61
62     @Beta
63     public static @NonNull CParameters gracefulRestartCapability(final Map<TablesKey, Tables> tables,
64             final int restartTime, final boolean localRestarting) {
65         return new CParametersBuilder().addAugmentation(new CParameters1Builder()
66             .setGracefulRestartCapability(new GracefulRestartCapabilityBuilder()
67                 .setRestartFlags(new RestartFlags(localRestarting))
68                 .setRestartTime(Uint16.valueOf(restartTime))
69                 .setTables(tables)
70                 .build())
71             .build()).build();
72     }
73 }