2 * Copyright (c) 2016 Red Hat, 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.netvirt.aclservice;
10 import java.util.ArrayList;
11 import java.util.List;
13 import org.opendaylight.netvirt.aclservice.api.AclServiceListener;
14 import org.opendaylight.netvirt.aclservice.api.AclServiceManager;
15 import org.opendaylight.netvirt.aclservice.api.utils.AclInterface;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.acl.access.list.entries.Ace;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
20 public class AclServiceManagerImpl implements AclServiceManager {
22 private static final Logger LOG = LoggerFactory.getLogger(AclServiceManagerImpl.class);
24 private final List<AclServiceListener> aclServiceListeners = new ArrayList<>();
27 * Initialize the ACL service listener list.
28 * @param ingressAclService ingress acl service
29 * @param egressAclService egress acl service
31 public AclServiceManagerImpl(final AbstractIngressAclServiceImpl ingressAclService,
32 final AbstractEgressAclServiceImpl egressAclService) {
33 addAclServiceListner(ingressAclService);
34 addAclServiceListner(egressAclService);
36 LOG.info("ACL Service Initiated");
40 public void addAclServiceListner(AclServiceListener aclServiceListner) {
41 aclServiceListeners.add(aclServiceListner);
45 public void removeAclServiceListner(AclServiceListener aclServiceListner) {
46 aclServiceListeners.remove(aclServiceListner);
50 public void notify(AclInterface port, AclInterface oldPort, Action action) {
51 for (AclServiceListener aclServiceListener : aclServiceListeners) {
52 boolean result = false;
53 if (action == Action.ADD) {
54 result = aclServiceListener.applyAcl(port);
55 } else if (action == Action.UPDATE) {
56 result = aclServiceListener.updateAcl(oldPort, port);
57 } else if (action == Action.REMOVE) {
58 result = aclServiceListener.removeAcl(port);
61 LOG.debug("Acl action {} invoking listener {} succeeded", action,
62 aclServiceListener.getClass().getName());
64 LOG.warn("Acl action {} invoking listener {} failed", action, aclServiceListener.getClass().getName());
70 public void notifyAce(AclInterface port, Action action, Ace ace) {
71 for (AclServiceListener aclServiceListener : aclServiceListeners) {
72 LOG.debug("Ace action {} invoking class {}", action, aclServiceListener.getClass().getName());
73 if (action == Action.ADD) {
74 aclServiceListener.applyAce(port, ace);
75 } else if (action == Action.REMOVE) {
76 aclServiceListener.removeAce(port, ace);