Manikandan K
Committed by Gerrit Code Review

ONOS-4107: Changes to provider

Change-Id: Ice1a5d49a66fc4f8e5033b47c0ee90601d55589e
Showing 50 changed files with 2753 additions and 284 deletions
...@@ -16,9 +16,11 @@ ...@@ -16,9 +16,11 @@
16 package org.onosproject.isis.controller; 16 package org.onosproject.isis.controller;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 +import org.onosproject.isis.controller.topology.IsisLinkListener;
19 import org.onosproject.isis.controller.topology.IsisRouterListener; 20 import org.onosproject.isis.controller.topology.IsisRouterListener;
20 21
21 import java.util.List; 22 import java.util.List;
23 +import java.util.Set;
22 24
23 /** 25 /**
24 * Representation of an ISIS controller. 26 * Representation of an ISIS controller.
...@@ -52,4 +54,32 @@ public interface IsisController { ...@@ -52,4 +54,32 @@ public interface IsisController {
52 * @return list of process instances 54 * @return list of process instances
53 */ 55 */
54 List<IsisProcess> allConfiguredProcesses(); 56 List<IsisProcess> allConfiguredProcesses();
57 +
58 + /**
59 + * Registers a listener for ISIS message events.
60 + *
61 + * @param listener the listener to notify
62 + */
63 + void addLinkListener(IsisLinkListener listener);
64 +
65 + /**
66 + * Unregisters a link listener.
67 + *
68 + * @param listener the listener to unregister
69 + */
70 + void removeLinkListener(IsisLinkListener listener);
71 +
72 + /**
73 + * Gets the list of listeners registered for router events.
74 + *
75 + * @return list of listeners
76 + */
77 + Set<IsisRouterListener> listener();
78 +
79 + /**
80 + * Gets the list of listeners registered for link events.
81 + *
82 + * @return list of listeners
83 + */
84 + Set<IsisLinkListener> linkListener();
55 } 85 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -318,4 +318,4 @@ public interface IsisInterface { ...@@ -318,4 +318,4 @@ public interface IsisInterface {
318 * Removes all the neighbors. 318 * Removes all the neighbors.
319 */ 319 */
320 void removeNeighbors(); 320 void removeNeighbors();
321 -} 321 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -69,4 +69,4 @@ public interface IsisLsdbAge { ...@@ -69,4 +69,4 @@ public interface IsisLsdbAge {
69 * @param lspWrapper LSP wrapper instance 69 * @param lspWrapper LSP wrapper instance
70 */ 70 */
71 void removeLspFromBin(LspWrapper lspWrapper); 71 void removeLspFromBin(LspWrapper lspWrapper);
72 -} 72 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -44,4 +44,4 @@ public interface IsisLspBin { ...@@ -44,4 +44,4 @@ public interface IsisLspBin {
44 * @param lspWrapper LSP wrapper instance 44 * @param lspWrapper LSP wrapper instance
45 */ 45 */
46 void removeIsisLsp(String lspKey, LspWrapper lspWrapper); 46 void removeIsisLsp(String lspKey, LspWrapper lspWrapper);
47 -} 47 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -43,7 +43,6 @@ public enum IsisNetworkType { ...@@ -43,7 +43,6 @@ public enum IsisNetworkType {
43 43
44 private int value; 44 private int value;
45 45
46 -
47 /** 46 /**
48 * Creates an instance of ISIS network type. 47 * Creates an instance of ISIS network type.
49 * 48 *
......
...@@ -124,4 +124,4 @@ public interface LspWrapper { ...@@ -124,4 +124,4 @@ public interface LspWrapper {
124 * @param lspProcessing "refreshLsp" or "maxageLsp" based on LSP to process 124 * @param lspProcessing "refreshLsp" or "maxageLsp" based on LSP to process
125 */ 125 */
126 void setLspProcessing(String lspProcessing); 126 void setLspProcessing(String lspProcessing);
127 -} 127 +}
...\ 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.isis.controller.topology;
17 +
18 +import org.onlab.packet.Ip4Address;
19 +
20 +/**
21 + * Representation of an ISIS device information.
22 + */
23 +public interface DeviceInformation {
24 +
25 + /**
26 + * Gets system id.
27 + *
28 + * @return system id
29 + */
30 + String systemId();
31 +
32 + /**
33 + * Sets system id.
34 + *
35 + * @param systemId system id
36 + */
37 + void setSystemId(String systemId);
38 +
39 + /**
40 + * Gets interface ids.
41 + *
42 + * @return interface ids
43 + */
44 + Ip4Address interfaceId();
45 +
46 + /**
47 + * Sets interface id.
48 + *
49 + * @param interfaceId interface id
50 + */
51 + void setInterfaceId(Ip4Address interfaceId);
52 +
53 + /**
54 + * Gets area id.
55 + *
56 + * @return area id
57 + */
58 + String areaId();
59 +
60 + /**
61 + * Sets area id.
62 + *
63 + * @param areaId area id
64 + */
65 + void setAreaId(String areaId);
66 +
67 + /**
68 + * Gets device information is already created or not.
69 + *
70 + * @return true if device information is already created else false
71 + */
72 + boolean isAlreadyCreated();
73 +
74 + /**
75 + * Sets device information is already created or not.
76 + *
77 + * @param alreadyCreated true if device information is already created else false
78 + */
79 + void setAlreadyCreated(boolean alreadyCreated);
80 +
81 + /**
82 + * Gets device is dis or not.
83 + *
84 + * @return true if device is dis else false
85 + */
86 + boolean isDis();
87 +
88 + /**
89 + * Sets device is dis or not.
90 + *
91 + * @param dis true if device is dr else false
92 + */
93 + void setDis(boolean dis);
94 +
95 + /**
96 + * Gets neighbor id.
97 + *
98 + * @return neighbor id
99 + */
100 + String neighborId();
101 +
102 + /**
103 + * Sets neighbor id.
104 + *
105 + * @param neighborId neighbor id
106 + */
107 + void setNeighborId(String neighborId);
108 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.isis.controller.topology;
18 +
19 +/**
20 + * Representation of an ISIS agent.
21 + * It is responsible for keeping track of the current set of routers
22 + * connected to the system.
23 + */
24 +public interface IsisAgent {
25 + /**
26 + * Adds a router that has just connected to the system.
27 + *
28 + * @param isisRouter the router id to add
29 + * @return true if added, false otherwise
30 + */
31 + boolean addConnectedRouter(IsisRouter isisRouter);
32 +
33 + /**
34 + * Removes the router which got disconnected from the system.
35 + *
36 + * @param isisRouter the router id to remove
37 + */
38 + void removeConnectedRouter(IsisRouter isisRouter);
39 +
40 + /**
41 + * Notifies that got a packet of link from network and need do processing.
42 + *
43 + * @param isisLink link instance
44 + */
45 + void addLink(IsisLink isisLink);
46 +
47 + /**
48 + * Notifies that got a packet of link from network and need do processing.
49 + *
50 + * @param isisLink link instance
51 + */
52 + void deleteLink(IsisLink isisLink);
53 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -15,9 +15,7 @@ ...@@ -15,9 +15,7 @@
15 */ 15 */
16 package org.onosproject.isis.controller.topology; 16 package org.onosproject.isis.controller.topology;
17 17
18 -import org.onlab.packet.IpAddress; 18 +import org.onlab.packet.Ip4Address;
19 -
20 -import java.util.List;
21 19
22 /** 20 /**
23 * Abstraction of an ISIS Link. 21 * Abstraction of an ISIS Link.
...@@ -25,58 +23,72 @@ import java.util.List; ...@@ -25,58 +23,72 @@ import java.util.List;
25 public interface IsisLink { 23 public interface IsisLink {
26 24
27 /** 25 /**
28 - * Returns IP address of the Router. 26 + * Returns the remote system ID.
29 * 27 *
30 - * @return IP address of router 28 + * @return remote system ID
31 */ 29 */
32 - IpAddress remoteRouterId(); 30 + String remoteSystemId();
33 31
34 /** 32 /**
35 - * Returns the area ID for this device. 33 + * Returns the local system ID.
36 * 34 *
37 - * @return the area ID 35 + * @return local system ID
38 */ 36 */
39 - int areaIdOfInterface(); 37 + String localSystemId();
40 38
41 /** 39 /**
42 * Returns IP address of the interface. 40 * Returns IP address of the interface.
43 * 41 *
44 * @return IP address of the interface 42 * @return IP address of the interface
45 */ 43 */
46 - IpAddress interfaceIp(); 44 + Ip4Address interfaceIp();
45 +
46 + /**
47 + * Returns IP address of the neighbor.
48 + *
49 + * @return IP address of the neighbor
50 + */
51 + Ip4Address neighborIp();
47 52
48 /** 53 /**
49 - * Returns the list of link TED details. 54 + * Returns the link TED details.
50 * 55 *
51 - * @return linkTed list of link TED 56 + * @return linkTed link TED
52 */ 57 */
53 - List<IsisLinkTed> linkTed(); 58 + IsisLinkTed linkTed();
54 59
55 /** 60 /**
56 - * Sets IP address of the router. 61 + * Sets remote system ID.
57 * 62 *
58 - * @param routerIp router's IP address 63 + * @param remoteSystemId remote system ID
59 */ 64 */
60 - void setRouterIp(IpAddress routerIp); 65 + void setRemoteSystemId(String remoteSystemId);
61 66
62 /** 67 /**
63 - * Sets the area ID for this device. 68 + * Sets local system ID.
64 * 69 *
65 - * @param areaIdOfInterface area ID 70 + * @param localSystemId remote system ID
66 */ 71 */
67 - void setAreaIdOfInterface(int areaIdOfInterface); 72 + void setLocalSystemId(String localSystemId);
68 73
69 /** 74 /**
70 * Sets IP address of the interface. 75 * Sets IP address of the interface.
71 * 76 *
72 * @param interfaceIp IP address of the interface 77 * @param interfaceIp IP address of the interface
73 */ 78 */
74 - void setInterfaceIp(IpAddress interfaceIp); 79 + void setInterfaceIp(Ip4Address interfaceIp);
80 +
81 + /**
82 + * Sets IP address of the neighbor.
83 + *
84 + * @param neighborIp IP address of the neighbor
85 + */
86 + void setNeighborIp(Ip4Address neighborIp);
75 87
76 /** 88 /**
77 - * Sets the list of link TED. 89 + * Sets the link TED information.
78 * 90 *
79 - * @param linkTed list of link TED 91 + * @param linkTed link TED
80 */ 92 */
81 - void setLinkTed(List<IsisLinkTed> linkTed); 93 + void setLinkTed(IsisLinkTed linkTed);
82 } 94 }
......
...@@ -23,16 +23,14 @@ public interface IsisLinkListener { ...@@ -23,16 +23,14 @@ public interface IsisLinkListener {
23 /** 23 /**
24 * Notifies that we got a link from network. 24 * Notifies that we got a link from network.
25 * 25 *
26 - * @param isisRouter router instance 26 + * @param isisLink link instance
27 - * @param isisLinkTed link TED information of router
28 */ 27 */
29 - void addLink(IsisRouter isisRouter, IsisLinkTed isisLinkTed); 28 + void addLink(IsisLink isisLink);
30 29
31 /** 30 /**
32 * Notifies that a link got removed from network. 31 * Notifies that a link got removed from network.
33 * 32 *
34 - * @param isisRouter router instance 33 + * @param isisLink link instance
35 - * @param isisLinkTed isis link ted infromation
36 */ 34 */
37 - void deleteLink(IsisRouter isisRouter, IsisLinkTed isisLinkTed); 35 + void deleteLink(IsisLink isisLink);
38 } 36 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
16 package org.onosproject.isis.controller.topology; 16 package org.onosproject.isis.controller.topology;
17 17
18 import org.onlab.packet.Ip4Address; 18 import org.onlab.packet.Ip4Address;
19 -import org.onlab.packet.Ip6Address;
20 import org.onlab.util.Bandwidth; 19 import org.onlab.util.Bandwidth;
21 20
22 import java.util.List; 21 import java.util.List;
...@@ -27,114 +26,100 @@ import java.util.List; ...@@ -27,114 +26,100 @@ import java.util.List;
27 public interface IsisLinkTed { 26 public interface IsisLinkTed {
28 27
29 /** 28 /**
30 - * Provides maximum bandwidth can be used on the link. 29 + * Gets the administrative group.
31 * 30 *
32 - * @return maximum bandwidth 31 + * @return administrative group
33 */ 32 */
34 - Bandwidth maximumLink(); 33 + int administrativeGroup();
35 34
36 /** 35 /**
37 - * Sets maximum band width. 36 + * Sets the administrative group.
38 * 37 *
39 - * @param bandwidth maximum bandwidth 38 + * @param administrativeGroup administrative group
40 */ 39 */
41 - void setMaximumLink(Bandwidth bandwidth); 40 + void setAdministrativeGroup(int administrativeGroup);
42 41
43 /** 42 /**
44 - * Amount of bandwidth reservable on the link. 43 + * Provides the IPv4 interface address.
45 * 44 *
46 - * @return unreserved bandwidth 45 + * @return IPv4 interface address
47 - */
48 - List<Bandwidth> maxUnResBandwidth();
49 -
50 - /**
51 - * Sets max bandwidth that is not reserved on the link.
52 - *
53 - * @param bandwidth max bandwidth that is not reserved on the link
54 - */
55 - void setMaxUnResBandwidth(Bandwidth bandwidth);
56 -
57 - /**
58 - * Provides max bandwidth that can be reserved on the link.
59 - *
60 - * @return max bandwidth reserved
61 */ 46 */
62 - Bandwidth maxReserved(); 47 + Ip4Address ipv4InterfaceAddress();
63 48
64 /** 49 /**
65 - * Sets max bandwidth that can be reserved on the link. 50 + * Sets the IPv4 interface address.
66 * 51 *
67 - * @param bandwidth max bandwidth that can be reserved on the link 52 + * @param interfaceAddress IPv4 interface address
68 */ 53 */
69 - void setMaxReserved(Bandwidth bandwidth); 54 + void setIpv4InterfaceAddress(Ip4Address interfaceAddress);
70 55
71 /** 56 /**
72 - * Provides Traffic Engineering metric for the link. 57 + * Provides the IPv4 neighbor address.
73 * 58 *
74 - * @return Traffic Engineering metric 59 + * @return IPv4 neighbor address
75 */ 60 */
76 - int teMetric(); 61 + Ip4Address ipv4NeighborAddress();
77 62
78 /** 63 /**
79 - * Sets Traffic Engineering metric for the link. 64 + * Sets the IPv4 neighbor address.
80 * 65 *
81 - * @param teMetric Traffic Engineering metric for the link 66 + * @param neighborAddress IPv4 neighbor address
82 */ 67 */
83 - void setTeMetric(int teMetric); 68 + void setIpv4NeighborAddress(Ip4Address neighborAddress);
84 69
85 /** 70 /**
86 - * Provides IPv4 router-Id of local node. 71 + * Gets the maximum link bandwidth.
87 * 72 *
88 - * @return IPv4 router-Id of local node 73 + * @return maximum link bandwidth
89 */ 74 */
90 - List<Ip4Address> ipv4LocRouterId(); 75 + Bandwidth maximumLinkBandwidth();
91 76
92 /** 77 /**
93 - * Sets IPv4 router-Id of local node. 78 + * Sets the maximum link bandwidth.
94 * 79 *
95 - * @param routerIds IPv4 router-Id of local node 80 + * @param bandwidth maximum link bandwidth
96 */ 81 */
97 - void setIpv4LocRouterId(List<Ip4Address> routerIds); 82 + void setMaximumLinkBandwidth(Bandwidth bandwidth);
98 83
99 /** 84 /**
100 - * Provides IPv6 router-Id of local node. 85 + * Provides max bandwidth that can be reservable on the link.
101 * 86 *
102 - * @return IPv6 router-Id of local node 87 + * @return max bandwidth reservable
103 */ 88 */
104 - List<Ip6Address> ipv6LocRouterId(); 89 + Bandwidth maximumReservableLinkBandwidth();
105 90
106 /** 91 /**
107 - * Sets IPv6 router-Id of local node. 92 + * Sets max bandwidth that can be reservable on the link.
108 * 93 *
109 - * @param routerIds IPv6 router-Id of local node 94 + * @param bandwidth max bandwidth that can be reservable on the link
110 */ 95 */
111 - void setIpv6LocRouterId(List<Ip6Address> routerIds); 96 + void setMaximumReservableLinkBandwidth(Bandwidth bandwidth);
112 97
113 /** 98 /**
114 - * Provides IPv4 router-Id of remote node. 99 + * Amount of bandwidth unreserved on the link.
115 * 100 *
116 - * @return IPv4 router-Id of remote node 101 + * @return unreserved bandwidth
117 */ 102 */
118 - List<Ip4Address> ipv4RemRouterId(); 103 + List<Bandwidth> unreservedBandwidth();
119 104
120 /** 105 /**
121 - * Sets IPv4 router-Id of remote node. 106 + * Sets the bandwidth unreserved on the link.
122 * 107 *
123 - * @param routerIds IPv4 router-Id of remote node 108 + * @param bandwidth bandwidth unreserved
124 */ 109 */
125 - void setIpv4RemRouterId(List<Ip4Address> routerIds); 110 + void setUnreservedBandwidth(List<Bandwidth> bandwidth);
126 111
127 /** 112 /**
128 - * Provides IPv6 router-Id of remote node. 113 + * Provides Traffic Engineering metric for the link.
129 * 114 *
130 - * @return IPv6 router-Id of remote node 115 + * @return Traffic Engineering Default metric
131 */ 116 */
132 - List<Ip6Address> ipv6RemRouterId(); 117 + long teDefaultMetric();
133 118
134 /** 119 /**
135 - * Sets IPv6 router-Id of remote node. 120 + * Sets Traffic Engineering metric for the link.
136 * 121 *
137 - * @param routerIds IPv6 router-Id of remote node 122 + * @param teMetric Traffic Engineering Default metric for the link
138 */ 123 */
139 - void setIpv6RemRouterId(List<Ip6Address> routerIds); 124 + void setTeDefaultMetric(long teMetric);
140 } 125 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -23,11 +23,11 @@ import org.onlab.packet.Ip4Address; ...@@ -23,11 +23,11 @@ import org.onlab.packet.Ip4Address;
23 public interface IsisRouter { 23 public interface IsisRouter {
24 24
25 /** 25 /**
26 - * Returns IP address of the router. 26 + * Returns system ID for the router.
27 * 27 *
28 - * @return IP address of the router 28 + * @return system ID of the router
29 */ 29 */
30 - Ip4Address routerIp(); 30 + String systemId();
31 31
32 /** 32 /**
33 * Returns IP address of the interface. 33 * Returns IP address of the interface.
...@@ -37,9 +37,44 @@ public interface IsisRouter { ...@@ -37,9 +37,44 @@ public interface IsisRouter {
37 Ip4Address interfaceId(); 37 Ip4Address interfaceId();
38 38
39 /** 39 /**
40 - * Sets IP address of the Router. 40 + * Gets IP address of the interface.
41 * 41 *
42 - * @param routerIp IP address of the router 42 + * @param interfaceId IP address of the interface
43 */ 43 */
44 - void setRouterIp(Ip4Address routerIp); 44 + void setInterfaceId(Ip4Address interfaceId);
45 +
46 + /**
47 + * Sets system ID of the Router.
48 + *
49 + * @param systemId system ID of the router
50 + */
51 + void setSystemId(String systemId);
52 +
53 + /**
54 + * Gets neighbours ID.
55 + *
56 + * @return neighbour ID
57 + */
58 + Ip4Address neighborRouterId();
59 +
60 + /**
61 + * Sets the neighbour Id.
62 + *
63 + * @param neighbourId neighbour Id
64 + */
65 + void setNeighborRouterId(Ip4Address neighbourId);
66 +
67 + /**
68 + * Gets if the router id DIS or not.
69 + *
70 + * @return true if the router is DIS else false
71 + */
72 + boolean isDis();
73 +
74 + /**
75 + * Sets if the router id DIS or not.
76 + *
77 + * @param dis true if the router is DIS else false
78 + */
79 + void setDis(boolean dis);
45 } 80 }
......
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 +package org.onosproject.isis.controller.topology;
18 +
19 +import java.net.URI;
20 +import java.net.URISyntaxException;
21 +import java.util.Objects;
22 +
23 +import static com.google.common.base.Preconditions.checkArgument;
24 +
25 +/**
26 + * Represents an ISIS router id.
27 + */
28 +public class IsisRouterId {
29 +
30 + private static final String SCHEME = "l3";
31 + private static final long UNKNOWN = 0;
32 + private final String ipAddress;
33 +
34 + /**
35 + * Creates an instance of ISIS router id.
36 + *
37 + * @param ipAddress IP address of the router
38 + */
39 + public IsisRouterId(String ipAddress) {
40 + this.ipAddress = ipAddress;
41 + }
42 +
43 + /**
44 + * Creates an instance from ip address.
45 + *
46 + * @param ipAddress IP address
47 + * @return ISIS router id instance
48 + */
49 + public static IsisRouterId isisRouterId(String ipAddress) {
50 + return new IsisRouterId(ipAddress);
51 + }
52 +
53 + /**
54 + * Creates ISIS router id instance from the URI.
55 + *
56 + * @param uri device URI
57 + * @return ISIS router id instance
58 + */
59 + public static IsisRouterId isisRouterId(URI uri) {
60 + checkArgument(uri.getScheme().equals(SCHEME), "Unsupported URI scheme");
61 + return new IsisRouterId(uri.getSchemeSpecificPart());
62 + }
63 +
64 + /**
65 + * Returns device URI from the given router id.
66 + *
67 + * @param isisRouterId router id instance
68 + * @return device URI
69 + */
70 + public static URI uri(IsisRouterId isisRouterId) {
71 + return uri(isisRouterId.ipAddress());
72 + }
73 +
74 + /**
75 + * Returns device URI from the given IP address.
76 + *
77 + * @param ipAddress device IP address
78 + * @return device URI
79 + */
80 + public static URI uri(String ipAddress) {
81 + try {
82 + return new URI(SCHEME, ipAddress, null);
83 + } catch (URISyntaxException e) {
84 + return null;
85 + }
86 + }
87 +
88 + /**
89 + * Returns the IP address.
90 + *
91 + * @return IP address
92 + */
93 + public String ipAddress() {
94 + return ipAddress;
95 + }
96 +
97 + @Override
98 + public String toString() {
99 + return ipAddress;
100 + }
101 +
102 + @Override
103 + public boolean equals(Object other) {
104 + if (!(other instanceof IsisRouterId)) {
105 + return false;
106 + }
107 +
108 + IsisRouterId otherIsisRouterId = (IsisRouterId) other;
109 + return Objects.equals(ipAddress, otherIsisRouterId.ipAddress);
110 + }
111 +
112 + @Override
113 + public int hashCode() {
114 + return Objects.hash(ipAddress);
115 + }
116 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -34,11 +34,4 @@ public interface IsisRouterListener { ...@@ -34,11 +34,4 @@ public interface IsisRouterListener {
34 * @param isisRouter ISIS router instance 34 * @param isisRouter ISIS router instance
35 */ 35 */
36 void routerRemoved(IsisRouter isisRouter); 36 void routerRemoved(IsisRouter isisRouter);
37 -
38 - /**
39 - * Notifies that the router has changed in some way.
40 - *
41 - * @param isisRouter ISIS router instance
42 - */
43 - void routerChanged(IsisRouter isisRouter);
44 } 37 }
...\ 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.isis.controller.topology;
17 +
18 +import org.onlab.packet.Ip4Address;
19 +
20 +/**
21 + * Representation of an ISIS link information.
22 + */
23 +public interface LinkInformation {
24 +
25 + /**
26 + * Gets link id.
27 + *
28 + * @return link id
29 + */
30 + String linkId();
31 +
32 + /**
33 + * Sets link id.
34 + *
35 + * @param linkId link id
36 + */
37 + void setLinkId(String linkId);
38 +
39 + /**
40 + * Gets whether link information is already created or not.
41 + *
42 + * @return true if link information is already created else false
43 + */
44 + boolean isAlreadyCreated();
45 +
46 + /**
47 + * Sets link information is already created or not.
48 + *
49 + * @param alreadyCreated true if link information is already created else false
50 + */
51 + void setAlreadyCreated(boolean alreadyCreated);
52 +
53 +
54 + /**
55 + * Returns link destination ID.
56 + *
57 + * @return link destination ID
58 + */
59 + String linkDestinationId();
60 +
61 + /**
62 + * Sets link destination id.
63 + *
64 + * @param linkDestinationId link destination id
65 + */
66 + void setLinkDestinationId(String linkDestinationId);
67 +
68 + /**
69 + * Gets link source id.
70 + *
71 + * @return link source id
72 + */
73 + String linkSourceId();
74 +
75 + /**
76 + * Sets link source id.
77 + *
78 + * @param linkSourceId link source id
79 + */
80 + void setLinkSourceId(String linkSourceId);
81 +
82 + /**
83 + * Gets interface ip address.
84 + *
85 + * @return interface ip address
86 + */
87 + Ip4Address interfaceIp();
88 +
89 + /**
90 + * Sets interface ip address.
91 + *
92 + * @param interfaceIp interface ip address
93 + */
94 + void setInterfaceIp(Ip4Address interfaceIp);
95 +
96 + /**
97 + * Gets neighbor ip address.
98 + *
99 + * @return neighbor ip address
100 + */
101 + Ip4Address neighborIp();
102 +
103 + /**
104 + * Sets neighbor ip address.
105 + *
106 + * @param neighborIp neighbor ip address
107 + */
108 + void setNeighborIp(Ip4Address neighborIp);
109 +}
...\ 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.isis.controller.topology;
17 +
18 +import java.util.Map;
19 +
20 +/**
21 + * Represents IP topology for ISIS device and link details.
22 + */
23 +public interface TopologyForDeviceAndLink {
24 +
25 + /**
26 + * Gets the device information.
27 + *
28 + * @return device information
29 + */
30 + Map<String, DeviceInformation> deviceInformationMap();
31 +
32 + /**
33 + * Sets the device information.
34 + *
35 + * @param key system ID of the device as key
36 + * @param deviceInformationMap device information instance
37 + */
38 + void setDeviceInformationMap(String key, DeviceInformation deviceInformationMap);
39 +
40 + /**
41 + * Gets the link information.
42 + *
43 + * @return link information
44 + */
45 + Map<String, LinkInformation> linkInformationMap();
46 +
47 + /**
48 + * Sets link information.
49 + *
50 + * @param key system ID of the device as key
51 + * @param linkInformationMap link information instance
52 + */
53 + void setLinkInformationMap(String key, LinkInformation linkInformationMap);
54 +
55 + /**
56 + * Removes link information.
57 + *
58 + * @param key key used to remove from map
59 + */
60 + void removeLinkInformationMap(String key);
61 +
62 + /**
63 + * Removes device information.
64 + *
65 + * @param key key used to remove from map
66 + */
67 + void removeDeviceInformationMap(String key);
68 +
69 + /**
70 + * Removes links from linkInformationMap.
71 + *
72 + * @param linkId ID
73 + */
74 + void removeLinks(String linkId);
75 +
76 + /**
77 + * Gets deviceInformation as map.
78 + *
79 + * @return deviceInformationMap to delete from core
80 + */
81 + Map<String, DeviceInformation> deviceInformationMapToDelete();
82 +
83 + /**
84 + * Sets deviceInformation as map.
85 + *
86 + * @param key key used to add in map
87 + * @param deviceInformationMapToDelete device information to delete from map
88 + */
89 + void setDeviceInformationMapToDelete(String key, DeviceInformation deviceInformationMapToDelete);
90 +
91 + /**
92 + * Removes Device Information from deviceInformationMapToDelete.
93 + *
94 + * @param key key to remove from map
95 + */
96 + void removeDeviceInformationMapFromDeleteMap(String key);
97 +
98 + /**
99 + * Gets deviceInformation as map for Point-To-Point.
100 + *
101 + * @return deviceInformationMap
102 + */
103 + Map<String, DeviceInformation> deviceInformationMapForPointToPoint();
104 +
105 + /**
106 + * Sets deviceInformation as map for Point-To-Point..
107 + *
108 + * @param key key to add to map
109 + * @param deviceInformationMap device information map
110 + */
111 + void setDeviceInformationMapForPointToPoint(String key, DeviceInformation deviceInformationMap);
112 +
113 + /**
114 + * Gets linkInformation as map for PointToPoint.
115 + *
116 + * @return linkInformationMap
117 + */
118 + Map<String, LinkInformation> linkInformationMapForPointToPoint();
119 +
120 + /**
121 + * Sets linkInformation as map for PointToPoint.
122 + *
123 + * @param key key to add link information to map
124 + * @param linkInformationMap link information to add
125 + */
126 + void setLinkInformationMapForPointToPoint(String key, LinkInformation linkInformationMap);
127 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -30,6 +30,9 @@ import org.onosproject.isis.controller.IsisInterface; ...@@ -30,6 +30,9 @@ import org.onosproject.isis.controller.IsisInterface;
30 import org.onosproject.isis.controller.IsisNetworkType; 30 import org.onosproject.isis.controller.IsisNetworkType;
31 import org.onosproject.isis.controller.IsisProcess; 31 import org.onosproject.isis.controller.IsisProcess;
32 import org.onosproject.isis.controller.IsisRouterType; 32 import org.onosproject.isis.controller.IsisRouterType;
33 +import org.onosproject.isis.controller.topology.IsisAgent;
34 +import org.onosproject.isis.controller.topology.IsisLink;
35 +import org.onosproject.isis.controller.topology.IsisRouter;
33 import org.onosproject.isis.io.util.IsisConstants; 36 import org.onosproject.isis.io.util.IsisConstants;
34 import org.slf4j.Logger; 37 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory; 38 import org.slf4j.LoggerFactory;
...@@ -43,6 +46,7 @@ import java.util.Enumeration; ...@@ -43,6 +46,7 @@ import java.util.Enumeration;
43 import java.util.List; 46 import java.util.List;
44 import java.util.concurrent.Executors; 47 import java.util.concurrent.Executors;
45 import java.util.concurrent.ScheduledExecutorService; 48 import java.util.concurrent.ScheduledExecutorService;
49 +import java.util.concurrent.ScheduledFuture;
46 import java.util.concurrent.TimeUnit; 50 import java.util.concurrent.TimeUnit;
47 51
48 import static org.onlab.util.Tools.groupedThreads; 52 import static org.onlab.util.Tools.groupedThreads;
...@@ -64,15 +68,29 @@ public class Controller { ...@@ -64,15 +68,29 @@ public class Controller {
64 private ScheduledExecutorService connectExecutor = null; 68 private ScheduledExecutorService connectExecutor = null;
65 private int connectRetryCounter = 0; 69 private int connectRetryCounter = 0;
66 private int connectRetryTime; 70 private int connectRetryTime;
71 + private ScheduledFuture future = null;
72 + private IsisAgent agent;
67 73
68 /** 74 /**
69 * Deactivates ISIS controller. 75 * Deactivates ISIS controller.
70 */ 76 */
71 public void isisDeactivate() { 77 public void isisDeactivate() {
78 + disconnectExecutor();
79 + processes = null;
72 peerExecFactory.shutdown(); 80 peerExecFactory.shutdown();
73 } 81 }
74 82
75 /** 83 /**
84 + * Sets ISIS agent.
85 + *
86 + * @param agent ISIS agent instance
87 + */
88 + public void setAgent(IsisAgent agent) {
89 + this.agent = agent;
90 + }
91 +
92 +
93 + /**
76 * Updates the processes configuration. 94 * Updates the processes configuration.
77 * 95 *
78 * @param jsonNode json node instance 96 * @param jsonNode json node instance
...@@ -134,17 +152,17 @@ public class Controller { ...@@ -134,17 +152,17 @@ public class Controller {
134 peerBootstrap.setOption("keepAlive", true); 152 peerBootstrap.setOption("keepAlive", true);
135 peerBootstrap.setOption("receiveBufferSize", Controller.BUFFER_SIZE); 153 peerBootstrap.setOption("receiveBufferSize", Controller.BUFFER_SIZE);
136 peerBootstrap.setOption("receiveBufferSizePredictorFactory", 154 peerBootstrap.setOption("receiveBufferSizePredictorFactory",
137 - new FixedReceiveBufferSizePredictorFactory( 155 + new FixedReceiveBufferSizePredictorFactory(
138 - Controller.BUFFER_SIZE)); 156 + Controller.BUFFER_SIZE));
139 peerBootstrap.setOption("receiveBufferSizePredictor", 157 peerBootstrap.setOption("receiveBufferSizePredictor",
140 - new AdaptiveReceiveBufferSizePredictor(64, 1024, 65536)); 158 + new AdaptiveReceiveBufferSizePredictor(64, 1024, 65536));
141 peerBootstrap.setOption("child.keepAlive", true); 159 peerBootstrap.setOption("child.keepAlive", true);
142 peerBootstrap.setOption("child.tcpNoDelay", true); 160 peerBootstrap.setOption("child.tcpNoDelay", true);
143 peerBootstrap.setOption("child.sendBufferSize", Controller.BUFFER_SIZE); 161 peerBootstrap.setOption("child.sendBufferSize", Controller.BUFFER_SIZE);
144 peerBootstrap.setOption("child.receiveBufferSize", Controller.BUFFER_SIZE); 162 peerBootstrap.setOption("child.receiveBufferSize", Controller.BUFFER_SIZE);
145 peerBootstrap.setOption("child.receiveBufferSizePredictorFactory", 163 peerBootstrap.setOption("child.receiveBufferSizePredictorFactory",
146 - new FixedReceiveBufferSizePredictorFactory( 164 + new FixedReceiveBufferSizePredictorFactory(
147 - Controller.BUFFER_SIZE)); 165 + Controller.BUFFER_SIZE));
148 peerBootstrap.setOption("child.reuseAddress", true); 166 peerBootstrap.setOption("child.reuseAddress", true);
149 167
150 isisChannelHandler = new IsisChannelHandler(this, processes); 168 isisChannelHandler = new IsisChannelHandler(this, processes);
...@@ -236,8 +254,8 @@ public class Controller { ...@@ -236,8 +254,8 @@ public class Controller {
236 continue; 254 continue;
237 } 255 }
238 isisInterface.setIntermediateSystemName(jsonNode1 256 isisInterface.setIntermediateSystemName(jsonNode1
239 - .path(IsisConstants.INTERMEDIATESYSTEMNAME) 257 + .path(IsisConstants.INTERMEDIATESYSTEMNAME)
240 - .asText()); 258 + .asText());
241 String systemId = jsonNode1.path(IsisConstants.SYSTEMID).asText(); 259 String systemId = jsonNode1.path(IsisConstants.SYSTEMID).asText();
242 if (isValidSystemId(systemId)) { 260 if (isValidSystemId(systemId)) {
243 isisInterface.setSystemId(systemId); 261 isisInterface.setSystemId(systemId);
...@@ -462,7 +480,8 @@ public class Controller { ...@@ -462,7 +480,8 @@ public class Controller {
462 */ 480 */
463 public void disconnectExecutor() { 481 public void disconnectExecutor() {
464 if (connectExecutor != null) { 482 if (connectExecutor != null) {
465 - connectExecutor.shutdown(); 483 + future.cancel(true);
484 + connectExecutor.shutdownNow();
466 connectExecutor = null; 485 connectExecutor = null;
467 } 486 }
468 } 487 }
...@@ -480,10 +499,55 @@ public class Controller { ...@@ -480,10 +499,55 @@ public class Controller {
480 * @param retryDelay retry delay 499 * @param retryDelay retry delay
481 */ 500 */
482 private void scheduleConnectionRetry(long retryDelay) { 501 private void scheduleConnectionRetry(long retryDelay) {
483 - if (this.connectExecutor == null) { 502 + if (connectExecutor == null) {
484 - this.connectExecutor = Executors.newSingleThreadScheduledExecutor(); 503 + connectExecutor = Executors.newSingleThreadScheduledExecutor();
485 } 504 }
486 - this.connectExecutor.schedule(new ConnectionRetry(), retryDelay, TimeUnit.MINUTES); 505 + future = connectExecutor.schedule(new ConnectionRetry(), retryDelay, TimeUnit.MINUTES);
506 + }
507 +
508 + /**
509 + * Adds device details.
510 + *
511 + * @param isisRouter ISIS router instance
512 + */
513 + public void addDeviceDetails(IsisRouter isisRouter) {
514 + agent.addConnectedRouter(isisRouter);
515 + }
516 +
517 + /**
518 + * Removes device details.
519 + *
520 + * @param isisRouter Isis router instance
521 + */
522 + public void removeDeviceDetails(IsisRouter isisRouter) {
523 + agent.removeConnectedRouter(isisRouter);
524 + }
525 +
526 + /**
527 + * Adds link details.
528 + *
529 + * @param isisLink ISIS link instance
530 + */
531 + public void addLinkDetails(IsisLink isisLink) {
532 + agent.addLink(isisLink);
533 + }
534 +
535 + /**
536 + * Removes link details.
537 + *
538 + * @param isisLink ISIS link instance
539 + */
540 + public void removeLinkDetails(IsisLink isisLink) {
541 + agent.deleteLink(isisLink);
542 + }
543 +
544 + /**
545 + * Returns the isisAgent instance.
546 + *
547 + * @return agent
548 + */
549 + public IsisAgent agent() {
550 + return this.agent;
487 } 551 }
488 552
489 /** 553 /**
...@@ -503,7 +567,7 @@ public class Controller { ...@@ -503,7 +567,7 @@ public class Controller {
503 if (!future.isSuccess()) { 567 if (!future.isSuccess()) {
504 connectRetryCounter++; 568 connectRetryCounter++;
505 log.error("Connection failed, ConnectRetryCounter {} remote host {}", connectRetryCounter, 569 log.error("Connection failed, ConnectRetryCounter {} remote host {}", connectRetryCounter,
506 - IsisConstants.SHOST); 570 + IsisConstants.SHOST);
507 /* 571 /*
508 * Reconnect to peer on failure is exponential till 4 mins, later on retry after every 4 572 * Reconnect to peer on failure is exponential till 4 mins, later on retry after every 4
509 * mins. 573 * mins.
...@@ -517,7 +581,7 @@ public class Controller { ...@@ -517,7 +581,7 @@ public class Controller {
517 isisChannelHandler.sentConfigPacket(configPacket); 581 isisChannelHandler.sentConfigPacket(configPacket);
518 connectRetryCounter++; 582 connectRetryCounter++;
519 log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST, 583 log.info("Connected to remote host {}, Connect Counter {}", IsisConstants.SHOST,
520 - connectRetryCounter); 584 + connectRetryCounter);
521 disconnectExecutor(); 585 disconnectExecutor();
522 586
523 return; 587 return;
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
16 package org.onosproject.isis.controller.impl; 16 package org.onosproject.isis.controller.impl;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 +import com.google.common.collect.Sets;
19 import org.apache.felix.scr.annotations.Activate; 20 import org.apache.felix.scr.annotations.Activate;
20 import org.apache.felix.scr.annotations.Component; 21 import org.apache.felix.scr.annotations.Component;
21 import org.apache.felix.scr.annotations.Deactivate; 22 import org.apache.felix.scr.annotations.Deactivate;
...@@ -24,12 +25,18 @@ import org.apache.felix.scr.annotations.ReferenceCardinality; ...@@ -24,12 +25,18 @@ import org.apache.felix.scr.annotations.ReferenceCardinality;
24 import org.apache.felix.scr.annotations.Service; 25 import org.apache.felix.scr.annotations.Service;
25 import org.onosproject.isis.controller.IsisController; 26 import org.onosproject.isis.controller.IsisController;
26 import org.onosproject.isis.controller.IsisProcess; 27 import org.onosproject.isis.controller.IsisProcess;
28 +import org.onosproject.isis.controller.topology.IsisAgent;
29 +import org.onosproject.isis.controller.topology.IsisLink;
30 +import org.onosproject.isis.controller.topology.IsisLinkListener;
31 +import org.onosproject.isis.controller.topology.IsisRouter;
27 import org.onosproject.isis.controller.topology.IsisRouterListener; 32 import org.onosproject.isis.controller.topology.IsisRouterListener;
28 import org.onosproject.net.driver.DriverService; 33 import org.onosproject.net.driver.DriverService;
29 import org.slf4j.Logger; 34 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory; 35 import org.slf4j.LoggerFactory;
31 36
37 +import java.util.HashSet;
32 import java.util.List; 38 import java.util.List;
39 +import java.util.Set;
33 40
34 /** 41 /**
35 * Represents ISIS controller implementation. 42 * Represents ISIS controller implementation.
...@@ -42,10 +49,14 @@ public class DefaultIsisController implements IsisController { ...@@ -42,10 +49,14 @@ public class DefaultIsisController implements IsisController {
42 private final Controller controller = new Controller(); 49 private final Controller controller = new Controller();
43 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 50 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
44 protected DriverService driverService; 51 protected DriverService driverService;
52 + protected Set<IsisRouterListener> isisRouterListener = new HashSet<>();
53 + protected Set<IsisLinkListener> isisLinkListener = Sets.newHashSet();
54 + protected IsisAgent agent = new InternalDeviceConfig();
45 55
46 @Activate 56 @Activate
47 public void activate() { 57 public void activate() {
48 log.debug("ISISControllerImpl activate"); 58 log.debug("ISISControllerImpl activate");
59 + controller.setAgent(agent);
49 } 60 }
50 61
51 @Deactivate 62 @Deactivate
...@@ -55,6 +66,38 @@ public class DefaultIsisController implements IsisController { ...@@ -55,6 +66,38 @@ public class DefaultIsisController implements IsisController {
55 } 66 }
56 67
57 @Override 68 @Override
69 + public void addRouterListener(IsisRouterListener listener) {
70 + if (!isisRouterListener.contains(listener)) {
71 + this.isisRouterListener.add(listener);
72 + }
73 + }
74 +
75 + @Override
76 + public void removeRouterListener(IsisRouterListener listener) {
77 + this.isisRouterListener.remove(listener);
78 + }
79 +
80 + @Override
81 + public void addLinkListener(IsisLinkListener listener) {
82 + isisLinkListener.add(listener);
83 + }
84 +
85 + @Override
86 + public void removeLinkListener(IsisLinkListener listener) {
87 + isisLinkListener.remove(listener);
88 + }
89 +
90 + @Override
91 + public Set<IsisRouterListener> listener() {
92 + return isisRouterListener;
93 + }
94 +
95 + @Override
96 + public Set<IsisLinkListener> linkListener() {
97 + return isisLinkListener;
98 + }
99 +
100 + @Override
58 public List<IsisProcess> allConfiguredProcesses() { 101 public List<IsisProcess> allConfiguredProcesses() {
59 List<IsisProcess> processes = controller.getAllConfiguredProcesses(); 102 List<IsisProcess> processes = controller.getAllConfiguredProcesses();
60 return processes; 103 return processes;
...@@ -70,13 +113,37 @@ public class DefaultIsisController implements IsisController { ...@@ -70,13 +113,37 @@ public class DefaultIsisController implements IsisController {
70 } 113 }
71 } 114 }
72 115
73 - @Override 116 + /**
74 - public void addRouterListener(IsisRouterListener isisRouterListener) { 117 + * Notifier for internal ISIS device and link changes.
75 - log.debug("IsisControllerImpl::addRouterListener..."); 118 + */
76 - } 119 + private class InternalDeviceConfig implements IsisAgent {
120 + @Override
121 + public boolean addConnectedRouter(IsisRouter isisRouter) {
122 + for (IsisRouterListener l : listener()) {
123 + l.routerAdded(isisRouter);
124 + }
125 + return true;
126 + }
77 127
78 - @Override 128 + @Override
79 - public void removeRouterListener(IsisRouterListener isisRouterListener) { 129 + public void removeConnectedRouter(IsisRouter isisRouter) {
80 - log.debug("IsisControllerImpl::removeRouterListener..."); 130 + for (IsisRouterListener l : listener()) {
131 + l.routerRemoved(isisRouter);
132 + }
133 + }
134 +
135 + @Override
136 + public void addLink(IsisLink isisLink) {
137 + for (IsisLinkListener l : linkListener()) {
138 + l.addLink(isisLink);
139 + }
140 + }
141 +
142 + @Override
143 + public void deleteLink(IsisLink isisLink) {
144 + for (IsisLinkListener l : linkListener()) {
145 + l.deleteLink(isisLink);
146 + }
147 + }
81 } 148 }
82 } 149 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -68,6 +68,16 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { ...@@ -68,6 +68,16 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler {
68 public IsisChannelHandler(Controller controller, List<IsisProcess> processes) { 68 public IsisChannelHandler(Controller controller, List<IsisProcess> processes) {
69 this.controller = controller; 69 this.controller = controller;
70 this.processes = processes; 70 this.processes = processes;
71 + ((DefaultIsisLsdb) isisLsdb).setController(this.controller);
72 + ((DefaultIsisLsdb) isisLsdb).setIsisInterface(isisInterfaceList());
73 + }
74 +
75 + private List<IsisInterface> isisInterfaceList() {
76 + List<IsisInterface> isisInterfaceList = new ArrayList<>();
77 + for (Integer key : isisInterfaceMap.keySet()) {
78 + isisInterfaceList.add(isisInterfaceMap.get(key));
79 + }
80 + return isisInterfaceList;
71 } 81 }
72 82
73 /** 83 /**
...@@ -178,30 +188,25 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { ...@@ -178,30 +188,25 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler {
178 188
179 @Override 189 @Override
180 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { 190 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
181 - log.info("[exceptionCaught]: " + e.toString());
182 if (e.getCause() instanceof ReadTimeoutException) { 191 if (e.getCause() instanceof ReadTimeoutException) {
183 - log.error("Disconnecting device {} due to read timeout", e.getChannel().getRemoteAddress()); 192 + log.debug("Disconnecting device {} due to read timeout", e.getChannel().getRemoteAddress());
184 return; 193 return;
185 } else if (e.getCause() instanceof ClosedChannelException) { 194 } else if (e.getCause() instanceof ClosedChannelException) {
186 log.debug("Channel for ISIS {} already closed", e.getChannel().getRemoteAddress()); 195 log.debug("Channel for ISIS {} already closed", e.getChannel().getRemoteAddress());
187 } else if (e.getCause() instanceof IOException) { 196 } else if (e.getCause() instanceof IOException) {
188 - log.error("Disconnecting ISIS {} due to IO Error: {}", e.getChannel().getRemoteAddress(), 197 + log.debug("Disconnecting ISIS {} due to IO Error: {}", e.getChannel().getRemoteAddress(),
189 e.getCause().getMessage()); 198 e.getCause().getMessage());
190 - if (log.isDebugEnabled()) {
191 - log.debug("StackTrace for previous Exception: {}", e.getCause());
192 - }
193 } else if (e.getCause() instanceof IsisParseException) { 199 } else if (e.getCause() instanceof IsisParseException) {
194 IsisParseException errMsg = (IsisParseException) e.getCause(); 200 IsisParseException errMsg = (IsisParseException) e.getCause();
195 byte errorCode = errMsg.errorCode(); 201 byte errorCode = errMsg.errorCode();
196 byte errorSubCode = errMsg.errorSubCode(); 202 byte errorSubCode = errMsg.errorSubCode();
197 - log.error("Error while parsing message from ISIS {}, ErrorCode {}", 203 + log.debug("Error while parsing message from ISIS {}, ErrorCode {}",
198 e.getChannel().getRemoteAddress(), errorCode); 204 e.getChannel().getRemoteAddress(), errorCode);
199 } else if (e.getCause() instanceof RejectedExecutionException) { 205 } else if (e.getCause() instanceof RejectedExecutionException) {
200 - log.warn("Could not process message: queue full"); 206 + log.debug("Could not process message: queue full");
201 } else { 207 } else {
202 - log.error("Error while processing message from ISIS {}, {}", 208 + log.debug("Error while processing message from ISIS {}, {}",
203 e.getChannel().getRemoteAddress(), e.getCause().getMessage()); 209 e.getChannel().getRemoteAddress(), e.getCause().getMessage());
204 - e.getCause().printStackTrace();
205 } 210 }
206 } 211 }
207 212
...@@ -274,7 +279,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler { ...@@ -274,7 +279,7 @@ public class IsisChannelHandler extends IdleStateAwareChannelHandler {
274 * @param configPacket interface configuration 279 * @param configPacket interface configuration
275 */ 280 */
276 public void sentConfigPacket(byte[] configPacket) { 281 public void sentConfigPacket(byte[] configPacket) {
277 - if (channel != null) { 282 + if (channel != null && channel.isConnected() && channel.isOpen()) {
278 channel.write(configPacket); 283 channel.write(configPacket);
279 log.debug("IsisChannelHandler sentConfigPacket packet sent..!!!"); 284 log.debug("IsisChannelHandler sentConfigPacket packet sent..!!!");
280 } else { 285 } else {
......
1 +/*
2 +* Copyright 2016-present 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.isis.controller.impl;
17 +
18 +import org.onosproject.isis.controller.IsisNetworkType;
19 +import org.onosproject.isis.controller.LspWrapper;
20 +import org.onosproject.isis.controller.impl.topology.DefaultIsisLink;
21 +import org.onosproject.isis.controller.impl.topology.DefaultIsisRouter;
22 +import org.onosproject.isis.controller.impl.topology.TopologyForDeviceAndLinkImpl;
23 +import org.onosproject.isis.controller.topology.IsisLink;
24 +import org.onosproject.isis.controller.topology.IsisLinkTed;
25 +import org.onosproject.isis.controller.topology.IsisRouter;
26 +import org.onosproject.isis.controller.topology.LinkInformation;
27 +import org.onosproject.isis.io.isispacket.pdu.LsPdu;
28 +import org.onosproject.isis.io.isispacket.tlv.IpExtendedReachabilityTlv;
29 +import org.onosproject.isis.io.isispacket.tlv.IsExtendedReachability;
30 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
31 +import org.onosproject.isis.io.isispacket.tlv.NeighborForExtendedIs;
32 +import org.onosproject.isis.io.util.IsisConstants;
33 +import org.onosproject.isis.io.util.IsisUtil;
34 +import org.slf4j.Logger;
35 +import org.slf4j.LoggerFactory;
36 +
37 +import java.util.ArrayList;
38 +import java.util.List;
39 +import java.util.Map;
40 +import java.util.concurrent.BlockingQueue;
41 +
42 +/**
43 + * Representation of LSP event consumer.
44 + */
45 +public class LspEventConsumer implements Runnable {
46 + private static final Logger log = LoggerFactory.getLogger(LspEventConsumer.class);
47 + public static List<LsPdu> lsPdus = new ArrayList<>();
48 + private String lspAdded = "LSP_ADDED";
49 + private String lspRemoved = "LSP_REMOVED";
50 + private BlockingQueue queue = null;
51 + private Controller controller = null;
52 + private TopologyForDeviceAndLinkImpl deviceAndLink = new TopologyForDeviceAndLinkImpl();
53 +
54 + /**
55 + * Creates an instance of this.
56 + *
57 + * @param queue blocking queue instance
58 + * @param controller controller instance
59 + */
60 + public LspEventConsumer(BlockingQueue queue, Controller controller) {
61 + this.queue = queue;
62 + this.controller = controller;
63 + }
64 +
65 + @Override
66 + public void run() {
67 + log.debug("LspsForProvider:run...!!!");
68 + try {
69 + while (true) {
70 + if (!queue.isEmpty()) {
71 + LspWrapper wrapper = (LspWrapper) queue.take();
72 + LsPdu lsPdu = (LsPdu) wrapper.lsPdu();
73 + for (IsisTlv isisTlv : lsPdu.tlvs()) {
74 + if ((isisTlv instanceof IpExtendedReachabilityTlv) ||
75 + (isisTlv instanceof IsExtendedReachability)) {
76 + lsPdus.add(lsPdu);
77 + if (wrapper.lspProcessing().equals(lspAdded)) {
78 + callTopologyToSendInfo(lsPdu, wrapper.isisInterface().networkType(),
79 + wrapper.isisInterface().systemId() + ".00");
80 + }
81 + if (wrapper.lspProcessing().equals(lspRemoved)) {
82 + callTopologyToRemoveInfo(lsPdu);
83 + }
84 + break;
85 + }
86 + }
87 + }
88 + }
89 + } catch (Exception e) {
90 + log.debug("Error::LspsForProvider::{}", e.getMessage());
91 + }
92 + }
93 +
94 + /**
95 + * Sends topology information to core.
96 + *
97 + * @param lsPdu ls pdu instance
98 + * @param isisNetworkType ISIS network type
99 + */
100 + private void callTopologyToSendInfo(LsPdu lsPdu, IsisNetworkType isisNetworkType,
101 + String ownSystemId) {
102 + if (isisNetworkType.equals(IsisNetworkType.BROADCAST)) {
103 + sendDeviceInfo(lsPdu);
104 + boolean isDis = IsisUtil.checkIsDis(lsPdu.lspId());
105 + if (isDis) {
106 + sendLinkInfo(lsPdu, ownSystemId);
107 + }
108 + } else if (isisNetworkType.equals(IsisNetworkType.P2P)) {
109 +
110 + sendDeviceInfo(lsPdu);
111 +
112 + for (LsPdu wrapper : lsPdus) {
113 + LsPdu lsPduStored = wrapper;
114 + List<String> neStringList = neighborList(lsPduStored, ownSystemId);
115 + String lspId = IsisUtil.removeTailingZeros(lsPdu.lspId());
116 + if (neStringList.contains(lspId)) {
117 + sendLinkInfo(lsPduStored, ownSystemId);
118 + }
119 + }
120 +
121 + List<String> neStringList = neighborList(lsPdu, ownSystemId);
122 + Map<String, IsisRouter> routerPresence = deviceAndLink.isisDeviceList();
123 + for (String neighbor : neStringList) {
124 + IsisRouter isisRouter = routerPresence.get(neighbor);
125 + if (isisRouter != null) {
126 + sendLinkInfo(lsPdu, ownSystemId);
127 + } else {
128 + lsPdus.add(lsPdu);
129 + }
130 + }
131 + }
132 + }
133 +
134 + /**
135 + * Removes topology information from core.
136 + *
137 + * @param lsPdu ls pdu instance
138 + */
139 + private void callTopologyToRemoveInfo(LsPdu lsPdu) {
140 + removeDeviceInfo(lsPdu);
141 + removeLinkInfo(lsPdu);
142 + }
143 +
144 + /**
145 + * Sends the device information to topology provider.
146 + *
147 + * @param lsPdu ls pdu instance
148 + */
149 + private void sendDeviceInfo(LsPdu lsPdu) {
150 + IsisRouter isisRouter = deviceAndLink.createDeviceInfo(lsPdu);
151 + if (isisRouter.systemId() != null) {
152 + controller.addDeviceDetails(isisRouter);
153 + }
154 + }
155 +
156 + /**
157 + * Returns the list of neighbors.
158 + *
159 + * @param lsPdu link state Pdu
160 + * @return neighbor list
161 + */
162 + private List<String> neighborList(LsPdu lsPdu, String ownSystemId) {
163 + List<String> neighbourList = new ArrayList<>();
164 + for (IsisTlv isisTlv : lsPdu.tlvs()) {
165 + if (isisTlv instanceof IsExtendedReachability) {
166 + IsExtendedReachability isExtendedReachability = (IsExtendedReachability) isisTlv;
167 + List<NeighborForExtendedIs> neighborForExtendedIsList = isExtendedReachability.neighbours();
168 + for (NeighborForExtendedIs neighbor : neighborForExtendedIsList) {
169 + String neighbourId = neighbor.neighborId();
170 + if (!(neighbourId.equals(ownSystemId))) {
171 + neighbourList.add(neighbourId);
172 + }
173 +
174 + }
175 + }
176 + }
177 + return neighbourList;
178 + }
179 +
180 + /**
181 + * Creates ISIS router instance.
182 + *
183 + * @param systemId system ID
184 + * @return isisRouter instance
185 + */
186 + private IsisRouter createIsisRouterDummy(String systemId) {
187 + IsisRouter isisRouter = new DefaultIsisRouter();
188 + isisRouter.setSystemId(systemId);
189 + isisRouter.setDis(false);
190 + isisRouter.setInterfaceId(IsisConstants.DEFAULTIP);
191 + isisRouter.setNeighborRouterId(IsisConstants.DEFAULTIP);
192 + return isisRouter;
193 + }
194 +
195 + /**
196 + * Removes the device information from topology provider.
197 + *
198 + * @param lsPdu ls pdu instance
199 + */
200 + private void removeDeviceInfo(LsPdu lsPdu) {
201 + IsisRouter isisRouter = deviceAndLink.removeDeviceAndLinkInfo(lsPdu);
202 + if (isisRouter.systemId() != null) {
203 + controller.removeDeviceDetails(isisRouter);
204 + }
205 + }
206 +
207 + /**
208 + * Sends the link information to topology provider.
209 + *
210 + * @param lsPdu ls pdu instance
211 + */
212 + private void sendLinkInfo(LsPdu lsPdu, String ownSystemId) {
213 + Map<String, LinkInformation> linkInformationList = deviceAndLink.createLinkInfo(lsPdu, ownSystemId);
214 + for (String key : linkInformationList.keySet()) {
215 + LinkInformation linkInformation = linkInformationList.get(key);
216 + if (linkInformation.isAlreadyCreated()) {
217 + controller.addDeviceDetails(createIsisRouterDummy(linkInformation.linkDestinationId()));
218 + controller.addLinkDetails(createIsisLink(linkInformation, lsPdu));
219 + } else {
220 + controller.addLinkDetails(createIsisLink(linkInformation, lsPdu));
221 + }
222 + }
223 + }
224 +
225 + /**
226 + * Removes the link information from topology provider.
227 + *
228 + * @param lsPdu ls pdu instance
229 + */
230 + private void removeLinkInfo(LsPdu lsPdu) {
231 + Map<String, LinkInformation> linkInformationList = deviceAndLink.removeLinkInfo(lsPdu);
232 + for (String key : linkInformationList.keySet()) {
233 + LinkInformation linkInformation = linkInformationList.get(key);
234 + controller.removeLinkDetails(createIsisLink(linkInformation, lsPdu));
235 + }
236 + }
237 +
238 + /**
239 + * Creates ISIS link instance.
240 + *
241 + * @param linkInformation link information instance
242 + * @return isisLink instance
243 + */
244 + private IsisLink createIsisLink(LinkInformation linkInformation, LsPdu lsPdu) {
245 + IsisLink isisLink = new DefaultIsisLink();
246 + isisLink.setLocalSystemId(linkInformation.linkSourceId());
247 + isisLink.setRemoteSystemId(linkInformation.linkDestinationId());
248 + isisLink.setInterfaceIp(linkInformation.interfaceIp());
249 + isisLink.setNeighborIp(linkInformation.neighborIp());
250 + isisLink.setLinkTed(createLinkTedInfo(lsPdu));
251 + return isisLink;
252 + }
253 +
254 + /**
255 + * Creates the link TED information.
256 + *
257 + * @param lsPdu link state PDU
258 + * @return isisLinkTed
259 + */
260 + private IsisLinkTed createLinkTedInfo(LsPdu lsPdu) {
261 + IsisLinkTed isisLinkTed = deviceAndLink.createIsisLinkTedInfo(lsPdu);
262 + return isisLinkTed;
263 + }
264 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -23,15 +23,20 @@ import org.onosproject.isis.controller.IsisLspBin; ...@@ -23,15 +23,20 @@ import org.onosproject.isis.controller.IsisLspBin;
23 import org.onosproject.isis.controller.IsisMessage; 23 import org.onosproject.isis.controller.IsisMessage;
24 import org.onosproject.isis.controller.IsisPduType; 24 import org.onosproject.isis.controller.IsisPduType;
25 import org.onosproject.isis.controller.LspWrapper; 25 import org.onosproject.isis.controller.LspWrapper;
26 +import org.onosproject.isis.controller.impl.Controller;
27 +import org.onosproject.isis.controller.impl.LspEventConsumer;
26 import org.onosproject.isis.io.isispacket.pdu.LsPdu; 28 import org.onosproject.isis.io.isispacket.pdu.LsPdu;
27 import org.onosproject.isis.io.util.IsisConstants; 29 import org.onosproject.isis.io.util.IsisConstants;
28 import org.onosproject.isis.io.util.IsisUtil; 30 import org.onosproject.isis.io.util.IsisUtil;
29 import org.slf4j.Logger; 31 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory; 32 import org.slf4j.LoggerFactory;
31 33
34 +import java.util.ArrayList;
32 import java.util.Iterator; 35 import java.util.Iterator;
33 import java.util.List; 36 import java.util.List;
34 import java.util.Map; 37 import java.util.Map;
38 +import java.util.concurrent.ArrayBlockingQueue;
39 +import java.util.concurrent.BlockingQueue;
35 import java.util.concurrent.ConcurrentHashMap; 40 import java.util.concurrent.ConcurrentHashMap;
36 import java.util.concurrent.CopyOnWriteArrayList; 41 import java.util.concurrent.CopyOnWriteArrayList;
37 42
...@@ -43,10 +48,14 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -43,10 +48,14 @@ public class DefaultIsisLsdb implements IsisLsdb {
43 private Map<String, LspWrapper> isisL1Db = new ConcurrentHashMap<>(); 48 private Map<String, LspWrapper> isisL1Db = new ConcurrentHashMap<>();
44 private Map<String, LspWrapper> isisL2Db = new ConcurrentHashMap<>(); 49 private Map<String, LspWrapper> isisL2Db = new ConcurrentHashMap<>();
45 private IsisLsdbAge lsdbAge = null; 50 private IsisLsdbAge lsdbAge = null;
51 + private Controller controller = null;
52 + private List<IsisInterface> isisInterfaceList = new ArrayList<>();
46 53
47 54
48 private int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; 55 private int l1LspSeqNo = IsisConstants.STARTLSSEQUENCENUM;
49 private int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM; 56 private int l2LspSeqNo = IsisConstants.STARTLSSEQUENCENUM;
57 + private LspEventConsumer queueConsumer = null;
58 + private BlockingQueue<LspWrapper> lspForProviderQueue = new ArrayBlockingQueue<>(1024);
50 59
51 /** 60 /**
52 * Creates an instance of ISIS LSDB. 61 * Creates an instance of ISIS LSDB.
...@@ -56,10 +65,30 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -56,10 +65,30 @@ public class DefaultIsisLsdb implements IsisLsdb {
56 } 65 }
57 66
58 /** 67 /**
68 + * Sets the controller instance.
69 + *
70 + * @param controller controller instance
71 + */
72 + public void setController(Controller controller) {
73 + this.controller = controller;
74 + }
75 +
76 + /**
77 + * Sets the list of IsisInterface instance.
78 + *
79 + * @param isisInterfaceList isisInterface instance
80 + */
81 + public void setIsisInterface(List<IsisInterface> isisInterfaceList) {
82 + this.isisInterfaceList = isisInterfaceList;
83 + }
84 +
85 + /**
59 * Initializes the link state database. 86 * Initializes the link state database.
60 */ 87 */
61 public void initializeDb() { 88 public void initializeDb() {
62 lsdbAge.startDbAging(); 89 lsdbAge.startDbAging();
90 + queueConsumer = new LspEventConsumer(lspForProviderQueue, controller);
91 + new Thread(queueConsumer).start();
63 } 92 }
64 93
65 /** 94 /**
...@@ -96,7 +125,6 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -96,7 +125,6 @@ public class DefaultIsisLsdb implements IsisLsdb {
96 return lspKey.toString(); 125 return lspKey.toString();
97 } 126 }
98 127
99 -
100 /** 128 /**
101 * Returns the neighbor L1 database information. 129 * Returns the neighbor L1 database information.
102 * 130 *
...@@ -215,7 +243,7 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -215,7 +243,7 @@ public class DefaultIsisLsdb implements IsisLsdb {
215 byte[] lspBytes = lspdu.asBytes(); 243 byte[] lspBytes = lspdu.asBytes();
216 lspdu.setPduLength(lspBytes.length); 244 lspdu.setPduLength(lspBytes.length);
217 lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION, 245 lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION,
218 - IsisConstants.CHECKSUMPOSITION + 1); 246 + IsisConstants.CHECKSUMPOSITION + 1);
219 byte[] checkSum = {lspBytes[IsisConstants.CHECKSUMPOSITION], lspBytes[IsisConstants.CHECKSUMPOSITION + 1]}; 247 byte[] checkSum = {lspBytes[IsisConstants.CHECKSUMPOSITION], lspBytes[IsisConstants.CHECKSUMPOSITION + 1]};
220 lspdu.setCheckSum(ChannelBuffers.copiedBuffer(checkSum).readUnsignedShort()); 248 lspdu.setCheckSum(ChannelBuffers.copiedBuffer(checkSum).readUnsignedShort());
221 } 249 }
...@@ -236,6 +264,14 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -236,6 +264,14 @@ public class DefaultIsisLsdb implements IsisLsdb {
236 addLsp(lspWrapper, lspdu.lspId()); 264 addLsp(lspWrapper, lspdu.lspId());
237 265
238 log.debug("Added LSp In LSDB: {}", lspWrapper); 266 log.debug("Added LSp In LSDB: {}", lspWrapper);
267 + try {
268 + if (!lspWrapper.isSelfOriginated()) {
269 + lspWrapper.setLspProcessing(IsisConstants.LSPADDED);
270 + lspForProviderQueue.put(lspWrapper);
271 + }
272 + } catch (Exception e) {
273 + log.debug("Added LSp In Blocking queue: {}", lspWrapper);
274 + }
239 return true; 275 return true;
240 } 276 }
241 277
...@@ -273,9 +309,10 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -273,9 +309,10 @@ public class DefaultIsisLsdb implements IsisLsdb {
273 lspBin.addIsisLsp(key, lspWrapper); 309 lspBin.addIsisLsp(key, lspWrapper);
274 lsdbAge.addLspBin(binNumber, lspBin); 310 lsdbAge.addLspBin(binNumber, lspBin);
275 log.debug("Added Type {} LSP to LSDB and LSABin[{}], Remaining life time of LSA {}", 311 log.debug("Added Type {} LSP to LSDB and LSABin[{}], Remaining life time of LSA {}",
276 - lspWrapper.lsPdu().isisPduType(), 312 + lspWrapper.lsPdu().isisPduType(),
277 - binNumber, lspWrapper.remainingLifetime()); 313 + binNumber, lspWrapper.remainingLifetime());
278 } 314 }
315 +
279 return false; 316 return false;
280 } 317 }
281 318
...@@ -337,6 +374,7 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -337,6 +374,7 @@ public class DefaultIsisLsdb implements IsisLsdb {
337 public void deleteLsp(IsisMessage lspMessage) { 374 public void deleteLsp(IsisMessage lspMessage) {
338 LsPdu lsp = (LsPdu) lspMessage; 375 LsPdu lsp = (LsPdu) lspMessage;
339 String lspKey = lsp.lspId(); 376 String lspKey = lsp.lspId();
377 + LspWrapper lspWrapper = findLsp(lspMessage.isisPduType(), lspKey);
340 switch (lsp.isisPduType()) { 378 switch (lsp.isisPduType()) {
341 case L1LSPDU: 379 case L1LSPDU:
342 isisL1Db.remove(lspKey); 380 isisL1Db.remove(lspKey);
...@@ -348,5 +386,12 @@ public class DefaultIsisLsdb implements IsisLsdb { ...@@ -348,5 +386,12 @@ public class DefaultIsisLsdb implements IsisLsdb {
348 log.debug("Unknown LSP type to remove..!!!"); 386 log.debug("Unknown LSP type to remove..!!!");
349 break; 387 break;
350 } 388 }
389 +
390 + try {
391 + lspWrapper.setLspProcessing(IsisConstants.LSPREMOVED);
392 + lspForProviderQueue.put(lspWrapper);
393 + } catch (Exception e) {
394 + log.debug("Added LSp In Blocking queue: {}", lspWrapper);
395 + }
351 } 396 }
352 } 397 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -231,7 +231,6 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge { ...@@ -231,7 +231,6 @@ public class DefaultIsisLsdbAge implements IsisLsdbAge {
231 } 231 }
232 } 232 }
233 233
234 -
235 /** 234 /**
236 * Runnable task which runs every second and calls aging process. 235 * Runnable task which runs every second and calls aging process.
237 */ 236 */
......
...@@ -58,12 +58,12 @@ public class IsisLspQueueConsumer implements Runnable { ...@@ -58,12 +58,12 @@ public class IsisLspQueueConsumer implements Runnable {
58 switch (lspProcessing) { 58 switch (lspProcessing) {
59 case IsisConstants.REFRESHLSP: 59 case IsisConstants.REFRESHLSP:
60 log.debug("LSPQueueConsumer: Message - " + IsisConstants.REFRESHLSP + 60 log.debug("LSPQueueConsumer: Message - " + IsisConstants.REFRESHLSP +
61 - " consumed."); 61 + " consumed.");
62 processRefreshLsp(wrapper); 62 processRefreshLsp(wrapper);
63 break; 63 break;
64 case IsisConstants.MAXAGELSP: 64 case IsisConstants.MAXAGELSP:
65 log.debug("LSPQueueConsumer: Message - " + IsisConstants.MAXAGELSP + 65 log.debug("LSPQueueConsumer: Message - " + IsisConstants.MAXAGELSP +
66 - " consumed."); 66 + " consumed.");
67 processMaxAgeLsa(wrapper); 67 processMaxAgeLsa(wrapper);
68 break; 68 break;
69 default: 69 default:
...@@ -72,7 +72,6 @@ public class IsisLspQueueConsumer implements Runnable { ...@@ -72,7 +72,6 @@ public class IsisLspQueueConsumer implements Runnable {
72 } 72 }
73 } 73 }
74 } 74 }
75 -
76 } catch (Exception e) { 75 } catch (Exception e) {
77 log.debug("Error::LSPQueueConsumer::{}", e.getMessage()); 76 log.debug("Error::LSPQueueConsumer::{}", e.getMessage());
78 } 77 }
...@@ -94,19 +93,18 @@ public class IsisLspQueueConsumer implements Runnable { ...@@ -94,19 +93,18 @@ public class IsisLspQueueConsumer implements Runnable {
94 lsPdu.setRemainingLifeTime(IsisConstants.LSPMAXAGE); 93 lsPdu.setRemainingLifeTime(IsisConstants.LSPMAXAGE);
95 byte[] lspBytes = lsPdu.asBytes(); 94 byte[] lspBytes = lsPdu.asBytes();
96 lspBytes = IsisUtil.addLengthAndMarkItInReserved(lspBytes, IsisConstants.LENGTHPOSITION, 95 lspBytes = IsisUtil.addLengthAndMarkItInReserved(lspBytes, IsisConstants.LENGTHPOSITION,
97 - IsisConstants.LENGTHPOSITION + 1, 96 + IsisConstants.LENGTHPOSITION + 1,
98 - IsisConstants.RESERVEDPOSITION); 97 + IsisConstants.RESERVEDPOSITION);
99 lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION, 98 lspBytes = IsisUtil.addChecksum(lspBytes, IsisConstants.CHECKSUMPOSITION,
100 - IsisConstants.CHECKSUMPOSITION + 1); 99 + IsisConstants.CHECKSUMPOSITION + 1);
101 //write to the channel 100 //write to the channel
102 channel.write(IsisUtil.framePacket(lspBytes, isisInterface.interfaceIndex())); 101 channel.write(IsisUtil.framePacket(lspBytes, isisInterface.interfaceIndex()));
103 // Updating the database with resetting remaining life time to default. 102 // Updating the database with resetting remaining life time to default.
104 IsisLsdb isisDb = isisInterface.isisLsdb(); 103 IsisLsdb isisDb = isisInterface.isisLsdb();
105 isisDb.addLsp(lsPdu, true, isisInterface); 104 isisDb.addLsp(lsPdu, true, isisInterface);
106 log.debug("LSPQueueConsumer: processRefreshLsp - Flooded SelfOriginated LSP {}", 105 log.debug("LSPQueueConsumer: processRefreshLsp - Flooded SelfOriginated LSP {}",
107 - wrapper.lsPdu()); 106 + wrapper.lsPdu());
108 } 107 }
109 -
110 } 108 }
111 } 109 }
112 110
...@@ -124,7 +122,7 @@ public class IsisLspQueueConsumer implements Runnable { ...@@ -124,7 +122,7 @@ public class IsisLspQueueConsumer implements Runnable {
124 IsisLsdb isisDb = isisInterface.isisLsdb(); 122 IsisLsdb isisDb = isisInterface.isisLsdb();
125 isisDb.deleteLsp(lsPdu); 123 isisDb.deleteLsp(lsPdu);
126 log.debug("LSPQueueConsumer: processMaxAgeLsp - Removed-Max Age LSP {}", 124 log.debug("LSPQueueConsumer: processMaxAgeLsp - Removed-Max Age LSP {}",
127 - wrapper.lsPdu()); 125 + wrapper.lsPdu());
128 } 126 }
129 } 127 }
130 } 128 }
...\ No newline at end of file ...\ No newline at end of file
......
1 +/*
2 + * Copyright 2015 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 +package org.onosproject.isis.controller.impl.topology;
18 +
19 +import com.google.common.base.MoreObjects;
20 +import com.google.common.base.Objects;
21 +import org.onlab.packet.Ip4Address;
22 +import org.onosproject.isis.controller.topology.IsisLink;
23 +import org.onosproject.isis.controller.topology.IsisLinkTed;
24 +
25 +/**
26 + * Representation of an ISIS Link.
27 + */
28 +public class DefaultIsisLink implements IsisLink {
29 +
30 + private String remoteSystemId;
31 + private String localSystemId;
32 + private Ip4Address interfaceIp;
33 + private Ip4Address neighborIp;
34 + private IsisLinkTed linkTed;
35 +
36 + @Override
37 + public String remoteSystemId() {
38 + return this.remoteSystemId;
39 + }
40 +
41 + @Override
42 + public String localSystemId() {
43 + return this.localSystemId;
44 + }
45 +
46 + @Override
47 + public Ip4Address interfaceIp() {
48 + return this.interfaceIp;
49 + }
50 +
51 + @Override
52 + public Ip4Address neighborIp() {
53 + return this.neighborIp;
54 + }
55 +
56 + @Override
57 + public IsisLinkTed linkTed() {
58 + return this.linkTed;
59 + }
60 +
61 + @Override
62 + public void setRemoteSystemId(String remoteSystemId) {
63 + this.remoteSystemId = remoteSystemId;
64 + }
65 +
66 + @Override
67 + public void setLocalSystemId(String localSystemId) {
68 + this.localSystemId = localSystemId;
69 + }
70 +
71 + @Override
72 + public void setInterfaceIp(Ip4Address interfaceIp) {
73 + this.interfaceIp = interfaceIp;
74 + }
75 +
76 + @Override
77 + public void setNeighborIp(Ip4Address neighborIp) {
78 + this.neighborIp = neighborIp;
79 + }
80 +
81 + @Override
82 + public void setLinkTed(IsisLinkTed linkTed) {
83 + this.linkTed = linkTed;
84 + }
85 +
86 + @Override
87 + public String toString() {
88 + return MoreObjects.toStringHelper(getClass())
89 + .omitNullValues()
90 + .add("remoteSystemId", remoteSystemId)
91 + .add("localSystemId", localSystemId)
92 + .add("interfaceIp", interfaceIp)
93 + .add("neighborIp", neighborIp)
94 + .add("linkTed", linkTed)
95 + .toString();
96 + }
97 +
98 + @Override
99 + public boolean equals(Object o) {
100 + if (this == o) {
101 + return true;
102 + }
103 + if (o == null || getClass() != o.getClass()) {
104 + return false;
105 + }
106 + DefaultIsisLink that = (DefaultIsisLink) o;
107 + return Objects.equal(remoteSystemId, that.remoteSystemId) &&
108 + Objects.equal(localSystemId, that.localSystemId) &&
109 + Objects.equal(interfaceIp, that.interfaceIp) &&
110 + Objects.equal(neighborIp, that.neighborIp) &&
111 + Objects.equal(linkTed, that.linkTed);
112 + }
113 +
114 + @Override
115 + public int hashCode() {
116 + return Objects.hashCode(remoteSystemId, localSystemId, interfaceIp, neighborIp, linkTed);
117 + }
118 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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.isis.controller.impl.topology;
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.isis.controller.topology.LinkInformation;
22 +
23 +/**
24 + * Representation of an ISIS link information..
25 + */
26 +public class DefaultIsisLinkInformation implements LinkInformation {
27 +
28 + String linkId;
29 + String linkSourceId;
30 + String linkDestinationId;
31 + Ip4Address interfaceIp;
32 + Ip4Address neighborIp;
33 + boolean alreadyCreated;
34 +
35 + /**
36 + * Gets link id.
37 + *
38 + * @return link id
39 + */
40 + public String linkId() {
41 + return linkId;
42 + }
43 +
44 + /**
45 + * Sets link id.DefaultIsisDeviceInformation.
46 + *
47 + * @param linkId link id
48 + */
49 + public void setLinkId(String linkId) {
50 + this.linkId = linkId;
51 + }
52 +
53 + /**
54 + * Gets is already created or not.
55 + *
56 + * @return true if already created else false
57 + */
58 + public boolean isAlreadyCreated() {
59 + return alreadyCreated;
60 + }
61 +
62 + /**
63 + * Sets is already created or not.
64 + *
65 + * @param alreadyCreated true or false
66 + */
67 + public void setAlreadyCreated(boolean alreadyCreated) {
68 + this.alreadyCreated = alreadyCreated;
69 + }
70 +
71 + /**
72 + * Gets link destination id.
73 + *
74 + * @return link destination id
75 + */
76 + public String linkDestinationId() {
77 + return linkDestinationId;
78 + }
79 +
80 + /**
81 + * Sets link destination id.
82 + *
83 + * @param linkDestinationId link destination id
84 + */
85 + public void setLinkDestinationId(String linkDestinationId) {
86 + this.linkDestinationId = linkDestinationId;
87 + }
88 +
89 + /**
90 + * Gets link source id.
91 + *
92 + * @return link source id
93 + */
94 + public String linkSourceId() {
95 + return linkSourceId;
96 + }
97 +
98 + /**
99 + * Sets link source id.
100 + *
101 + * @param linkSourceId link source id
102 + */
103 + public void setLinkSourceId(String linkSourceId) {
104 + this.linkSourceId = linkSourceId;
105 + }
106 +
107 + /**
108 + * Gets interface IP address.
109 + *
110 + * @return interface IP address
111 + */
112 + public Ip4Address interfaceIp() {
113 + return interfaceIp;
114 + }
115 +
116 + /**
117 + * Sets interface IP address.
118 + *
119 + * @param interfaceIp interface IP address
120 + */
121 + public void setInterfaceIp(Ip4Address interfaceIp) {
122 + this.interfaceIp = interfaceIp;
123 + }
124 +
125 + @Override
126 + public Ip4Address neighborIp() {
127 + return this.neighborIp;
128 + }
129 +
130 + @Override
131 + public void setNeighborIp(Ip4Address neighborIp) {
132 + this.neighborIp = neighborIp;
133 + }
134 +
135 + @Override
136 + public String toString() {
137 + return MoreObjects.toStringHelper(getClass())
138 + .omitNullValues()
139 + .add("linkId", linkId)
140 + .add("linkSourceId", linkSourceId)
141 + .add("linkDestinationId", linkDestinationId)
142 + .add("interfaceIp", interfaceIp)
143 + .toString();
144 + }
145 +
146 + @Override
147 + public boolean equals(Object o) {
148 + if (this == o) {
149 + return true;
150 + }
151 + if (o == null || getClass() != o.getClass()) {
152 + return false;
153 + }
154 + DefaultIsisLinkInformation that = (DefaultIsisLinkInformation) o;
155 + return Objects.equal(linkId, that.linkId) &&
156 + Objects.equal(linkSourceId, that.linkSourceId) &&
157 + Objects.equal(linkDestinationId, that.linkDestinationId) &&
158 + Objects.equal(interfaceIp, that.interfaceIp);
159 + }
160 +
161 + @Override
162 + public int hashCode() {
163 + return Objects.hashCode(linkId, linkSourceId, linkDestinationId,
164 + interfaceIp);
165 + }
166 +}
...\ 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.isis.controller.impl.topology;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import org.onlab.packet.Ip4Address;
21 +import org.onlab.util.Bandwidth;
22 +import org.onosproject.isis.controller.topology.IsisLinkTed;
23 +
24 +import java.util.List;
25 +
26 +/**
27 + * Representation of an ISIS device information.
28 + */
29 +public class DefaultIsisLinkTed implements IsisLinkTed {
30 +
31 +
32 + private int administrativeGroup;
33 + private Ip4Address ipv4InterfaceAddress;
34 + private Ip4Address ipv4NeighborAddress;
35 + private Bandwidth maximumLinkBandwidth;
36 + private Bandwidth maximumReservableLinkBandwidth;
37 + private List<Bandwidth> unreservedBandwidth;
38 + private long teDefaultMetric;
39 +
40 + @Override
41 + public int administrativeGroup() {
42 + return administrativeGroup;
43 + }
44 +
45 + @Override
46 + public void setAdministrativeGroup(int administrativeGroup) {
47 + this.administrativeGroup = administrativeGroup;
48 + }
49 +
50 + @Override
51 + public Ip4Address ipv4InterfaceAddress() {
52 + return ipv4InterfaceAddress;
53 + }
54 +
55 + @Override
56 + public void setIpv4InterfaceAddress(Ip4Address interfaceAddress) {
57 + this.ipv4InterfaceAddress = interfaceAddress;
58 + }
59 +
60 + @Override
61 + public Ip4Address ipv4NeighborAddress() {
62 + return ipv4NeighborAddress;
63 + }
64 +
65 + @Override
66 + public void setIpv4NeighborAddress(Ip4Address neighborAddress) {
67 + this.ipv4NeighborAddress = neighborAddress;
68 + }
69 +
70 + @Override
71 + public Bandwidth maximumLinkBandwidth() {
72 + return maximumLinkBandwidth;
73 + }
74 +
75 + @Override
76 + public void setMaximumLinkBandwidth(Bandwidth bandwidth) {
77 + this.maximumLinkBandwidth = bandwidth;
78 + }
79 +
80 + @Override
81 + public Bandwidth maximumReservableLinkBandwidth() {
82 + return maximumReservableLinkBandwidth;
83 + }
84 +
85 + @Override
86 + public void setMaximumReservableLinkBandwidth(Bandwidth bandwidth) {
87 + this.maximumReservableLinkBandwidth = bandwidth;
88 + }
89 +
90 + @Override
91 + public List<Bandwidth> unreservedBandwidth() {
92 + return this.unreservedBandwidth;
93 + }
94 +
95 + @Override
96 + public void setUnreservedBandwidth(List<Bandwidth> bandwidth) {
97 + this.unreservedBandwidth.addAll(bandwidth);
98 + }
99 +
100 + @Override
101 + public long teDefaultMetric() {
102 + return teDefaultMetric;
103 + }
104 +
105 + @Override
106 + public void setTeDefaultMetric(long teMetric) {
107 + this.teDefaultMetric = teMetric;
108 + }
109 +
110 + @Override
111 + public String toString() {
112 + return MoreObjects.toStringHelper(getClass())
113 + .omitNullValues()
114 + .add("administrativeGroup", administrativeGroup)
115 + .add("ipv4InterfaceAddress", ipv4InterfaceAddress)
116 + .add("ipv4NeighborAddress", ipv4NeighborAddress)
117 + .add("maximumLinkBandwidth", maximumLinkBandwidth)
118 + .add("maximumReservableLinkBandwidth", maximumReservableLinkBandwidth)
119 + .add("teDefaultMetric", teDefaultMetric)
120 + .toString();
121 + }
122 +
123 + @Override
124 + public boolean equals(Object o) {
125 + if (this == o) {
126 + return true;
127 + }
128 + if (o == null || getClass() != o.getClass()) {
129 + return false;
130 + }
131 + DefaultIsisLinkTed that = (DefaultIsisLinkTed) o;
132 + return Objects.equal(administrativeGroup, that.administrativeGroup) &&
133 + Objects.equal(ipv4InterfaceAddress, that.ipv4InterfaceAddress) &&
134 + Objects.equal(ipv4NeighborAddress, that.ipv4NeighborAddress) &&
135 + Objects.equal(maximumLinkBandwidth, that.maximumLinkBandwidth) &&
136 + Objects.equal(maximumReservableLinkBandwidth,
137 + that.maximumReservableLinkBandwidth) &&
138 + Objects.equal(teDefaultMetric, that.teDefaultMetric);
139 + }
140 +
141 + @Override
142 + public int hashCode() {
143 + return Objects.hashCode(administrativeGroup, ipv4InterfaceAddress,
144 + ipv4NeighborAddress, maximumLinkBandwidth, teDefaultMetric);
145 + }
146 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2015 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 +package org.onosproject.isis.controller.impl.topology;
18 +
19 +import com.google.common.base.MoreObjects;
20 +import com.google.common.base.Objects;
21 +import org.onlab.packet.Ip4Address;
22 +import org.onosproject.isis.controller.topology.IsisRouter;
23 +
24 +/**
25 + * Representation of an ISIS Router.
26 + */
27 +public class DefaultIsisRouter implements IsisRouter {
28 +
29 + private String systemId;
30 + private Ip4Address neighborRouterId;
31 + private Ip4Address interfaceId;
32 + private boolean isDis;
33 +
34 + /**
35 + * Gets the system ID.
36 + *
37 + * @return systemId system ID
38 + */
39 + public String systemId() {
40 + return systemId;
41 + }
42 +
43 + /**
44 + * Sets IP address of the Router.
45 + */
46 + public void setSystemId(String systemId) {
47 + this.systemId = systemId;
48 + }
49 +
50 + /**
51 + * Gets IP address of the interface.
52 + *
53 + * @return IP address of the interface
54 + */
55 + public Ip4Address interfaceId() {
56 + return interfaceId;
57 + }
58 +
59 + /**
60 + * Gets IP address of the interface.
61 + *
62 + * @param interfaceId IP address of the interface
63 + */
64 + public void setInterfaceId(Ip4Address interfaceId) {
65 + this.interfaceId = interfaceId;
66 + }
67 +
68 + /**
69 + * Gets neighbor's Router id.
70 + *
71 + * @return neighbor's Router id
72 + */
73 + public Ip4Address neighborRouterId() {
74 + return neighborRouterId;
75 + }
76 +
77 + /**
78 + * Sets neighbor's Router id.
79 + *
80 + * @param advertisingRouterId neighbor's Router id
81 + */
82 + public void setNeighborRouterId(Ip4Address advertisingRouterId) {
83 + this.neighborRouterId = advertisingRouterId;
84 + }
85 +
86 + /**
87 + * Gets if DR or not.
88 + *
89 + * @return true if DR else false
90 + */
91 + public boolean isDis() {
92 + return isDis;
93 + }
94 +
95 + /**
96 + * Sets dis or not.
97 + *
98 + * @param dis true if DIS else false
99 + */
100 + public void setDis(boolean dis) {
101 + isDis = dis;
102 + }
103 +
104 + @Override
105 + public String toString() {
106 + return MoreObjects.toStringHelper(getClass())
107 + .omitNullValues()
108 + .add("systemId", systemId)
109 + .add("neighborRouterId", neighborRouterId)
110 + .add("interfaceId", interfaceId)
111 + .toString();
112 + }
113 +
114 + @Override
115 + public boolean equals(Object o) {
116 + if (this == o) {
117 + return true;
118 + }
119 + if (o == null || getClass() != o.getClass()) {
120 + return false;
121 + }
122 + DefaultIsisRouter that = (DefaultIsisRouter) o;
123 + return Objects.equal(systemId, that.systemId) &&
124 + Objects.equal(neighborRouterId, that.neighborRouterId) &&
125 + Objects.equal(interfaceId, that.interfaceId);
126 + }
127 +
128 + @Override
129 + public int hashCode() {
130 + return Objects.hashCode(systemId, neighborRouterId, interfaceId);
131 + }
132 +}
...\ 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.isis.controller.impl.topology;
17 +
18 +import org.onlab.util.Bandwidth;
19 +import org.onosproject.isis.controller.topology.DeviceInformation;
20 +import org.onosproject.isis.controller.topology.IsisRouter;
21 +import org.onosproject.isis.controller.topology.LinkInformation;
22 +import org.onosproject.isis.controller.topology.TopologyForDeviceAndLink;
23 +import org.onosproject.isis.controller.topology.IsisLinkTed;
24 +import org.onosproject.isis.io.isispacket.pdu.LsPdu;
25 +import org.onosproject.isis.io.isispacket.tlv.IpExtendedReachabilityTlv;
26 +import org.onosproject.isis.io.isispacket.tlv.IsExtendedReachability;
27 +import org.onosproject.isis.io.isispacket.tlv.IsisTlv;
28 +import org.onosproject.isis.io.isispacket.tlv.NeighborForExtendedIs;
29 +import org.onosproject.isis.io.isispacket.tlv.subtlv.AdministrativeGroup;
30 +import org.onosproject.isis.io.isispacket.tlv.subtlv.TrafficEngineeringSubTlv;
31 +import org.onosproject.isis.io.isispacket.tlv.subtlv.InterfaceIpAddress;
32 +import org.onosproject.isis.io.isispacket.tlv.subtlv.NeighborIpAddress;
33 +import org.onosproject.isis.io.isispacket.tlv.subtlv.TrafficEngineeringMetric;
34 +import org.onosproject.isis.io.isispacket.tlv.subtlv.MaximumReservableBandwidth;
35 +import org.onosproject.isis.io.util.IsisConstants;
36 +import org.onosproject.isis.io.util.IsisUtil;
37 +import org.slf4j.Logger;
38 +import org.slf4j.LoggerFactory;
39 +
40 +import java.util.LinkedHashMap;
41 +import java.util.List;
42 +import java.util.Map;
43 +
44 +/**
45 + * Represents device and link topology information.
46 + */
47 +public class TopologyForDeviceAndLinkImpl implements TopologyForDeviceAndLink {
48 +
49 + private static final Logger log = LoggerFactory.getLogger(TopologyForDeviceAndLinkImpl.class);
50 + private Map<String, DeviceInformation> deviceInformationMap = new LinkedHashMap<>();
51 + private Map<String, IsisRouter> isisRouterDetails = new LinkedHashMap<>();
52 + private Map<String, DeviceInformation> deviceInformationMapForPointToPoint = new LinkedHashMap<>();
53 + private Map<String, DeviceInformation> deviceInformationMapToDelete = new LinkedHashMap<>();
54 + private Map<String, LinkInformation> addedLinkInformationMap = new LinkedHashMap<>();
55 + private Map<String, LinkInformation> removeLinkInformationMap = new LinkedHashMap<>();
56 +
57 + /**
58 + * Gets device information.
59 + *
60 + * @return device information
61 + */
62 + public Map<String, DeviceInformation> deviceInformationMap() {
63 + return deviceInformationMap;
64 + }
65 +
66 + /**
67 + * Gets ISIS router list information.
68 + *
69 + * @return router information
70 + */
71 + public Map<String, IsisRouter> isisDeviceList() {
72 + return isisRouterDetails;
73 + }
74 +
75 + /**
76 + * Sets device information.
77 + *
78 + * @param key key used to add in map
79 + * @param deviceInformationMap device information instance
80 + */
81 + public void setDeviceInformationMap(String key, DeviceInformation deviceInformationMap) {
82 + if (deviceInformationMap != null) {
83 + this.deviceInformationMap.put(key, deviceInformationMap);
84 + }
85 +
86 + }
87 +
88 + /**
89 + * Gets deviceInformation as map for Point-To-Point.
90 + *
91 + * @return deviceInformationMap
92 + */
93 + public Map<String, DeviceInformation> deviceInformationMapForPointToPoint() {
94 + return deviceInformationMapForPointToPoint;
95 + }
96 +
97 + /**
98 + * Sets deviceInformation as map for Point-To-Point..
99 + *
100 + * @param key key used to add in map
101 + * @param deviceInformationMap device information instance
102 + */
103 + public void setDeviceInformationMapForPointToPoint(String key, DeviceInformation deviceInformationMap) {
104 + if (deviceInformationMap != null) {
105 + this.deviceInformationMapForPointToPoint.put(key, deviceInformationMap);
106 + }
107 +
108 + }
109 +
110 + /**
111 + * Gets deviceInformation as map.
112 + *
113 + * @return deviceInformationMap to delete from core
114 + */
115 + public Map<String, DeviceInformation> deviceInformationMapToDelete() {
116 + return deviceInformationMapToDelete;
117 + }
118 +
119 + /**
120 + * Sets device information for removal.
121 + *
122 + * @param key ket used to add in map
123 + * @param deviceInformationMapToDelete map from device information to remove
124 + */
125 + public void setDeviceInformationMapToDelete(String key, DeviceInformation deviceInformationMapToDelete) {
126 + if (deviceInformationMapToDelete != null) {
127 + this.deviceInformationMapToDelete.put(key, deviceInformationMapToDelete);
128 + }
129 + }
130 +
131 + /**
132 + * Removes Device Information.
133 + *
134 + * @param key ket used to remove from map
135 + */
136 + public void removeDeviceInformationMapFromDeleteMap(String key) {
137 + removeDeviceInformationMap(key);
138 + if (this.deviceInformationMapToDelete.containsKey(key)) {
139 + this.deviceInformationMapToDelete.remove(key);
140 + }
141 + }
142 +
143 + /**
144 + * Gets Device Information.
145 + *
146 + * @param key system id as key to store in map
147 + * @return Device Information
148 + */
149 + public DeviceInformation deviceInformation(String key) {
150 + DeviceInformation deviceInformation = this.deviceInformationMap.get(key);
151 + return deviceInformation;
152 + }
153 +
154 + /**
155 + * Removes Device Information from map.
156 + *
157 + * @param key key used to remove from map
158 + */
159 + public void removeDeviceInformationMap(String key) {
160 + if (this.deviceInformationMap.containsKey(key)) {
161 + this.deviceInformationMap.remove(key);
162 + }
163 + }
164 +
165 + @Override
166 + public void removeLinks(String linkId) {
167 + this.addedLinkInformationMap.remove(linkId);
168 + }
169 +
170 + /**
171 + * Gets link information as map.
172 + *
173 + * @return link information as map
174 + */
175 + public Map<String, LinkInformation> linkInformationMap() {
176 + return addedLinkInformationMap;
177 + }
178 +
179 + private LinkInformation getLinkInformation(String key) {
180 + LinkInformation linkInformation = this.addedLinkInformationMap.get(key);
181 + return linkInformation;
182 + }
183 +
184 + /**
185 + * Sets link information in map.
186 + *
187 + * @param key key used to add in map
188 + * @param linkInformationMap link information instance
189 + */
190 + public void setLinkInformationMap(String key, LinkInformation linkInformationMap) {
191 + if (!this.addedLinkInformationMap.containsKey(key)) {
192 + this.addedLinkInformationMap.put(key, linkInformationMap);
193 + }
194 + }
195 +
196 + /**
197 + * Gets linkInformation as map for PointToPoint.
198 + *
199 + * @return linkInformationMap
200 + */
201 + public Map<String, LinkInformation> linkInformationMapForPointToPoint() {
202 + return addedLinkInformationMap;
203 + }
204 +
205 + /**
206 + * Sets linkInformation as map for PointToPoint.
207 + *
208 + * @param key key used to add in map
209 + * @param linkInformationMap link information instance
210 + */
211 + public void setLinkInformationMapForPointToPoint(String key, LinkInformation linkInformationMap) {
212 + if (!this.addedLinkInformationMap.containsKey(key)) {
213 + this.addedLinkInformationMap.put(key, linkInformationMap);
214 + }
215 + }
216 +
217 + /**
218 + * Removes Link Information from linkInformationMap.
219 + *
220 + * @param key key used to remove in map
221 + */
222 + public void removeLinkInformationMap(String key) {
223 + if (this.addedLinkInformationMap.containsKey(key)) {
224 + this.addedLinkInformationMap.remove(key);
225 + }
226 + }
227 +
228 + /**
229 + * Creates Device and Link instance.
230 + *
231 + * @param lsPdu ISIS LSPDU instance
232 + *
233 + */
234 +
235 + /**
236 + * Creates Device instance.
237 + *
238 + * @param lsPdu ISIS LSPDU instance
239 + * @return isisRouter isisRouter instance
240 + */
241 + public IsisRouter createDeviceInfo(LsPdu lsPdu) {
242 + IsisRouter isisRouter = createIsisRouter(lsPdu);
243 +
244 + if (isisRouter.systemId() != null) {
245 + if (isisRouter.interfaceId() == null && isisRouter.neighborRouterId() == null) {
246 + isisRouter.setInterfaceId(IsisConstants.DEFAULTIP);
247 + isisRouter.setNeighborRouterId(IsisConstants.DEFAULTIP);
248 + isisRouterDetails.put(isisRouter.systemId(), isisRouter);
249 + }
250 + }
251 + return isisRouter;
252 + }
253 +
254 + /**
255 + * Removes Device and Link instance.
256 + *
257 + * @param lsPdu ISIS LSPDU instance
258 + * @return isisRouter isisRouter instance
259 + */
260 + public IsisRouter removeDeviceAndLinkInfo(LsPdu lsPdu) {
261 + IsisRouter isisRouter = createIsisRouter(lsPdu);
262 + return isisRouter;
263 + }
264 +
265 + /**
266 + * Creates link information.
267 + *
268 + * @param lsPdu ls pdu instance
269 + * @param ownSystemId system ID
270 + * @return link information
271 + */
272 + public Map<String, LinkInformation> createLinkInfo(LsPdu lsPdu, String ownSystemId) {
273 + for (IsisTlv isisTlv : lsPdu.tlvs()) {
274 + if (isisTlv instanceof IsExtendedReachability) {
275 + IsExtendedReachability isExtendedReachability = (IsExtendedReachability) isisTlv;
276 + List<NeighborForExtendedIs> neighborForExtendedIsList = isExtendedReachability.neighbours();
277 + for (NeighborForExtendedIs neighbor : neighborForExtendedIsList) {
278 + String neighbourId = neighbor.neighborId();
279 + String routerId = IsisUtil.removeTailingZeros(lsPdu.lspId());
280 + if (!(neighbourId.equals(ownSystemId))) {
281 + IsisRouter isisRouter = isisRouterDetails.get(neighbourId);
282 + if (isisRouter != null) {
283 + String linkId = "link:" + routerId + "-" + neighbourId;
284 + addedLinkInformationMap.put(linkId, createLinkInformation(lsPdu, linkId,
285 + routerId, neighbourId));
286 + } else {
287 + createIsisRouterDummy(neighbourId);
288 + String linkId = "link:" + routerId + "-" + neighbourId;
289 + LinkInformation linkInformation = createLinkInformation(lsPdu, linkId,
290 + routerId, neighbourId);
291 + linkInformation.setAlreadyCreated(true);
292 + addedLinkInformationMap.put(linkId, linkInformation);
293 + }
294 + }
295 +
296 + }
297 + }
298 + }
299 + return addedLinkInformationMap;
300 + }
301 +
302 + /**
303 + * Removes link information.
304 + *
305 + * @param lsPdu ls pdu instance
306 + * @return updated link information
307 + */
308 + public Map<String, LinkInformation> removeLinkInfo(LsPdu lsPdu) {
309 + String lspId = lsPdu.lspId();
310 + for (String key : addedLinkInformationMap.keySet()) {
311 + if (key.contains(lspId)) {
312 + removeLinkInformationMap.put(key, addedLinkInformationMap.get(key));
313 + }
314 + }
315 + return removeLinkInformationMap;
316 + }
317 +
318 + /**
319 + * Creates link information.
320 + *
321 + * @param lsPdu link state pdu
322 + * @param linkId link id
323 + * @param localRouter local router system id
324 + * @param neighborId destination router system id
325 + * @return linkInformation instance
326 + */
327 + private LinkInformation createLinkInformation(LsPdu lsPdu, String linkId, String localRouter, String neighborId) {
328 + LinkInformation linkInformation = new DefaultIsisLinkInformation();
329 + IsisRouter isisRouter = isisRouterDetails.get(neighborId);
330 + for (IsisTlv isisTlv : lsPdu.tlvs()) {
331 + if (isisTlv instanceof IpExtendedReachabilityTlv) {
332 + IpExtendedReachabilityTlv ipExtendedReachabilityTlv = (IpExtendedReachabilityTlv) isisTlv;
333 + List<TrafficEngineeringSubTlv> trafEnginSubTlv = ipExtendedReachabilityTlv.teTlvs();
334 + for (TrafficEngineeringSubTlv teTlv : trafEnginSubTlv) {
335 + if (teTlv instanceof InterfaceIpAddress) {
336 + InterfaceIpAddress localIpAddress = (InterfaceIpAddress) isisTlv;
337 + linkInformation.setInterfaceIp(localIpAddress.localInterfaceIPAddress());
338 + }
339 +
340 + }
341 + } else {
342 + linkInformation.setInterfaceIp(IsisConstants.DEFAULTIP);
343 + linkInformation.setNeighborIp(IsisConstants.DEFAULTIP);
344 + }
345 + }
346 + linkInformation.setNeighborIp(IsisConstants.DEFAULTIP);
347 + linkInformation.setLinkId(linkId);
348 + linkInformation.setAlreadyCreated(false);
349 + linkInformation.setLinkDestinationId(neighborId);
350 + linkInformation.setLinkSourceId(localRouter);
351 + return linkInformation;
352 + }
353 +
354 + /**
355 + * Creates ISIS router instance.
356 + *
357 + * @param lsPdu lsp instance
358 + * @return isisRouter instance
359 + */
360 + private IsisRouter createIsisRouter(LsPdu lsPdu) {
361 + IsisRouter isisRouter = new DefaultIsisRouter();
362 + if (IsisUtil.checkIsDis(lsPdu.lspId())) {
363 + isisRouter.setDis(true);
364 + } else {
365 + isisRouter.setDis(false);
366 + }
367 + isisRouter.setSystemId(IsisUtil.removeTailingZeros(lsPdu.lspId()));
368 + for (IsisTlv isisTlv : lsPdu.tlvs()) {
369 + if (isisTlv instanceof IpExtendedReachabilityTlv) {
370 + IpExtendedReachabilityTlv ipExtendedReachabilityTlv = (IpExtendedReachabilityTlv) isisTlv;
371 + List<TrafficEngineeringSubTlv> trafEnginSubTlv = ipExtendedReachabilityTlv.teTlvs();
372 + for (TrafficEngineeringSubTlv teTlv : trafEnginSubTlv) {
373 + if (teTlv instanceof InterfaceIpAddress) {
374 + InterfaceIpAddress localIpAddress = (InterfaceIpAddress) isisTlv;
375 + isisRouter.setInterfaceId(localIpAddress.localInterfaceIPAddress());
376 + }
377 + if (teTlv instanceof NeighborIpAddress) {
378 + NeighborIpAddress neighborIpAddress = (NeighborIpAddress) isisTlv;
379 + isisRouter.setNeighborRouterId(neighborIpAddress.neighborIPAddress());
380 + }
381 + }
382 + } else {
383 + log.info("Invalid TLV");
384 + }
385 + }
386 + return isisRouter;
387 + }
388 +
389 + /**
390 + * Creates ISIS router instance.
391 + *
392 + * @param systemId system ID
393 + * @return isisRouter instance
394 + */
395 + private IsisRouter createIsisRouterDummy(String systemId) {
396 + IsisRouter isisRouter = new DefaultIsisRouter();
397 + isisRouter.setSystemId(systemId);
398 + isisRouter.setDis(false);
399 + isisRouter.setInterfaceId(IsisConstants.DEFAULTIP);
400 + isisRouter.setNeighborRouterId(IsisConstants.DEFAULTIP);
401 + return isisRouter;
402 + }
403 +
404 + /**
405 + * Creates the ISIS link TED information.
406 + *
407 + * @param lsPdu link state PDU
408 + * @return isisLinkTed
409 + */
410 + public IsisLinkTed createIsisLinkTedInfo(LsPdu lsPdu) {
411 + IsisLinkTed isisLinkTed = new DefaultIsisLinkTed();
412 + for (IsisTlv isisTlv : lsPdu.tlvs()) {
413 + if (isisTlv instanceof IpExtendedReachabilityTlv) {
414 + IpExtendedReachabilityTlv ipExtendedReachabilityTlv = (IpExtendedReachabilityTlv) isisTlv;
415 + List<TrafficEngineeringSubTlv> trafficEngSubTlv = ipExtendedReachabilityTlv.teTlvs();
416 + for (TrafficEngineeringSubTlv teTlv : trafficEngSubTlv) {
417 + if (teTlv instanceof AdministrativeGroup) {
418 + AdministrativeGroup ag = (AdministrativeGroup) isisTlv;
419 + isisLinkTed.setAdministrativeGroup(ag.administrativeGroup());
420 + }
421 + if (teTlv instanceof TrafficEngineeringMetric) {
422 + TrafficEngineeringMetric teM = (TrafficEngineeringMetric) isisTlv;
423 + isisLinkTed.setTeDefaultMetric(teM.getTrafficEngineeringMetricValue());
424 + }
425 + if (teTlv instanceof MaximumReservableBandwidth) {
426 + MaximumReservableBandwidth reservableBw = (MaximumReservableBandwidth) isisTlv;
427 + isisLinkTed.setMaximumReservableLinkBandwidth(
428 + Bandwidth.bps(reservableBw.getMaximumBandwidthValue()));
429 + }
430 + }
431 + } else {
432 + log.debug("TLV type not supported");
433 + }
434 + }
435 + return isisLinkTed;
436 + }
437 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present 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 ISIS controller topology.
19 + */
20 +package org.onosproject.isis.controller.impl.topology;
...\ No newline at end of file ...\ No newline at end of file
...@@ -90,7 +90,6 @@ public class LsPdu extends IsisHeader { ...@@ -90,7 +90,6 @@ public class LsPdu extends IsisHeader {
90 90
91 /** 91 /**
92 * Creates an instance of Link State packet. 92 * Creates an instance of Link State packet.
93 - * Parameterized constructor which populate
94 * 93 *
95 * @param isisHeader isis header details 94 * @param isisHeader isis header details
96 */ 95 */
...@@ -99,6 +98,15 @@ public class LsPdu extends IsisHeader { ...@@ -99,6 +98,15 @@ public class LsPdu extends IsisHeader {
99 } 98 }
100 99
101 /** 100 /**
101 + * Returns the ISIS tlvs.
102 + *
103 + * @return tlvs
104 + */
105 + public List<IsisTlv> tlvs() {
106 + return this.variableLengths;
107 + }
108 +
109 + /**
102 * Adds the isis tlv to the list for the link state PDU. 110 * Adds the isis tlv to the list for the link state PDU.
103 * 111 *
104 * @param isisTlv isis tlv 112 * @param isisTlv isis tlv
......
...@@ -52,6 +52,15 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv { ...@@ -52,6 +52,15 @@ public class IpExtendedReachabilityTlv extends TlvHeader implements IsisTlv {
52 } 52 }
53 53
54 /** 54 /**
55 + * Returns list of traffic engineering sub tlvs.
56 + *
57 + * @return trafEnginSubTlv
58 + */
59 + public List<TrafficEngineeringSubTlv> teTlvs() {
60 + return this.trafEnginSubTlv;
61 + }
62 +
63 + /**
55 * Returns the prefix of IP external reachability TLV. 64 * Returns the prefix of IP external reachability TLV.
56 * 65 *
57 * @return prefix 66 * @return prefix
......
...@@ -41,6 +41,15 @@ public class IsExtendedReachability extends TlvHeader implements IsisTlv { ...@@ -41,6 +41,15 @@ public class IsExtendedReachability extends TlvHeader implements IsisTlv {
41 } 41 }
42 42
43 /** 43 /**
44 + * Returns neighbor list.
45 + *
46 + * @return neighbor list
47 + */
48 + public List<NeighborForExtendedIs> neighbours() {
49 + return neighbors;
50 + }
51 +
52 + /**
44 * Adds the neighbor for extended IS instance to IS extended reachability TLV. 53 * Adds the neighbor for extended IS instance to IS extended reachability TLV.
45 * 54 *
46 * @param neighbor neighbor for extended IS instance 55 * @param neighbor neighbor for extended IS instance
......
1 /* 1 /*
2 - * Copyright 2016-present Open Networking Laboratory 2 +* Copyright 2016-present Open Networking Laboratory
3 - * 3 +*
4 - * Licensed under the Apache License, Version 2.0 (the "License"); 4 +* Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with 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 6 +* You may obtain a copy of the License at
7 - * 7 +*
8 - * http://www.apache.org/licenses/LICENSE-2.0 8 +* http://www.apache.org/licenses/LICENSE-2.0
9 - * 9 +*
10 - * Unless required by applicable law or agreed to in writing, software 10 +* Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS, 11 +* distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and 13 +* See the License for the specific language governing permissions and
14 - * limitations under the License. 14 +* limitations under the License.
15 - */ 15 +*/
16 package org.onosproject.isis.io.isispacket.tlv.subtlv; 16 package org.onosproject.isis.io.isispacket.tlv.subtlv;
17 17
18 import com.google.common.base.MoreObjects; 18 import com.google.common.base.MoreObjects;
...@@ -32,8 +32,8 @@ import java.util.List; ...@@ -32,8 +32,8 @@ import java.util.List;
32 */ 32 */
33 public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringSubTlv { 33 public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringSubTlv {
34 private static final Logger log = 34 private static final Logger log =
35 - LoggerFactory.getLogger(InterfaceIpAddress.class); 35 + LoggerFactory.getLogger(NeighborIpAddress.class);
36 - private List<Ip4Address> localInterfaceIPAddress = new ArrayList<>(); 36 + private Ip4Address localInterfaceIPAddress;
37 37
38 /** 38 /**
39 * Creates an instance of local interface ip address. 39 * Creates an instance of local interface ip address.
...@@ -50,16 +50,16 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS ...@@ -50,16 +50,16 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS
50 * 50 *
51 * @param localAddress ip address 51 * @param localAddress ip address
52 */ 52 */
53 - public void addLocalInterfaceIPAddress(Ip4Address localAddress) { 53 + public void setIpAddress(Ip4Address localAddress) {
54 - localInterfaceIPAddress.add(localAddress); 54 + this.localInterfaceIPAddress = localAddress;
55 } 55 }
56 56
57 /** 57 /**
58 - * Returns local interface ip address. 58 + * Gets local interface ip address.
59 * 59 *
60 * @return localAddress ip address 60 * @return localAddress ip address
61 */ 61 */
62 - public List<Ip4Address> getLocalInterfaceIPAddress() { 62 + public Ip4Address localInterfaceIPAddress() {
63 return localInterfaceIPAddress; 63 return localInterfaceIPAddress;
64 } 64 }
65 65
...@@ -72,17 +72,19 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS ...@@ -72,17 +72,19 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS
72 while (channelBuffer.readableBytes() >= IsisUtil.FOUR_BYTES) { 72 while (channelBuffer.readableBytes() >= IsisUtil.FOUR_BYTES) {
73 byte[] tempByteArray = new byte[IsisUtil.FOUR_BYTES]; 73 byte[] tempByteArray = new byte[IsisUtil.FOUR_BYTES];
74 channelBuffer.readBytes(tempByteArray, 0, IsisUtil.FOUR_BYTES); 74 channelBuffer.readBytes(tempByteArray, 0, IsisUtil.FOUR_BYTES);
75 - this.addLocalInterfaceIPAddress(Ip4Address.valueOf(tempByteArray)); 75 + this.setIpAddress(Ip4Address.valueOf(tempByteArray));
76 +
76 } 77 }
77 } 78 }
78 79
79 /** 80 /**
80 - * Returns local interface ip address as byte array. 81 + * Gets local interface ip address as byte array.
81 * 82 *
82 * @return local interface ip address as byte array 83 * @return local interface ip address as byte array
83 */ 84 */
84 public byte[] asBytes() { 85 public byte[] asBytes() {
85 byte[] linkSubType = null; 86 byte[] linkSubType = null;
87 +
86 byte[] linkSubTlvHeader = tlvHeaderAsByteArray(); 88 byte[] linkSubTlvHeader = tlvHeaderAsByteArray();
87 byte[] linkSubTlvBody = tlvBodyAsBytes(); 89 byte[] linkSubTlvBody = tlvBodyAsBytes();
88 linkSubType = Bytes.concat(linkSubTlvHeader, linkSubTlvBody); 90 linkSubType = Bytes.concat(linkSubTlvHeader, linkSubTlvBody);
...@@ -91,15 +93,16 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS ...@@ -91,15 +93,16 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS
91 } 93 }
92 94
93 /** 95 /**
94 - * Returns byte array of local interface ip address. 96 + * Gets byte array of local interface ip address.
95 * 97 *
96 * @return byte array of local interface ip address 98 * @return byte array of local interface ip address
97 */ 99 */
98 public byte[] tlvBodyAsBytes() { 100 public byte[] tlvBodyAsBytes() {
101 +
99 List<Byte> linkSubTypeBody = new ArrayList<>(); 102 List<Byte> linkSubTypeBody = new ArrayList<>();
100 - for (Ip4Address remoteAddress : this.localInterfaceIPAddress) { 103 +
101 - linkSubTypeBody.addAll(Bytes.asList(remoteAddress.toOctets())); 104 + linkSubTypeBody.addAll(Bytes.asList(this.localInterfaceIPAddress.toOctets()));
102 - } 105 +
103 106
104 return Bytes.toArray(linkSubTypeBody); 107 return Bytes.toArray(linkSubTypeBody);
105 } 108 }
...@@ -111,4 +114,4 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS ...@@ -111,4 +114,4 @@ public class InterfaceIpAddress extends TlvHeader implements TrafficEngineeringS
111 .add("localInterfaceIPAddress", localInterfaceIPAddress) 114 .add("localInterfaceIPAddress", localInterfaceIPAddress)
112 .toString(); 115 .toString();
113 } 116 }
114 -} 117 +}
...\ No newline at end of file ...\ No newline at end of file
......
1 +/*
2 +* Copyright 2016-present 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.isis.io.isispacket.tlv.subtlv;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import com.google.common.base.Objects;
20 +import com.google.common.primitives.Bytes;
21 +import org.jboss.netty.buffer.ChannelBuffer;
22 +import org.onlab.packet.Ip4Address;
23 +import org.onosproject.isis.io.isispacket.tlv.TlvHeader;
24 +import org.onosproject.isis.io.util.IsisUtil;
25 +import org.slf4j.Logger;
26 +import org.slf4j.LoggerFactory;
27 +
28 +import java.util.ArrayList;
29 +import java.util.List;
30 +
31 +/**
32 + * Representation of neighbor ip address TE value.
33 + */
34 +public class NeighborIpAddress extends TlvHeader implements TrafficEngineeringSubTlv {
35 + private static final Logger log =
36 + LoggerFactory.getLogger(NeighborIpAddress.class);
37 + private Ip4Address neighborIPAddress;
38 +
39 + /**
40 + * Creates an instance of neighbor ip address.
41 + *
42 + * @param header tlv header instance
43 + */
44 + public NeighborIpAddress(TlvHeader header) {
45 + this.setTlvType(header.tlvType());
46 + this.setTlvLength(header.tlvLength());
47 + }
48 +
49 + /**
50 + * Sets the neighbor ip address.
51 + *
52 + * @param neighborIPAddress ip address
53 + */
54 + public void setIpAddress(Ip4Address neighborIPAddress) {
55 + this.neighborIPAddress = neighborIPAddress;
56 + }
57 +
58 + /**
59 + * Gets the neighbor ip address.
60 + *
61 + * @return neighbor ip address
62 + */
63 + public Ip4Address neighborIPAddress() {
64 + return neighborIPAddress;
65 + }
66 +
67 + /**
68 + * Reads bytes from channel buffer.
69 + *
70 + * @param channelBuffer channel buffer instance
71 + */
72 + public void readFrom(ChannelBuffer channelBuffer) {
73 + while (channelBuffer.readableBytes() >= IsisUtil.FOUR_BYTES) {
74 + byte[] tempByteArray = new byte[IsisUtil.FOUR_BYTES];
75 + channelBuffer.readBytes(tempByteArray, 0, IsisUtil.FOUR_BYTES);
76 + this.setIpAddress(Ip4Address.valueOf(tempByteArray));
77 +
78 + }
79 + }
80 +
81 + /**
82 + * Gets the neighbor ip address as byte array.
83 + *
84 + * @return neighbor ip address as byte array
85 + */
86 + public byte[] asBytes() {
87 + byte[] linkSubType = null;
88 +
89 + byte[] linkSubTlvHeader = tlvHeaderAsByteArray();
90 + byte[] linkSubTlvBody = tlvBodyAsBytes();
91 + linkSubType = Bytes.concat(linkSubTlvHeader, linkSubTlvBody);
92 +
93 + return linkSubType;
94 + }
95 +
96 + /**
97 + * Gets byte array of neighborIPAddress.
98 + *
99 + * @return byte array of neighborIPAddress
100 + */
101 + public byte[] tlvBodyAsBytes() {
102 +
103 + List<Byte> linkSubTypeBody = new ArrayList<>();
104 +
105 + linkSubTypeBody.addAll(Bytes.asList(this.neighborIPAddress.toOctets()));
106 +
107 +
108 + return Bytes.toArray(linkSubTypeBody);
109 + }
110 +
111 + @Override
112 + public boolean equals(Object o) {
113 + if (this == o) {
114 + return true;
115 + }
116 + if (o == null || getClass() != o.getClass()) {
117 + return false;
118 + }
119 + NeighborIpAddress that = (NeighborIpAddress) o;
120 + return Objects.equal(neighborIPAddress, that.neighborIPAddress);
121 + }
122 +
123 + @Override
124 + public int hashCode() {
125 + return Objects.hashCode(neighborIPAddress);
126 + }
127 +
128 + @Override
129 + public String toString() {
130 + return MoreObjects.toStringHelper(getClass())
131 + .omitNullValues()
132 + .add("localInterfaceIPAddress", neighborIPAddress)
133 + .toString();
134 + }
135 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -67,7 +67,7 @@ public final class SubTlvFinder { ...@@ -67,7 +67,7 @@ public final class SubTlvFinder {
67 subTlv = unreservedBandwidth; 67 subTlv = unreservedBandwidth;
68 break; 68 break;
69 case INTERFACEADDRESS: 69 case INTERFACEADDRESS:
70 - InterfaceIpAddress ipInterfaceAddressTlv = new InterfaceIpAddress(tlvHeader); 70 + NeighborIpAddress ipInterfaceAddressTlv = new NeighborIpAddress(tlvHeader);
71 ipInterfaceAddressTlv.readFrom(channelBuffer); 71 ipInterfaceAddressTlv.readFrom(channelBuffer);
72 subTlv = ipInterfaceAddressTlv; 72 subTlv = ipInterfaceAddressTlv;
73 break; 73 break;
......
...@@ -60,8 +60,8 @@ public final class SubTlvToBytes { ...@@ -60,8 +60,8 @@ public final class SubTlvToBytes {
60 } else if (subTlv instanceof UnreservedBandwidth) { 60 } else if (subTlv instanceof UnreservedBandwidth) {
61 UnreservedBandwidth unreservedBandwidth = (UnreservedBandwidth) subTlv; 61 UnreservedBandwidth unreservedBandwidth = (UnreservedBandwidth) subTlv;
62 subTlvBytes.addAll(Bytes.asList(unreservedBandwidth.asBytes())); 62 subTlvBytes.addAll(Bytes.asList(unreservedBandwidth.asBytes()));
63 - } else if (subTlv instanceof InterfaceIpAddress) { 63 + } else if (subTlv instanceof NeighborIpAddress) {
64 - InterfaceIpAddress interfaceIpAddress = (InterfaceIpAddress) subTlv; 64 + NeighborIpAddress interfaceIpAddress = (NeighborIpAddress) subTlv;
65 subTlvBytes.addAll(Bytes.asList(interfaceIpAddress.asBytes())); 65 subTlvBytes.addAll(Bytes.asList(interfaceIpAddress.asBytes()));
66 } else { 66 } else {
67 log.debug("TlvsToBytes::UNKNOWN TLV TYPE ::TlvsToBytes "); 67 log.debug("TlvsToBytes::UNKNOWN TLV TYPE ::TlvsToBytes ");
......
...@@ -44,6 +44,10 @@ public enum SubTlvType { ...@@ -44,6 +44,10 @@ public enum SubTlvType {
44 */ 44 */
45 INTERFACEADDRESS(6), 45 INTERFACEADDRESS(6),
46 /** 46 /**
47 + * Represents traffic engineering neighbor address TLV.
48 + */
49 + NEIGHBORADDRESS(8),
50 + /**
47 * Represents traffic engineering unreserved bandwidth TLV. 51 * Represents traffic engineering unreserved bandwidth TLV.
48 */ 52 */
49 UNRESERVEDBANDWIDTH(11); 53 UNRESERVEDBANDWIDTH(11);
......
...@@ -65,6 +65,9 @@ public final class IsisConstants { ...@@ -65,6 +65,9 @@ public final class IsisConstants {
65 public static final String AREAADDRESS = "areaAddress"; 65 public static final String AREAADDRESS = "areaAddress";
66 public static final String HOLDINGTIME = "holdingTime"; 66 public static final String HOLDINGTIME = "holdingTime";
67 public static final String HELLOINTERVAL = "helloInterval"; 67 public static final String HELLOINTERVAL = "helloInterval";
68 + public static final int PORT = 7000;
69 + public static final String LSPADDED = "LSP_ADDED";
70 + public static final String LSPREMOVED = "LSP_REMOVED";
68 71
69 /** 72 /**
70 * Non parameterized constructor. 73 * Non parameterized constructor.
......
...@@ -726,4 +726,37 @@ public final class IsisUtil { ...@@ -726,4 +726,37 @@ public final class IsisUtil {
726 } 726 }
727 return Bytes.toArray(byteList); 727 return Bytes.toArray(byteList);
728 } 728 }
729 +
730 + /**
731 + * Return the DIS value from the systemId.
732 + *
733 + * @param systemId system Id.
734 + * @return return true if DIS else false
735 + */
736 + public static boolean checkIsDis(String systemId) {
737 + StringTokenizer stringTokenizer = new StringTokenizer(systemId, "." + "-");
738 + int count = 0;
739 + while (stringTokenizer.hasMoreTokens()) {
740 + String str = stringTokenizer.nextToken();
741 + if (count == 3) {
742 + int x = Integer.parseInt(str);
743 + if (x > 0) {
744 + return true;
745 + }
746 + }
747 + count++;
748 + }
749 + return false;
750 + }
751 +
752 + /**
753 + * Return the systemId.
754 + *
755 + * @param systemId system Id.
756 + * @return return system ID
757 + */
758 + public static String removeTailingZeros(String systemId) {
759 + StringTokenizer stringTokenizer = new StringTokenizer(systemId, "-");
760 + return stringTokenizer.nextToken();
761 + }
729 } 762 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -33,7 +33,7 @@ import static org.hamcrest.Matchers.notNullValue; ...@@ -33,7 +33,7 @@ import static org.hamcrest.Matchers.notNullValue;
33 public class InterfaceIpAddressTest { 33 public class InterfaceIpAddressTest {
34 private final byte[] packet = {1, 1, 1, 1}; 34 private final byte[] packet = {1, 1, 1, 1};
35 private final byte[] packet1 = {}; 35 private final byte[] packet1 = {};
36 - private InterfaceIpAddress interfaceIpAddress; 36 + private NeighborIpAddress interfaceIpAddress;
37 private TlvHeader tlvHeader; 37 private TlvHeader tlvHeader;
38 private Ip4Address ip4Address = Ip4Address.valueOf("1.1.1.1"); 38 private Ip4Address ip4Address = Ip4Address.valueOf("1.1.1.1");
39 private byte[] result; 39 private byte[] result;
...@@ -41,7 +41,7 @@ public class InterfaceIpAddressTest { ...@@ -41,7 +41,7 @@ public class InterfaceIpAddressTest {
41 41
42 @Before 42 @Before
43 public void setUp() throws Exception { 43 public void setUp() throws Exception {
44 - interfaceIpAddress = new InterfaceIpAddress(new TlvHeader()); 44 + interfaceIpAddress = new NeighborIpAddress(new TlvHeader());
45 } 45 }
46 46
47 @After 47 @After
...@@ -61,15 +61,6 @@ public class InterfaceIpAddressTest { ...@@ -61,15 +61,6 @@ public class InterfaceIpAddressTest {
61 } 61 }
62 62
63 /** 63 /**
64 - * Tests addLocalInterfaceIPAddress() method.
65 - */
66 - @Test
67 - public void testAddLocalInterfaceIPAddress() throws Exception {
68 - interfaceIpAddress.addLocalInterfaceIPAddress(ip4Address);
69 - assertThat(interfaceIpAddress, is(notNullValue()));
70 - }
71 -
72 - /**
73 * Tests readFrom() method. 64 * Tests readFrom() method.
74 */ 65 */
75 @Test 66 @Test
...@@ -77,7 +68,7 @@ public class InterfaceIpAddressTest { ...@@ -77,7 +68,7 @@ public class InterfaceIpAddressTest {
77 tlvHeader = new TlvHeader(); 68 tlvHeader = new TlvHeader();
78 tlvHeader.setTlvType(3); 69 tlvHeader.setTlvType(3);
79 tlvHeader.setTlvLength(4); 70 tlvHeader.setTlvLength(4);
80 - interfaceIpAddress = new InterfaceIpAddress(tlvHeader); 71 + interfaceIpAddress = new NeighborIpAddress(tlvHeader);
81 channelBuffer = ChannelBuffers.copiedBuffer(packet); 72 channelBuffer = ChannelBuffers.copiedBuffer(packet);
82 interfaceIpAddress.readFrom(channelBuffer); 73 interfaceIpAddress.readFrom(channelBuffer);
83 assertThat(interfaceIpAddress, is(notNullValue())); 74 assertThat(interfaceIpAddress, is(notNullValue()));
...@@ -91,27 +82,11 @@ public class InterfaceIpAddressTest { ...@@ -91,27 +82,11 @@ public class InterfaceIpAddressTest {
91 tlvHeader = new TlvHeader(); 82 tlvHeader = new TlvHeader();
92 tlvHeader.setTlvType(3); 83 tlvHeader.setTlvType(3);
93 tlvHeader.setTlvLength(4); 84 tlvHeader.setTlvLength(4);
94 - interfaceIpAddress = new InterfaceIpAddress(tlvHeader); 85 + interfaceIpAddress = new NeighborIpAddress(tlvHeader);
95 channelBuffer = ChannelBuffers.copiedBuffer(packet1); 86 channelBuffer = ChannelBuffers.copiedBuffer(packet1);
96 interfaceIpAddress.readFrom(channelBuffer); 87 interfaceIpAddress.readFrom(channelBuffer);
97 assertThat(interfaceIpAddress, is(notNullValue())); 88 assertThat(interfaceIpAddress, is(notNullValue()));
98 } 89 }
99 90
100 - /**
101 - * Tests asBytes() method.
102 - */
103 - @Test
104 - public void testAsBytes() throws Exception {
105 - result = interfaceIpAddress.asBytes();
106 - assertThat(result, is(notNullValue()));
107 - }
108 91
109 - /**
110 - * Tests getLinkSubTypeTlvBodyAsByteArray() method.
111 - */
112 - @Test
113 - public void testGetLinkSubTypeTlvBodyAsByteArray() throws Exception {
114 - result = interfaceIpAddress.tlvBodyAsBytes();
115 - assertThat(result, is(notNullValue()));
116 - }
117 } 92 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -3,7 +3,7 @@ BUNDLES = [ ...@@ -3,7 +3,7 @@ BUNDLES = [
3 '//protocols/isis/ctl:onos-protocols-isis-ctl', 3 '//protocols/isis/ctl:onos-protocols-isis-ctl',
4 '//protocols/isis/isisio:onos-protocols-isis-isisio', 4 '//protocols/isis/isisio:onos-protocols-isis-isisio',
5 '//providers/isis/cfg:onos-providers-isis-cfg', 5 '//providers/isis/cfg:onos-providers-isis-cfg',
6 - '//providers/isis/device:onos-providers-isis-device', 6 + '//providers/isis/topology:onos-providers-isis-topology',
7 ] 7 ]
8 8
9 onos_app ( 9 onos_app (
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
21 <artifact>mvn:${project.groupId}/onos-isis-api/${project.version}</artifact> 21 <artifact>mvn:${project.groupId}/onos-isis-api/${project.version}</artifact>
22 <artifact>mvn:${project.groupId}/onos-isis-isisio/${project.version}</artifact> 22 <artifact>mvn:${project.groupId}/onos-isis-isisio/${project.version}</artifact>
23 <artifact>mvn:${project.groupId}/onos-isis-ctl/${project.version}</artifact> 23 <artifact>mvn:${project.groupId}/onos-isis-ctl/${project.version}</artifact>
24 - <artifact>mvn:${project.groupId}/onos-isis-provider-device/${project.version}</artifact> 24 + <artifact>mvn:${project.groupId}/onos-isis-provider-topology/${project.version}</artifact>
25 <artifact>mvn:${project.groupId}/onos-isis-provider-cfg/${project.version}</artifact> 25 <artifact>mvn:${project.groupId}/onos-isis-provider-cfg/${project.version}</artifact>
26 + <artifact>mvn:${project.groupId}/onos-isis-provider-cli/${project.version}</artifact>
26 </app> 27 </app>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -15,13 +15,15 @@ ...@@ -15,13 +15,15 @@
15 ~ limitations under the License. 15 ~ limitations under the License.
16 --> 16 -->
17 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}"> 17 <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
18 + <repository>mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features</repository>
18 <feature name="${project.artifactId}" version="${project.version}" 19 <feature name="${project.artifactId}" version="${project.version}"
19 description="${project.description}"> 20 description="${project.description}">
20 <feature>onos-api</feature> 21 <feature>onos-api</feature>
21 <bundle>mvn:${project.groupId}/onos-isis-api/${project.version}</bundle> 22 <bundle>mvn:${project.groupId}/onos-isis-api/${project.version}</bundle>
22 <bundle>mvn:${project.groupId}/onos-isis-isisio/${project.version}</bundle> 23 <bundle>mvn:${project.groupId}/onos-isis-isisio/${project.version}</bundle>
23 <bundle>mvn:${project.groupId}/onos-isis-ctl/${project.version}</bundle> 24 <bundle>mvn:${project.groupId}/onos-isis-ctl/${project.version}</bundle>
24 - <bundle>mvn:${project.groupId}/onos-isis-provider-device/${project.version}</bundle> 25 + <bundle>mvn:${project.groupId}/onos-isis-provider-topology/${project.version}</bundle>
25 <bundle>mvn:${project.groupId}/onos-isis-provider-cfg/${project.version}</bundle> 26 <bundle>mvn:${project.groupId}/onos-isis-provider-cfg/${project.version}</bundle>
27 + <bundle>mvn:${project.groupId}/onos-isis-provider-cli/${project.version}</bundle>
26 </feature> 28 </feature>
27 -</features> 29 +</features>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
49 </dependency> 49 </dependency>
50 <dependency> 50 <dependency>
51 <groupId>org.onosproject</groupId> 51 <groupId>org.onosproject</groupId>
52 - <artifactId>onos-isis-provider-device</artifactId> 52 + <artifactId>onos-isis-provider-topology</artifactId>
53 <version>${project.version}</version> 53 <version>${project.version}</version>
54 </dependency> 54 </dependency>
55 <dependency> 55 <dependency>
...@@ -57,5 +57,10 @@ ...@@ -57,5 +57,10 @@
57 <artifactId>onos-isis-provider-cfg</artifactId> 57 <artifactId>onos-isis-provider-cfg</artifactId>
58 <version>${project.version}</version> 58 <version>${project.version}</version>
59 </dependency> 59 </dependency>
60 + <dependency>
61 + <groupId>org.onosproject</groupId>
62 + <artifactId>onos-isis-provider-cli</artifactId>
63 + <version>${project.version}</version>
64 + </dependency>
60 </dependencies> 65 </dependencies>
61 -</project>
...\ No newline at end of file ...\ No newline at end of file
66 +</project>
......
1 -/*
2 - * Copyright 2016-present 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 -package org.onosproject.provider.isis.device.impl;
18 -
19 -import org.apache.felix.scr.annotations.Activate;
20 -import org.apache.felix.scr.annotations.Component;
21 -import org.apache.felix.scr.annotations.Deactivate;
22 -import org.apache.felix.scr.annotations.Reference;
23 -import org.apache.felix.scr.annotations.ReferenceCardinality;
24 -import org.onosproject.isis.controller.IsisController;
25 -import org.onosproject.net.provider.AbstractProvider;
26 -import org.onosproject.net.provider.ProviderId;
27 -import org.slf4j.Logger;
28 -
29 -import static org.slf4j.LoggerFactory.getLogger;
30 -
31 -/**
32 - * Provider which advertises device descriptions to the core.
33 - */
34 -@Component(immediate = true)
35 -public class IsisTopologyProvider extends AbstractProvider {
36 -
37 - private static final Logger log = getLogger(IsisTopologyProvider.class);
38 - final InternalDeviceProvider listener = new InternalDeviceProvider();
39 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
40 - private IsisController isisController;
41 -
42 -
43 - /**
44 - * Creates an ISIS device provider.
45 - */
46 - public IsisTopologyProvider() {
47 - super(new ProviderId("isis", "org.onosproject.provider.isis"));
48 - }
49 -
50 - @Activate
51 - public void activate() {
52 - log.debug("Activate...!!!");
53 - }
54 -
55 - @Deactivate
56 - public void deactivate() {
57 - log.debug("Deactivate...!!!");
58 - }
59 -
60 - /**
61 - * Internal device provider implementation.
62 - */
63 - private class InternalDeviceProvider {
64 -
65 - }
66 -}
...@@ -32,10 +32,10 @@ ...@@ -32,10 +32,10 @@
32 <description>ONOS ISIS protocol adapters</description> 32 <description>ONOS ISIS protocol adapters</description>
33 33
34 <modules> 34 <modules>
35 - <module>device</module>
36 <module>app</module> 35 <module>app</module>
37 <module>cfg</module> 36 <module>cfg</module>
38 <module>cli</module> 37 <module>cli</module>
38 + <module>topology</module>
39 </modules> 39 </modules>
40 40
41 <dependencies> 41 <dependencies>
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
26 <relativePath>../pom.xml</relativePath> 26 <relativePath>../pom.xml</relativePath>
27 </parent> 27 </parent>
28 28
29 - <artifactId>onos-isis-provider-device</artifactId> 29 + <artifactId>onos-isis-provider-topology</artifactId>
30 <packaging>bundle</packaging> 30 <packaging>bundle</packaging>
31 31
32 <description>ONOS ISIS Providers</description> 32 <description>ONOS ISIS Providers</description>
......
1 +/*
2 + * Copyright 2016-present 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 +package org.onosproject.provider.isis.topology.impl;
18 +
19 +import org.apache.felix.scr.annotations.Activate;
20 +import org.apache.felix.scr.annotations.Component;
21 +import org.apache.felix.scr.annotations.Deactivate;
22 +import org.apache.felix.scr.annotations.Reference;
23 +import org.apache.felix.scr.annotations.ReferenceCardinality;
24 +import org.onlab.packet.ChassisId;
25 +import org.onlab.util.Bandwidth;
26 +import org.onosproject.isis.controller.IsisController;
27 +import org.onosproject.isis.controller.topology.IsisLink;
28 +import org.onosproject.isis.controller.topology.IsisLinkListener;
29 +import org.onosproject.isis.controller.topology.IsisLinkTed;
30 +import org.onosproject.isis.controller.topology.IsisRouter;
31 +import org.onosproject.isis.controller.topology.IsisRouterId;
32 +import org.onosproject.isis.controller.topology.IsisRouterListener;
33 +import org.onosproject.net.AnnotationKeys;
34 +import org.onosproject.net.ConnectPoint;
35 +import org.onosproject.net.DefaultAnnotations;
36 +import org.onosproject.net.Device;
37 +import org.onosproject.net.DeviceId;
38 +import org.onosproject.net.Link;
39 +import org.onosproject.net.MastershipRole;
40 +import org.onosproject.net.PortNumber;
41 +import org.onosproject.net.config.NetworkConfigService;
42 +import org.onosproject.net.config.basics.BandwidthCapacity;
43 +import org.onosproject.net.device.DefaultDeviceDescription;
44 +import org.onosproject.net.device.DefaultPortDescription;
45 +import org.onosproject.net.device.DeviceDescription;
46 +import org.onosproject.net.device.DeviceProvider;
47 +import org.onosproject.net.device.DeviceProviderRegistry;
48 +import org.onosproject.net.device.DeviceProviderService;
49 +import org.onosproject.net.device.PortDescription;
50 +import org.onosproject.net.link.DefaultLinkDescription;
51 +import org.onosproject.net.link.LinkDescription;
52 +import org.onosproject.net.link.LinkProvider;
53 +import org.onosproject.net.link.LinkProviderRegistry;
54 +import org.onosproject.net.link.LinkProviderService;
55 +import org.onosproject.net.provider.AbstractProvider;
56 +import org.onosproject.net.provider.ProviderId;
57 +import org.slf4j.Logger;
58 +
59 +import java.util.ArrayList;
60 +import java.util.HashMap;
61 +import java.util.List;
62 +
63 +import static org.slf4j.LoggerFactory.getLogger;
64 +
65 +/**
66 + * Provider which advertises device descriptions to the core.
67 + */
68 +@Component(immediate = true)
69 +public class IsisTopologyProvider extends AbstractProvider implements DeviceProvider, LinkProvider {
70 +
71 + public static final long PSEUDO_PORT = 0xffffffff;
72 + public static final String ADMINISTRATIVEGROUP = "administrativeGroup";
73 + public static final String TE_METRIC = "teMetric";
74 + public static final String MAXRESERVABLEBANDWIDTH = "maxReservableBandwidth";
75 + public static final String ROUTERID = "routerId";
76 + public static final String NEIGHBORID = "neighborId";
77 + private static final Logger log = getLogger(IsisTopologyProvider.class);
78 + // Default values for tunable parameters
79 + private static final String UNKNOWN = "unknown";
80 + final InternalTopologyProvider listener = new InternalTopologyProvider();
81 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
82 + protected DeviceProviderRegistry deviceProviderRegistry;
83 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
84 + protected LinkProviderRegistry linkProviderRegistry;
85 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
86 + protected NetworkConfigService networkConfigService;
87 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
88 + protected IsisController controller;
89 + //This Interface that defines how this provider can interact with the core.
90 + private LinkProviderService linkProviderService;
91 + // The interface that defines how this Provider can interact with the core
92 + private DeviceProviderService deviceProviderService;
93 + private HashMap<DeviceId, List<PortDescription>> portMap = new HashMap<>();
94 +
95 + /**
96 + * Creates an ISIS device provider.
97 + */
98 + public IsisTopologyProvider() {
99 + super(new ProviderId("l3", "org.onosproject.provider.isis"));
100 + }
101 +
102 + @Activate
103 + public void activate() {
104 + deviceProviderService = deviceProviderRegistry.register(this);
105 + linkProviderService = linkProviderRegistry.register(this);
106 + controller.addRouterListener(listener);
107 + controller.addLinkListener(listener);
108 + log.debug("IsisDeviceProvider::activate...!!!!");
109 + }
110 +
111 + @Deactivate
112 + public void deactivate() {
113 + log.debug("IsisDeviceProvider::deactivate...!!!!");
114 + deviceProviderRegistry.unregister(this);
115 + deviceProviderService = null;
116 + linkProviderRegistry.unregister(this);
117 + linkProviderService = null;
118 + controller.removeRouterListener(listener);
119 + controller.removeLinkListener(listener);
120 + }
121 +
122 + @Override
123 + public void triggerProbe(DeviceId deviceId) {
124 + log.debug("IsisDeviceProvider::triggerProbe...!!!!");
125 + }
126 +
127 + @Override
128 + public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
129 + log.debug("IsisDeviceProvider::roleChanged...!!!!");
130 + }
131 +
132 + @Override
133 + public boolean isReachable(DeviceId deviceId) {
134 + log.debug("IsisDeviceProvider::isReachable...!!!!");
135 + return false;
136 + }
137 +
138 + @Override
139 + public void changePortState(DeviceId deviceId, PortNumber portNumber, boolean enable) {
140 + log.debug("IsisDeviceProvider::changePortState...!!!!");
141 + }
142 +
143 + /**
144 + * Builds link description.
145 + *
146 + * @param isisLink ISIS link instance
147 + * @return link description
148 + */
149 + private LinkDescription buildLinkDes(IsisLink isisLink) {
150 + long srcAddress = 0;
151 + long dstAddress = 0;
152 + String localSystemId = isisLink.localSystemId();
153 + String remoteSystemId = isisLink.remoteSystemId();
154 + //Changing of port numbers
155 + srcAddress = isisLink.interfaceIp().toInt();
156 + dstAddress = isisLink.neighborIp().toInt();
157 + DeviceId srcId = DeviceId.deviceId(IsisRouterId.uri(localSystemId));
158 + DeviceId dstId = DeviceId.deviceId(IsisRouterId.uri(remoteSystemId));
159 + if (srcAddress == 0) {
160 + srcAddress = PSEUDO_PORT;
161 + } else if (dstAddress == 0) {
162 + dstAddress = PSEUDO_PORT;
163 + }
164 +
165 + ConnectPoint src = new ConnectPoint(srcId, PortNumber.portNumber(srcAddress));
166 + ConnectPoint dst = new ConnectPoint(dstId, PortNumber.portNumber(dstAddress));
167 + DefaultAnnotations.Builder annotationBuilder = DefaultAnnotations.builder();
168 + if (isisLink != null) {
169 + annotationBuilder = buildAnnotations(annotationBuilder, isisLink);
170 + }
171 +
172 + return new DefaultLinkDescription(src, dst, Link.Type.DIRECT, false, annotationBuilder.build());
173 + }
174 +
175 + /**
176 + * Builds port description.
177 + *
178 + * @param deviceId device ID for the port
179 + * @param portNumber port number of the link
180 + * @return list of port description
181 + */
182 + private List<PortDescription> buildPortDescriptions(DeviceId deviceId,
183 + PortNumber portNumber) {
184 +
185 + List<PortDescription> portList;
186 +
187 + if (portMap.containsKey(deviceId)) {
188 + portList = portMap.get(deviceId);
189 + } else {
190 + portList = new ArrayList<>();
191 + }
192 + if (portNumber != null) {
193 + PortDescription portDescriptions = new DefaultPortDescription(portNumber, true);
194 + portList.add(portDescriptions);
195 + }
196 +
197 + portMap.put(deviceId, portList);
198 + return portList;
199 + }
200 +
201 + /**
202 + * Builds the annotation details.
203 + *
204 + * @param annotationBuilder default annotation builder instance
205 + * @param isisLink ISIS link instance
206 + * @return annotation builder instance
207 + */
208 + private DefaultAnnotations.Builder buildAnnotations(DefaultAnnotations.Builder annotationBuilder,
209 + IsisLink isisLink) {
210 + int administrativeGroup = 0;
211 + long teMetric = 0;
212 + Bandwidth maxReservableBandwidth = Bandwidth.bps(0);
213 + String routerId = null;
214 + String neighborId = null;
215 +
216 + //TE Info
217 + IsisLinkTed isisLinkTed = isisLink.linkTed();
218 + administrativeGroup = isisLinkTed.administrativeGroup();
219 + teMetric = isisLinkTed.teDefaultMetric();
220 + maxReservableBandwidth = isisLinkTed.maximumReservableLinkBandwidth();
221 + routerId = isisLink.localSystemId();
222 + neighborId = isisLink.remoteSystemId();
223 + annotationBuilder.set(ADMINISTRATIVEGROUP, String.valueOf(administrativeGroup));
224 + annotationBuilder.set(TE_METRIC, String.valueOf(teMetric));
225 + annotationBuilder.set(MAXRESERVABLEBANDWIDTH, String.valueOf(maxReservableBandwidth));
226 + annotationBuilder.set(ROUTERID, String.valueOf(routerId));
227 + annotationBuilder.set(NEIGHBORID, String.valueOf(neighborId));
228 + return annotationBuilder;
229 + }
230 +
231 + /**
232 + * Internal device provider implementation.
233 + */
234 + private class InternalTopologyProvider implements IsisRouterListener, IsisLinkListener {
235 +
236 + @Override
237 + public void routerAdded(IsisRouter isisRouter) {
238 + String systemId = isisRouter.systemId();
239 + log.info("Added device {}", systemId);
240 + DeviceId deviceId = DeviceId.deviceId(IsisRouterId.uri(systemId));
241 + Device.Type deviceType = Device.Type.ROUTER;
242 + //If our routerType is Dr or Bdr type is PSEUDO
243 + if (isisRouter.isDis()) {
244 + deviceType = Device.Type.ROUTER;
245 + } else {
246 + deviceType = Device.Type.VIRTUAL;
247 + }
248 + ChassisId cId = new ChassisId();
249 + DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
250 + newBuilder.set(AnnotationKeys.TYPE, "L3");
251 + newBuilder.set("RouterId", systemId);
252 + DeviceDescription description =
253 + new DefaultDeviceDescription(IsisRouterId.uri(systemId), deviceType, UNKNOWN, UNKNOWN, UNKNOWN,
254 + UNKNOWN, cId, newBuilder.build());
255 + deviceProviderService.deviceConnected(deviceId, description);
256 + }
257 +
258 + @Override
259 + public void routerRemoved(IsisRouter isisRouter) {
260 + String systemId = isisRouter.systemId();
261 + log.info("Delete device {}", systemId);
262 + DeviceId deviceId = DeviceId.deviceId(IsisRouterId.uri(systemId));
263 + if (deviceProviderService == null) {
264 + return;
265 + }
266 + deviceProviderService.deviceDisconnected(deviceId);
267 + log.info("delete device {}", systemId);
268 + }
269 +
270 + @Override
271 + public void addLink(IsisLink isisLink) {
272 + log.debug("Addlink {}", isisLink.localSystemId());
273 + if (linkProviderService == null) {
274 + return;
275 + }
276 + LinkDescription linkDes = buildLinkDes(isisLink);
277 + //Updating ports of the link
278 + deviceProviderService.updatePorts(linkDes.src().deviceId(), buildPortDescriptions(linkDes.src().deviceId(),
279 + linkDes.src().port()));
280 + deviceProviderService.updatePorts(linkDes.dst().deviceId(), buildPortDescriptions(linkDes.dst().deviceId(),
281 + linkDes.dst().port()));
282 + registerBandwidth(linkDes, isisLink);
283 + linkProviderService.linkDetected(linkDes);
284 + }
285 +
286 + @Override
287 + public void deleteLink(IsisLink isisLink) {
288 + log.debug("Delete link {}", isisLink.localSystemId());
289 + if (linkProviderService == null) {
290 + return;
291 + }
292 + LinkDescription linkDes = buildLinkDes(isisLink);
293 + linkProviderService.linkVanished(linkDes);
294 + }
295 +
296 + /**
297 + * Registers the bandwidth for source and destination points.
298 + *
299 + * @param linkDes link description instance
300 + * @param isisLink ISIS link instance
301 + */
302 + private void registerBandwidth(LinkDescription linkDes, IsisLink isisLink) {
303 + if (isisLink == null) {
304 + log.error("Could not able to register bandwidth ");
305 + return;
306 + }
307 + IsisLinkTed isisLinkTed = isisLink.linkTed();
308 + Bandwidth maxReservableBw = isisLinkTed.maximumReservableLinkBandwidth();
309 + if (maxReservableBw != null) {
310 + if (maxReservableBw.compareTo(Bandwidth.bps(0)) == 0) {
311 + return;
312 + }
313 + //Configure bandwidth for src and dst port
314 + BandwidthCapacity config = networkConfigService.addConfig(linkDes.src(), BandwidthCapacity.class);
315 + config.capacity(maxReservableBw).apply();
316 +
317 + config = networkConfigService.addConfig(linkDes.dst(), BandwidthCapacity.class);
318 + config.capacity(maxReservableBw).apply();
319 + }
320 + }
321 + }
322 +}
...\ No newline at end of file ...\ No newline at end of file
...@@ -17,4 +17,4 @@ ...@@ -17,4 +17,4 @@
17 /** 17 /**
18 * Provider that uses ISIS request as a means of infrastructure device discovery. 18 * Provider that uses ISIS request as a means of infrastructure device discovery.
19 */ 19 */
20 -package org.onosproject.provider.isis.device.impl;
...\ No newline at end of file ...\ No newline at end of file
20 +package org.onosproject.provider.isis.topology.impl;
......