2 * Copyright © 2015, 2016 Dell, 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.netvirt.openstack.netvirt.sfc;
11 import com.google.common.base.Preconditions;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.netvirt.utils.mdsal.utils.MdsalUtils;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.AccessLists;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.access.lists.Acl;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev150317.access.lists.AclKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
25 * Data processor for Classifier.
27 public class NetvirtSfcClassifierDataProcessor implements INetvirtSfcDataProcessor<Classifier> {
28 private static final Logger LOG = LoggerFactory.getLogger(NetvirtSfcClassifierDataProcessor.class);
29 private final MdsalUtils mdsalUtils;
30 private final INetvirtSfcOF13Provider provider;
33 * {@link NetvirtSfcClassifierDataProcessor} constructor.
34 * @param provider OpenFlow 1.3 Provider
35 * @param db MdSal {@link DataBroker}
37 public NetvirtSfcClassifierDataProcessor(final INetvirtSfcOF13Provider provider, final DataBroker db) {
38 this.provider = Preconditions.checkNotNull(provider, "Provider can not be null!");
39 Preconditions.checkNotNull(db, "DataBroker can not be null!");
40 mdsalUtils = new MdsalUtils(db);
44 public void remove(final InstanceIdentifier<Classifier> identifier,
45 final Classifier change) {
46 Preconditions.checkNotNull(change, "Added object can not be null!");
47 String aclName = change.getAcl();
48 // Read the ACL information from data store and make sure it exists.
49 Acl acl = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, getIetfAclIid(aclName));
51 LOG.debug("IETF ACL with name ={} is not yet configured. skip this operation", aclName);
55 provider.removeClassifierRules(acl);
59 public void update(final InstanceIdentifier<Classifier> identifier,
60 final Classifier original, final Classifier change) {
66 public void add(final InstanceIdentifier<Classifier> identifier,
67 final Classifier change) {
68 Preconditions.checkNotNull(change, "Added object can not be null!");
69 String aclName = change.getAcl();
70 // Read the ACL information from data store and make sure it exists.
71 Acl acl = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, getIetfAclIid(aclName));
73 LOG.debug("IETF ACL with name ={} is not yet configured. skip this operation", aclName);
77 provider.addClassifierRules(acl);
80 private InstanceIdentifier<Acl> getIetfAclIid(String aclName) {
81 return InstanceIdentifier.create(AccessLists.class).child(Acl.class, new AclKey(aclName));