Route Constrain policies
[bgpcep.git] / bgp / openconfig-rp-statement / src / main / java / org / opendaylight / protocol / bgp / openconfig / routing / policy / statement / actions / SetOriginatorIdToAdvertizerRouterIdHandler.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
9 package org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.actions;
10
11 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes;
12 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.action.BgpActionAugPolicy;
13 import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
14 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
15 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryImportParameters;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.AttributesBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.OriginatorIdBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerId;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp._default.policy.rev180329.SetOriginatorIdToAdvertizerRouterId;
21
22 /**
23  * Originator attribute shall be set to the router-id of the advertiser.
24  * https://tools.ietf.org/html/rfc4684
25  *
26  * @author Claudio D. Gasparini
27  */
28 public final class SetOriginatorIdToAdvertizerRouterIdHandler
29         implements BgpActionAugPolicy<SetOriginatorIdToAdvertizerRouterId> {
30     private static SetOriginatorIdToAdvertizerRouterIdHandler INSTANCE
31             = new SetOriginatorIdToAdvertizerRouterIdHandler();
32
33     private SetOriginatorIdToAdvertizerRouterIdHandler() {
34
35     }
36
37     public static SetOriginatorIdToAdvertizerRouterIdHandler getInstance() {
38         return INSTANCE;
39     }
40
41     @Override
42     public Attributes applyImportAction(
43             final RouteEntryBaseAttributes routeEntryInfo,
44             final BGPRouteEntryImportParameters routeBaseParameters,
45             final Attributes attributes,
46             final SetOriginatorIdToAdvertizerRouterId actions) {
47         return setOriginatorId(attributes, routeBaseParameters.getFromPeerId());
48     }
49
50     private Attributes setOriginatorId(final Attributes attributes, final PeerId peerId) {
51         if (attributes.getOriginatorId() != null) {
52             return attributes;
53         }
54         return new AttributesBuilder(attributes)
55                 .setOriginatorId(new OriginatorIdBuilder()
56                         .setOriginator(RouterIds.inetFromPeerId(peerId)).build()).build();
57     }
58
59     @Override
60     public Attributes applyExportAction(
61             final RouteEntryBaseAttributes routeEntryInfo,
62             final BGPRouteEntryExportParameters routeBaseParameters,
63             final Attributes attributes,
64             final SetOriginatorIdToAdvertizerRouterId actions) {
65         return setOriginatorId(attributes, routeBaseParameters.getFromPeerId());
66     }
67 }