2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowplugin.openflow.md.core.session;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.List;
16 import java.util.Map.Entry;
18 import java.util.concurrent.ConcurrentHashMap;
19 import java.util.concurrent.atomic.AtomicLong;
21 import org.opendaylight.openflowplugin.openflow.md.ModelDrivenSwitch;
22 import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;
23 import org.opendaylight.openflowplugin.openflow.md.core.NotificationEnqueuer;
24 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortGrouping;
27 import org.opendaylight.yangtools.concepts.CompositeObjectRegistration;
32 public class SessionContextOFImpl implements SessionContext {
34 private GetFeaturesOutput features;
35 private ConnectionConductor primaryConductor;
36 private NotificationEnqueuer notificationEnqueuer;
37 private ConcurrentHashMap<SwitchConnectionDistinguisher, ConnectionConductor> auxiliaryConductors;
38 private boolean valid;
39 private SwitchSessionKeyOF sessionKey;
40 private IMessageDispatchService mdService;
41 private final AtomicLong xid;
42 private final Map<Long, PortGrouping> physicalPorts;
43 private final Map<Long, Boolean> portBandwidth;
44 private CompositeObjectRegistration<ModelDrivenSwitch> providerRegistration;
51 public SessionContextOFImpl() {
52 auxiliaryConductors = new ConcurrentHashMap<>();
53 mdService = new MessageDispatchServiceImpl(this);
54 xid = new AtomicLong();
55 this.physicalPorts = new HashMap<Long, PortGrouping>();
56 this.portBandwidth = new HashMap<Long, Boolean>();
60 public ConnectionConductor getPrimaryConductor() {
61 return primaryConductor;
65 public ConnectionConductor getAuxiliaryConductor(
66 SwitchConnectionDistinguisher auxiliaryKey) {
67 return auxiliaryConductors.get(auxiliaryKey);
71 public void addAuxiliaryConductor(
72 SwitchConnectionDistinguisher auxiliaryKey,
73 ConnectionConductor conductor) {
74 auxiliaryConductors.put(auxiliaryKey, conductor);
78 public Set<Entry<SwitchConnectionDistinguisher, ConnectionConductor>> getAuxiliaryConductors() {
79 return Collections.unmodifiableSet(auxiliaryConductors.entrySet());
83 public GetFeaturesOutput getFeatures() {
91 public void setFeatures(GetFeaturesOutput features) {
92 this.features = features;
96 * @param primaryConductor
97 * the primaryConductor to set
99 public void setPrimaryConductor(ConnectionConductor primaryConductor) {
100 this.primaryConductor = primaryConductor;
104 public ConnectionConductor removeAuxiliaryConductor(
105 SwitchConnectionDistinguisher connectionCookie) {
106 return auxiliaryConductors.remove(connectionCookie);
110 public boolean isValid() {
115 public void setValid(boolean valid) {
120 * @param sessionKey the sessionKey to set
122 public void setSessionKey(SwitchSessionKeyOF sessionKey) {
123 this.sessionKey = sessionKey;
127 * @param seed the seed to set
129 public void setSeed(int seed) {
134 public SwitchSessionKeyOF getSessionKey() {
139 public IMessageDispatchService getMessageDispatchService() {
144 public Long getNextXid() {
145 return xid.incrementAndGet();
149 public Map<Long, PortGrouping> getPhysicalPorts() {
150 return this.physicalPorts;
154 public Map<Long, Boolean> getPortsBandwidth() {
155 return this.portBandwidth;
159 public Set<Long> getPorts() {
160 return this.physicalPorts.keySet();
164 public PortGrouping getPhysicalPort(Long portNumber) {
165 return this.physicalPorts.get(portNumber);
169 public Boolean getPortBandwidth(Long portNumber) {
170 return this.portBandwidth.get(portNumber);
174 public boolean isPortEnabled(long portNumber) {
175 return isPortEnabled(physicalPorts.get(portNumber));
179 public boolean isPortEnabled(PortGrouping port) {
183 if (port.getConfig().isPortDown()) {
186 if (port.getState().isLinkDown()) {
189 if (port.getState().isBlocked()) {
196 public List<PortGrouping> getEnabledPorts() {
197 List<PortGrouping> result = new ArrayList<PortGrouping>();
198 synchronized (this.physicalPorts) {
199 for (PortGrouping port : physicalPorts.values()) {
200 if (isPortEnabled(port)) {
209 public void setProviderRegistration(
210 CompositeObjectRegistration<ModelDrivenSwitch> providerRegistration) {
211 this.providerRegistration = providerRegistration;
215 public CompositeObjectRegistration<ModelDrivenSwitch> getProviderRegistration() {
216 return providerRegistration;
220 public int getSeed() {
225 * @param notificationEnqueuer the notificationEnqueuer to set
227 public void setNotificationEnqueuer(
228 NotificationEnqueuer notificationEnqueuer) {
229 this.notificationEnqueuer = notificationEnqueuer;
233 public NotificationEnqueuer getNotificationEnqueuer() {
234 return notificationEnqueuer;