blob: d6d7d617301e3d427d8897327cbb49bed84f8339 [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;
18import org.onosproject.incubator.protobuf.models.net.ConnectPointProtoTranslator;
19import org.onosproject.incubator.protobuf.models.net.LinkProtoTranslator;
20
21import com.google.common.annotations.Beta;
22import io.grpc.Server;
23import io.grpc.ServerBuilder;
24import io.grpc.stub.StreamObserver;
25import org.apache.felix.scr.annotations.Activate;
26import org.apache.felix.scr.annotations.Component;
27import org.apache.felix.scr.annotations.Deactivate;
28import org.apache.felix.scr.annotations.Reference;
29import org.apache.felix.scr.annotations.ReferenceCardinality;
30import org.onosproject.grpc.nb.net.link.LinkServiceGrpc.LinkServiceImplBase;
31import org.onosproject.net.ConnectPoint;
32import org.onosproject.net.DeviceId;
33import org.onosproject.net.link.LinkService;
34
35import java.io.IOException;
36
37import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkCountRequest;
38import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkCountReply;
39import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkRequest;
40import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinkReply;
41import org.onosproject.grpc.nb.net.link.LinkServiceNb.getActiveLinksRequest;
42import org.onosproject.grpc.nb.net.link.LinkServiceNb.getActiveLinksReply;
43import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceLinksRequest;
44import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceLinksReply;
45import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceEgressLinksRequest;
46import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceEgressLinksReply;
47import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceIngressLinksRequest;
48import org.onosproject.grpc.nb.net.link.LinkServiceNb.getDeviceIngressLinksReply;
49import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinksRequest;
50import org.onosproject.grpc.nb.net.link.LinkServiceNb.getLinksReply;
51import org.onosproject.grpc.nb.net.link.LinkServiceNb.getEgressLinksRequest;
52import org.onosproject.grpc.nb.net.link.LinkServiceNb.getEgressLinksReply;
53import org.onosproject.grpc.nb.net.link.LinkServiceNb.getIngressLinksRequest;
54import org.onosproject.grpc.nb.net.link.LinkServiceNb.getIngressLinksReply;
55import org.slf4j.Logger;
56import org.slf4j.LoggerFactory;
57
58/**
59 * A server that provides access to the methods exposed by {@link org.onosproject.net.link.LinkService}.
60 */
61@Beta
62@Component(immediate = true)
63public class GrpcNbLinkService {
64
65 private static final Logger log = LoggerFactory.getLogger(GrpcNbLinkService.class);
66
67
68 private Server server;
69 private LinkServiceNBServerInternal innerClassInstance = null;
70
71
72 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
73 protected LinkService linkService;
74
75 @Activate
76 public void activate() {
77 server = ServerBuilder.forPort(64000).addService(getInnerClassInstance()).build();
78 try {
79 server.start();
80 } catch (IOException e) {
81 log.error(e.getMessage(), e);
82 }
83 }
84
85 @Deactivate
86 public void deactivate() {
87 server.shutdown();
88 }
89
90 public class LinkServiceNBServerInternal extends LinkServiceImplBase {
91
92 public LinkServiceNBServerInternal() {
93 super();
94 }
95
96 @Override
97 public void getLinkCount(getLinkCountRequest request,
98 StreamObserver<getLinkCountReply> responseObserver) {
99 responseObserver
100 .onNext(getLinkCountReply
101 .newBuilder()
102 .setLinkCount(linkService.getLinkCount())
103 .build());
104 responseObserver.onCompleted();
105 }
106
107 @Override
108 public void getLink(getLinkRequest request,
109 StreamObserver<getLinkReply> responseObserver) {
110 ConnectPoint src = ConnectPointProtoTranslator.translate(request.getSrc()).get();
111 ConnectPoint dst = ConnectPointProtoTranslator.translate(request.getDst()).get();
112
113 org.onosproject.net.Link link = linkService.getLink(src, dst);
114 getLinkReply reply = getLinkReply.newBuilder()
115 .setLink(LinkProtoTranslator.translate(link)).build();
116
117 responseObserver.onNext(reply);
118 responseObserver.onCompleted();
119 }
120
121 @Override
122 public void getActiveLinks(getActiveLinksRequest request,
123 StreamObserver<getActiveLinksReply> responseObserver) {
124 getActiveLinksReply.Builder builder = getActiveLinksReply.newBuilder();
125 linkService.getActiveLinks().forEach(l -> {
126 builder.addLink(LinkProtoTranslator.translate(l));
127 });
128 responseObserver.onNext(builder.build());
129 responseObserver.onCompleted();
130 }
131
132 @Override
133 public void getDeviceLinks(getDeviceLinksRequest request,
134 StreamObserver<getDeviceLinksReply> responseObserver) {
135 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
136 getDeviceLinksReply.Builder builder = getDeviceLinksReply.newBuilder();
137 linkService.getDeviceLinks(deviceId).forEach(l -> {
138 builder.addLink(LinkProtoTranslator.translate(l));
139 });
140 responseObserver.onNext(builder.build());
141 responseObserver.onCompleted();
142 }
143
144 @Override
145 public void getDeviceEgressLinks(getDeviceEgressLinksRequest request,
146 StreamObserver<getDeviceEgressLinksReply> responseObserver) {
147 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
148 getDeviceEgressLinksReply.Builder builder = getDeviceEgressLinksReply.newBuilder();
149 linkService.getDeviceEgressLinks(deviceId).forEach(l -> {
150 builder.addLink(LinkProtoTranslator.translate(l));
151 });
152 responseObserver.onNext(builder.build());
153 responseObserver.onCompleted();
154 }
155
156 @Override
157 public void getDeviceIngressLinks(getDeviceIngressLinksRequest request,
158 StreamObserver<getDeviceIngressLinksReply> responseObserver) {
159 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
160 getDeviceIngressLinksReply.Builder builder = getDeviceIngressLinksReply.newBuilder();
161 linkService.getDeviceIngressLinks(deviceId).forEach(l -> {
162 builder.addLink(LinkProtoTranslator.translate(l));
163 });
164 responseObserver.onNext(builder.build());
165 responseObserver.onCompleted();
166 }
167
168 @Override
169 public void getEgressLinks(getEgressLinksRequest request,
170 StreamObserver<getEgressLinksReply> responseObserver) {
171 ConnectPoint connectPoint = ConnectPointProtoTranslator.translate(request.getConnectPoint()).get();
172 getEgressLinksReply.Builder builder = getEgressLinksReply.newBuilder();
173 linkService.getEgressLinks(connectPoint).forEach(l -> {
174 builder.addLink(LinkProtoTranslator.translate(l));
175 });
176 responseObserver.onNext(builder.build());
177 responseObserver.onCompleted();
178 }
179
180 @Override
181 public void getIngressLinks(getIngressLinksRequest request,
182 StreamObserver<getIngressLinksReply> responseObserver) {
183 ConnectPoint connectPoint = ConnectPointProtoTranslator.translate(request.getConnectPoint()).get();
184
185 getIngressLinksReply.Builder builder = getIngressLinksReply.newBuilder();
186 linkService.getIngressLinks(connectPoint).forEach(l -> {
187 builder.addLink(LinkProtoTranslator.translate(l));
188 });
189 responseObserver.onNext(builder.build());
190 responseObserver.onCompleted();
191 }
192
193 @Override
194 public void getLinks(getLinksRequest request,
195 StreamObserver<getLinksReply> responseObserver) {
196 ConnectPoint connectPoint = ConnectPointProtoTranslator.translate(request.getConnectPoint()).get();
197
198 getLinksReply.Builder builder = getLinksReply.newBuilder();
199 linkService.getLinks(connectPoint).forEach(l -> {
200 builder.addLink(LinkProtoTranslator.translate(l));
201 });
202 responseObserver.onNext(builder.build());
203 responseObserver.onCompleted();
204 }
205 }
206
207 public LinkServiceNBServerInternal getInnerClassInstance() {
208 if (innerClassInstance == null) {
209 innerClassInstance = new LinkServiceNBServerInternal();
210 }
211 return innerClassInstance;
212 }
213}
214
215
216