blob: fbf956d6298939be9210900e6e3ea224b1a6eedd [file] [log] [blame]
shivani vaidya9632b5f2017-06-27 11:00:04 -07001/*
2* Copyright 2017-present Open Networking Foundation
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
17package org.onosproject.incubator.protobuf.services.nb;
shivani vaidya9632b5f2017-06-27 11:00:04 -070018
19import com.google.common.annotations.Beta;
Jian Libfad56f22017-10-20 18:41:18 +090020import io.grpc.BindableService;
shivani vaidya9632b5f2017-06-27 11:00:04 -070021import io.grpc.stub.StreamObserver;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070022import org.osgi.service.component.annotations.Activate;
23import org.osgi.service.component.annotations.Component;
24import org.osgi.service.component.annotations.Deactivate;
25import org.osgi.service.component.annotations.Reference;
26import org.osgi.service.component.annotations.ReferenceCardinality;
shivani vaidya9632b5f2017-06-27 11:00:04 -070027import org.onosproject.grpc.nb.net.link.LinkServiceGrpc.LinkServiceImplBase;
Jian Libfad56f22017-10-20 18:41:18 +090028import org.onosproject.grpc.nb.net.link.LinkServiceNb;
29import org.onosproject.grpc.nb.net.link.LinkServiceNb.getActiveLinksReply;
30import org.onosproject.grpc.nb.net.link.LinkServiceNb.getActiveLinksRequest;
31import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceEgressLinksReply;
32import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceEgressLinksRequest;
33import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceIngressLinksReply;
34import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceIngressLinksRequest;
35import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceLinksReply;
36import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceLinksRequest;
37import org.onosproject.grpc.nb.net.link.LinkServiceNb.getEgressLinksReply;
38import org.onosproject.grpc.nb.net.link.LinkServiceNb.getEgressLinksRequest;
39import org.onosproject.grpc.nb.net.link.LinkServiceNb.getIngressLinksReply;
40import org.onosproject.grpc.nb.net.link.LinkServiceNb.getIngressLinksRequest;
41import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkCountReply;
42import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkCountRequest;
43import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkReply;
44import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkRequest;
45import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinksReply;
46import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinksRequest;
47import org.onosproject.incubator.protobuf.models.net.ConnectPointProtoTranslator;
48import org.onosproject.incubator.protobuf.models.net.LinkProtoTranslator;
shivani vaidya9632b5f2017-06-27 11:00:04 -070049import org.onosproject.net.ConnectPoint;
50import org.onosproject.net.DeviceId;
51import org.onosproject.net.link.LinkService;
Jian Libfad56f22017-10-20 18:41:18 +090052import org.onosproject.protobuf.api.GrpcServiceRegistry;
shivani vaidya9632b5f2017-06-27 11:00:04 -070053import org.slf4j.Logger;
54import org.slf4j.LoggerFactory;
55
56/**
57 * A server that provides access to the methods exposed by {@link org.onosproject.net.link.LinkService}.
58 */
59@Beta
60@Component(immediate = true)
61public class GrpcNbLinkService {
62
63 private static final Logger log = LoggerFactory.getLogger(GrpcNbLinkService.class);
64
Ray Milkeyd84f89b2018-08-17 14:54:17 -070065 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Jian Libfad56f22017-10-20 18:41:18 +090066 protected GrpcServiceRegistry registry;
shivani vaidya9632b5f2017-06-27 11:00:04 -070067
Ray Milkeyd84f89b2018-08-17 14:54:17 -070068 @Reference(cardinality = ReferenceCardinality.MANDATORY)
shivani vaidya9632b5f2017-06-27 11:00:04 -070069 protected LinkService linkService;
70
Jian Libfad56f22017-10-20 18:41:18 +090071 private LinkServiceNbServerInternal innerClassInstance;
72
shivani vaidya9632b5f2017-06-27 11:00:04 -070073 @Activate
74 public void activate() {
Jian Libfad56f22017-10-20 18:41:18 +090075
76 registry.register(getInnerInstance());
77 log.info("Started.");
shivani vaidya9632b5f2017-06-27 11:00:04 -070078 }
79
80 @Deactivate
81 public void deactivate() {
Jian Libfad56f22017-10-20 18:41:18 +090082
83 registry.unregister(getInnerInstance());
84 log.info("Stopped.");
shivani vaidya9632b5f2017-06-27 11:00:04 -070085 }
86
Jian Libfad56f22017-10-20 18:41:18 +090087 /**
88 * Register Link Service, used for unit testing purposes.
89 *
90 * @return An instance of binding Link service
91 */
92 public InProcessServer<BindableService> registerInProcessServer() {
93 InProcessServer<BindableService> inprocessServer =
94 new InProcessServer(LinkServiceNb.class);
95 inprocessServer.addServiceToBind(getInnerInstance());
shivani vaidya9632b5f2017-06-27 11:00:04 -070096
Jian Libfad56f22017-10-20 18:41:18 +090097 return inprocessServer;
98 }
99
100 private class LinkServiceNbServerInternal extends LinkServiceImplBase {
101
102 public LinkServiceNbServerInternal() {
shivani vaidya9632b5f2017-06-27 11:00:04 -0700103 super();
104 }
105
106 @Override
107 public void getLinkCount(getLinkCountRequest request,
108 StreamObserver<getLinkCountReply> responseObserver) {
109 responseObserver
110 .onNext(getLinkCountReply
111 .newBuilder()
112 .setLinkCount(linkService.getLinkCount())
113 .build());
114 responseObserver.onCompleted();
115 }
116
117 @Override
118 public void getLink(getLinkRequest request,
119 StreamObserver<getLinkReply> responseObserver) {
120 ConnectPoint src = ConnectPointProtoTranslator.translate(request.getSrc()).get();
121 ConnectPoint dst = ConnectPointProtoTranslator.translate(request.getDst()).get();
122
123 org.onosproject.net.Link link = linkService.getLink(src, dst);
124 getLinkReply reply = getLinkReply.newBuilder()
125 .setLink(LinkProtoTranslator.translate(link)).build();
126
127 responseObserver.onNext(reply);
128 responseObserver.onCompleted();
129 }
130
131 @Override
132 public void getActiveLinks(getActiveLinksRequest request,
133 StreamObserver<getActiveLinksReply> responseObserver) {
134 getActiveLinksReply.Builder builder = getActiveLinksReply.newBuilder();
135 linkService.getActiveLinks().forEach(l -> {
136 builder.addLink(LinkProtoTranslator.translate(l));
137 });
138 responseObserver.onNext(builder.build());
139 responseObserver.onCompleted();
140 }
141
142 @Override
143 public void getDeviceLinks(getDeviceLinksRequest request,
144 StreamObserver<getDeviceLinksReply> responseObserver) {
145 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
146 getDeviceLinksReply.Builder builder = getDeviceLinksReply.newBuilder();
147 linkService.getDeviceLinks(deviceId).forEach(l -> {
148 builder.addLink(LinkProtoTranslator.translate(l));
149 });
150 responseObserver.onNext(builder.build());
151 responseObserver.onCompleted();
152 }
153
154 @Override
155 public void getDeviceEgressLinks(getDeviceEgressLinksRequest request,
156 StreamObserver<getDeviceEgressLinksReply> responseObserver) {
157 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
158 getDeviceEgressLinksReply.Builder builder = getDeviceEgressLinksReply.newBuilder();
159 linkService.getDeviceEgressLinks(deviceId).forEach(l -> {
160 builder.addLink(LinkProtoTranslator.translate(l));
161 });
162 responseObserver.onNext(builder.build());
163 responseObserver.onCompleted();
164 }
165
166 @Override
167 public void getDeviceIngressLinks(getDeviceIngressLinksRequest request,
168 StreamObserver<getDeviceIngressLinksReply> responseObserver) {
169 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
170 getDeviceIngressLinksReply.Builder builder = getDeviceIngressLinksReply.newBuilder();
171 linkService.getDeviceIngressLinks(deviceId).forEach(l -> {
172 builder.addLink(LinkProtoTranslator.translate(l));
173 });
174 responseObserver.onNext(builder.build());
175 responseObserver.onCompleted();
176 }
177
178 @Override
179 public void getEgressLinks(getEgressLinksRequest request,
180 StreamObserver<getEgressLinksReply> responseObserver) {
181 ConnectPoint connectPoint = ConnectPointProtoTranslator.translate(request.getConnectPoint()).get();
182 getEgressLinksReply.Builder builder = getEgressLinksReply.newBuilder();
183 linkService.getEgressLinks(connectPoint).forEach(l -> {
184 builder.addLink(LinkProtoTranslator.translate(l));
185 });
186 responseObserver.onNext(builder.build());
187 responseObserver.onCompleted();
188 }
189
190 @Override
191 public void getIngressLinks(getIngressLinksRequest request,
192 StreamObserver<getIngressLinksReply> responseObserver) {
193 ConnectPoint connectPoint = ConnectPointProtoTranslator.translate(request.getConnectPoint()).get();
194
195 getIngressLinksReply.Builder builder = getIngressLinksReply.newBuilder();
196 linkService.getIngressLinks(connectPoint).forEach(l -> {
197 builder.addLink(LinkProtoTranslator.translate(l));
198 });
199 responseObserver.onNext(builder.build());
200 responseObserver.onCompleted();
201 }
202
203 @Override
204 public void getLinks(getLinksRequest request,
205 StreamObserver<getLinksReply> responseObserver) {
206 ConnectPoint connectPoint = ConnectPointProtoTranslator.translate(request.getConnectPoint()).get();
207
208 getLinksReply.Builder builder = getLinksReply.newBuilder();
209 linkService.getLinks(connectPoint).forEach(l -> {
210 builder.addLink(LinkProtoTranslator.translate(l));
211 });
212 responseObserver.onNext(builder.build());
213 responseObserver.onCompleted();
214 }
215 }
216
Jian Libfad56f22017-10-20 18:41:18 +0900217 private LinkServiceNbServerInternal getInnerInstance() {
shivani vaidya9632b5f2017-06-27 11:00:04 -0700218 if (innerClassInstance == null) {
Jian Libfad56f22017-10-20 18:41:18 +0900219 innerClassInstance = new LinkServiceNbServerInternal();
shivani vaidya9632b5f2017-06-27 11:00:04 -0700220 }
221 return innerClassInstance;
222 }
223}
224
225
226