Updated. Build a OVSDB driver and its associated behaviors for
supporting application to create VxLAN/GRE tunnels This code is for JIRA ONOS-2181. Change-Id: If7f341a422620a9e885741d4cc412fad39438d89
Showing
9 changed files
with
615 additions
and
0 deletions
1 | +/* | ||
2 | + * Copyright 2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import java.util.Collection; | ||
19 | + | ||
20 | +import org.onosproject.net.device.PortDescription; | ||
21 | +import org.onosproject.net.driver.HandlerBehaviour; | ||
22 | + | ||
23 | +/** | ||
24 | + * Behaviour for handling various drivers for bridge configurations. | ||
25 | + */ | ||
26 | +public interface BridgeConfig extends HandlerBehaviour { | ||
27 | + | ||
28 | + /** | ||
29 | + * Add a bridge. | ||
30 | + * | ||
31 | + * @param bridgeName bridge name | ||
32 | + */ | ||
33 | + void addBridge(BridgeName bridgeName); | ||
34 | + | ||
35 | + /** | ||
36 | + * Remove a bridge. | ||
37 | + * | ||
38 | + * @param bridgeName bridge name | ||
39 | + */ | ||
40 | + void deleteBridge(BridgeName bridgeName); | ||
41 | + | ||
42 | + /** | ||
43 | + * Remove a bridge. | ||
44 | + * | ||
45 | + * @return bridge collection | ||
46 | + */ | ||
47 | + Collection<BridgeDescription> getBridges(); | ||
48 | + | ||
49 | + /** | ||
50 | + * Add a logical/virtual port. | ||
51 | + * | ||
52 | + * @param port port number | ||
53 | + */ | ||
54 | + void addPort(PortDescription port); | ||
55 | + | ||
56 | + /** | ||
57 | + * Delete a logical/virtual port. | ||
58 | + * | ||
59 | + * @param port port number | ||
60 | + */ | ||
61 | + void deletePort(PortDescription port); | ||
62 | + | ||
63 | + /** | ||
64 | + * Delete a logical/virtual port. | ||
65 | + * | ||
66 | + * return collection of port | ||
67 | + */ | ||
68 | + Collection<PortDescription> getPorts(); | ||
69 | +} |
1 | +/* | ||
2 | + * Copyright 2014-2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import org.onosproject.net.Description; | ||
19 | +import org.onosproject.net.DeviceId; | ||
20 | + | ||
21 | +/** | ||
22 | + * The abstraction of bridge in OVSDB protocol. | ||
23 | + */ | ||
24 | +public interface BridgeDescription extends Description { | ||
25 | + | ||
26 | + /** | ||
27 | + * Returns bridge name. | ||
28 | + * | ||
29 | + * @return bridge name | ||
30 | + */ | ||
31 | + BridgeName bridgeName(); | ||
32 | + | ||
33 | + /** | ||
34 | + * Returns controller identifier that this bridge belongs to. | ||
35 | + * | ||
36 | + * @return controller identifier | ||
37 | + */ | ||
38 | + DeviceId cotrollerDeviceId(); | ||
39 | + | ||
40 | + /** | ||
41 | + * Returns bridge identifier . | ||
42 | + * | ||
43 | + * @return bridge identifier | ||
44 | + */ | ||
45 | + DeviceId deviceId(); | ||
46 | +} |
1 | +/* | ||
2 | + * Copyright 2014-2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import java.util.Objects; | ||
19 | + | ||
20 | +import com.google.common.base.MoreObjects; | ||
21 | + | ||
22 | +/** | ||
23 | + * Represents for a bridge name. | ||
24 | + */ | ||
25 | +public final class BridgeName { | ||
26 | + | ||
27 | + private final String name; | ||
28 | + | ||
29 | + // Public construction is prohibited | ||
30 | + private BridgeName(String name) { | ||
31 | + this.name = name; | ||
32 | + } | ||
33 | + | ||
34 | + /** | ||
35 | + * Creates a bridge name using the supplied string. | ||
36 | + * | ||
37 | + * @param name bridge name | ||
38 | + * @return BridgeName | ||
39 | + */ | ||
40 | + public static BridgeName bridgeName(String name) { | ||
41 | + return new BridgeName(name); | ||
42 | + } | ||
43 | + | ||
44 | + /** | ||
45 | + * Returns the bridge name string. | ||
46 | + * | ||
47 | + * @return name string | ||
48 | + */ | ||
49 | + public String name() { | ||
50 | + return name; | ||
51 | + } | ||
52 | + | ||
53 | + @Override | ||
54 | + public int hashCode() { | ||
55 | + return Objects.hash(name); | ||
56 | + } | ||
57 | + | ||
58 | + @Override | ||
59 | + public boolean equals(Object obj) { | ||
60 | + if (this == obj) { | ||
61 | + return true; | ||
62 | + } | ||
63 | + if (obj instanceof BridgeName) { | ||
64 | + final BridgeName that = (BridgeName) obj; | ||
65 | + return this.getClass() == that.getClass() && | ||
66 | + Objects.equals(this.name, that.name); | ||
67 | + } | ||
68 | + return false; | ||
69 | + } | ||
70 | + | ||
71 | + @Override | ||
72 | + public String toString() { | ||
73 | + return MoreObjects.toStringHelper(getClass()) | ||
74 | + .add("name", name) | ||
75 | + .toString(); | ||
76 | + } | ||
77 | + | ||
78 | +} |
1 | +/* | ||
2 | + * Copyright 2014-2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import java.util.Objects; | ||
19 | + | ||
20 | +import org.onosproject.net.AbstractDescription; | ||
21 | +import org.onosproject.net.DeviceId; | ||
22 | +import org.onosproject.net.SparseAnnotations; | ||
23 | + | ||
24 | +import com.google.common.base.MoreObjects; | ||
25 | + | ||
26 | +/** | ||
27 | + * The default implementation of bridge. | ||
28 | + */ | ||
29 | +public final class DefaultBridgeDescription extends AbstractDescription | ||
30 | + implements BridgeDescription { | ||
31 | + | ||
32 | + private final BridgeName name; | ||
33 | + private final DeviceId deviceId; | ||
34 | + private final DeviceId controllerId; | ||
35 | + | ||
36 | + public DefaultBridgeDescription(BridgeName name, DeviceId controllerId, | ||
37 | + DeviceId deviceId, | ||
38 | + SparseAnnotations... annotations) { | ||
39 | + super(annotations); | ||
40 | + this.name = name; | ||
41 | + this.deviceId = deviceId; | ||
42 | + this.controllerId = controllerId; | ||
43 | + } | ||
44 | + | ||
45 | + @Override | ||
46 | + public BridgeName bridgeName() { | ||
47 | + return name; | ||
48 | + } | ||
49 | + | ||
50 | + @Override | ||
51 | + public DeviceId deviceId() { | ||
52 | + return deviceId; | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public DeviceId cotrollerDeviceId() { | ||
57 | + return controllerId; | ||
58 | + } | ||
59 | + | ||
60 | + @Override | ||
61 | + public int hashCode() { | ||
62 | + return Objects.hash(name, deviceId, controllerId); | ||
63 | + } | ||
64 | + | ||
65 | + @Override | ||
66 | + public boolean equals(Object obj) { | ||
67 | + if (this == obj) { | ||
68 | + return true; | ||
69 | + } | ||
70 | + if (obj instanceof DefaultBridgeDescription) { | ||
71 | + final DefaultBridgeDescription that = (DefaultBridgeDescription) obj; | ||
72 | + return this.getClass() == that.getClass() | ||
73 | + && Objects.equals(this.name, that.name) | ||
74 | + && Objects.equals(this.deviceId, that.deviceId) | ||
75 | + && Objects.equals(this.controllerId, that.controllerId); | ||
76 | + } | ||
77 | + return false; | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
81 | + public String toString() { | ||
82 | + return MoreObjects.toStringHelper(getClass()).add("name", name) | ||
83 | + .add("deviceId", deviceId).add("controllerId", controllerId) | ||
84 | + .toString(); | ||
85 | + } | ||
86 | + | ||
87 | +} |
1 | +/* | ||
2 | + * Copyright 2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import org.onosproject.net.AbstractDescription; | ||
19 | +import org.onosproject.net.SparseAnnotations; | ||
20 | + | ||
21 | +import com.google.common.annotations.Beta; | ||
22 | +import com.google.common.base.MoreObjects; | ||
23 | + | ||
24 | +/** | ||
25 | + * Default implementation of immutable tunnel description entity. | ||
26 | + */ | ||
27 | +@Beta | ||
28 | +public class DefaultTunnelDescription extends AbstractDescription | ||
29 | + implements TunnelDescription { | ||
30 | + | ||
31 | + private final TunnelEndPoint src; | ||
32 | + private final TunnelEndPoint dst; | ||
33 | + private final Type type; | ||
34 | + // which a tunnel match up | ||
35 | + // tunnel producer | ||
36 | + private final TunnelName tunnelName; // name of a tunnel | ||
37 | + | ||
38 | + /** | ||
39 | + * Creates a tunnel description using the supplied information. | ||
40 | + * | ||
41 | + * @param src TunnelPoint source | ||
42 | + * @param dst TunnelPoint destination | ||
43 | + * @param type tunnel type | ||
44 | + * @param tunnelName tunnel name | ||
45 | + * @param annotations optional key/value annotations | ||
46 | + */ | ||
47 | + public DefaultTunnelDescription(TunnelEndPoint src, | ||
48 | + TunnelEndPoint dst, Type type, | ||
49 | + TunnelName tunnelName, | ||
50 | + SparseAnnotations... annotations) { | ||
51 | + super(annotations); | ||
52 | + this.src = src; | ||
53 | + this.dst = dst; | ||
54 | + this.type = type; | ||
55 | + this.tunnelName = tunnelName; | ||
56 | + } | ||
57 | + | ||
58 | + @Override | ||
59 | + public TunnelEndPoint src() { | ||
60 | + return src; | ||
61 | + } | ||
62 | + | ||
63 | + @Override | ||
64 | + public TunnelEndPoint dst() { | ||
65 | + return dst; | ||
66 | + } | ||
67 | + | ||
68 | + @Override | ||
69 | + public Type type() { | ||
70 | + return type; | ||
71 | + } | ||
72 | + | ||
73 | + @Override | ||
74 | + public TunnelName tunnelName() { | ||
75 | + return tunnelName; | ||
76 | + } | ||
77 | + | ||
78 | + @Override | ||
79 | + public String toString() { | ||
80 | + return MoreObjects.toStringHelper(this) | ||
81 | + .add("src", src()) | ||
82 | + .add("dst", dst()) | ||
83 | + .add("type", type()) | ||
84 | + .add("tunnelName", tunnelName()) | ||
85 | + .toString(); | ||
86 | + } | ||
87 | +} |
1 | +/* | ||
2 | + * Copyright 2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import java.util.Collection; | ||
19 | + | ||
20 | +import org.onosproject.net.driver.HandlerBehaviour; | ||
21 | + | ||
22 | +/** | ||
23 | + * Behaviour for handling various drivers for tunnel configuration. | ||
24 | + */ | ||
25 | +public interface TunnelConfig extends HandlerBehaviour { | ||
26 | + | ||
27 | + /** | ||
28 | + * Create a tunnel. | ||
29 | + * | ||
30 | + * @param tunnel tunnel entity | ||
31 | + */ | ||
32 | + void createTunnel(TunnelDescription tunnel); | ||
33 | + | ||
34 | + /** | ||
35 | + * Remove a tunnel. | ||
36 | + * | ||
37 | + * @param tunnel tunnel entity | ||
38 | + */ | ||
39 | + void removeTunnel(TunnelDescription tunnel); | ||
40 | + | ||
41 | + /** | ||
42 | + * Update a tunnel. | ||
43 | + * | ||
44 | + * @param tunnel tunnel entity | ||
45 | + */ | ||
46 | + void updateTunnel(TunnelDescription tunnel); | ||
47 | + | ||
48 | + /** | ||
49 | + * Gets tunnels. | ||
50 | + * | ||
51 | + * return collection of tunnel | ||
52 | + */ | ||
53 | + Collection<TunnelDescription> getTunnels(); | ||
54 | + | ||
55 | +} |
1 | +/* | ||
2 | + * Copyright 2015 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 | + */ | ||
16 | +package org.onosproject.net.behaviour; | ||
17 | + | ||
18 | +import org.onosproject.net.Annotated; | ||
19 | +import org.onosproject.net.Description; | ||
20 | + | ||
21 | +import com.google.common.annotations.Beta; | ||
22 | + | ||
23 | +/** | ||
24 | + * Describes a tunnel. | ||
25 | + */ | ||
26 | +@Beta | ||
27 | +public interface TunnelDescription extends Description, Annotated { | ||
28 | + | ||
29 | + /** | ||
30 | + * Tunnel technology type. | ||
31 | + */ | ||
32 | + enum Type { | ||
33 | + /** | ||
34 | + * Signifies that this is a MPLS tunnel. | ||
35 | + */ | ||
36 | + MPLS, | ||
37 | + /** | ||
38 | + * Signifies that this is a L2 tunnel. | ||
39 | + */ | ||
40 | + VLAN, | ||
41 | + /** | ||
42 | + * Signifies that this is a DC L2 extension tunnel. | ||
43 | + */ | ||
44 | + VXLAN, | ||
45 | + /** | ||
46 | + * Signifies that this is a L3 tunnel. | ||
47 | + */ | ||
48 | + GRE, | ||
49 | + /** | ||
50 | + * Signifies that this is a L1 OTN tunnel. | ||
51 | + */ | ||
52 | + ODUK, | ||
53 | + /** | ||
54 | + * Signifies that this is a L0 OCH tunnel. | ||
55 | + */ | ||
56 | + OCH | ||
57 | + } | ||
58 | + | ||
59 | + /** | ||
60 | + * Returns the connection point source. | ||
61 | + * | ||
62 | + * @return tunnel source ConnectionPoint | ||
63 | + */ | ||
64 | + TunnelEndPoint src(); | ||
65 | + | ||
66 | + /** | ||
67 | + * Returns the connection point destination. | ||
68 | + * | ||
69 | + * @return tunnel destination | ||
70 | + */ | ||
71 | + TunnelEndPoint dst(); | ||
72 | + | ||
73 | + /** | ||
74 | + * Returns the tunnel type. | ||
75 | + * | ||
76 | + * @return tunnel type | ||
77 | + */ | ||
78 | + Type type(); | ||
79 | + | ||
80 | + /** | ||
81 | + * Return the name of a tunnel. | ||
82 | + * | ||
83 | + * @return Tunnel Name | ||
84 | + */ | ||
85 | + TunnelName tunnelName(); | ||
86 | +} |
1 | +/* | ||
2 | + * Copyright 2015 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 | + */ | ||
16 | + | ||
17 | +package org.onosproject.net.behaviour; | ||
18 | + | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
21 | +/** | ||
22 | + * Represents for source end point or destination end point of a tunnel. Maybe a tunnel | ||
23 | + * based on ConnectPoint, IpAddress, MacAddress and so on is built. | ||
24 | + */ | ||
25 | +@Beta | ||
26 | +public interface TunnelEndPoint { | ||
27 | + | ||
28 | +} |
1 | +/* | ||
2 | + * Copyright 2015 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 | + */ | ||
16 | + | ||
17 | +package org.onosproject.net.behaviour; | ||
18 | + | ||
19 | +import com.google.common.annotations.Beta; | ||
20 | + | ||
21 | +import java.util.Objects; | ||
22 | + | ||
23 | +/** | ||
24 | + * Represents for a unique tunnel name. TunnelId is generated by ONOS while | ||
25 | + * TunnelName is given by producer. The consumer can borrow tunnels with | ||
26 | + * TunnelId or TunnelName. | ||
27 | + */ | ||
28 | +@Beta | ||
29 | +public final class TunnelName { | ||
30 | + private final String str; | ||
31 | + | ||
32 | + // Default constructor for serialization | ||
33 | + private TunnelName(String tunnelName) { | ||
34 | + this.str = tunnelName; | ||
35 | + } | ||
36 | + | ||
37 | + | ||
38 | + /** | ||
39 | + * Creates a tunnel name using the supplied URI string. | ||
40 | + * | ||
41 | + * @param tunnelName tunnel name string | ||
42 | + * @return tunnel name object | ||
43 | + */ | ||
44 | + public static TunnelName tunnelName(String tunnelName) { | ||
45 | + return new TunnelName(tunnelName); | ||
46 | + } | ||
47 | + | ||
48 | + /** | ||
49 | + * The string of tunnel name. | ||
50 | + * | ||
51 | + * @return the string of tunnel name | ||
52 | + */ | ||
53 | + public String value() { | ||
54 | + return str; | ||
55 | + } | ||
56 | + | ||
57 | + @Override | ||
58 | + public int hashCode() { | ||
59 | + return Objects.hash(str); | ||
60 | + } | ||
61 | + | ||
62 | + @Override | ||
63 | + public boolean equals(Object obj) { | ||
64 | + if (this == obj) { | ||
65 | + return true; | ||
66 | + } | ||
67 | + if (obj instanceof TunnelName) { | ||
68 | + final TunnelName that = (TunnelName) obj; | ||
69 | + return this.getClass() == that.getClass() | ||
70 | + && Objects.equals(this.str, that.str); | ||
71 | + } | ||
72 | + return false; | ||
73 | + } | ||
74 | + | ||
75 | + @Override | ||
76 | + public String toString() { | ||
77 | + return str; | ||
78 | + } | ||
79 | +} |
-
Please register or login to post a comment