Toshio Koide

Starting point for designing a resource manager API.

1 +package org.onlab.onos.net.resource;
2 +
3 +import java.util.Objects;
4 +
5 +/**
6 + * Representation of bandwidth resource.
7 + */
8 +public final class Bandwidth extends LinkResource {
9 +
10 + private final double bandwidth;
11 +
12 + /**
13 + * Creates a new instance with given bandwidth.
14 + *
15 + * @param bandwidth bandwidth value to be assigned
16 + */
17 + private Bandwidth(double bandwidth) {
18 + this.bandwidth = bandwidth;
19 + }
20 +
21 + /**
22 + * Creates a new instance with given bandwidth.
23 + *
24 + * @param bandwidth bandwidth value to be assigned
25 + * @return {@link Bandwidth} instance with given bandwidth
26 + */
27 + public static Bandwidth valueOf(double bandwidth) {
28 + return new Bandwidth(bandwidth);
29 + }
30 +
31 + /**
32 + * Returns bandwidth as a double value.
33 + *
34 + * @return bandwidth as a double value
35 + */
36 + public double toDouble() {
37 + return bandwidth;
38 + }
39 +
40 + @Override
41 + public boolean equals(Object obj) {
42 + if (obj instanceof Bandwidth) {
43 + Bandwidth that = (Bandwidth) obj;
44 + return Objects.equals(this.bandwidth, that.bandwidth);
45 + }
46 + return false;
47 + }
48 +
49 + @Override
50 + public int hashCode() {
51 + return Objects.hashCode(this.bandwidth);
52 + }
53 +
54 + @Override
55 + public String toString() {
56 + return String.valueOf(this.bandwidth);
57 + }
58 +}
1 +package org.onlab.onos.net.resource;
2 +
3 +import java.util.Objects;
4 +
5 +/**
6 + * Representation of lambda resource.
7 + */
8 +public final class Lambda extends LinkResource {
9 +
10 + private final int lambda;
11 +
12 + /**
13 + * Creates a new instance with given lambda.
14 + *
15 + * @param lambda lambda value to be assigned
16 + */
17 + private Lambda(int lambda) {
18 + this.lambda = lambda;
19 + }
20 +
21 + /**
22 + * Creates a new instance with given lambda.
23 + *
24 + * @param lambda lambda value to be assigned
25 + * @return {@link Lambda} instance with given lambda
26 + */
27 + public static Lambda valueOf(int lambda) {
28 + return new Lambda(lambda);
29 + }
30 +
31 + /**
32 + * Returns lambda as an int value.
33 + * @return lambda as an int value
34 + */
35 + public int toInt() {
36 + return lambda;
37 + }
38 +
39 + @Override
40 + public boolean equals(Object obj) {
41 + if (obj instanceof Lambda) {
42 + Lambda that = (Lambda) obj;
43 + return Objects.equals(this.lambda, that.lambda);
44 + }
45 + return false;
46 + }
47 +
48 + @Override
49 + public int hashCode() {
50 + return Objects.hashCode(this.lambda);
51 + }
52 +
53 + @Override
54 + public String toString() {
55 + return String.valueOf(this.lambda);
56 + }
57 +
58 +}
1 +package org.onlab.onos.net.resource;
2 +
3 +/**
4 + * Abstraction of link resource.
5 + */
6 +public abstract class LinkResource {
7 +
8 +}
1 +package org.onlab.onos.net.resource;
2 +
3 +import java.util.Map;
4 +
5 +import org.onlab.onos.net.Link;
6 +import org.onlab.onos.net.intent.IntentId;
7 +import org.onlab.onos.net.intent.PathIntent;
8 +
9 +/**
10 + * Service for providing link resource allocation.
11 + */
12 +public interface LinkResourceService {
13 +
14 + /**
15 + * Allocates resources along the path.
16 + * <p>
17 + * Tries to allocate given resources on the links along the path specified
18 + * by the given intent.
19 + *
20 + * @param res resources to be allocated
21 + * @param intent an intent to be used for specifying the path
22 + */
23 + void allocateResource(LinkResources res, PathIntent intent);
24 +
25 + /**
26 + * Releases resources along the path.
27 + *
28 + * @param intentId an ID for the intent for specifying the path
29 + */
30 + void releaseResource(IntentId intentId);
31 +
32 + /**
33 + * Returns all allocated resources to each link.
34 + *
35 + * @return allocated resources to each link with {@link IntentId}
36 + */
37 + Map<Link, Map<IntentId, LinkResources>> allocatedResources();
38 +
39 + /**
40 + * Returns all allocated resources to given link.
41 + *
42 + * @param link a target link
43 + * @return allocated resources to the target link with {@link IntentId}
44 + */
45 + Map<IntentId, LinkResources> allocatedResources(Link link);
46 +
47 + /**
48 + * Returns available resources for each link.
49 + *
50 + * @return available resources for each link
51 + */
52 + Map<Link, LinkResources> availableResources();
53 +
54 + /**
55 + * Returns available resources for given link.
56 + * @param link a target link
57 + * @return available resources for the target link
58 + */
59 + LinkResource availableResources(Link link);
60 +}
1 +package org.onlab.onos.net.resource;
2 +
3 +import java.util.Set;
4 +
5 +/**
6 + * Abstraction of a resources of a link.
7 + */
8 +public interface LinkResources {
9 +
10 + /**
11 + * Returns resources as a set of {@link LinkResource}s.
12 + *
13 + * @return a set of {@link LinkResource}s
14 + */
15 + Set<LinkResource> resources();
16 +
17 + /**
18 + * Builder of {@link LinkResources}.
19 + */
20 + public interface Builder {
21 +
22 + /**
23 + * Adds bandwidth resource.
24 + * <p>
25 + * This operation adds given bandwidth to previous bandwidth and
26 + * generates single bandwidth resource.
27 + *
28 + * @param bandwidth bandwidth value to be added
29 + * @return self
30 + */
31 + public Builder addBandwidth(double bandwidth);
32 +
33 + /**
34 + * Adds lambda resource.
35 + *
36 + * @param lambda lambda value to be added
37 + * @return self
38 + */
39 + public Builder addLambda(int lambda);
40 +
41 + /**
42 + * Builds an immutable link resources.
43 + *
44 + * @return link resources
45 + */
46 + public LinkResources build();
47 + }
48 +}