Kalyankumar Asangi
Committed by Gerrit Code Review

ONOS-2740,ONOS-2741,from ONOS-3032 - to ONOS 3071 , OSPF Protocol Implementation

Change-Id: Ie8cccca4aaf2641ab1e332ed367ddfc9b725a35c
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.area;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import org.onosproject.ospf.controller.OspfProcess;
20 +
21 +import java.util.List;
22 +
23 +/**
24 + * Representation of an OSPF configuration data.
25 + */
26 +public class Configuration {
27 + private List<OspfProcess> processes;
28 + private String method;
29 +
30 + /**
31 + * Gets the configured processes.
32 + *
33 + * @return list of configured processes.
34 + */
35 + public List<OspfProcess> getProcesses() {
36 + return processes;
37 + }
38 +
39 + /**
40 + * Sets the configured processes.
41 + *
42 + * @param processes configured processes
43 + */
44 + public void setProcesses(List<OspfProcess> processes) {
45 + this.processes = processes;
46 + }
47 +
48 + /**
49 + * Gets whether to update, add or delete configuration.
50 + *
51 + * @return update, add or delete configuration
52 + */
53 + public String getMethod() {
54 + return method;
55 + }
56 +
57 + /**
58 + * Sets whether to update, add or delete configuration.
59 + *
60 + * @param method configuration method.
61 + */
62 + public void setMethod(String method) {
63 + this.method = method;
64 + }
65 +
66 +
67 + @Override
68 + public String toString() {
69 + return MoreObjects.toStringHelper(getClass())
70 + .omitNullValues()
71 + .add("method", method)
72 + .add("processes", processes)
73 + .toString();
74 + }
75 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.area;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import org.onlab.packet.Ip4Address;
21 +import org.onosproject.ospf.controller.OspfAreaAddressRange;
22 +
23 +/**
24 + * Representation of an area address ranges.
25 + * Address ranges are used in order to aggregate routing information at area boundaries.
26 + * Each address range is specified by an [address,mask] pair and a status indication of
27 + * either advertise or do not advertise
28 + */
29 +public class OspfAreaAddressRangeImpl implements OspfAreaAddressRange {
30 +
31 + public Ip4Address ipAddress;
32 + public String mask;
33 + public boolean advertise;
34 +
35 + /**
36 + * Gets the IP address.
37 + *
38 + * @return IP address
39 + */
40 + public Ip4Address ipAddress() {
41 + return ipAddress;
42 + }
43 +
44 + /**
45 + * Sets the IP address.
46 + *
47 + * @param ipAddress IP address
48 + */
49 + public void setIpAddress(Ip4Address ipAddress) {
50 + this.ipAddress = ipAddress;
51 + }
52 +
53 + /**
54 + * Gets the network mask.
55 + *
56 + * @return network mask
57 + */
58 + public String mask() {
59 + return mask;
60 + }
61 +
62 + /**
63 + * Sets the network mask.
64 + *
65 + * @param mask network mask value
66 + */
67 + public void setMask(String mask) {
68 + this.mask = mask;
69 + }
70 +
71 + /**
72 + * Gets the advertise value.
73 + *
74 + * @return advertise value
75 + */
76 + public boolean isAdvertise() {
77 + return advertise;
78 + }
79 +
80 + /**
81 + * Sets the advertise value.
82 + *
83 + * @param advertise advertise value
84 + */
85 + public void setAdvertise(boolean advertise) {
86 + this.advertise = advertise;
87 + }
88 +
89 + @Override
90 + public boolean equals(Object other) {
91 + if (!(other instanceof OspfAreaAddressRangeImpl)) {
92 + return false;
93 + }
94 + OspfAreaAddressRangeImpl otherAreaAddressRange = (OspfAreaAddressRangeImpl) other;
95 + return Objects.equal(ipAddress, otherAreaAddressRange.ipAddress) &&
96 + Objects.equal(mask, otherAreaAddressRange.mask) &&
97 + Objects.equal(advertise, otherAreaAddressRange.advertise);
98 + }
99 +
100 + @Override
101 + public int hashCode() {
102 + return Objects.hashCode(ipAddress, mask, advertise);
103 + }
104 +
105 + @Override
106 + public String toString() {
107 + return MoreObjects.toStringHelper(getClass())
108 + .omitNullValues()
109 + .add("ipAddress", ipAddress)
110 + .add("mask", mask)
111 + .add("advertise", advertise)
112 + .toString();
113 + }
114 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.area;
17 +
18 +import com.fasterxml.jackson.annotation.JsonProperty;
19 +import com.google.common.base.MoreObjects;
20 +import org.onosproject.ospf.controller.OspfArea;
21 +import org.onosproject.ospf.controller.OspfProcess;
22 +
23 +import java.util.List;
24 +
25 +/**
26 + * Representation of the configuration data for OSPF Process, which will be configured using rest URI.
27 + */
28 +public class OspfProcessImpl implements OspfProcess {
29 +
30 + private String processId;
31 + private List<OspfArea> areas;
32 +
33 + /**
34 + * Gets the list of areas belonging to this process.
35 + *
36 + * @return list of areas belonging to this process
37 + */
38 + public List<OspfArea> areas() {
39 + return areas;
40 + }
41 +
42 + /**
43 + * Sets the list of areas belonging to this process.
44 + *
45 + * @param areas list of areas belonging to this process
46 + */
47 + @JsonProperty("areas")
48 + public void setAreas(List<OspfArea> areas) {
49 + this.areas = areas;
50 + }
51 +
52 + /**
53 + * Gets the process id.
54 + *
55 + * @return process id
56 + */
57 + public String processId() {
58 + return processId;
59 + }
60 +
61 + /**
62 + * Sets the process id.
63 + *
64 + * @param processId the process id
65 + */
66 + @JsonProperty("processId")
67 + public void setProcessId(String processId) {
68 + this.processId = processId;
69 + }
70 +
71 + @Override
72 + public String toString() {
73 + return MoreObjects.toStringHelper(getClass())
74 + .omitNullValues()
75 + .add("areas", areas)
76 + .toString();
77 + }
78 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +/**
18 + * Implementation of the OSPF controller.
19 + */
20 +package org.onosproject.ospf.controller.area;
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +/**
18 + * Implementation of the OSPF controller.
19 + */
20 +package org.onosproject.ospf.controller.impl;
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.lsdb;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import org.onosproject.ospf.controller.LsaBin;
20 +import org.onosproject.ospf.controller.LsaWrapper;
21 +
22 +import java.util.Map;
23 +import java.util.concurrent.ConcurrentHashMap;
24 +
25 +/**
26 + * Represents a bin, where an LSA is stored for Aging.
27 + * A bin is identified by a bin number and can have one or more LSAs
28 + * store in a particular bin location.
29 + */
30 +public class LsaBinImpl implements LsaBin {
31 +
32 + private int binNumber;
33 + private Map<String, LsaWrapper> listOfLsa = new ConcurrentHashMap<>();
34 +
35 + /**
36 + * Creates an instance of LSA bin.
37 + *
38 + * @param binNumber unique number of this bin
39 + */
40 + public LsaBinImpl(int binNumber) {
41 + this.binNumber = binNumber;
42 + }
43 +
44 + /**
45 + * Adds the LSA to this bin with the given key.
46 + *
47 + * @param lsaKey key of the LSA
48 + * @param lsaWrapper wrapper instance to store
49 + */
50 + public void addOspfLsa(String lsaKey, LsaWrapper lsaWrapper) {
51 + if (!listOfLsa.containsKey(lsaKey)) {
52 + listOfLsa.put(lsaKey, lsaWrapper);
53 + lsaWrapper.setBinNumber(this.binNumber);
54 + }
55 + }
56 +
57 + /**
58 + * Gets the LSA from the bin.
59 + *
60 + * @param lsaKey key to search the LSA
61 + * @return LSA Wrapper instance
62 + */
63 + public LsaWrapper ospfLsa(String lsaKey) {
64 +
65 + return listOfLsa.get(lsaKey);
66 + }
67 +
68 + /**
69 + * Removes LSA from the bin.
70 + *
71 + * @param lsaKey key to search LSA
72 + * @param lsaWrapper wrapper object to remove
73 + */
74 + public void removeOspfLsa(String lsaKey, LsaWrapper lsaWrapper) {
75 + if (listOfLsa.containsKey(lsaKey)) {
76 + listOfLsa.remove(lsaKey);
77 + }
78 + }
79 +
80 + /**
81 + * Gets the list of LSAs in this bin as key value pair.
82 + *
83 + * @return list of LSAs in this bin as key value pair
84 + */
85 + public Map<String, LsaWrapper> listOfLsa() {
86 + return listOfLsa;
87 + }
88 +
89 + /**
90 + * Gets the bin number.
91 + *
92 + * @return the bin number
93 + */
94 + public int binNumber() {
95 + return binNumber;
96 + }
97 +
98 + @Override
99 + public String toString() {
100 + return MoreObjects.toStringHelper(getClass())
101 + .omitNullValues()
102 + .add("binNumber", binNumber)
103 + .add("listOfLsa", listOfLsa)
104 + .toString();
105 + }
106 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +/**
18 + * Implementation of the OSPF Link state database and Ageing.
19 + */
20 +package org.onosproject.ospf.controller.lsdb;
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.util;
17 +
18 +import org.onlab.packet.Ip4Address;
19 +
20 +/**
21 + * Represents a router who is eligible for DR election.
22 + */
23 +public class OspfEligibleRouter {
24 +
25 + private Ip4Address ipAddress;
26 + private Ip4Address routerId;
27 + private int routerPriority;
28 + private boolean isDr;
29 + private boolean isBdr;
30 +
31 + /**
32 + * Creates an instance.
33 + * Initialize IP address of eligible router.
34 + */
35 + public OspfEligibleRouter() {
36 + ipAddress = Ip4Address.valueOf("0.0.0.0");
37 + }
38 +
39 + /**
40 + * Gets the value of IP address.
41 + *
42 + * @return IP address
43 + */
44 + public Ip4Address getIpAddress() {
45 + return ipAddress;
46 + }
47 +
48 + /**
49 + * Sets the value of IP address.
50 + *
51 + * @param ipAddress IP address
52 + */
53 + public void setIpAddress(Ip4Address ipAddress) {
54 + this.ipAddress = ipAddress;
55 + }
56 +
57 + /**
58 + * Gets the value of router id.
59 + *
60 + * @return router id.
61 + */
62 + public Ip4Address getRouterId() {
63 + return routerId;
64 + }
65 +
66 + /**
67 + * Sets the value of router id.
68 + *
69 + * @param routerId router id
70 + */
71 + public void setRouterId(Ip4Address routerId) {
72 + this.routerId = routerId;
73 + }
74 +
75 + /**
76 + * Gets the value of router priority.
77 + *
78 + * @return router priority.
79 + */
80 + public int getRouterPriority() {
81 + return routerPriority;
82 + }
83 +
84 + /**
85 + * Sets the value of router priority.
86 + *
87 + * @param routerPriority router priority
88 + */
89 + public void setRouterPriority(int routerPriority) {
90 + this.routerPriority = routerPriority;
91 + }
92 +
93 + /**
94 + * Gets whether the router is DR.
95 + *
96 + * @return boolean true if router is DR else return false.
97 + */
98 + public boolean isDr() {
99 + return isDr;
100 + }
101 +
102 + /**
103 + * Sets the router is DR or not.
104 + *
105 + * @param isDr router is DR or not
106 + */
107 + public void setIsDr(boolean isDr) {
108 + this.isDr = isDr;
109 + }
110 +
111 + /**
112 + * Gets whether the router is BDR or not.
113 + *
114 + * @return boolean true if router is Bdr else return false.
115 + */
116 + public boolean isBdr() {
117 + return isBdr;
118 + }
119 +
120 + /**
121 + * Sets the router is BDR or not.
122 + *
123 + * @param isBdr the router is BDR or not
124 + */
125 + public void setIsBdr(boolean isBdr) {
126 + this.isBdr = isBdr;
127 + }
128 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.util;
17 +
18 +/**
19 + * Enum represents OSPF interface types.
20 + */
21 +public enum OspfInterfaceType {
22 +
23 + POINT_TO_POINT(1),
24 + BROADCAST(2),
25 + VIRTUAL(3);
26 +
27 + private int value;
28 +
29 + /**
30 + * Creates an instance.
31 + *
32 + * @param value value represents interface type
33 + */
34 + OspfInterfaceType(int value) {
35 + this.value = value;
36 + }
37 +
38 + /**
39 + * Gets value represents interface type.
40 + *
41 + * @return value represents interface type
42 + */
43 + public int value() {
44 + return value;
45 + }
46 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.ospf.controller.util;
17 +
18 +/**
19 + * Enum represents OSPF link type.
20 + */
21 +public enum OspfLinkType {
22 +
23 + /**
24 + * Indicates a point-to-point connection to another router.
25 + */
26 + POINT_TO_POINT,
27 +
28 + /**
29 + * Indicates a connection to a transit network.
30 + */
31 + TO_TRANSIT_NET,
32 +
33 + /**
34 + * Indicates a connection to a stub network.
35 + */
36 + TO_STUB_NET,
37 +
38 + /**
39 + * Indicates a Virtual link to another area border router.
40 + */
41 + VIRTUAL_LINK;
42 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +
17 +/**
18 + * Implementation of the OSPF utilities.
19 + */
20 +package org.onosproject.ospf.controller.util;
...\ No newline at end of file ...\ No newline at end of file