blob: e8fc1c7fed7a3fa5d335edde49e65efa99f2c82d [file] [log] [blame]
Satish K2eb5d842017-04-04 16:28:37 +05301/*
2 * Copyright 2017-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 */
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 }
72 return unResvBw.iterator().next().doubleValue();
73 }
74
75 @Override
76 public boolean allocLocalReservedBw(LinkKey linkKey, Double bandwidth) {
77 checkNotNull(linkKey);
78 checkNotNull(bandwidth);
79 return store.allocLocalReservedBw(linkKey, bandwidth);
80 }
81
82 @Override
83 public boolean releaseLocalReservedBw(LinkKey linkkey, Double bandwidth) {
84 checkNotNull(linkkey);
85 checkNotNull(bandwidth);
86 return store.releaseLocalReservedBw(linkkey, bandwidth);
87 }
88
89 @Override
90 public Double getAllocatedLocalReservedBw(LinkKey linkkey) {
91 checkNotNull(linkkey);
92 return store.getAllocatedLocalReservedBw(linkkey);
93 }
94
95 @Override
96 public boolean addUnreservedBw(LinkKey linkKey, Set<Double> bandwidth) {
97 checkNotNull(linkKey);
98 checkNotNull(bandwidth);
99 return store.addUnreservedBw(linkKey, bandwidth);
100 }
101
102 @Override
103 public boolean removeUnreservedBw(LinkKey linkkey) {
104 checkNotNull(linkkey);
105 return store.removeUnreservedBw(linkkey);
106 }
107
108 @Override
109 public Set<Double> getUnreservedBw(LinkKey linkkey) {
110 checkNotNull(linkkey);
111 return store.getUnreservedBw(linkkey);
112 }
113
114 @Override
115 public boolean isBandwidthAvailable(Link link, Double bandwidth) {
116 checkNotNull(link);
117 checkNotNull(bandwidth);
118
119 LinkKey linkKey = LinkKey.linkKey(link);
120 Double localAllocBw = getAllocatedLocalReservedBw(linkKey);
121
122 Set<Double> unResvBw = getUnreservedBw(linkKey);
123 Double prirZeroBw = unResvBw.iterator().next();
124
125 return (bandwidth <= prirZeroBw - (localAllocBw != null ? localAllocBw : 0));
126 }
127}