blob: 4316626d8ec670b9ad74591ffba847dade619e14 [file] [log] [blame]
Satish K2eb5d842017-04-04 16:28:37 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Satish K2eb5d842017-04-04 16:28:37 +05303 *
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 */
16package org.onosproject.bandwidthmgr;
17
18import org.apache.felix.scr.annotations.Activate;
19import org.apache.felix.scr.annotations.Component;
20import org.apache.felix.scr.annotations.Deactivate;
21import org.apache.felix.scr.annotations.Reference;
22import org.apache.felix.scr.annotations.ReferenceCardinality;
23import org.apache.felix.scr.annotations.Service;
24import org.onosproject.net.Link;
25import org.onosproject.net.LinkKey;
26import org.onosproject.bandwidthmgr.api.BandwidthMgmtService;
27import org.onosproject.bandwidthmgr.api.BandwidthMgmtStore;
28import org.slf4j.Logger;
29import org.slf4j.LoggerFactory;
30
31import java.util.Set;
32
33import static com.google.common.base.Preconditions.checkNotNull;
34
35/**
36 * Implementation of PCE service.
37 */
38@Component(immediate = true)
39@Service
40public class BandwidthManager implements BandwidthMgmtService {
41 private static final Logger log = LoggerFactory.getLogger(BandwidthManager.class);
42
43 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
44 protected BandwidthMgmtStore store;
45
46 @Activate
47 protected void activate() {
48 log.info("Started");
49 }
50
51 @Deactivate
52 protected void deactivate() {
53 log.info("Stopped");
54 }
55
56 @Override
57 public Double getTeCost(LinkKey linkKey) {
58 checkNotNull(linkKey);
59 return store.getTeCost(linkKey);
60 }
61
62 @Override
63 public Double getAvailableBandwidth(LinkKey linkKey) {
64 checkNotNull(linkKey);
65 Set<Double> unResvBw = getUnreservedBw(linkKey);
66 Double localReservedBw = getAllocatedLocalReservedBw(linkKey);
67 if (unResvBw != null && localReservedBw != null) {
68
69 return unResvBw.iterator().next().doubleValue()
70 - localReservedBw.doubleValue();
71 }
rohitsharanbe94db92017-04-17 17:28:20 +053072 if (unResvBw != null) {
73 return unResvBw.iterator().next().doubleValue();
74 } else {
75 return null;
76 }
Satish K2eb5d842017-04-04 16:28:37 +053077 }
78
79 @Override
80 public boolean allocLocalReservedBw(LinkKey linkKey, Double bandwidth) {
81 checkNotNull(linkKey);
82 checkNotNull(bandwidth);
83 return store.allocLocalReservedBw(linkKey, bandwidth);
84 }
85
86 @Override
87 public boolean releaseLocalReservedBw(LinkKey linkkey, Double bandwidth) {
88 checkNotNull(linkkey);
89 checkNotNull(bandwidth);
90 return store.releaseLocalReservedBw(linkkey, bandwidth);
91 }
92
93 @Override
94 public Double getAllocatedLocalReservedBw(LinkKey linkkey) {
95 checkNotNull(linkkey);
96 return store.getAllocatedLocalReservedBw(linkkey);
97 }
98
99 @Override
100 public boolean addUnreservedBw(LinkKey linkKey, Set<Double> bandwidth) {
101 checkNotNull(linkKey);
102 checkNotNull(bandwidth);
103 return store.addUnreservedBw(linkKey, bandwidth);
104 }
105
106 @Override
107 public boolean removeUnreservedBw(LinkKey linkkey) {
108 checkNotNull(linkkey);
109 return store.removeUnreservedBw(linkkey);
110 }
111
112 @Override
113 public Set<Double> getUnreservedBw(LinkKey linkkey) {
114 checkNotNull(linkkey);
115 return store.getUnreservedBw(linkkey);
116 }
117
118 @Override
119 public boolean isBandwidthAvailable(Link link, Double bandwidth) {
120 checkNotNull(link);
121 checkNotNull(bandwidth);
122
123 LinkKey linkKey = LinkKey.linkKey(link);
124 Double localAllocBw = getAllocatedLocalReservedBw(linkKey);
125
126 Set<Double> unResvBw = getUnreservedBw(linkKey);
127 Double prirZeroBw = unResvBw.iterator().next();
128
129 return (bandwidth <= prirZeroBw - (localAllocBw != null ? localAllocBw : 0));
130 }
rohitsharanbe94db92017-04-17 17:28:20 +0530131}