Avantika-Huawei

[ONOS-4170] LSP-DB sync

Change-Id: Icda3afd9cca8d1fb8c58b44da6bc26064b300388
Showing 27 changed files with 561 additions and 18 deletions
...@@ -30,6 +30,9 @@ import java.util.concurrent.Executors; ...@@ -30,6 +30,9 @@ import java.util.concurrent.Executors;
30 import java.util.concurrent.ScheduledExecutorService; 30 import java.util.concurrent.ScheduledExecutorService;
31 import java.util.concurrent.TimeUnit; 31 import java.util.concurrent.TimeUnit;
32 32
33 +import org.onlab.packet.Ethernet;
34 +import org.onlab.packet.IPv4;
35 +
33 import org.apache.felix.scr.annotations.Activate; 36 import org.apache.felix.scr.annotations.Activate;
34 import org.apache.felix.scr.annotations.Component; 37 import org.apache.felix.scr.annotations.Component;
35 import org.apache.felix.scr.annotations.Deactivate; 38 import org.apache.felix.scr.annotations.Deactivate;
...@@ -38,6 +41,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality; ...@@ -38,6 +41,7 @@ import org.apache.felix.scr.annotations.ReferenceCardinality;
38 import org.apache.felix.scr.annotations.Service; 41 import org.apache.felix.scr.annotations.Service;
39 import org.onlab.packet.IpAddress; 42 import org.onlab.packet.IpAddress;
40 import org.onlab.packet.IpPrefix; 43 import org.onlab.packet.IpPrefix;
44 +import org.onlab.packet.TCP;
41 import org.onlab.util.Bandwidth; 45 import org.onlab.util.Bandwidth;
42 import org.onosproject.core.ApplicationId; 46 import org.onosproject.core.ApplicationId;
43 import org.onosproject.core.CoreService; 47 import org.onosproject.core.CoreService;
...@@ -139,6 +143,7 @@ public class PceManager implements PceService { ...@@ -139,6 +143,7 @@ public class PceManager implements PceService {
139 private static final String TRUE = "true"; 143 private static final String TRUE = "true";
140 private static final String FALSE = "false"; 144 private static final String FALSE = "false";
141 private static final String END_OF_SYNC_IP_PREFIX = "0.0.0.0/32"; 145 private static final String END_OF_SYNC_IP_PREFIX = "0.0.0.0/32";
146 + public static final int PCEP_PORT = 4189;
142 147
143 private IdGenerator localLspIdIdGen; 148 private IdGenerator localLspIdIdGen;
144 protected DistributedSet<Short> localLspIdFreeList; 149 protected DistributedSet<Short> localLspIdFreeList;
...@@ -635,7 +640,7 @@ public class PceManager implements PceService { ...@@ -635,7 +640,7 @@ public class PceManager implements PceService {
635 LinkEvent linkEvent = (LinkEvent) e; 640 LinkEvent linkEvent = (LinkEvent) e;
636 if (linkEvent.type() == LinkEvent.Type.LINK_REMOVED) { 641 if (linkEvent.type() == LinkEvent.Type.LINK_REMOVED) {
637 tunnelService.queryTunnel(MPLS).forEach(t -> { 642 tunnelService.queryTunnel(MPLS).forEach(t -> {
638 - if (t.path().links().contains(((Link) e.subject()))) { 643 + if (t.path().links().contains((e.subject()))) {
639 // Check whether this ONOS instance is master for ingress device if yes, 644 // Check whether this ONOS instance is master for ingress device if yes,
640 // recompute and send update 645 // recompute and send update
641 checkForMasterAndUpdateTunnel(t.path().src().deviceId(), t); 646 checkForMasterAndUpdateTunnel(t.path().src().deviceId(), t);
...@@ -949,12 +954,30 @@ public class PceManager implements PceService { ...@@ -949,12 +954,30 @@ public class PceManager implements PceService {
949 public void process(PacketContext context) { 954 public void process(PacketContext context) {
950 // Stop processing if the packet has been handled, since we 955 // Stop processing if the packet has been handled, since we
951 // can't do any more to it. 956 // can't do any more to it.
952 -
953 if (context.isHandled()) { 957 if (context.isHandled()) {
954 return; 958 return;
955 } 959 }
956 960
957 InboundPacket pkt = context.inPacket(); 961 InboundPacket pkt = context.inPacket();
962 + if (pkt == null) {
963 + return;
964 + }
965 +
966 + Ethernet ethernet = pkt.parsed();
967 + if (ethernet == null || ethernet.getEtherType() != Ethernet.TYPE_IPV4) {
968 + return;
969 + }
970 +
971 + IPv4 ipPacket = (IPv4) ethernet.getPayload();
972 + if (ipPacket == null || ipPacket.getProtocol() != IPv4.PROTOCOL_TCP) {
973 + return;
974 + }
975 +
976 + TCP tcp = (TCP) ipPacket.getPayload();
977 + if (tcp == null || tcp.getDestinationPort() != PCEP_PORT) {
978 + return;
979 + }
980 +
958 syncLabelDb(pkt.receivedFrom().deviceId()); 981 syncLabelDb(pkt.receivedFrom().deviceId());
959 } 982 }
960 } 983 }
......
...@@ -26,7 +26,6 @@ import static org.onosproject.incubator.net.tunnel.Tunnel.State.ESTABLISHED; ...@@ -26,7 +26,6 @@ import static org.onosproject.incubator.net.tunnel.Tunnel.State.ESTABLISHED;
26 import static org.onosproject.net.MastershipRole.MASTER; 26 import static org.onosproject.net.MastershipRole.MASTER;
27 27
28 import java.net.URISyntaxException; 28 import java.net.URISyntaxException;
29 -import java.nio.ByteBuffer;
30 import java.util.Collection; 29 import java.util.Collection;
31 import java.util.Collections; 30 import java.util.Collections;
32 import java.util.HashMap; 31 import java.util.HashMap;
...@@ -44,6 +43,7 @@ import org.onlab.junit.TestUtils; ...@@ -44,6 +43,7 @@ import org.onlab.junit.TestUtils;
44 import org.onlab.junit.TestUtils.TestUtilsException; 43 import org.onlab.junit.TestUtils.TestUtilsException;
45 import org.onlab.packet.Ethernet; 44 import org.onlab.packet.Ethernet;
46 import org.onlab.packet.IPv4; 45 import org.onlab.packet.IPv4;
46 +import org.onlab.packet.TCP;
47 import org.onlab.util.Bandwidth; 47 import org.onlab.util.Bandwidth;
48 import org.onosproject.common.DefaultTopologyGraph; 48 import org.onosproject.common.DefaultTopologyGraph;
49 import org.onosproject.core.ApplicationId; 49 import org.onosproject.core.ApplicationId;
...@@ -112,6 +112,7 @@ import org.onosproject.pce.util.FlowObjServiceAdapter; ...@@ -112,6 +112,7 @@ import org.onosproject.pce.util.FlowObjServiceAdapter;
112 import org.onosproject.store.service.TestStorageService; 112 import org.onosproject.store.service.TestStorageService;
113 113
114 import com.google.common.collect.ImmutableSet; 114 import com.google.common.collect.ImmutableSet;
115 +import static org.onosproject.pce.pceservice.PceManager.PCEP_PORT;
115 116
116 /** 117 /**
117 * Tests the functions of PceManager. 118 * Tests the functions of PceManager.
...@@ -675,21 +676,18 @@ public class PceManagerTest { ...@@ -675,21 +676,18 @@ public class PceManagerTest {
675 * Tests packet in to trigger label DB sync. 676 * Tests packet in to trigger label DB sync.
676 */ 677 */
677 @Test 678 @Test
678 - public void packetProcessingTest() throws URISyntaxException { 679 + public void packetProcessingTest1() throws URISyntaxException {
679 680
680 build4RouterTopo(false, true, true, true, 0); // This also initializes devices etc. 681 build4RouterTopo(false, true, true, true, 0); // This also initializes devices etc.
681 682
682 - final int srcHost = 2;
683 - final int dstHost = 5;
684 -
685 LabelResourceId node1Label = LabelResourceId.labelResourceId(5200); 683 LabelResourceId node1Label = LabelResourceId.labelResourceId(5200);
686 LabelResourceId node2Label = LabelResourceId.labelResourceId(5201); 684 LabelResourceId node2Label = LabelResourceId.labelResourceId(5201);
687 685
688 pceManager.pceStore.addGlobalNodeLabel(D1.deviceId(), node1Label); 686 pceManager.pceStore.addGlobalNodeLabel(D1.deviceId(), node1Label);
689 pceManager.pceStore.addGlobalNodeLabel(D2.deviceId(), node2Label); 687 pceManager.pceStore.addGlobalNodeLabel(D2.deviceId(), node2Label);
690 688
691 - ConnectPoint src = new ConnectPoint(D1.deviceId(), PortNumber.portNumber(srcHost)); 689 + ConnectPoint src = new ConnectPoint(D1.deviceId(), PortNumber.portNumber(1));
692 - ConnectPoint dst = new ConnectPoint(D2.deviceId(), PortNumber.portNumber(dstHost)); 690 + ConnectPoint dst = new ConnectPoint(D2.deviceId(), PortNumber.portNumber(2));
693 691
694 Link link1 = DefaultLink.builder().src(src).dst(dst).state(ACTIVE).type(DIRECT) 692 Link link1 = DefaultLink.builder().src(src).dst(dst).state(ACTIVE).type(DIRECT)
695 .providerId(new ProviderId("eth", "1")).build(); 693 .providerId(new ProviderId("eth", "1")).build();
...@@ -697,24 +695,66 @@ public class PceManagerTest { ...@@ -697,24 +695,66 @@ public class PceManagerTest {
697 LabelResourceId link1Label = LabelResourceId.labelResourceId(5204); 695 LabelResourceId link1Label = LabelResourceId.labelResourceId(5204);
698 pceManager.pceStore.addAdjLabel(link1, link1Label); 696 pceManager.pceStore.addAdjLabel(link1, link1Label);
699 697
700 - Ethernet eth; 698 + TCP tcp = new TCP();
701 - IPv4 ipv4; 699 + tcp.setDestinationPort(PCEP_PORT);
700 +
701 + IPv4 ipv4 = new IPv4();
702 + ipv4.setProtocol(IPv4.PROTOCOL_TCP);
703 + ipv4.setPayload(tcp);
702 704
703 - ipv4 = new IPv4(); 705 + Ethernet eth = new Ethernet();
704 - eth = new Ethernet();
705 eth.setEtherType(Ethernet.TYPE_IPV4); 706 eth.setEtherType(Ethernet.TYPE_IPV4);
706 eth.setPayload(ipv4); 707 eth.setPayload(ipv4);
707 708
708 - eth.setSourceMACAddress("00:00:00:10:00:0" + srcHost).setDestinationMACAddress("00:00:00:10:00:0" + dstHost); 709 + InboundPacket inPkt = new DefaultInboundPacket(new ConnectPoint(D1.deviceId(),
709 - 710 + PortNumber.portNumber(PCEP_PORT)),
710 - InboundPacket inPkt = new DefaultInboundPacket(new ConnectPoint(D1.deviceId(), PortNumber.portNumber(srcHost)), 711 + eth, null);
711 - eth, ByteBuffer.wrap(eth.serialize()));
712 712
713 pktProcessor.process(new MockPcepPacketContext(inPkt, null)); 713 pktProcessor.process(new MockPcepPacketContext(inPkt, null));
714 assertThat(flowsDownloaded, is(4)); 714 assertThat(flowsDownloaded, is(4));
715 } 715 }
716 716
717 /** 717 /**
718 + * Tests faulty packet in to trigger label DB sync.
719 + */
720 + @Test
721 + public void packetProcessingTest2() throws URISyntaxException {
722 +
723 + build4RouterTopo(false, true, true, true, 0); // This also initializes devices etc.
724 +
725 + LabelResourceId node1Label = LabelResourceId.labelResourceId(5200);
726 + LabelResourceId node2Label = LabelResourceId.labelResourceId(5201);
727 +
728 + pceManager.pceStore.addGlobalNodeLabel(D1.deviceId(), node1Label);
729 + pceManager.pceStore.addGlobalNodeLabel(D2.deviceId(), node2Label);
730 +
731 + ConnectPoint src = new ConnectPoint(D1.deviceId(), PortNumber.portNumber(1));
732 + ConnectPoint dst = new ConnectPoint(D2.deviceId(), PortNumber.portNumber(2));
733 +
734 + Link link1 = DefaultLink.builder().src(src).dst(dst).state(ACTIVE).type(DIRECT)
735 + .providerId(new ProviderId("eth", "1")).build();
736 +
737 + LabelResourceId link1Label = LabelResourceId.labelResourceId(5204);
738 + pceManager.pceStore.addAdjLabel(link1, link1Label);
739 +
740 + TCP tcp = new TCP(); // Not set the pcep port.
741 + IPv4 ipv4 = new IPv4();
742 + ipv4.setProtocol(IPv4.PROTOCOL_TCP);
743 + ipv4.setPayload(tcp);
744 +
745 + Ethernet eth = new Ethernet();
746 + eth.setEtherType(Ethernet.TYPE_IPV4);
747 + eth.setPayload(ipv4);
748 +
749 + InboundPacket inPkt = new DefaultInboundPacket(new ConnectPoint(D1.deviceId(),
750 + PortNumber.portNumber(PCEP_PORT)),
751 + eth, null);
752 +
753 + pktProcessor.process(new MockPcepPacketContext(inPkt, null));
754 + assertThat(flowsDownloaded, is(0));
755 + }
756 +
757 + /**
718 * Tests tunnel events added and removed. 758 * Tests tunnel events added and removed.
719 */ 759 */
720 @Test 760 @Test
......
...@@ -2,6 +2,7 @@ COMPILE_DEPS = [ ...@@ -2,6 +2,7 @@ COMPILE_DEPS = [
2 '//lib:CORE_DEPS', 2 '//lib:CORE_DEPS',
3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio', 3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
4 '//apps/pcep-api:onos-apps-pcep-api', 4 '//apps/pcep-api:onos-apps-pcep-api',
5 + '//incubator/api:onos-incubator-api',
5 ] 6 ]
6 7
7 osgi_jar_with_tests ( 8 osgi_jar_with_tests (
......
...@@ -52,5 +52,9 @@ ...@@ -52,5 +52,9 @@
52 <groupId>org.onosproject</groupId> 52 <groupId>org.onosproject</groupId>
53 <artifactId>onlab-misc</artifactId> 53 <artifactId>onlab-misc</artifactId>
54 </dependency> 54 </dependency>
55 + <dependency>
56 + <groupId>org.onosproject</groupId>
57 + <artifactId>onos-incubator-api</artifactId>
58 + </dependency>
55 </dependencies> 59 </dependencies>
56 </project> 60 </project>
......
...@@ -19,6 +19,7 @@ import java.util.List; ...@@ -19,6 +19,7 @@ import java.util.List;
19 19
20 import org.onosproject.pcepio.protocol.PcepFactory; 20 import org.onosproject.pcepio.protocol.PcepFactory;
21 import org.onosproject.pcepio.protocol.PcepMessage; 21 import org.onosproject.pcepio.protocol.PcepMessage;
22 +import org.onosproject.pcepio.protocol.PcepStateReport;
22 23
23 /** 24 /**
24 * Represents to provider facing side of a path computation client(pcc). 25 * Represents to provider facing side of a path computation client(pcc).
...@@ -165,4 +166,34 @@ public interface PcepClient { ...@@ -165,4 +166,34 @@ public interface PcepClient {
165 * @return delegation flag 166 * @return delegation flag
166 */ 167 */
167 Boolean delegationInfo(LspKey lspKey); 168 Boolean delegationInfo(LspKey lspKey);
169 +
170 + /**
171 + * Creates a temporary cache to hold report messages received during LSPDB sync.
172 + *
173 + * @param pccId PCC id which is the key to store report messages
174 + */
175 + void initializeSyncMsgList(PccId pccId);
176 +
177 + /**
178 + * Returns the list of report messages received during LSPDB sync.
179 + *
180 + * @param pccId PCC id which is the key for all the report messages
181 + * @return list of report messages received during LSPDB sync
182 + */
183 + List<PcepStateReport> getSyncMsgList(PccId pccId);
184 +
185 + /**
186 + * Removes the list of report messages received during LSPDB sync.
187 + *
188 + * @param pccId PCC id which is the key for all the report messages
189 + */
190 + void removeSyncMsgList(PccId pccId);
191 +
192 + /**
193 + * Adds report message received during LSPDB sync into temporary cache.
194 + *
195 + * @param pccId PCC id which is the key to store report messages
196 + * @param rptMsg the report message to be stored
197 + */
198 + void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg);
168 } 199 }
......
...@@ -85,6 +85,20 @@ public interface PcepClientController { ...@@ -85,6 +85,20 @@ public interface PcepClientController {
85 void removeNodeListener(PcepNodeListener listener); 85 void removeNodeListener(PcepNodeListener listener);
86 86
87 /** 87 /**
88 + * Register a listener for packet events.
89 + *
90 + * @param listener the listener to notify
91 + */
92 + void addPacketListener(PcepPacketListener listener);
93 +
94 + /**
95 + * Unregister a packet listener.
96 + *
97 + * @param listener the listener to unregister
98 + */
99 + void removePacketListener(PcepPacketListener listener);
100 +
101 + /**
88 * Send a message to a particular pcc client. 102 * Send a message to a particular pcc client.
89 * 103 *
90 * @param pccId the id of the client to send message. 104 * @param pccId the id of the client to send message.
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
15 */ 15 */
16 package org.onosproject.pcep.controller; 16 package org.onosproject.pcep.controller;
17 17
18 +import org.onosproject.incubator.net.tunnel.Tunnel;
18 import org.onosproject.pcepio.protocol.PcepMessage; 19 import org.onosproject.pcepio.protocol.PcepMessage;
19 /** 20 /**
20 * Notifies providers about PCEP message events. 21 * Notifies providers about PCEP message events.
...@@ -28,4 +29,21 @@ public interface PcepEventListener { ...@@ -28,4 +29,21 @@ public interface PcepEventListener {
28 * @param msg the message 29 * @param msg the message
29 */ 30 */
30 void handleMessage(PccId pccId, PcepMessage msg); 31 void handleMessage(PccId pccId, PcepMessage msg);
32 +
33 + /**
34 + * Handles end of LSPDB sync actions.
35 + *
36 + * @param tunnel the tunnel on which action needs to be taken
37 + * @param endOfSyncAction the action that needs to be taken for the tunnel
38 + */
39 + void handleEndOfSyncAction(Tunnel tunnel, PcepLspSyncAction endOfSyncAction);
40 +
41 + /**
42 + * Handles sending PCEP message to client on end of LSPDB sync.
43 + *
44 + * @param pccId id of the pcc
45 + * @param msg the message to be sent
46 + * @param endOfSyncAction the action that needs to be taken in the message
47 + */
48 + void handleEndOfSyncAction(PccId pccId, PcepMessage msg, PcepLspSyncAction endOfSyncAction);
31 } 49 }
......
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.pcep.controller;
17 +
18 +/**
19 + * Representation of actions to be taken for LSPs on end of LSP-DB sync.
20 + */
21 +public enum PcepLspSyncAction {
22 +
23 + /**
24 + * Specifies that delete message for PCE intiiated tunnel should be sent.
25 + */
26 + SEND_DELETE(0),
27 +
28 + /**
29 + * Specifies that update message should be sent.
30 + */
31 + SEND_UPDATE(1),
32 +
33 + /**
34 + * Specifies that the tunnel should be removed from PCE.
35 + */
36 + REMOVE(2),
37 +
38 + /**
39 + * Specifies that the status of the tunnel should be set as unstable.
40 + */
41 + UNSTABLE(3);
42 +
43 + int value;
44 +
45 + /**
46 + * Assigns val with the value for actions to be taken for LSPs on end of LSP-DB sync.
47 + *
48 + * @param val sync status
49 + */
50 + PcepLspSyncAction(int val) {
51 + value = val;
52 + }
53 +}
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.pcep.controller;
17 +
18 +public interface PcepPacketListener {
19 +
20 + void sendPacketIn(PccId pccId);
21 +
22 +}
...@@ -73,4 +73,12 @@ public interface PcepAgent { ...@@ -73,4 +73,12 @@ public interface PcepAgent {
73 * @param pccId PCEP client ID 73 * @param pccId PCEP client ID
74 */ 74 */
75 void deleteNode(PccId pccId); 75 void deleteNode(PccId pccId);
76 +
77 + /**
78 + * Analyzes report messages received during LSP DB sync again tunnel store and takes necessary actions.
79 + *
80 + * @param pccId the id of pcc client
81 + * @return success or failure
82 + */
83 + boolean analyzeSyncMsgList(PccId pccId);
76 } 84 }
......
...@@ -2,6 +2,7 @@ COMPILE_DEPS = [ ...@@ -2,6 +2,7 @@ COMPILE_DEPS = [
2 '//lib:CORE_DEPS', 2 '//lib:CORE_DEPS',
3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio', 3 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
4 '//protocols/pcep/api:onos-protocols-pcep-api', 4 '//protocols/pcep/api:onos-protocols-pcep-api',
5 + '//incubator/api:onos-incubator-api',
5 ] 6 ]
6 7
7 osgi_jar_with_tests ( 8 osgi_jar_with_tests (
......
...@@ -19,6 +19,8 @@ package org.onosproject.pcep.controller.impl; ...@@ -19,6 +19,8 @@ package org.onosproject.pcep.controller.impl;
19 import java.net.InetSocketAddress; 19 import java.net.InetSocketAddress;
20 import java.net.SocketAddress; 20 import java.net.SocketAddress;
21 import java.util.Collections; 21 import java.util.Collections;
22 +import java.util.HashMap;
23 +import java.util.LinkedList;
22 import java.util.List; 24 import java.util.List;
23 import java.util.Map; 25 import java.util.Map;
24 import java.util.concurrent.RejectedExecutionException; 26 import java.util.concurrent.RejectedExecutionException;
...@@ -36,6 +38,7 @@ import org.onosproject.pcep.controller.driver.PcepClientDriver; ...@@ -36,6 +38,7 @@ import org.onosproject.pcep.controller.driver.PcepClientDriver;
36 import org.onosproject.pcepio.protocol.PcepFactories; 38 import org.onosproject.pcepio.protocol.PcepFactories;
37 import org.onosproject.pcepio.protocol.PcepFactory; 39 import org.onosproject.pcepio.protocol.PcepFactory;
38 import org.onosproject.pcepio.protocol.PcepMessage; 40 import org.onosproject.pcepio.protocol.PcepMessage;
41 +import org.onosproject.pcepio.protocol.PcepStateReport;
39 import org.onosproject.pcepio.protocol.PcepVersion; 42 import org.onosproject.pcepio.protocol.PcepVersion;
40 import org.slf4j.Logger; 43 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory; 44 import org.slf4j.LoggerFactory;
...@@ -70,6 +73,7 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -70,6 +73,7 @@ public class PcepClientImpl implements PcepClientDriver {
70 private byte sessionId; 73 private byte sessionId;
71 private PcepPacketStatsImpl pktStats; 74 private PcepPacketStatsImpl pktStats;
72 private Map<LspKey, Boolean> lspDelegationInfo; 75 private Map<LspKey, Boolean> lspDelegationInfo;
76 + private Map<PccId, List<PcepStateReport>> sycRptCache = new HashMap<>();
73 77
74 @Override 78 @Override
75 public void init(PccId pccId, PcepVersion pcepVersion, PcepPacketStats pktStats) { 79 public void init(PccId pccId, PcepVersion pcepVersion, PcepPacketStats pktStats) {
...@@ -192,7 +196,14 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -192,7 +196,14 @@ public class PcepClientImpl implements PcepClientDriver {
192 196
193 @Override 197 @Override
194 public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) { 198 public void setLabelDbSyncStatus(PcepSyncStatus syncStatus) {
199 +
200 + PcepSyncStatus syncOldStatus = labelDbSyncStatus();
195 this.labelDbSyncStatus = syncStatus; 201 this.labelDbSyncStatus = syncStatus;
202 +
203 + if ((syncOldStatus == PcepSyncStatus.IN_SYNC) && (syncStatus == PcepSyncStatus.SYNCED)) {
204 + // Perform end of LSP DB sync actions.
205 + this.agent.analyzeSyncMsgList(pccId);
206 + }
196 } 207 }
197 208
198 @Override 209 @Override
...@@ -254,6 +265,29 @@ public class PcepClientImpl implements PcepClientDriver { ...@@ -254,6 +265,29 @@ public class PcepClientImpl implements PcepClientDriver {
254 } 265 }
255 266
256 @Override 267 @Override
268 + public void initializeSyncMsgList(PccId pccId) {
269 + List<PcepStateReport> rptMsgList = new LinkedList<>();
270 + sycRptCache.put(pccId, rptMsgList);
271 + }
272 +
273 + @Override
274 + public List<PcepStateReport> getSyncMsgList(PccId pccId) {
275 + return sycRptCache.get(pccId);
276 + }
277 +
278 + @Override
279 + public void removeSyncMsgList(PccId pccId) {
280 + sycRptCache.remove(pccId);
281 + }
282 +
283 + @Override
284 + public void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg) {
285 + List<PcepStateReport> rptMsgList = sycRptCache.get(pccId);
286 + rptMsgList.add(rptMsg);
287 + sycRptCache.put(pccId, rptMsgList);
288 + }
289 +
290 + @Override
257 public boolean isOptical() { 291 public boolean isOptical() {
258 return false; 292 return false;
259 } 293 }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
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.provider.pcep.tunnel.impl; 16 +package org.onosproject.pcep.controller.impl;
17 17
18 import org.onosproject.incubator.net.tunnel.Tunnel.State; 18 import org.onosproject.incubator.net.tunnel.Tunnel.State;
19 19
...@@ -51,6 +51,7 @@ public enum PcepLspStatus { ...@@ -51,6 +51,7 @@ public enum PcepLspStatus {
51 * Returns the applicable PCEP LSP status corresponding to ONOS tunnel state. 51 * Returns the applicable PCEP LSP status corresponding to ONOS tunnel state.
52 * 52 *
53 * @param tunnelState ONOS tunnel state 53 * @param tunnelState ONOS tunnel state
54 + * @return LSP status as per protocol
54 */ 55 */
55 public static PcepLspStatus getLspStatusFromTunnelStatus(State tunnelState) { 56 public static PcepLspStatus getLspStatusFromTunnelStatus(State tunnelState) {
56 57
...@@ -76,6 +77,7 @@ public enum PcepLspStatus { ...@@ -76,6 +77,7 @@ public enum PcepLspStatus {
76 * Returns the applicable ONOS tunnel state corresponding to PCEP LSP status. 77 * Returns the applicable ONOS tunnel state corresponding to PCEP LSP status.
77 * 78 *
78 * @param lspState PCEP LSP status 79 * @param lspState PCEP LSP status
80 + * @return tunnel state
79 */ 81 */
80 public static State getTunnelStatusFromLspStatus(PcepLspStatus lspState) { 82 public static State getTunnelStatusFromLspStatus(PcepLspStatus lspState) {
81 83
......
...@@ -57,6 +57,10 @@ public class PcepMetricObjectVer1 implements PcepMetricObject { ...@@ -57,6 +57,10 @@ public class PcepMetricObjectVer1 implements PcepMetricObject {
57 public static final int BFLAG_RESET = 0; 57 public static final int BFLAG_RESET = 0;
58 public static final byte CFLAG_CHECK = 0x02; 58 public static final byte CFLAG_CHECK = 0x02;
59 59
60 + public static final byte IGP_METRIC = 0x01;
61 + public static final byte TE_METRIC = 0x02;
62 + public static final byte HOP_COUNT_METRIC = 0x03;
63 +
60 static final PcepObjectHeader DEFAULT_METRIC_OBJECT_HEADER = new PcepObjectHeader(METRIC_OBJ_CLASS, 64 static final PcepObjectHeader DEFAULT_METRIC_OBJECT_HEADER = new PcepObjectHeader(METRIC_OBJ_CLASS,
61 METRIC_OBJ_TYPE, PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED, 65 METRIC_OBJ_TYPE, PcepObjectHeader.REQ_OBJ_OPTIONAL_PROCESS, PcepObjectHeader.RSP_OBJ_PROCESSED,
62 METRIC_OBJ_MINIMUM_LENGTH); 66 METRIC_OBJ_MINIMUM_LENGTH);
......
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 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
17 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
18 + <modelVersion>4.0.0</modelVersion>
19 + <parent>
20 + <groupId>org.onosproject</groupId>
21 + <artifactId>onos-pcep-providers</artifactId>
22 + <version>1.7.0-SNAPSHOT</version>
23 + <relativePath>../pom.xml</relativePath>
24 + </parent>
25 + <artifactId>onos-pcep-provider-packet</artifactId>
26 + <packaging>bundle</packaging>
27 + <description>PCEP packet provider</description>
28 + <dependencies>
29 + <dependency>
30 + <groupId>org.onosproject</groupId>
31 + <artifactId>onos-pcep-controller-api</artifactId>
32 + </dependency>
33 + </dependencies>
34 +</project>
1 +package org.onosproject.provider.pcep.packet.impl;
2 +
3 +import static org.slf4j.LoggerFactory.getLogger;
4 +
5 +import org.apache.felix.scr.annotations.Activate;
6 +import org.apache.felix.scr.annotations.Component;
7 +import org.apache.felix.scr.annotations.Deactivate;
8 +import org.apache.felix.scr.annotations.Reference;
9 +import org.apache.felix.scr.annotations.ReferenceCardinality;
10 +import org.apache.felix.scr.annotations.Service;
11 +import org.onlab.packet.Ethernet;
12 +import org.onlab.packet.IPv4;
13 +import org.onlab.packet.TCP;
14 +import org.onosproject.net.AnnotationKeys;
15 +import org.onosproject.net.ConnectPoint;
16 +import org.onosproject.net.Device;
17 +import org.onosproject.net.DeviceId;
18 +import org.onosproject.net.PortNumber;
19 +import org.onosproject.net.device.DeviceService;
20 +import org.onosproject.net.packet.DefaultInboundPacket;
21 +import org.onosproject.net.packet.DefaultPacketContext;
22 +import org.onosproject.net.packet.InboundPacket;
23 +import org.onosproject.net.packet.OutboundPacket;
24 +import org.onosproject.net.packet.PacketProvider;
25 +import org.onosproject.net.packet.PacketProviderRegistry;
26 +import org.onosproject.net.packet.PacketProviderService;
27 +import org.onosproject.net.provider.AbstractProvider;
28 +import org.onosproject.net.provider.ProviderId;
29 +import org.onosproject.pcep.controller.PccId;
30 +import org.onosproject.pcep.controller.PcepClientController;
31 +import org.onosproject.pcep.controller.PcepPacketListener;
32 +import org.slf4j.Logger;
33 +
34 +/**
35 + * Provider which uses an PCEP controller to process packets.
36 + */
37 +@Component(immediate = true)
38 +@Service
39 +public class PcepPacketProvider extends AbstractProvider implements PacketProvider {
40 +
41 + private static final Logger log = getLogger(PcepPacketProvider.class);
42 + static final String PROVIDER_ID = "org.onosproject.provider.packet.pcep";
43 +
44 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
45 + protected PacketProviderRegistry packetProviderRegistry;
46 +
47 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
48 + protected PcepClientController pcepClientController;
49 +
50 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
51 + protected DeviceService deviceService;
52 +
53 + PacketProviderService packetProviderService;
54 +
55 + private InnerPacketProvider listener = new InnerPacketProvider();
56 + public static final String LSRID = "lsrId";
57 + public static final int PCEP_PORT = 4189;
58 +
59 + /**
60 + * Creates a Packet provider.
61 + */
62 + public PcepPacketProvider() {
63 + super(new ProviderId("pcep", PROVIDER_ID));
64 + }
65 +
66 + @Activate
67 + public void activate() {
68 + packetProviderService = packetProviderRegistry.register(this);
69 + pcepClientController.addPacketListener(listener);
70 + log.info("Started");
71 + }
72 +
73 + @Deactivate
74 + public void deactivate() {
75 + packetProviderRegistry.unregister(this);
76 + pcepClientController.removePacketListener(listener);
77 + log.info("Stopped");
78 + }
79 +
80 + private class InnerPacketProvider implements PcepPacketListener {
81 + @Override
82 + public void sendPacketIn(PccId pccId) {
83 + TCP tcp = new TCP();
84 + // Set the well known PCEP port. To be used to decide to process/discard the packet while processing.
85 + tcp.setDestinationPort(PCEP_PORT);
86 +
87 + IPv4 ipv4 = new IPv4();
88 + ipv4.setProtocol(IPv4.PROTOCOL_TCP);
89 + ipv4.setPayload(tcp);
90 +
91 + Ethernet eth = new Ethernet();
92 + eth.setEtherType(Ethernet.TYPE_IPV4);
93 + eth.setPayload(ipv4);
94 +
95 + // Get lsrId of the PCEP client from the PCC ID. Session info is based on lsrID.
96 + String lsrId = String.valueOf(pccId.ipAddress());
97 + DeviceId pccDeviceId = null;
98 +
99 + // Find PCC deviceID from lsrId stored as annotations
100 + Iterable<Device> devices = deviceService.getAvailableDevices();
101 + for (Device dev : devices) {
102 + if ("L3".equals(dev.annotations().value(AnnotationKeys.TYPE))
103 + && lsrId.equals(dev.annotations().value(LSRID))) {
104 + pccDeviceId = dev.id();
105 + break;
106 + }
107 + }
108 +
109 + if (pccDeviceId == null) {
110 + return;
111 + }
112 +
113 + InboundPacket inPkt = new DefaultInboundPacket(new ConnectPoint(pccDeviceId,
114 + PortNumber.portNumber(PCEP_PORT)),
115 + eth, null);
116 +
117 + packetProviderService.processPacket(new PcepPacketContext(inPkt, null));
118 + }
119 + }
120 +
121 + // Minimal PacketContext to make core and applications happy.
122 + private final class PcepPacketContext extends DefaultPacketContext {
123 + private PcepPacketContext(InboundPacket inPkt, OutboundPacket outPkt) {
124 + super(System.currentTimeMillis(), inPkt, outPkt, false);
125 + }
126 +
127 + @Override
128 + public void send() {
129 + // We don't send anything out.
130 + return;
131 + }
132 + }
133 +
134 + @Override
135 + public void emit(OutboundPacket packet) {
136 + // Nothing to emit
137 + return;
138 +
139 + }
140 +}
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 + *Provider that uses PCEP controller as a means to send packets.
18 + */
19 +package org.onosproject.provider.pcep.packet.impl;
...\ No newline at end of file ...\ No newline at end of file
...@@ -28,5 +28,6 @@ ...@@ -28,5 +28,6 @@
28 <module>topology</module> 28 <module>topology</module>
29 <module>tunnel</module> 29 <module>tunnel</module>
30 <module>app</module> 30 <module>app</module>
31 + <module>packet</module>
31 </modules> 32 </modules>
32 </project> 33 </project>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -31,6 +31,7 @@ import org.onosproject.pcep.controller.PcepSyncStatus; ...@@ -31,6 +31,7 @@ import org.onosproject.pcep.controller.PcepSyncStatus;
31 import org.onosproject.pcepio.protocol.PcepFactories; 31 import org.onosproject.pcepio.protocol.PcepFactories;
32 import org.onosproject.pcepio.protocol.PcepFactory; 32 import org.onosproject.pcepio.protocol.PcepFactory;
33 import org.onosproject.pcepio.protocol.PcepMessage; 33 import org.onosproject.pcepio.protocol.PcepMessage;
34 +import org.onosproject.pcepio.protocol.PcepStateReport;
34 import org.onosproject.pcepio.protocol.PcepVersion; 35 import org.onosproject.pcepio.protocol.PcepVersion;
35 36
36 /** 37 /**
...@@ -161,4 +162,28 @@ public class PcepClientAdapter implements PcepClient { ...@@ -161,4 +162,28 @@ public class PcepClientAdapter implements PcepClient {
161 public Boolean delegationInfo(LspKey lspKey) { 162 public Boolean delegationInfo(LspKey lspKey) {
162 return lspDelegationInfo.get(lspKey); 163 return lspDelegationInfo.get(lspKey);
163 } 164 }
165 +
166 + @Override
167 + public void initializeSyncMsgList(PccId pccId) {
168 + // TODO Auto-generated method stub
169 +
170 + }
171 +
172 + @Override
173 + public List<PcepStateReport> getSyncMsgList(PccId pccId) {
174 + // TODO Auto-generated method stub
175 + return null;
176 + }
177 +
178 + @Override
179 + public void removeSyncMsgList(PccId pccId) {
180 + // TODO Auto-generated method stub
181 +
182 + }
183 +
184 + @Override
185 + public void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg) {
186 + // TODO Auto-generated method stub
187 +
188 + }
164 } 189 }
......
...@@ -32,6 +32,7 @@ import org.onosproject.pcep.controller.PcepClientController; ...@@ -32,6 +32,7 @@ import org.onosproject.pcep.controller.PcepClientController;
32 import org.onosproject.pcep.controller.PcepClientListener; 32 import org.onosproject.pcep.controller.PcepClientListener;
33 import org.onosproject.pcep.controller.PcepEventListener; 33 import org.onosproject.pcep.controller.PcepEventListener;
34 import org.onosproject.pcep.controller.PcepNodeListener; 34 import org.onosproject.pcep.controller.PcepNodeListener;
35 +import org.onosproject.pcep.controller.PcepPacketListener;
35 import org.onosproject.pcep.controller.driver.PcepAgent; 36 import org.onosproject.pcep.controller.driver.PcepAgent;
36 import org.onosproject.pcepio.protocol.PcepError; 37 import org.onosproject.pcepio.protocol.PcepError;
37 import org.onosproject.pcepio.protocol.PcepErrorInfo; 38 import org.onosproject.pcepio.protocol.PcepErrorInfo;
...@@ -280,5 +281,23 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -280,5 +281,23 @@ public class PcepClientControllerAdapter implements PcepClientController {
280 l.deleteNode(pccId); 281 l.deleteNode(pccId);
281 } 282 }
282 } 283 }
284 +
285 + @Override
286 + public boolean analyzeSyncMsgList(PccId pccId) {
287 + // TODO Auto-generated method stub
288 + return false;
289 + }
290 + }
291 +
292 + @Override
293 + public void addPacketListener(PcepPacketListener listener) {
294 + // TODO Auto-generated method stub
295 +
296 + }
297 +
298 + @Override
299 + public void removePacketListener(PcepPacketListener listener) {
300 + // TODO Auto-generated method stub
301 +
283 } 302 }
284 } 303 }
......
...@@ -6,6 +6,7 @@ COMPILE_DEPS = [ ...@@ -6,6 +6,7 @@ COMPILE_DEPS = [
6 '//incubator/api:onos-incubator-api', 6 '//incubator/api:onos-incubator-api',
7 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio', 7 '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
8 '//protocols/pcep/api:onos-protocols-pcep-api', 8 '//protocols/pcep/api:onos-protocols-pcep-api',
9 + '//protocols/pcep/ctl:onos-protocols-pcep-ctl',
9 ] 10 ]
10 11
11 TEST_DEPS = [ 12 TEST_DEPS = [
......
...@@ -50,5 +50,10 @@ ...@@ -50,5 +50,10 @@
50 <version>${project.version} </version> 50 <version>${project.version} </version>
51 <scope>test</scope> 51 <scope>test</scope>
52 </dependency> 52 </dependency>
53 + <dependency>
54 + <groupId>org.onosproject</groupId>
55 + <artifactId>onos-pcep-controller-impl</artifactId>
56 + <version>${project.version} </version>
57 + </dependency>
53 </dependencies> 58 </dependencies>
54 </project> 59 </project>
......
...@@ -18,6 +18,7 @@ package org.onosproject.provider.pcep.tunnel.impl; ...@@ -18,6 +18,7 @@ package org.onosproject.provider.pcep.tunnel.impl;
18 import static org.junit.Assert.assertNotNull; 18 import static org.junit.Assert.assertNotNull;
19 19
20 import java.util.HashMap; 20 import java.util.HashMap;
21 +import java.util.LinkedList;
21 import java.util.List; 22 import java.util.List;
22 import java.util.Map; 23 import java.util.Map;
23 import java.util.concurrent.RejectedExecutionException; 24 import java.util.concurrent.RejectedExecutionException;
...@@ -31,6 +32,7 @@ import org.onosproject.pcep.controller.PcepSyncStatus; ...@@ -31,6 +32,7 @@ import org.onosproject.pcep.controller.PcepSyncStatus;
31 import org.onosproject.pcepio.protocol.PcepFactories; 32 import org.onosproject.pcepio.protocol.PcepFactories;
32 import org.onosproject.pcepio.protocol.PcepFactory; 33 import org.onosproject.pcepio.protocol.PcepFactory;
33 import org.onosproject.pcepio.protocol.PcepMessage; 34 import org.onosproject.pcepio.protocol.PcepMessage;
35 +import org.onosproject.pcepio.protocol.PcepStateReport;
34 import org.onosproject.pcepio.protocol.PcepVersion; 36 import org.onosproject.pcepio.protocol.PcepVersion;
35 37
36 /** 38 /**
...@@ -49,6 +51,7 @@ public class PcepClientAdapter implements PcepClient { ...@@ -49,6 +51,7 @@ public class PcepClientAdapter implements PcepClient {
49 private PcepSyncStatus lspDbSyncStatus; 51 private PcepSyncStatus lspDbSyncStatus;
50 private PcepSyncStatus labelDbSyncStatus; 52 private PcepSyncStatus labelDbSyncStatus;
51 private Map<LspKey, Boolean> lspDelegationInfo = new HashMap<>(); 53 private Map<LspKey, Boolean> lspDelegationInfo = new HashMap<>();
54 + private Map<PccId, List<PcepStateReport>> sycRptCache = new HashMap<>();
52 55
53 /** 56 /**
54 * Initialize instance with specified parameters. 57 * Initialize instance with specified parameters.
...@@ -161,4 +164,27 @@ public class PcepClientAdapter implements PcepClient { ...@@ -161,4 +164,27 @@ public class PcepClientAdapter implements PcepClient {
161 public Boolean delegationInfo(LspKey lspKey) { 164 public Boolean delegationInfo(LspKey lspKey) {
162 return lspDelegationInfo.get(lspKey); 165 return lspDelegationInfo.get(lspKey);
163 } 166 }
167 +
168 + @Override
169 + public void initializeSyncMsgList(PccId pccId) {
170 + List<PcepStateReport> rptMsgList = new LinkedList<>();
171 + sycRptCache.put(pccId, rptMsgList);
172 + }
173 +
174 + @Override
175 + public List<PcepStateReport> getSyncMsgList(PccId pccId) {
176 + return sycRptCache.get(pccId);
177 + }
178 +
179 + @Override
180 + public void removeSyncMsgList(PccId pccId) {
181 + sycRptCache.remove(pccId);
182 + }
183 +
184 + @Override
185 + public void addSyncMsgToList(PccId pccId, PcepStateReport rptMsg) {
186 + List<PcepStateReport> rptMsgList = sycRptCache.get(pccId);
187 + rptMsgList.add(rptMsg);
188 + sycRptCache.put(pccId, rptMsgList);
189 + }
164 } 190 }
......
...@@ -30,6 +30,7 @@ import org.onosproject.pcep.controller.PcepClientController; ...@@ -30,6 +30,7 @@ import org.onosproject.pcep.controller.PcepClientController;
30 import org.onosproject.pcep.controller.PcepClientListener; 30 import org.onosproject.pcep.controller.PcepClientListener;
31 import org.onosproject.pcep.controller.PcepEventListener; 31 import org.onosproject.pcep.controller.PcepEventListener;
32 import org.onosproject.pcep.controller.PcepNodeListener; 32 import org.onosproject.pcep.controller.PcepNodeListener;
33 +import org.onosproject.pcep.controller.PcepPacketListener;
33 import org.onosproject.pcep.controller.driver.PcepAgent; 34 import org.onosproject.pcep.controller.driver.PcepAgent;
34 import org.onosproject.pcepio.protocol.PcepError; 35 import org.onosproject.pcepio.protocol.PcepError;
35 import org.onosproject.pcepio.protocol.PcepErrorInfo; 36 import org.onosproject.pcepio.protocol.PcepErrorInfo;
...@@ -57,6 +58,7 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -57,6 +58,7 @@ public class PcepClientControllerAdapter implements PcepClientController {
57 58
58 protected Set<PcepEventListener> pcepEventListener = Sets.newHashSet(); 59 protected Set<PcepEventListener> pcepEventListener = Sets.newHashSet();
59 public Set<PcepNodeListener> pcepNodeListener = Sets.newHashSet(); 60 public Set<PcepNodeListener> pcepNodeListener = Sets.newHashSet();
61 + protected Set<PcepPacketListener> pcepPacketListener = Sets.newHashSet();
60 62
61 @Activate 63 @Activate
62 public void activate() { 64 public void activate() {
...@@ -116,6 +118,16 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -116,6 +118,16 @@ public class PcepClientControllerAdapter implements PcepClientController {
116 } 118 }
117 119
118 @Override 120 @Override
121 + public void addPacketListener(PcepPacketListener listener) {
122 + pcepPacketListener.add(listener);
123 + }
124 +
125 + @Override
126 + public void removePacketListener(PcepPacketListener listener) {
127 + pcepPacketListener.remove(listener);
128 + }
129 +
130 + @Override
119 public void writeMessage(PccId pccId, PcepMessage msg) { 131 public void writeMessage(PccId pccId, PcepMessage msg) {
120 this.getClient(pccId).sendMessage(msg); 132 this.getClient(pccId).sendMessage(msg);
121 } 133 }
...@@ -273,5 +285,11 @@ public class PcepClientControllerAdapter implements PcepClientController { ...@@ -273,5 +285,11 @@ public class PcepClientControllerAdapter implements PcepClientController {
273 l.deleteNode(pccId); 285 l.deleteNode(pccId);
274 } 286 }
275 } 287 }
288 +
289 + @Override
290 + public boolean analyzeSyncMsgList(PccId pccId) {
291 + // TODO Auto-generated method stub
292 + return false;
293 + }
276 } 294 }
277 } 295 }
......