2 * Copyright (c) 2015 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
8 package org.opendaylight.openflowplugin.impl.device;
10 import java.math.BigInteger;
11 import java.util.HashMap;
13 import java.util.concurrent.Future;
15 import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;
16 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
17 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
18 import org.opendaylight.openflowplugin.api.openflow.device.DeviceState;
19 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
20 import org.opendaylight.openflowplugin.api.openflow.device.RequestFutureContext;
21 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
22 import org.opendaylight.openflowplugin.api.openflow.device.XidGenerator;
23 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;
24 import org.opendaylight.openflowplugin.openflow.md.core.session.SwitchConnectionCookieOFImpl;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures;
27 import org.opendaylight.yangtools.yang.binding.ChildOf;
28 import org.opendaylight.yangtools.yang.binding.DataObject;
29 import org.opendaylight.yangtools.yang.common.RpcResult;
31 import com.google.common.util.concurrent.SettableFuture;
36 public class DeviceContextImpl implements DeviceContext {
37 private Map<Xid, RequestFutureContext> requests =
38 new HashMap<Xid, RequestFutureContext>();
40 private final Map<SwitchConnectionDistinguisher, ConnectionContext> auxiliaryConnectionContexts = new HashMap<>();
42 private XidGenerator xidGenerator = new XidGenerator();
44 public <M extends ChildOf<DataObject>> void onMessage(M message, RequestContext requestContext) {
45 // TODO Auto-generated method stub
50 public void addAuxiliaryConenctionContext(ConnectionContext connectionContext) {
51 SwitchConnectionDistinguisher connectionDistinguisher = new SwitchConnectionCookieOFImpl(connectionContext.getFeatures().getAuxiliaryId());
52 auxiliaryConnectionContexts.put(connectionDistinguisher, connectionContext);
56 public void removeAuxiliaryConenctionContext(ConnectionContext connectionContext) {
57 // TODO Auto-generated method stub
62 public DeviceState getDeviceState() {
63 // TODO Auto-generated method stub
68 public void setTransactionChain(TransactionChain transactionChain) {
69 // TODO Auto-generated method stub
74 public TransactionChain getTransactionChain() {
75 // TODO Auto-generated method stub
80 public TableFeatures getCapabilities() {
81 // TODO Auto-generated method stub
86 public ConnectionContext getPrimaryConnectionContext() {
91 public ConnectionContext getAuxiliaryConnectiobContexts(final BigInteger cookie) {
92 return auxiliaryConnectionContexts.get(new SwitchConnectionCookieOFImpl(cookie.longValue()));
96 public Xid getNextXid() {
97 return xidGenerator.generate();
101 public <T extends DataObject> Future<RpcResult<T>> sendRequest(Xid xid) {
106 public Map<Xid, RequestFutureContext> getRequests() {
107 // TODO Auto-generated method stub
112 public void hookRequestCtx(Xid xid, RequestFutureContext requestFutureContext) {
113 // TODO Auto-generated method stub
114 requests.put(xid, requestFutureContext);
118 public void processReply(Xid xid, OfHeader ofHeader) {
119 // TODO Auto-generated method stub
120 SettableFuture replyFuture = getRequests().get(xid).getFuture();
121 replyFuture.set(ofHeader);