blob: cd8cc5c4a4feeb3fa82b929c7c2ce7400aa47942 [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska781d18b2014-10-27 10:31:25 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * 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
Thomas Vachuska781d18b2014-10-27 10:31:25 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * 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.
Thomas Vachuska781d18b2014-10-27 10:31:25 -070015 */
Thomas Vachuska140d5852014-10-16 12:17:45 -070016package org.onlab.onos.calendar;
17
Ray Milkeycaa450b2014-10-29 15:54:24 -070018import java.net.URI;
Thomas Vachuska140d5852014-10-16 12:17:45 -070019
20import javax.ws.rs.POST;
21import javax.ws.rs.Path;
22import javax.ws.rs.PathParam;
23import javax.ws.rs.core.Response;
Ray Milkeycaa450b2014-10-29 15:54:24 -070024
25import org.onlab.onos.core.ApplicationId;
26import org.onlab.onos.core.CoreService;
27import org.onlab.onos.net.ConnectPoint;
28import org.onlab.onos.net.DeviceId;
29import org.onlab.onos.net.flow.DefaultTrafficSelector;
30import org.onlab.onos.net.flow.TrafficSelector;
31import org.onlab.onos.net.flow.TrafficTreatment;
32import org.onlab.onos.net.intent.Intent;
33import org.onlab.onos.net.intent.IntentService;
34import org.onlab.onos.net.intent.PointToPointIntentWithBandwidthConstraint;
35import org.onlab.onos.net.resource.BandwidthResourceRequest;
36import org.onlab.packet.Ethernet;
37import org.onlab.rest.BaseResource;
Thomas Vachuska140d5852014-10-16 12:17:45 -070038
39import static org.onlab.onos.net.PortNumber.portNumber;
Ray Milkeycaa450b2014-10-29 15:54:24 -070040import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
Thomas Vachuska140d5852014-10-16 12:17:45 -070041
42/**
43 * Web resource for triggering calendared intents.
44 */
45@Path("intent")
46public class BandwidthCalendarResource extends BaseResource {
47
48 @POST
49 @Path("{src}/{dst}/{srcPort}/{dstPort}/{bandwidth}")
50 public Response createIntent(@PathParam("src") String src,
51 @PathParam("dst") String dst,
52 @PathParam("srcPort") String srcPort,
53 @PathParam("dstPort") String dstPort,
54 @PathParam("bandwidth") String bandwidth) {
55 // TODO: implement calls to intent framework
56 IntentService service = get(IntentService.class);
57
58 ConnectPoint srcPoint = new ConnectPoint(deviceId(src), portNumber(srcPort));
59 ConnectPoint dstPoint = new ConnectPoint(deviceId(dst), portNumber(dstPort));
60
Ray Milkeycaa450b2014-10-29 15:54:24 -070061 TrafficSelector selector = buildTrafficSelector();
62 TrafficTreatment treatment = builder().build();
63
64 Intent intent = new PointToPointIntentWithBandwidthConstraint(
65 appId(), selector, treatment,
66 srcPoint, dstPoint, new BandwidthResourceRequest(Double.parseDouble(bandwidth)));
67 service.submit(intent);
68
Thomas Vachuska140d5852014-10-16 12:17:45 -070069 return Response.ok("Yo! We got src=" + srcPoint + "; dst=" + dstPoint +
70 "; bw=" + bandwidth + "; intent service " + service).build();
71 }
72
Ray Milkeycaa450b2014-10-29 15:54:24 -070073 private TrafficSelector buildTrafficSelector() {
74 TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder();
75 Short ethType = Ethernet.TYPE_IPV4;
76
77 selectorBuilder.matchEthType(ethType);
78
79 return selectorBuilder.build();
80 }
81
Thomas Vachuska140d5852014-10-16 12:17:45 -070082 private DeviceId deviceId(String dpid) {
83 return DeviceId.deviceId(URI.create("of:" + dpid));
84 }
85
Ray Milkeycaa450b2014-10-29 15:54:24 -070086 protected ApplicationId appId() {
87 return get(CoreService.class).registerApplication("org.onlab.onos.calendar");
88 }
89
Thomas Vachuska140d5852014-10-16 12:17:45 -070090}