| /* |
| * Copyright (c) 2017 Cisco and/or its affiliates. |
| * 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. |
| */ |
| |
| #ifndef __VOM_L2_ACL_RULE_H__ |
| #define __VOM_L2_ACL_RULE_H__ |
| |
| #include "vom/acl_types.hpp" |
| #include "vom/prefix.hpp" |
| |
| #include <vapi/acl.api.vapi.hpp> |
| |
| namespace VOM { |
| namespace ACL { |
| /** |
| * An ACL rule is the building block of an ACL. An ACL, which is |
| * the object applied to an interface, is comprised of an ordersed |
| * sequence of ACL rules. |
| * This class is a wrapper around the VAPI generated struct and exports |
| * an API with better types. |
| */ |
| class l2_rule |
| { |
| public: |
| /** |
| * Construct a new object matching the desried state |
| */ |
| l2_rule(uint32_t priority, |
| const action_t& action, |
| const route::prefix_t& ip, |
| const mac_address_t& mac, |
| const mac_address_t& mac_mask); |
| |
| /** |
| * Copy Constructor |
| */ |
| l2_rule(const l2_rule& o) = default; |
| |
| /** |
| * Destructor |
| */ |
| ~l2_rule() = default; |
| |
| /** |
| * convert to string format for debug purposes |
| */ |
| std::string to_string() const; |
| |
| /** |
| * less-than operator |
| */ |
| bool operator<(const l2_rule& rule) const; |
| |
| /** |
| * comparison operator (for testing) |
| */ |
| bool operator==(const l2_rule& rule) const; |
| |
| /** |
| * Convert to VPP API fromat |
| */ |
| void to_vpp(vapi_type_macip_acl_rule& rule) const; |
| |
| private: |
| /** |
| * Priority. Used to sort the rules in a list in the order |
| * in which they are applied |
| */ |
| uint32_t m_priority; |
| |
| /** |
| * Action on match |
| */ |
| action_t m_action; |
| |
| /** |
| * Source Prefix |
| */ |
| route::prefix_t m_src_ip; |
| |
| /** |
| * Source Mac |
| */ |
| mac_address_t m_mac; |
| |
| /** |
| * Source MAC mask |
| */ |
| mac_address_t m_mac_mask; |
| }; |
| }; |
| }; |
| |
| /* |
| * fd.io coding-style-patch-verification: ON |
| * |
| * Local Variables: |
| * eval: (c-set-style "mozilla") |
| * End: |
| */ |
| |
| #endif |