blob: 67dc1698f04689b4378a0b39fa4d99a9b4b24faf [file] [log] [blame]
/*
* Copyright 2015-present Open Networking Laboratory
* Originally created by Pengfei Lu, Network and Cloud Computing Laboratory, Dalian University of Technology, China
* Advisers: Keqiu Li, Heng Qi and Haisheng Yu
* This work is supported by the State Key Program of National Natural Science of China(Grant No. 61432002)
* and Prospective Research Project on Future Networks in Jiangsu Future Networks Innovation Institute.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.acl;
import org.onosproject.net.DeviceId;
import org.onosproject.net.flow.FlowRule;
import org.onosproject.store.Store;
import java.util.List;
import java.util.Set;
/**
* Service interface exported by ACL distributed store.
*/
public interface AclStore extends Store {
/**
* Gets a list containing all ACL rules.
*
* @return a list containing all ACL rules
*/
List<AclRule> getAclRules();
/**
* Adds a new ACL rule.
*
* @param rule new ACL rule
*/
void addAclRule(AclRule rule);
/**
* Gets an existing ACL rule.
*
* @param ruleId ACL rule id
* @return ACL rule with the given id
*/
AclRule getAclRule(RuleId ruleId);
/**
* Removes an existing ACL rule by rule id.
*
* @param ruleId ACL rule id
*/
void removeAclRule(RuleId ruleId);
/**
* Clears ACL and reset all.
*/
void clearAcl();
/**
* Gets the current priority for new ACL flow rule by device id.
*
* @param deviceId device id
* @return new ACL flow rule's priority in the given device
*/
int getPriorityByDevice(DeviceId deviceId);
/**
* Gets a set containing all ACL flow rules belonging to a given ACL rule.
*
* @param ruleId ACL rule id
* @return a set containing all ACL flow rules belonging to the given ACL rule
*/
Set<FlowRule> getFlowByRule(RuleId ruleId);
/**
* Adds a new mapping from ACL rule to ACL flow rule.
*
* @param ruleId ACL rule id
* @param flowRule ACL flow rule
*/
void addRuleToFlowMapping(RuleId ruleId, FlowRule flowRule);
/**
* Removes an existing mapping from ACL rule to ACL flow rule.
*
* @param ruleId ACL rule id
*/
void removeRuleToFlowMapping(RuleId ruleId);
/**
* Gets a list containing all allowing ACL rules matching a given denying ACL rule.
*
* @param denyingRuleId denying ACL rule id
* @return a list containing all allowing ACL rules matching the given denying ACL rule
*/
List<RuleId> getAllowingRuleByDenyingRule(RuleId denyingRuleId);
/**
* Adds a new mapping from denying ACL rule to allowing ACL rule.
*
* @param denyingRuleId denying ACL rule id
* @param allowingRuleId allowing ACL rule id
*/
void addDenyToAllowMapping(RuleId denyingRuleId, RuleId allowingRuleId);
/**
* Removes an exsiting mapping from denying ACL rule to allowing ACL rule.
*
* @param denyingRuleId denying ACL rule id
*/
void removeDenyToAllowMapping(RuleId denyingRuleId);
/**
* Checks if an existing ACL rule already works in a given device.
*
* @param ruleId ACL rule id
* @param deviceId devide id
* @return true if the given ACL rule works in the given device
*/
boolean checkIfRuleWorksInDevice(RuleId ruleId, DeviceId deviceId);
/**
* Adds a new mapping from ACL rule to device.
*
* @param ruleId ACL rule id
* @param deviceId device id
*/
void addRuleToDeviceMapping(RuleId ruleId, DeviceId deviceId);
/**
* Removes an existing mapping from ACL rule to device.
*
* @param ruleId ACL rule id
*/
void removeRuleToDeviceMapping(RuleId ruleId);
}