3 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
5 * This program and the accompanying materials are made available under the
6 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 * and is available at http://www.eclipse.org/legal/epl-v10.html
10 package org.opendaylight.affinity.nfchain.provider;
12 import java.util.Collections;
13 import java.util.List;
14 import java.util.ArrayList;
16 import java.util.concurrent.Callable;
17 import java.util.concurrent.ExecutorService;
18 import java.util.concurrent.Executors;
19 import java.util.concurrent.Future;
21 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
22 import org.opendaylight.controller.sal.common.util.Futures;
23 import org.opendaylight.controller.sal.common.util.Rpcs;
25 import org.opendaylight.yangtools.yang.common.RpcError;
26 import org.opendaylight.yangtools.yang.common.RpcResult;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfchainService;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfchainData;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfdbBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.chain.Gateway;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.Nfdb;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.NfdbBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.AddchainInput;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.EnablechainInput;
40 import org.opendaylight.affinity.nfchainagent.NFchainconfig;
42 import org.opendaylight.controller.hosttracker.hostAware.HostNodeConnector;
43 import org.opendaylight.controller.sal.core.Node;
44 import org.opendaylight.controller.sal.core.NodeConnector;
45 import org.opendaylight.controller.sal.packet.BitBufferHelper;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
49 import org.opendaylight.controller.hosttracker.IfIptoHost;
50 import org.opendaylight.controller.hosttracker.IfNewHostNotify;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.addchain.input.Chain;
54 import java.net.InetAddress;
55 import org.opendaylight.controller.sal.compability.ToSalConversionsUtils;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.affinity.nfchain.rev131020.chain.Flow;
60 * NfchainManager -- sends flow programming rules to flow programming service.
62 public class NfchainManager implements NfchainService, NfchainData {
63 private static final long serialVersionUID = 1L;
64 protected static final Logger log = LoggerFactory.getLogger(NfchainManager.class);
66 private NotificationProviderService notificationProvider;
67 private Future<RpcResult<Void>> currentTask;
69 public NfchainManager() {
73 public Nfdb getNfdb() {
74 NfdbBuilder builder = new NfdbBuilder();
75 return builder.build();
79 * Convert API Flow objects to flow programmer flow objects.
81 List<org.opendaylight.controller.sal.flowprogrammer.Flow> fromAPIFlowlist(List<Flow> fl) {
82 List<org.opendaylight.controller.sal.flowprogrammer.Flow> flowlist = new ArrayList<org.opendaylight.controller.sal.flowprogrammer.Flow>();
85 org.opendaylight.controller.sal.flowprogrammer.Flow fp_flow = ToSalConversionsUtils.toFlow(f);
86 flowlist.add(fp_flow);
92 * addchain synchronous.
95 public Future<RpcResult<Void>> addchain(AddchainInput input) {
96 // TODO Auto-generated method stub
97 Chain chain = input.getChain();
99 List<org.opendaylight.controller.sal.flowprogrammer.Flow> flowlist = fromAPIFlowlist(chain.getFlow());
100 List<Gateway> gatewaylist = chain.getGateway();
101 String name = chain.getName();
103 if (gatewaylist.size() > 1) {
104 log.info("addNfchain function chain has {} elements", gatewaylist.size());
107 log.info("add gateway - Received input chain = {}, gateway = {}.", input.getChain(), chain.getGateway());
108 Gateway gw = gatewaylist.get(0);
109 InetAddress ip = ToSalConversionsUtils.inetAddressFrom(gw.getLocation());
110 NFchainconfig nfcc = new NFchainconfig(name, flowlist, ip);
111 /* nfchainagent.addNfchain(); */
113 RpcResult<Void> result = Rpcs.<Void> getRpcResult(true, null, Collections.<RpcError> emptySet());
114 return Futures.immediateFuture(result);
118 public Future<RpcResult<java.lang.Void>> enablechain(EnablechainInput input) {
119 log.info("enable chain");
121 RpcResult<Void> result = Rpcs.<Void> getRpcResult(true, null, Collections.<RpcError> emptySet());
122 return Futures.immediateFuture(result);
125 public void setNotificationProvider(NotificationProviderService salService) {
126 this.notificationProvider = salService;