aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/cordvtn/src/main/java/org/onosproject/cordvtn/DestinationInfo.java
blob: 290cc170c2ff9e426e522adee17eb9c936664e74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/*
 * Copyright 2014-2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.onosproject.cordvtn;

import org.onlab.packet.IpAddress;
import org.onlab.packet.MacAddress;
import org.onosproject.net.Port;

import java.util.List;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Contains destination information.
 */
public final class DestinationInfo {

    private final Port output;
    private final List<IpAddress> ip;
    private final MacAddress mac;
    private final IpAddress remoteIp;
    private final long tunnelId;

    /**
     * Creates a new destination information.
     *
     * @param output output port
     * @param ip destination ip address
     * @param mac destination mac address
     * @param remoteIp tunnel remote ip address
     * @param tunnelId segment id
     */
    public DestinationInfo(Port output, List<IpAddress> ip, MacAddress mac,
                           IpAddress remoteIp, long tunnelId) {
        this.output = checkNotNull(output);
        this.ip = ip;
        this.mac = mac;
        this.remoteIp = remoteIp;
        this.tunnelId = tunnelId;
    }

    /**
     * Returns output port.
     *
     * @return port
     */
    public Port output() {
        return output;
    }

    /**
     * Returns destination ip addresses.
     *
     * @return list of ip address
     */
    public List<IpAddress> ip() {
        return ip;
    }

    /**
     * Returns destination mac address.
     *
     * @return mac address
     */
    public MacAddress mac() {
        return mac;
    }

    /**
     * Returns tunnel remote ip address.
     *
     * @return ip address
     */
    public IpAddress remoteIp() {
        return remoteIp;
    }

    /**
     * Returns tunnel id.
     *
     * @return tunnel id
     */
    public long tunnelId() {
        return tunnelId;
    }

    /**
     * Returns a new destination info builder.
     *
     * @return destination info builder
     */
    public static DestinationInfo.Builder builder(Port output) {
        return new Builder(output);
    }

    /**
     * DestinationInfo builder class.
     */
    public static final class Builder {

        private final Port output;
        private List<IpAddress> ip;
        private MacAddress mac;
        private IpAddress remoteIp;
        private long tunnelId;

        /**
         * Creates a new destination information builder.
         *
         * @param output output port
         */
        public Builder(Port output) {
            this.output = checkNotNull(output, "Output port cannot be null");
        }

        /**
         * Sets the destination ip address.
         *
         * @param ip ip address
         * @return destination info builder
         */
        public Builder setIp(List<IpAddress> ip) {
            this.ip = checkNotNull(ip, "IP cannot be null");
            return this;
        }

        /**
         * Sets the destination mac address.
         *
         * @param mac mac address
         * @return destination info builder
         */
        public Builder setMac(MacAddress mac) {
            this.mac = checkNotNull(mac, "MAC address cannot be null");
            return this;
        }

        /**
         * Sets the tunnel remote ip address.
         *
         * @param remoteIp ip address
         * @return destination info builder
         */
        public Builder setRemoteIp(IpAddress remoteIp) {
            this.remoteIp = checkNotNull(remoteIp, "Remote IP address cannot be null");
            return this;
        }

        /**
         * Sets the tunnel id.
         *
         * @param tunnelId tunnel id
         * @return destination info builder
         */
        public Builder setTunnelId(long tunnelId) {
            this.tunnelId = checkNotNull(tunnelId, "Tunnel ID cannot be null");
            return this;
        }

        /**
         * Build a destination information.
         *
         * @return destination info object
         */
        public DestinationInfo build() {
            return new DestinationInfo(this);
        }
    }

    private DestinationInfo(Builder builder) {
        output = builder.output;
        ip = builder.ip;
        mac = builder.mac;
        remoteIp = builder.remoteIp;
        tunnelId = builder.tunnelId;
    }
}