Sho SHIMIZU

Use LF as line separator

Change-Id: I2098e93a482507eebec0bca3c134d395359349d9
1 -/* 1 +/*
2 - * Copyright 2015 Open Networking Laboratory 2 + * Copyright 2015 Open Networking Laboratory
3 - * 3 + *
4 - * Licensed under the Apache License, Version 2.0 (the "License"); 4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 - * you may not use this file except in compliance with 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 6 + * You may obtain a copy of the License at
7 - * 7 + *
8 - * http://www.apache.org/licenses/LICENSE-2.0 8 + * http://www.apache.org/licenses/LICENSE-2.0
9 - * 9 + *
10 - * Unless required by applicable law or agreed to in writing, software 10 + * Unless required by applicable law or agreed to in writing, software
11 - * distributed under the License is distributed on an "AS IS" BASIS, 11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 - * See the License for the specific language governing permissions and 13 + * See the License for the specific language governing permissions and
14 - * limitations under the License. 14 + * limitations under the License.
15 - */ 15 + */
16 -package org.onosproject.vtn.impl; 16 +package org.onosproject.vtn.impl;
17 - 17 +
18 -import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor; 18 +import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
19 -import static org.onlab.util.Tools.groupedThreads; 19 +import static org.onlab.util.Tools.groupedThreads;
20 -import static org.slf4j.LoggerFactory.getLogger; 20 +import static org.slf4j.LoggerFactory.getLogger;
21 - 21 +
22 -import java.util.ArrayList; 22 +import java.util.ArrayList;
23 -import java.util.Collection; 23 +import java.util.Collection;
24 -import java.util.HashSet; 24 +import java.util.HashSet;
25 -import java.util.Iterator; 25 +import java.util.Iterator;
26 -import java.util.List; 26 +import java.util.List;
27 -import java.util.Set; 27 +import java.util.Set;
28 -import java.util.concurrent.ScheduledExecutorService; 28 +import java.util.concurrent.ScheduledExecutorService;
29 - 29 +
30 -import org.apache.felix.scr.annotations.Activate; 30 +import org.apache.felix.scr.annotations.Activate;
31 -import org.apache.felix.scr.annotations.Component; 31 +import org.apache.felix.scr.annotations.Component;
32 -import org.apache.felix.scr.annotations.Deactivate; 32 +import org.apache.felix.scr.annotations.Deactivate;
33 -import org.apache.felix.scr.annotations.Reference; 33 +import org.apache.felix.scr.annotations.Reference;
34 -import org.apache.felix.scr.annotations.ReferenceCardinality; 34 +import org.apache.felix.scr.annotations.ReferenceCardinality;
35 -import org.apache.felix.scr.annotations.Service; 35 +import org.apache.felix.scr.annotations.Service;
36 -import org.onlab.packet.IpAddress; 36 +import org.onlab.packet.IpAddress;
37 -import org.onlab.packet.MacAddress; 37 +import org.onlab.packet.MacAddress;
38 -import org.onlab.util.KryoNamespace; 38 +import org.onlab.util.KryoNamespace;
39 -import org.onosproject.core.ApplicationId; 39 +import org.onosproject.core.ApplicationId;
40 -import org.onosproject.core.CoreService; 40 +import org.onosproject.core.CoreService;
41 -import org.onosproject.net.Device; 41 +import org.onosproject.net.Device;
42 -import org.onosproject.net.DeviceId; 42 +import org.onosproject.net.DeviceId;
43 -import org.onosproject.net.Host; 43 +import org.onosproject.net.Host;
44 -import org.onosproject.net.HostId; 44 +import org.onosproject.net.HostId;
45 -import org.onosproject.net.Port; 45 +import org.onosproject.net.Port;
46 -import org.onosproject.net.PortNumber; 46 +import org.onosproject.net.PortNumber;
47 -import org.onosproject.net.behaviour.BridgeConfig; 47 +import org.onosproject.net.behaviour.BridgeConfig;
48 -import org.onosproject.net.behaviour.BridgeDescription; 48 +import org.onosproject.net.behaviour.BridgeDescription;
49 -import org.onosproject.net.behaviour.BridgeName; 49 +import org.onosproject.net.behaviour.BridgeName;
50 -import org.onosproject.net.behaviour.DefaultTunnelDescription; 50 +import org.onosproject.net.behaviour.DefaultTunnelDescription;
51 -import org.onosproject.net.behaviour.IpTunnelEndPoint; 51 +import org.onosproject.net.behaviour.IpTunnelEndPoint;
52 -import org.onosproject.net.behaviour.TunnelConfig; 52 +import org.onosproject.net.behaviour.TunnelConfig;
53 -import org.onosproject.net.behaviour.TunnelDescription; 53 +import org.onosproject.net.behaviour.TunnelDescription;
54 -import org.onosproject.net.behaviour.TunnelEndPoint; 54 +import org.onosproject.net.behaviour.TunnelEndPoint;
55 -import org.onosproject.net.device.DeviceEvent; 55 +import org.onosproject.net.device.DeviceEvent;
56 -import org.onosproject.net.device.DeviceListener; 56 +import org.onosproject.net.device.DeviceListener;
57 -import org.onosproject.net.device.DeviceService; 57 +import org.onosproject.net.device.DeviceService;
58 -import org.onosproject.net.driver.DriverHandler; 58 +import org.onosproject.net.driver.DriverHandler;
59 -import org.onosproject.net.driver.DriverService; 59 +import org.onosproject.net.driver.DriverService;
60 -import org.onosproject.net.flow.DefaultTrafficSelector; 60 +import org.onosproject.net.flow.DefaultTrafficSelector;
61 -import org.onosproject.net.flow.DefaultTrafficTreatment; 61 +import org.onosproject.net.flow.DefaultTrafficTreatment;
62 -import org.onosproject.net.flow.FlowRuleService; 62 +import org.onosproject.net.flow.FlowRuleService;
63 -import org.onosproject.net.flow.TrafficSelector; 63 +import org.onosproject.net.flow.TrafficSelector;
64 -import org.onosproject.net.flow.TrafficTreatment; 64 +import org.onosproject.net.flow.TrafficTreatment;
65 -import org.onosproject.net.flow.criteria.Criteria; 65 +import org.onosproject.net.flow.criteria.Criteria;
66 -import org.onosproject.net.flow.instructions.Instructions; 66 +import org.onosproject.net.flow.instructions.Instructions;
67 -import org.onosproject.net.flowobjective.DefaultForwardingObjective; 67 +import org.onosproject.net.flowobjective.DefaultForwardingObjective;
68 -import org.onosproject.net.flowobjective.FlowObjectiveService; 68 +import org.onosproject.net.flowobjective.FlowObjectiveService;
69 -import org.onosproject.net.flowobjective.ForwardingObjective; 69 +import org.onosproject.net.flowobjective.ForwardingObjective;
70 -import org.onosproject.net.flowobjective.ForwardingObjective.Flag; 70 +import org.onosproject.net.flowobjective.ForwardingObjective.Flag;
71 -import org.onosproject.net.flowobjective.Objective; 71 +import org.onosproject.net.flowobjective.Objective;
72 -import org.onosproject.net.host.HostEvent; 72 +import org.onosproject.net.host.HostEvent;
73 -import org.onosproject.net.host.HostListener; 73 +import org.onosproject.net.host.HostListener;
74 -import org.onosproject.net.host.HostService; 74 +import org.onosproject.net.host.HostService;
75 -import org.onosproject.store.serializers.KryoNamespaces; 75 +import org.onosproject.store.serializers.KryoNamespaces;
76 -import org.onosproject.store.service.EventuallyConsistentMap; 76 +import org.onosproject.store.service.EventuallyConsistentMap;
77 -import org.onosproject.store.service.StorageService; 77 +import org.onosproject.store.service.StorageService;
78 -import org.onosproject.store.service.WallClockTimestamp; 78 +import org.onosproject.store.service.WallClockTimestamp;
79 -import org.onosproject.vtn.VTNService; 79 +import org.onosproject.vtn.VTNService;
80 -import org.onosproject.vtnrsc.SegmentationId; 80 +import org.onosproject.vtnrsc.SegmentationId;
81 -import org.onosproject.vtnrsc.TenantNetwork; 81 +import org.onosproject.vtnrsc.TenantNetwork;
82 -import org.onosproject.vtnrsc.VirtualPort; 82 +import org.onosproject.vtnrsc.VirtualPort;
83 -import org.onosproject.vtnrsc.VirtualPortId; 83 +import org.onosproject.vtnrsc.VirtualPortId;
84 -import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService; 84 +import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
85 -import org.onosproject.vtnrsc.virtualport.VirtualPortService; 85 +import org.onosproject.vtnrsc.virtualport.VirtualPortService;
86 -import org.slf4j.Logger; 86 +import org.slf4j.Logger;
87 - 87 +
88 -import com.google.common.collect.Sets; 88 +import com.google.common.collect.Sets;
89 - 89 +
90 -/** 90 +/**
91 - * Provides implementation of VTNService. 91 + * Provides implementation of VTNService.
92 - */ 92 + */
93 -@Component(immediate = true) 93 +@Component(immediate = true)
94 -@Service 94 +@Service
95 -public class VTNManager implements VTNService { 95 +public class VTNManager implements VTNService {
96 - private final Logger log = getLogger(getClass()); 96 + private final Logger log = getLogger(getClass());
97 - 97 +
98 - private static final String APP_ID = "org.onosproject.app.vtn"; 98 + private static final String APP_ID = "org.onosproject.app.vtn";
99 - private ScheduledExecutorService backgroundService; 99 + private ScheduledExecutorService backgroundService;
100 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 100 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
101 - protected DeviceService deviceService; 101 + protected DeviceService deviceService;
102 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 102 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
103 - protected HostService hostService; 103 + protected HostService hostService;
104 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 104 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
105 - protected FlowRuleService flowRuleService; 105 + protected FlowRuleService flowRuleService;
106 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 106 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
107 - protected CoreService coreService; 107 + protected CoreService coreService;
108 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 108 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
109 - protected StorageService storageService; 109 + protected StorageService storageService;
110 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 110 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
111 - protected TenantNetworkService tenantNetworkService; 111 + protected TenantNetworkService tenantNetworkService;
112 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 112 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
113 - protected VirtualPortService virtualPortService; 113 + protected VirtualPortService virtualPortService;
114 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 114 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
115 - protected DriverService driverService; 115 + protected DriverService driverService;
116 - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 116 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
117 - protected FlowObjectiveService flowObjectiveService; 117 + protected FlowObjectiveService flowObjectiveService;
118 - private EventuallyConsistentMap<HostId, SegmentationId> binding; 118 + private EventuallyConsistentMap<HostId, SegmentationId> binding;
119 - private ApplicationId appId; 119 + private ApplicationId appId;
120 - private HostListener hostListener = new InnerHostListener(); 120 + private HostListener hostListener = new InnerHostListener();
121 - private DeviceListener deviceListener = new InnerDeviceListener(); 121 + private DeviceListener deviceListener = new InnerDeviceListener();
122 - private static final String IFACEID = "ifaceid"; 122 + private static final String IFACEID = "ifaceid";
123 - private static final String PORT_HEAD = "vxlan"; 123 + private static final String PORT_HEAD = "vxlan";
124 - private static final String DEFAULT_BRIDGE_NAME = "br-int"; 124 + private static final String DEFAULT_BRIDGE_NAME = "br-int";
125 - private static final String CONTROLLER_IP_KEY = "ipaddress"; 125 + private static final String CONTROLLER_IP_KEY = "ipaddress";
126 - private static final int DEFAULT_MAC_PRIORITY = 0x0000; 126 + private static final int DEFAULT_MAC_PRIORITY = 0x0000;
127 - private static final int MAC_PRIORITY = 0xffff; 127 + private static final int MAC_PRIORITY = 0xffff;
128 - private static final int DEFAULT_PORT_PRIORITY = 0x0000; 128 + private static final int DEFAULT_PORT_PRIORITY = 0x0000;
129 - private static final int PORT_PRIORITY = 0xffff; 129 + private static final int PORT_PRIORITY = 0xffff;
130 - private static final String SWITCH_CHANNEL_ID = "channelId"; 130 + private static final String SWITCH_CHANNEL_ID = "channelId";
131 - 131 +
132 - @Activate 132 + @Activate
133 - public void activate() { 133 + public void activate() {
134 - KryoNamespace.Builder serializer = KryoNamespace.newBuilder() 134 + KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
135 - .register(KryoNamespaces.API); 135 + .register(KryoNamespaces.API);
136 - appId = coreService.registerApplication(APP_ID); 136 + appId = coreService.registerApplication(APP_ID);
137 - deviceService.addListener(deviceListener); 137 + deviceService.addListener(deviceListener);
138 - hostService.addListener(hostListener); 138 + hostService.addListener(hostListener);
139 - backgroundService = newSingleThreadScheduledExecutor(groupedThreads("onos-apps/vtn", 139 + backgroundService = newSingleThreadScheduledExecutor(groupedThreads("onos-apps/vtn",
140 - "manager-background")); 140 + "manager-background"));
141 - binding = storageService 141 + binding = storageService
142 - .<HostId, SegmentationId>eventuallyConsistentMapBuilder() 142 + .<HostId, SegmentationId>eventuallyConsistentMapBuilder()
143 - .withName("all_tunnel").withSerializer(serializer) 143 + .withName("all_tunnel").withSerializer(serializer)
144 - .withTimestampProvider((k, v) -> new WallClockTimestamp()) 144 + .withTimestampProvider((k, v) -> new WallClockTimestamp())
145 - .build(); 145 + .build();
146 - log.info("Started"); 146 + log.info("Started");
147 - } 147 + }
148 - 148 +
149 - @Deactivate 149 + @Deactivate
150 - public void deactivate() { 150 + public void deactivate() {
151 - backgroundService.shutdown(); 151 + backgroundService.shutdown();
152 - binding.destroy(); 152 + binding.destroy();
153 - log.info("Stopped"); 153 + log.info("Stopped");
154 - } 154 + }
155 - 155 +
156 - @Override 156 + @Override
157 - public void onServerDetected(Device device) { 157 + public void onServerDetected(Device device) {
158 - Iterable<Device> devices = deviceService.getAvailableDevices(); 158 + Iterable<Device> devices = deviceService.getAvailableDevices();
159 - DriverHandler handler = driverService.createHandler(device.id()); 159 + DriverHandler handler = driverService.createHandler(device.id());
160 - BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class); 160 + BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class);
161 - bridgeConfig.addBridge(BridgeName.bridgeName(DEFAULT_BRIDGE_NAME)); 161 + bridgeConfig.addBridge(BridgeName.bridgeName(DEFAULT_BRIDGE_NAME));
162 - String ipAddress = device.annotations().value(CONTROLLER_IP_KEY); 162 + String ipAddress = device.annotations().value(CONTROLLER_IP_KEY);
163 - IpAddress ip = IpAddress.valueOf(ipAddress); 163 + IpAddress ip = IpAddress.valueOf(ipAddress);
164 - Sets.newHashSet(devices).stream() 164 + Sets.newHashSet(devices).stream()
165 - .filter(d -> Device.Type.CONTROLLER == d.type()) 165 + .filter(d -> Device.Type.CONTROLLER == d.type())
166 - .filter(d -> !device.id().equals(d.id())).forEach(d -> { 166 + .filter(d -> !device.id().equals(d.id())).forEach(d -> {
167 - if (!device.id().equals(d.id()) 167 + if (!device.id().equals(d.id())
168 - && Device.Type.CONTROLLER == d.type()) { 168 + && Device.Type.CONTROLLER == d.type()) {
169 - String ipAddress1 = d.annotations() 169 + String ipAddress1 = d.annotations()
170 - .value(CONTROLLER_IP_KEY); 170 + .value(CONTROLLER_IP_KEY);
171 - IpAddress ip1 = IpAddress.valueOf(ipAddress1); 171 + IpAddress ip1 = IpAddress.valueOf(ipAddress1);
172 - applyTunnelConfig(ip, ip1, handler); 172 + applyTunnelConfig(ip, ip1, handler);
173 - DriverHandler handler1 = driverService 173 + DriverHandler handler1 = driverService
174 - .createHandler(d.id()); 174 + .createHandler(d.id());
175 - applyTunnelConfig(ip1, ip, handler1); 175 + applyTunnelConfig(ip1, ip, handler1);
176 - } 176 + }
177 - }); 177 + });
178 - } 178 + }
179 - 179 +
180 - @Override 180 + @Override
181 - public void onServerVanished(Device device) { 181 + public void onServerVanished(Device device) {
182 - Iterable<Device> devices = deviceService.getAvailableDevices(); 182 + Iterable<Device> devices = deviceService.getAvailableDevices();
183 - String ipAddress = device.annotations().value(CONTROLLER_IP_KEY); 183 + String ipAddress = device.annotations().value(CONTROLLER_IP_KEY);
184 - IpAddress dst = IpAddress.valueOf(ipAddress); 184 + IpAddress dst = IpAddress.valueOf(ipAddress);
185 - Sets.newHashSet(devices).stream() 185 + Sets.newHashSet(devices).stream()
186 - .filter(d -> d.type() == Device.Type.CONTROLLER) 186 + .filter(d -> d.type() == Device.Type.CONTROLLER)
187 - .filter(d -> !device.id().equals(d.id())).forEach(d -> { 187 + .filter(d -> !device.id().equals(d.id())).forEach(d -> {
188 - String ipAddress1 = d.annotations() 188 + String ipAddress1 = d.annotations()
189 - .value(CONTROLLER_IP_KEY); 189 + .value(CONTROLLER_IP_KEY);
190 - DriverHandler handler = driverService.createHandler(d.id()); 190 + DriverHandler handler = driverService.createHandler(d.id());
191 - IpAddress src = IpAddress.valueOf(ipAddress1); 191 + IpAddress src = IpAddress.valueOf(ipAddress1);
192 - removeTunnelConfig(src, dst, handler); 192 + removeTunnelConfig(src, dst, handler);
193 - }); 193 + });
194 - } 194 + }
195 - 195 +
196 - private void applyTunnelConfig(IpAddress src, IpAddress dst, 196 + private void applyTunnelConfig(IpAddress src, IpAddress dst,
197 - DriverHandler handler) { 197 + DriverHandler handler) {
198 - TunnelEndPoint tunnelAsSrc = IpTunnelEndPoint.ipTunnelPoint(src); 198 + TunnelEndPoint tunnelAsSrc = IpTunnelEndPoint.ipTunnelPoint(src);
199 - TunnelEndPoint tunnelAsDst = IpTunnelEndPoint.ipTunnelPoint(dst); 199 + TunnelEndPoint tunnelAsDst = IpTunnelEndPoint.ipTunnelPoint(dst);
200 - TunnelDescription tunnel = new DefaultTunnelDescription( 200 + TunnelDescription tunnel = new DefaultTunnelDescription(
201 - tunnelAsSrc, 201 + tunnelAsSrc,
202 - tunnelAsDst, 202 + tunnelAsDst,
203 - TunnelDescription.Type.VXLAN, 203 + TunnelDescription.Type.VXLAN,
204 - null); 204 + null);
205 - TunnelConfig config = handler.behaviour(TunnelConfig.class); 205 + TunnelConfig config = handler.behaviour(TunnelConfig.class);
206 - config.createTunnel(tunnel); 206 + config.createTunnel(tunnel);
207 - } 207 + }
208 - 208 +
209 - private void removeTunnelConfig(IpAddress src, IpAddress dst, 209 + private void removeTunnelConfig(IpAddress src, IpAddress dst,
210 - DriverHandler handler) { 210 + DriverHandler handler) {
211 - TunnelEndPoint tunnelAsSrc = IpTunnelEndPoint.ipTunnelPoint(src); 211 + TunnelEndPoint tunnelAsSrc = IpTunnelEndPoint.ipTunnelPoint(src);
212 - TunnelEndPoint tunnelAsDst = IpTunnelEndPoint.ipTunnelPoint(dst); 212 + TunnelEndPoint tunnelAsDst = IpTunnelEndPoint.ipTunnelPoint(dst);
213 - TunnelDescription tunnel = new DefaultTunnelDescription( 213 + TunnelDescription tunnel = new DefaultTunnelDescription(
214 - tunnelAsSrc, 214 + tunnelAsSrc,
215 - tunnelAsDst, 215 + tunnelAsDst,
216 - TunnelDescription.Type.VXLAN, 216 + TunnelDescription.Type.VXLAN,
217 - null); 217 + null);
218 - TunnelConfig config = handler.behaviour(TunnelConfig.class); 218 + TunnelConfig config = handler.behaviour(TunnelConfig.class);
219 - config.removeTunnel(tunnel); 219 + config.removeTunnel(tunnel);
220 - } 220 + }
221 - 221 +
222 - @Override 222 + @Override
223 - public void onOvsDetected(Device device) { 223 + public void onOvsDetected(Device device) {
224 - programMacDefaultRules(device.id(), appId, Objective.Operation.ADD); 224 + programMacDefaultRules(device.id(), appId, Objective.Operation.ADD);
225 - programPortDefaultRules(device.id(), appId, Objective.Operation.ADD); 225 + programPortDefaultRules(device.id(), appId, Objective.Operation.ADD);
226 - Set<Host> hosts = hostService.getConnectedHosts(device.id()); 226 + Set<Host> hosts = hostService.getConnectedHosts(device.id());
227 - hosts.forEach(h -> { 227 + hosts.forEach(h -> {
228 - String ifaceId = h.annotations().value(IFACEID); 228 + String ifaceId = h.annotations().value(IFACEID);
229 - String currentControllerIp = getControllerIpOfSwitch(device.id()); 229 + String currentControllerIp = getControllerIpOfSwitch(device.id());
230 - VirtualPortId portId = VirtualPortId.portId(ifaceId); 230 + VirtualPortId portId = VirtualPortId.portId(ifaceId);
231 - VirtualPort port = virtualPortService.getPort(portId); 231 + VirtualPort port = virtualPortService.getPort(portId);
232 - TenantNetwork network = tenantNetworkService 232 + TenantNetwork network = tenantNetworkService
233 - .getNetwork(port.networkId()); 233 + .getNetwork(port.networkId());
234 - String vxlanName = "vxlan-" + currentControllerIp; 234 + String vxlanName = "vxlan-" + currentControllerIp;
235 - 235 +
236 - DriverHandler handler = driverService.createHandler(device.id()); 236 + DriverHandler handler = driverService.createHandler(device.id());
237 - BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class); 237 + BridgeConfig bridgeConfig = handler.behaviour(BridgeConfig.class);
238 - Collection<BridgeDescription> bridgeDescriptions = bridgeConfig 238 + Collection<BridgeDescription> bridgeDescriptions = bridgeConfig
239 - .getBridges(); 239 + .getBridges();
240 - Iterator<BridgeDescription> it = bridgeDescriptions.iterator(); 240 + Iterator<BridgeDescription> it = bridgeDescriptions.iterator();
241 - if (it.hasNext()) { 241 + if (it.hasNext()) {
242 - BridgeDescription sw = it.next(); 242 + BridgeDescription sw = it.next();
243 - Set<PortNumber> ports = bridgeConfig.getPortNumbers(); 243 + Set<PortNumber> ports = bridgeConfig.getPortNumbers();
244 - ports.stream().filter(p -> p.name().equalsIgnoreCase(vxlanName)) 244 + ports.stream().filter(p -> p.name().equalsIgnoreCase(vxlanName))
245 - .forEach(p -> { 245 + .forEach(p -> {
246 - programTunnelOut(sw.deviceId(), network.segmentationId(), p, 246 + programTunnelOut(sw.deviceId(), network.segmentationId(), p,
247 - h.mac(), appId, Objective.Operation.ADD); 247 + h.mac(), appId, Objective.Operation.ADD);
248 - }); 248 + });
249 - } 249 + }
250 - 250 +
251 - }); 251 + });
252 - } 252 + }
253 - 253 +
254 - @Override 254 + @Override
255 - public void onOvsVanished(Device device) { 255 + public void onOvsVanished(Device device) {
256 - programMacDefaultRules(device.id(), appId, Objective.Operation.REMOVE); 256 + programMacDefaultRules(device.id(), appId, Objective.Operation.REMOVE);
257 - programPortDefaultRules(device.id(), appId, Objective.Operation.REMOVE); 257 + programPortDefaultRules(device.id(), appId, Objective.Operation.REMOVE);
258 - } 258 + }
259 - 259 +
260 - @Override 260 + @Override
261 - public void onHostDetected(Host host) { 261 + public void onHostDetected(Host host) {
262 - String ifaceId = host.annotations().value(IFACEID); 262 + String ifaceId = host.annotations().value(IFACEID);
263 - DeviceId deviceId = host.location().deviceId(); 263 + DeviceId deviceId = host.location().deviceId();
264 - String currentControllerIp = getControllerIpOfSwitch(deviceId); 264 + String currentControllerIp = getControllerIpOfSwitch(deviceId);
265 - Iterable<Device> devices = deviceService.getAvailableDevices(); 265 + Iterable<Device> devices = deviceService.getAvailableDevices();
266 - VirtualPortId portId = VirtualPortId.portId(ifaceId); 266 + VirtualPortId portId = VirtualPortId.portId(ifaceId);
267 - VirtualPort port = virtualPortService.getPort(portId); 267 + VirtualPort port = virtualPortService.getPort(portId);
268 - TenantNetwork network = tenantNetworkService 268 + TenantNetwork network = tenantNetworkService
269 - .getNetwork(port.networkId()); 269 + .getNetwork(port.networkId());
270 - String tunnelName = "vxlan-" + currentControllerIp; 270 + String tunnelName = "vxlan-" + currentControllerIp;
271 - binding.put(host.id(), network.segmentationId()); 271 + binding.put(host.id(), network.segmentationId());
272 - List<Port> allPorts = deviceService.getPorts(deviceId); 272 + List<Port> allPorts = deviceService.getPorts(deviceId);
273 - PortNumber inPort = host.location().port(); 273 + PortNumber inPort = host.location().port();
274 - Set<Port> localPorts = new HashSet<>(); 274 + Set<Port> localPorts = new HashSet<>();
275 - Set<Port> tunnelPorts = new HashSet<>(); 275 + Set<Port> tunnelPorts = new HashSet<>();
276 - List<Port> outports = new ArrayList<>(); 276 + List<Port> outports = new ArrayList<>();
277 - Sets.newHashSet(allPorts.iterator()).stream() 277 + Sets.newHashSet(allPorts.iterator()).stream()
278 - .filter(p -> !p.number().equals(PortNumber.LOCAL)).forEach(p -> { 278 + .filter(p -> !p.number().equals(PortNumber.LOCAL)).forEach(p -> {
279 - if (!p.annotations().value("portName").startsWith(PORT_HEAD)) { 279 + if (!p.annotations().value("portName").startsWith(PORT_HEAD)) {
280 - localPorts.add(p); 280 + localPorts.add(p);
281 - } else { 281 + } else {
282 - tunnelPorts.add(p); 282 + tunnelPorts.add(p);
283 - } 283 + }
284 - outports.add(p); 284 + outports.add(p);
285 - }); 285 + });
286 - 286 +
287 - programLocalBcastRules(deviceId, network.segmentationId(), inPort, 287 + programLocalBcastRules(deviceId, network.segmentationId(), inPort,
288 - outports, appId, Objective.Operation.ADD); 288 + outports, appId, Objective.Operation.ADD);
289 - programLocalOut(deviceId, network.segmentationId(), inPort, host.mac(), 289 + programLocalOut(deviceId, network.segmentationId(), inPort, host.mac(),
290 - appId, Objective.Operation.ADD); 290 + appId, Objective.Operation.ADD);
291 - tunnelPorts 291 + tunnelPorts
292 - .forEach(tp -> programTunnelFloodOut(deviceId, 292 + .forEach(tp -> programTunnelFloodOut(deviceId,
293 - network.segmentationId(), 293 + network.segmentationId(),
294 - tp.number(), localPorts, 294 + tp.number(), localPorts,
295 - appId, 295 + appId,
296 - Objective.Operation.ADD)); 296 + Objective.Operation.ADD));
297 - Sets.newHashSet(devices).stream() 297 + Sets.newHashSet(devices).stream()
298 - .filter(d -> d.type() == Device.Type.CONTROLLER).forEach(d -> { 298 + .filter(d -> d.type() == Device.Type.CONTROLLER).forEach(d -> {
299 - DriverHandler handler = driverService.createHandler(d.id()); 299 + DriverHandler handler = driverService.createHandler(d.id());
300 - BridgeConfig bridgeConfig = handler 300 + BridgeConfig bridgeConfig = handler
301 - .behaviour(BridgeConfig.class); 301 + .behaviour(BridgeConfig.class);
302 - Collection<BridgeDescription> bridgeDescriptions = bridgeConfig 302 + Collection<BridgeDescription> bridgeDescriptions = bridgeConfig
303 - .getBridges(); 303 + .getBridges();
304 - 304 +
305 - Iterator<BridgeDescription> it = bridgeDescriptions 305 + Iterator<BridgeDescription> it = bridgeDescriptions
306 - .iterator(); 306 + .iterator();
307 - if (it.hasNext()) { 307 + if (it.hasNext()) {
308 - BridgeDescription sw = it.next(); 308 + BridgeDescription sw = it.next();
309 - Set<PortNumber> ports = bridgeConfig.getPortNumbers(); 309 + Set<PortNumber> ports = bridgeConfig.getPortNumbers();
310 - ports.stream() 310 + ports.stream()
311 - .filter(p -> p.name() 311 + .filter(p -> p.name()
312 - .equalsIgnoreCase(tunnelName)) 312 + .equalsIgnoreCase(tunnelName))
313 - .forEach(p -> { 313 + .forEach(p -> {
314 - programTunnelOut(sw.deviceId(), 314 + programTunnelOut(sw.deviceId(),
315 - network.segmentationId(), p, 315 + network.segmentationId(), p,
316 - host.mac(), appId, 316 + host.mac(), appId,
317 - Objective.Operation.ADD); 317 + Objective.Operation.ADD);
318 - }); 318 + });
319 - } 319 + }
320 - }); 320 + });
321 - programLocalIn(deviceId, network.segmentationId(), inPort, host.mac(), 321 + programLocalIn(deviceId, network.segmentationId(), inPort, host.mac(),
322 - appId, Objective.Operation.ADD); 322 + appId, Objective.Operation.ADD);
323 - tunnelPorts 323 + tunnelPorts
324 - .forEach(tp -> programTunnelIn(deviceId, 324 + .forEach(tp -> programTunnelIn(deviceId,
325 - network.segmentationId(), 325 + network.segmentationId(),
326 - tp.number(), inPort, host.mac(), 326 + tp.number(), inPort, host.mac(),
327 - appId, Objective.Operation.ADD)); 327 + appId, Objective.Operation.ADD));
328 - 328 +
329 - } 329 + }
330 - 330 +
331 - @Override 331 + @Override
332 - public void onHostVanished(Host host) { 332 + public void onHostVanished(Host host) {
333 - SegmentationId segId = binding.remove(host.id()); 333 + SegmentationId segId = binding.remove(host.id());
334 - DeviceId deviceId = host.location().deviceId(); 334 + DeviceId deviceId = host.location().deviceId();
335 - String currentControllerIp = getControllerIpOfSwitch(deviceId); 335 + String currentControllerIp = getControllerIpOfSwitch(deviceId);
336 - Iterable<Device> devices = deviceService.getAvailableDevices(); 336 + Iterable<Device> devices = deviceService.getAvailableDevices();
337 - List<Port> allPorts = deviceService.getPorts(deviceId); 337 + List<Port> allPorts = deviceService.getPorts(deviceId);
338 - PortNumber inPort = host.location().port(); 338 + PortNumber inPort = host.location().port();
339 - String vxlanName = "vxlan-" + currentControllerIp; 339 + String vxlanName = "vxlan-" + currentControllerIp;
340 - Set<Port> localPorts = new HashSet<>(); 340 + Set<Port> localPorts = new HashSet<>();
341 - Set<Port> tunnelPorts = new HashSet<>(); 341 + Set<Port> tunnelPorts = new HashSet<>();
342 - List<Port> outports = new ArrayList<>(); 342 + List<Port> outports = new ArrayList<>();
343 - Sets.newHashSet(allPorts.iterator()).stream() 343 + Sets.newHashSet(allPorts.iterator()).stream()
344 - .filter(p -> !p.number().equals(PortNumber.LOCAL)).forEach(p -> { 344 + .filter(p -> !p.number().equals(PortNumber.LOCAL)).forEach(p -> {
345 - if (!p.annotations().value("portName").startsWith(PORT_HEAD)) { 345 + if (!p.annotations().value("portName").startsWith(PORT_HEAD)) {
346 - localPorts.add(p); 346 + localPorts.add(p);
347 - } else { 347 + } else {
348 - tunnelPorts.add(p); 348 + tunnelPorts.add(p);
349 - } 349 + }
350 - outports.add(p); 350 + outports.add(p);
351 - }); 351 + });
352 - 352 +
353 - programLocalBcastRules(deviceId, segId, inPort, 353 + programLocalBcastRules(deviceId, segId, inPort,
354 - outports, appId, Objective.Operation.REMOVE); 354 + outports, appId, Objective.Operation.REMOVE);
355 - programLocalOut(deviceId, segId, inPort, host.mac(), 355 + programLocalOut(deviceId, segId, inPort, host.mac(),
356 - appId, Objective.Operation.REMOVE); 356 + appId, Objective.Operation.REMOVE);
357 - tunnelPorts 357 + tunnelPorts
358 - .forEach(tp -> programTunnelFloodOut(deviceId, 358 + .forEach(tp -> programTunnelFloodOut(deviceId,
359 - segId, 359 + segId,
360 - tp.number(), localPorts, 360 + tp.number(), localPorts,
361 - appId, 361 + appId,
362 - Objective.Operation.REMOVE)); 362 + Objective.Operation.REMOVE));
363 - Sets.newHashSet(devices).stream() 363 + Sets.newHashSet(devices).stream()
364 - .filter(d -> d.type() == Device.Type.CONTROLLER).forEach(d -> { 364 + .filter(d -> d.type() == Device.Type.CONTROLLER).forEach(d -> {
365 - DriverHandler handler = driverService.createHandler(d.id()); 365 + DriverHandler handler = driverService.createHandler(d.id());
366 - BridgeConfig bridgeConfig = handler 366 + BridgeConfig bridgeConfig = handler
367 - .behaviour(BridgeConfig.class); 367 + .behaviour(BridgeConfig.class);
368 - Collection<BridgeDescription> bridgeDescriptions = bridgeConfig 368 + Collection<BridgeDescription> bridgeDescriptions = bridgeConfig
369 - .getBridges(); 369 + .getBridges();
370 - 370 +
371 - Iterator<BridgeDescription> it = bridgeDescriptions 371 + Iterator<BridgeDescription> it = bridgeDescriptions
372 - .iterator(); 372 + .iterator();
373 - if (it.hasNext()) { 373 + if (it.hasNext()) {
374 - BridgeDescription sw = it.next(); 374 + BridgeDescription sw = it.next();
375 - Set<PortNumber> ports = bridgeConfig.getPortNumbers(); 375 + Set<PortNumber> ports = bridgeConfig.getPortNumbers();
376 - ports.stream() 376 + ports.stream()
377 - .filter(p -> p.name() 377 + .filter(p -> p.name()
378 - .equalsIgnoreCase(vxlanName)) 378 + .equalsIgnoreCase(vxlanName))
379 - .forEach(p -> { 379 + .forEach(p -> {
380 - programTunnelOut(sw.deviceId(), 380 + programTunnelOut(sw.deviceId(),
381 - segId, p, 381 + segId, p,
382 - host.mac(), appId, 382 + host.mac(), appId,
383 - Objective.Operation.REMOVE); 383 + Objective.Operation.REMOVE);
384 - }); 384 + });
385 - } 385 + }
386 - }); 386 + });
387 - programLocalIn(deviceId, segId, inPort, host.mac(), 387 + programLocalIn(deviceId, segId, inPort, host.mac(),
388 - appId, Objective.Operation.REMOVE); 388 + appId, Objective.Operation.REMOVE);
389 - tunnelPorts 389 + tunnelPorts
390 - .forEach(tp -> programTunnelIn(deviceId, 390 + .forEach(tp -> programTunnelIn(deviceId,
391 - segId, 391 + segId,
392 - tp.number(), inPort, host.mac(), 392 + tp.number(), inPort, host.mac(),
393 - appId, Objective.Operation.REMOVE)); 393 + appId, Objective.Operation.REMOVE));
394 - } 394 + }
395 - 395 +
396 - private class InnerDeviceListener implements DeviceListener { 396 + private class InnerDeviceListener implements DeviceListener {
397 - 397 +
398 - @Override 398 + @Override
399 - public void event(DeviceEvent event) { 399 + public void event(DeviceEvent event) {
400 - Device device = event.subject(); 400 + Device device = event.subject();
401 - if (Device.Type.CONTROLLER == device.type() 401 + if (Device.Type.CONTROLLER == device.type()
402 - && DeviceEvent.Type.DEVICE_ADDED == event.type()) { 402 + && DeviceEvent.Type.DEVICE_ADDED == event.type()) {
403 - backgroundService.execute(() -> { 403 + backgroundService.execute(() -> {
404 - onServerDetected(device); 404 + onServerDetected(device);
405 - }); 405 + });
406 - } else if (Device.Type.CONTROLLER == device.type() 406 + } else if (Device.Type.CONTROLLER == device.type()
407 - && DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED == event 407 + && DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED == event
408 - .type()) { 408 + .type()) {
409 - backgroundService.execute(() -> { 409 + backgroundService.execute(() -> {
410 - onServerVanished(device); 410 + onServerVanished(device);
411 - }); 411 + });
412 - } else if (Device.Type.SWITCH == device.type() 412 + } else if (Device.Type.SWITCH == device.type()
413 - && DeviceEvent.Type.DEVICE_ADDED == event.type()) { 413 + && DeviceEvent.Type.DEVICE_ADDED == event.type()) {
414 - backgroundService.execute(() -> { 414 + backgroundService.execute(() -> {
415 - onOvsDetected(device); 415 + onOvsDetected(device);
416 - }); 416 + });
417 - } else if (Device.Type.SWITCH == device.type() 417 + } else if (Device.Type.SWITCH == device.type()
418 - && DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED == event 418 + && DeviceEvent.Type.DEVICE_AVAILABILITY_CHANGED == event
419 - .type()) { 419 + .type()) {
420 - backgroundService.execute(() -> { 420 + backgroundService.execute(() -> {
421 - onOvsVanished(device); 421 + onOvsVanished(device);
422 - }); 422 + });
423 - } else { 423 + } else {
424 - log.info("Do nothing for this device type"); 424 + log.info("Do nothing for this device type");
425 - } 425 + }
426 - } 426 + }
427 - 427 +
428 - } 428 + }
429 - 429 +
430 - private class InnerHostListener implements HostListener { 430 + private class InnerHostListener implements HostListener {
431 - 431 +
432 - @Override 432 + @Override
433 - public void event(HostEvent event) { 433 + public void event(HostEvent event) {
434 - Host host = event.subject(); 434 + Host host = event.subject();
435 - if (HostEvent.Type.HOST_ADDED == event.type()) { 435 + if (HostEvent.Type.HOST_ADDED == event.type()) {
436 - backgroundService.execute(() -> { 436 + backgroundService.execute(() -> {
437 - onHostDetected(host); 437 + onHostDetected(host);
438 - }); 438 + });
439 - } else if (HostEvent.Type.HOST_REMOVED == event.type()) { 439 + } else if (HostEvent.Type.HOST_REMOVED == event.type()) {
440 - backgroundService.execute(() -> { 440 + backgroundService.execute(() -> {
441 - onHostVanished(host); 441 + onHostVanished(host);
442 - }); 442 + });
443 - } else if (HostEvent.Type.HOST_UPDATED == event.type()) { 443 + } else if (HostEvent.Type.HOST_UPDATED == event.type()) {
444 - backgroundService.execute(() -> { 444 + backgroundService.execute(() -> {
445 - onHostVanished(host); 445 + onHostVanished(host);
446 - onHostDetected(host); 446 + onHostDetected(host);
447 - }); 447 + });
448 - } 448 + }
449 - } 449 + }
450 - 450 +
451 - } 451 + }
452 - 452 +
453 - // Used to forward the flows to the local VM. 453 + // Used to forward the flows to the local VM.
454 - private void programLocalOut(DeviceId dpid, SegmentationId segmentationId, 454 + private void programLocalOut(DeviceId dpid, SegmentationId segmentationId,
455 - PortNumber outPort, MacAddress sourceMac, 455 + PortNumber outPort, MacAddress sourceMac,
456 - ApplicationId appid, 456 + ApplicationId appid,
457 - Objective.Operation type) { 457 + Objective.Operation type) {
458 - TrafficSelector selector = DefaultTrafficSelector.builder() 458 + TrafficSelector selector = DefaultTrafficSelector.builder()
459 - .matchEthDst(sourceMac).build(); 459 + .matchEthDst(sourceMac).build();
460 - TrafficTreatment treatment = DefaultTrafficTreatment.builder() 460 + TrafficTreatment treatment = DefaultTrafficTreatment.builder()
461 - .add(Instructions 461 + .add(Instructions
462 - .modTunnelId(Long.parseLong(segmentationId.toString()))) 462 + .modTunnelId(Long.parseLong(segmentationId.toString())))
463 - .setOutput(outPort).build(); 463 + .setOutput(outPort).build();
464 - ForwardingObjective.Builder objective = DefaultForwardingObjective 464 + ForwardingObjective.Builder objective = DefaultForwardingObjective
465 - .builder().withTreatment(treatment).withSelector(selector) 465 + .builder().withTreatment(treatment).withSelector(selector)
466 - .fromApp(appId).withFlag(Flag.SPECIFIC) 466 + .fromApp(appId).withFlag(Flag.SPECIFIC)
467 - .withPriority(MAC_PRIORITY); 467 + .withPriority(MAC_PRIORITY);
468 - if (type.equals(Objective.Operation.ADD)) { 468 + if (type.equals(Objective.Operation.ADD)) {
469 - flowObjectiveService.forward(dpid, objective.add()); 469 + flowObjectiveService.forward(dpid, objective.add());
470 - } else { 470 + } else {
471 - flowObjectiveService.forward(dpid, objective.remove()); 471 + flowObjectiveService.forward(dpid, objective.remove());
472 - } 472 + }
473 - 473 +
474 - } 474 + }
475 - 475 +
476 - // Used to forward the flows into the VXLAN tunnel. 476 + // Used to forward the flows into the VXLAN tunnel.
477 - private void programTunnelOut(DeviceId dpid, SegmentationId segmentationId, 477 + private void programTunnelOut(DeviceId dpid, SegmentationId segmentationId,
478 - PortNumber tunnelOutPort, MacAddress dstMac, 478 + PortNumber tunnelOutPort, MacAddress dstMac,
479 - ApplicationId appid, 479 + ApplicationId appid,
480 - Objective.Operation type) { 480 + Objective.Operation type) {
481 - TrafficSelector selector = DefaultTrafficSelector.builder() 481 + TrafficSelector selector = DefaultTrafficSelector.builder()
482 - .matchEthDst(dstMac).add(Criteria.matchTunnelId(Long 482 + .matchEthDst(dstMac).add(Criteria.matchTunnelId(Long
483 - .parseLong(segmentationId.toString()))) 483 + .parseLong(segmentationId.toString())))
484 - .build(); 484 + .build();
485 - TrafficTreatment treatment = DefaultTrafficTreatment.builder() 485 + TrafficTreatment treatment = DefaultTrafficTreatment.builder()
486 - 486 +
487 - .setOutput(tunnelOutPort).build(); 487 + .setOutput(tunnelOutPort).build();
488 - ForwardingObjective.Builder objective = DefaultForwardingObjective 488 + ForwardingObjective.Builder objective = DefaultForwardingObjective
489 - .builder().withTreatment(treatment).withSelector(selector) 489 + .builder().withTreatment(treatment).withSelector(selector)
490 - .fromApp(appId).withFlag(Flag.SPECIFIC) 490 + .fromApp(appId).withFlag(Flag.SPECIFIC)
491 - .withPriority(MAC_PRIORITY); 491 + .withPriority(MAC_PRIORITY);
492 - if (type.equals(Objective.Operation.ADD)) { 492 + if (type.equals(Objective.Operation.ADD)) {
493 - flowObjectiveService.forward(dpid, objective.add()); 493 + flowObjectiveService.forward(dpid, objective.add());
494 - } else { 494 + } else {
495 - flowObjectiveService.forward(dpid, objective.remove()); 495 + flowObjectiveService.forward(dpid, objective.remove());
496 - } 496 + }
497 - 497 +
498 - } 498 + }
499 - 499 +
500 - // Used to forward multicast flows to remote VMs of the same tenant via 500 + // Used to forward multicast flows to remote VMs of the same tenant via
501 - // VXLAN tunnel. 501 + // VXLAN tunnel.
502 - private void programTunnelFloodOut(DeviceId dpid, 502 + private void programTunnelFloodOut(DeviceId dpid,
503 - SegmentationId segmentationId, 503 + SegmentationId segmentationId,
504 - PortNumber ofPortOut, 504 + PortNumber ofPortOut,
505 - Iterable<Port> localports, 505 + Iterable<Port> localports,
506 - ApplicationId appid, 506 + ApplicationId appid,
507 - Objective.Operation type) { 507 + Objective.Operation type) {
508 - TrafficSelector selector = DefaultTrafficSelector.builder() 508 + TrafficSelector selector = DefaultTrafficSelector.builder()
509 - .matchInPort(ofPortOut) 509 + .matchInPort(ofPortOut)
510 - 510 +
511 - .add(Criteria.matchTunnelId(Long.parseLong(segmentationId 511 + .add(Criteria.matchTunnelId(Long.parseLong(segmentationId
512 - .toString()))).matchEthDst(MacAddress.BROADCAST) 512 + .toString()))).matchEthDst(MacAddress.BROADCAST)
513 - .build(); 513 + .build();
514 - TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder(); 514 + TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
515 - for (Port outport : localports) { 515 + for (Port outport : localports) {
516 - treatment.setOutput(outport.number()); 516 + treatment.setOutput(outport.number());
517 - } 517 + }
518 - 518 +
519 - ForwardingObjective.Builder objective = DefaultForwardingObjective 519 + ForwardingObjective.Builder objective = DefaultForwardingObjective
520 - .builder().withTreatment(treatment.build()) 520 + .builder().withTreatment(treatment.build())
521 - .withSelector(selector).fromApp(appId).makePermanent() 521 + .withSelector(selector).fromApp(appId).makePermanent()
522 - .withFlag(Flag.SPECIFIC).withPriority(MAC_PRIORITY); 522 + .withFlag(Flag.SPECIFIC).withPriority(MAC_PRIORITY);
523 - if (type.equals(Objective.Operation.ADD)) { 523 + if (type.equals(Objective.Operation.ADD)) {
524 - flowObjectiveService.forward(dpid, objective.add()); 524 + flowObjectiveService.forward(dpid, objective.add());
525 - } else { 525 + } else {
526 - flowObjectiveService.forward(dpid, objective.remove()); 526 + flowObjectiveService.forward(dpid, objective.remove());
527 - } 527 + }
528 - } 528 + }
529 - 529 +
530 - // Applies default flows to mac table. 530 + // Applies default flows to mac table.
531 - private void programMacDefaultRules(DeviceId dpid, ApplicationId appid, 531 + private void programMacDefaultRules(DeviceId dpid, ApplicationId appid,
532 - Objective.Operation type) { 532 + Objective.Operation type) {
533 - TrafficSelector selector = DefaultTrafficSelector.builder().build(); 533 + TrafficSelector selector = DefaultTrafficSelector.builder().build();
534 - TrafficTreatment treatment = DefaultTrafficTreatment.builder().drop() 534 + TrafficTreatment treatment = DefaultTrafficTreatment.builder().drop()
535 - .build(); 535 + .build();
536 - ForwardingObjective.Builder objective = DefaultForwardingObjective 536 + ForwardingObjective.Builder objective = DefaultForwardingObjective
537 - .builder().withTreatment(treatment).withSelector(selector) 537 + .builder().withTreatment(treatment).withSelector(selector)
538 - .fromApp(appId).makePermanent().withFlag(Flag.SPECIFIC) 538 + .fromApp(appId).makePermanent().withFlag(Flag.SPECIFIC)
539 - .withPriority(DEFAULT_MAC_PRIORITY); 539 + .withPriority(DEFAULT_MAC_PRIORITY);
540 - if (type.equals(Objective.Operation.ADD)) { 540 + if (type.equals(Objective.Operation.ADD)) {
541 - flowObjectiveService.forward(dpid, objective.add()); 541 + flowObjectiveService.forward(dpid, objective.add());
542 - } else { 542 + } else {
543 - flowObjectiveService.forward(dpid, objective.remove()); 543 + flowObjectiveService.forward(dpid, objective.remove());
544 - } 544 + }
545 - } 545 + }
546 - 546 +
547 - // Used to forward the flows to the local VMs with the same tenant. 547 + // Used to forward the flows to the local VMs with the same tenant.
548 - private void programLocalBcastRules(DeviceId dpid, 548 + private void programLocalBcastRules(DeviceId dpid,
549 - SegmentationId segmentationId, 549 + SegmentationId segmentationId,
550 - PortNumber inPort, List<Port> allports, 550 + PortNumber inPort, List<Port> allports,
551 - ApplicationId appid, 551 + ApplicationId appid,
552 - Objective.Operation type) { 552 + Objective.Operation type) {
553 - TrafficSelector selector = DefaultTrafficSelector.builder() 553 + TrafficSelector selector = DefaultTrafficSelector.builder()
554 - .matchInPort(inPort).matchEthDst(MacAddress.BROADCAST) 554 + .matchInPort(inPort).matchEthDst(MacAddress.BROADCAST)
555 - .add(Criteria.matchTunnelId(Long 555 + .add(Criteria.matchTunnelId(Long
556 - .parseLong(segmentationId.toString()))) 556 + .parseLong(segmentationId.toString())))
557 - .build(); 557 + .build();
558 - TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder(); 558 + TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
559 - 559 +
560 - for (Port outport : allports) { 560 + for (Port outport : allports) {
561 - if (inPort != outport.number()) { 561 + if (inPort != outport.number()) {
562 - treatment.setOutput(outport.number()); 562 + treatment.setOutput(outport.number());
563 - } 563 + }
564 - } 564 + }
565 - ForwardingObjective.Builder objective = DefaultForwardingObjective 565 + ForwardingObjective.Builder objective = DefaultForwardingObjective
566 - .builder().withTreatment(treatment.build()) 566 + .builder().withTreatment(treatment.build())
567 - .withSelector(selector).fromApp(appId).makePermanent() 567 + .withSelector(selector).fromApp(appId).makePermanent()
568 - .withFlag(Flag.SPECIFIC).withPriority(MAC_PRIORITY); 568 + .withFlag(Flag.SPECIFIC).withPriority(MAC_PRIORITY);
569 - if (type.equals(Objective.Operation.ADD)) { 569 + if (type.equals(Objective.Operation.ADD)) {
570 - flowObjectiveService.forward(dpid, objective.add()); 570 + flowObjectiveService.forward(dpid, objective.add());
571 - } else { 571 + } else {
572 - flowObjectiveService.forward(dpid, objective.remove()); 572 + flowObjectiveService.forward(dpid, objective.remove());
573 - } 573 + }
574 - } 574 + }
575 - 575 +
576 - // Used to apply local entry flow. 576 + // Used to apply local entry flow.
577 - private void programLocalIn(DeviceId dpid, SegmentationId segmentationId, 577 + private void programLocalIn(DeviceId dpid, SegmentationId segmentationId,
578 - PortNumber inPort, MacAddress srcMac, 578 + PortNumber inPort, MacAddress srcMac,
579 - ApplicationId appid, Objective.Operation type) { 579 + ApplicationId appid, Objective.Operation type) {
580 - TrafficSelector selector = DefaultTrafficSelector.builder() 580 + TrafficSelector selector = DefaultTrafficSelector.builder()
581 - .matchInPort(inPort).matchEthSrc(srcMac).build(); 581 + .matchInPort(inPort).matchEthSrc(srcMac).build();
582 - TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder(); 582 + TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
583 - treatment.add(Instructions.modTunnelId(Long.parseLong(segmentationId 583 + treatment.add(Instructions.modTunnelId(Long.parseLong(segmentationId
584 - .toString()))); 584 + .toString())));
585 - ForwardingObjective.Builder objective = DefaultForwardingObjective 585 + ForwardingObjective.Builder objective = DefaultForwardingObjective
586 - .builder().withTreatment(treatment.build()) 586 + .builder().withTreatment(treatment.build())
587 - .withSelector(selector).fromApp(appId).makePermanent() 587 + .withSelector(selector).fromApp(appId).makePermanent()
588 - .withFlag(Flag.SPECIFIC).withPriority(PORT_PRIORITY); 588 + .withFlag(Flag.SPECIFIC).withPriority(PORT_PRIORITY);
589 - if (type.equals(Objective.Operation.ADD)) { 589 + if (type.equals(Objective.Operation.ADD)) {
590 - flowObjectiveService.forward(dpid, objective.add()); 590 + flowObjectiveService.forward(dpid, objective.add());
591 - } else { 591 + } else {
592 - flowObjectiveService.forward(dpid, objective.remove()); 592 + flowObjectiveService.forward(dpid, objective.remove());
593 - } 593 + }
594 - } 594 + }
595 - 595 +
596 - // Used to forward the flows from the egress tunnel to the VM. 596 + // Used to forward the flows from the egress tunnel to the VM.
597 - private void programTunnelIn(DeviceId dpid, SegmentationId segmentationId, 597 + private void programTunnelIn(DeviceId dpid, SegmentationId segmentationId,
598 - PortNumber tunnelInPort, PortNumber outPort, 598 + PortNumber tunnelInPort, PortNumber outPort,
599 - MacAddress sourceMac, ApplicationId appid, 599 + MacAddress sourceMac, ApplicationId appid,
600 - Objective.Operation type) { 600 + Objective.Operation type) {
601 - TrafficSelector selector = DefaultTrafficSelector.builder() 601 + TrafficSelector selector = DefaultTrafficSelector.builder()
602 - .matchInPort(tunnelInPort).add(Criteria.matchTunnelId(Long 602 + .matchInPort(tunnelInPort).add(Criteria.matchTunnelId(Long
603 - .parseLong(segmentationId.toString()))) 603 + .parseLong(segmentationId.toString())))
604 - .build(); 604 + .build();
605 - TrafficTreatment treatment = DefaultTrafficTreatment.builder().build(); 605 + TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
606 - 606 +
607 - ForwardingObjective.Builder objective = DefaultForwardingObjective 607 + ForwardingObjective.Builder objective = DefaultForwardingObjective
608 - .builder().withTreatment(treatment).withSelector(selector) 608 + .builder().withTreatment(treatment).withSelector(selector)
609 - .fromApp(appId).makePermanent().withFlag(Flag.SPECIFIC) 609 + .fromApp(appId).makePermanent().withFlag(Flag.SPECIFIC)
610 - .withPriority(PORT_PRIORITY); 610 + .withPriority(PORT_PRIORITY);
611 - if (type.equals(Objective.Operation.ADD)) { 611 + if (type.equals(Objective.Operation.ADD)) {
612 - flowObjectiveService.forward(dpid, objective.add()); 612 + flowObjectiveService.forward(dpid, objective.add());
613 - } else { 613 + } else {
614 - flowObjectiveService.forward(dpid, objective.remove()); 614 + flowObjectiveService.forward(dpid, objective.remove());
615 - } 615 + }
616 - } 616 + }
617 - 617 +
618 - // Applies the default flows to port table. 618 + // Applies the default flows to port table.
619 - private void programPortDefaultRules(DeviceId dpid, ApplicationId appid, 619 + private void programPortDefaultRules(DeviceId dpid, ApplicationId appid,
620 - Objective.Operation type) { 620 + Objective.Operation type) {
621 - TrafficSelector selector = DefaultTrafficSelector.builder().build(); 621 + TrafficSelector selector = DefaultTrafficSelector.builder().build();
622 - TrafficTreatment treatment = DefaultTrafficTreatment.builder().build(); 622 + TrafficTreatment treatment = DefaultTrafficTreatment.builder().build();
623 - ForwardingObjective.Builder objective = DefaultForwardingObjective 623 + ForwardingObjective.Builder objective = DefaultForwardingObjective
624 - .builder().withTreatment(treatment).withSelector(selector) 624 + .builder().withTreatment(treatment).withSelector(selector)
625 - .fromApp(appId).makePermanent().withFlag(Flag.SPECIFIC) 625 + .fromApp(appId).makePermanent().withFlag(Flag.SPECIFIC)
626 - .withPriority(DEFAULT_PORT_PRIORITY); 626 + .withPriority(DEFAULT_PORT_PRIORITY);
627 - if (type.equals(Objective.Operation.ADD)) { 627 + if (type.equals(Objective.Operation.ADD)) {
628 - flowObjectiveService.forward(dpid, objective.add()); 628 + flowObjectiveService.forward(dpid, objective.add());
629 - } else { 629 + } else {
630 - flowObjectiveService.forward(dpid, objective.remove()); 630 + flowObjectiveService.forward(dpid, objective.remove());
631 - } 631 + }
632 - } 632 + }
633 - 633 +
634 - // Used to get channelId from the device annotations. 634 + // Used to get channelId from the device annotations.
635 - private String getControllerIpOfSwitch(DeviceId deviceId) { 635 + private String getControllerIpOfSwitch(DeviceId deviceId) {
636 - Device device = deviceService.getDevice(deviceId); 636 + Device device = deviceService.getDevice(deviceId);
637 - String url = device.annotations().value(SWITCH_CHANNEL_ID); 637 + String url = device.annotations().value(SWITCH_CHANNEL_ID);
638 - return url.substring(0, url.lastIndexOf(":")); 638 + return url.substring(0, url.lastIndexOf(":"));
639 - } 639 + }
640 - 640 +
641 -} 641 +}
......