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