mbuf: add function to generate raw Tx offload value
[dpdk.git] / app / test / test_acl.h
index 9515e04..bbb0447 100644 (file)
-/*-
- *   BSD LICENSE
- * 
- *   Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
- *   All rights reserved.
- * 
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- * 
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- * 
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2014 Intel Corporation
  */
 
 #ifndef TEST_ACL_H_
 #define TEST_ACL_H_
 
 struct ipv4_7tuple {
-       uint16_t vlan;
-       uint16_t domain;
-        uint8_t proto;
-        uint32_t ip_src;
-        uint32_t ip_dst;
-        uint16_t port_src;
-        uint16_t port_dst;
-        uint32_t allow;
-        uint32_t deny;
+       uint16_t vlan;
+       uint16_t domain;
+       uint8_t proto;
+       uint32_t ip_src;
+       uint32_t ip_dst;
+       uint16_t port_src;
+       uint16_t port_dst;
+       uint32_t allow;
+       uint32_t deny;
+};
+
+/**
+ * Legacy support for 7-tuple IPv4 and VLAN rule.
+ * This structure and corresponding API is deprecated.
+ */
+struct rte_acl_ipv4vlan_rule {
+       struct rte_acl_rule_data data; /**< Miscellaneous data for the rule. */
+       uint8_t proto;                 /**< IPv4 protocol ID. */
+       uint8_t proto_mask;            /**< IPv4 protocol ID mask. */
+       uint16_t vlan;                 /**< VLAN ID. */
+       uint16_t vlan_mask;            /**< VLAN ID mask. */
+       uint16_t domain;               /**< VLAN domain. */
+       uint16_t domain_mask;          /**< VLAN domain mask. */
+       uint32_t src_addr;             /**< IPv4 source address. */
+       uint32_t src_mask_len;         /**< IPv4 source address mask. */
+       uint32_t dst_addr;             /**< IPv4 destination address. */
+       uint32_t dst_mask_len;         /**< IPv4 destination address mask. */
+       uint16_t src_port_low;         /**< L4 source port low. */
+       uint16_t src_port_high;        /**< L4 source port high. */
+       uint16_t dst_port_low;         /**< L4 destination port low. */
+       uint16_t dst_port_high;        /**< L4 destination port high. */
+};
+
+/**
+ * Specifies fields layout inside rte_acl_rule for rte_acl_ipv4vlan_rule.
+ */
+enum {
+       RTE_ACL_IPV4VLAN_PROTO_FIELD,
+       RTE_ACL_IPV4VLAN_VLAN1_FIELD,
+       RTE_ACL_IPV4VLAN_VLAN2_FIELD,
+       RTE_ACL_IPV4VLAN_SRC_FIELD,
+       RTE_ACL_IPV4VLAN_DST_FIELD,
+       RTE_ACL_IPV4VLAN_SRCP_FIELD,
+       RTE_ACL_IPV4VLAN_DSTP_FIELD,
+       RTE_ACL_IPV4VLAN_NUM_FIELDS
+};
+
+/**
+ * Macro to define rule size for rte_acl_ipv4vlan_rule.
+ */
+#define        RTE_ACL_IPV4VLAN_RULE_SZ        \
+       RTE_ACL_RULE_SZ(RTE_ACL_IPV4VLAN_NUM_FIELDS)
+
+/*
+ * That effectively defines order of IPV4VLAN classifications:
+ *  - PROTO
+ *  - VLAN (TAG and DOMAIN)
+ *  - SRC IP ADDRESS
+ *  - DST IP ADDRESS
+ *  - PORTS (SRC and DST)
+ */
+enum {
+       RTE_ACL_IPV4VLAN_PROTO,
+       RTE_ACL_IPV4VLAN_VLAN,
+       RTE_ACL_IPV4VLAN_SRC,
+       RTE_ACL_IPV4VLAN_DST,
+       RTE_ACL_IPV4VLAN_PORTS,
+       RTE_ACL_IPV4VLAN_NUM
 };
 
 /* rules for invalid layout test */
 struct rte_acl_ipv4vlan_rule invalid_layout_rules[] = {
                /* test src and dst address */
                {
-                               .data = {.userdata = 1, .category_mask = 1},
+                               .data = {.userdata = 1, .category_mask = 1,
+                                       .priority = 1},
                                .src_addr = IPv4(10,0,0,0),
                                .src_mask_len = 24,
                },
                {
-                               .data = {.userdata = 2, .category_mask = 1},
+                               .data = {.userdata = 2, .category_mask = 1,
+                                       .priority = 1},
                                .dst_addr = IPv4(10,0,0,0),
                                .dst_mask_len = 24,
                },
                /* test src and dst ports */
                {
-                               .data = {.userdata = 3, .category_mask = 1},
+                               .data = {.userdata = 3, .category_mask = 1,
+                                       .priority = 1},
                                .dst_port_low = 100,
                                .dst_port_high = 100,
                },
                {
-                               .data = {.userdata = 4, .category_mask = 1},
+                               .data = {.userdata = 4, .category_mask = 1,
+                                       .priority = 1},
                                .src_port_low = 100,
                                .src_port_high = 100,
                },
                /* test proto */
                {
-                               .data = {.userdata = 5, .category_mask = 1},
+                               .data = {.userdata = 5, .category_mask = 1,
+                                       .priority = 1},
                                .proto = 0xf,
                                .proto_mask = 0xf
                },
                {
-                               .data = {.userdata = 6, .category_mask = 1},
+                               .data = {.userdata = 6, .category_mask = 1,
+                                       .priority = 1},
                                .dst_port_low = 0xf,
                                .dst_port_high = 0xf,
                }
@@ -105,7 +141,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets traveling to 192.168.0.0/16 */
                {
                                .data = {.userdata = 1, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 230},
                                .dst_addr = IPv4(192,168,0,0),
                                .dst_mask_len = 16,
                                .src_port_low = 0,
@@ -116,7 +152,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets traveling to 192.168.1.0/24 */
                {
                                .data = {.userdata = 2, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 3},
+                                               .priority = 330},
                                .dst_addr = IPv4(192,168,1,0),
                                .dst_mask_len = 24,
                                .src_port_low = 0,
@@ -127,7 +163,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets traveling to 192.168.1.50 */
                {
                                .data = {.userdata = 3, .category_mask = ACL_DENY_MASK,
-                                               .priority = 2},
+                                               .priority = 230},
                                .dst_addr = IPv4(192,168,1,50),
                                .dst_mask_len = 32,
                                .src_port_low = 0,
@@ -140,7 +176,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets traveling from 10.0.0.0/8 */
                {
                                .data = {.userdata = 4, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 240},
                                .src_addr = IPv4(10,0,0,0),
                                .src_mask_len = 8,
                                .src_port_low = 0,
@@ -151,7 +187,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets traveling from 10.1.1.0/24 */
                {
                                .data = {.userdata = 5, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 3},
+                                               .priority = 340},
                                .src_addr = IPv4(10,1,1,0),
                                .src_mask_len = 24,
                                .src_port_low = 0,
@@ -162,7 +198,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets traveling from 10.1.1.1 */
                {
                                .data = {.userdata = 6, .category_mask = ACL_DENY_MASK,
-                                               .priority = 2},
+                                               .priority = 240},
                                .src_addr = IPv4(10,1,1,1),
                                .src_mask_len = 32,
                                .src_port_low = 0,
@@ -175,7 +211,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with lower 7 bytes of VLAN tag equal to 0x64  */
                {
                                .data = {.userdata = 7, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 260},
                                .vlan = 0x64,
                                .vlan_mask = 0x7f,
                                .src_port_low = 0,
@@ -186,7 +222,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with VLAN tags that have 0x5 in them */
                {
                                .data = {.userdata = 8, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 260},
                                .vlan = 0x5,
                                .vlan_mask = 0x5,
                                .src_port_low = 0,
@@ -197,7 +233,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with VLAN tag 5 */
                {
                                .data = {.userdata = 9, .category_mask = ACL_DENY_MASK,
-                                               .priority = 3},
+                                               .priority = 360},
                                .vlan = 0x5,
                                .vlan_mask = 0xffff,
                                .src_port_low = 0,
@@ -210,7 +246,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with lower 7 bytes of domain equal to 0x64  */
                {
                                .data = {.userdata = 10, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 250},
                                .domain = 0x64,
                                .domain_mask = 0x7f,
                                .src_port_low = 0,
@@ -221,7 +257,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with domains that have 0x5 in them */
                {
                                .data = {.userdata = 11, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 3},
+                                               .priority = 350},
                                .domain = 0x5,
                                .domain_mask = 0x5,
                                .src_port_low = 0,
@@ -232,7 +268,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with domain 5 */
                {
                                .data = {.userdata = 12, .category_mask = ACL_DENY_MASK,
-                                               .priority = 3},
+                                               .priority = 350},
                                .domain = 0x5,
                                .domain_mask = 0xffff,
                                .src_port_low = 0,
@@ -245,7 +281,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with dst port 80 */
                {
                                .data = {.userdata = 13, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 3},
+                                               .priority = 310},
                                .dst_port_low = 80,
                                .dst_port_high = 80,
                                .src_port_low = 0,
@@ -254,7 +290,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with dst port 22-1023 */
                {
                                .data = {.userdata = 14, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 210},
                                .dst_port_low = 22,
                                .dst_port_high = 1023,
                                .src_port_low = 0,
@@ -263,7 +299,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with dst port 1020 */
                {
                                .data = {.userdata = 15, .category_mask = ACL_DENY_MASK,
-                                               .priority = 3},
+                                               .priority = 310},
                                .dst_port_low = 1020,
                                .dst_port_high = 1020,
                                .src_port_low = 0,
@@ -272,7 +308,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with dst portrange  1000-2000 */
                {
                                .data = {.userdata = 16, .category_mask = ACL_DENY_MASK,
-                                               .priority = 2},
+                                               .priority = 210},
                                .dst_port_low = 1000,
                                .dst_port_high = 2000,
                                .src_port_low = 0,
@@ -283,7 +319,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with src port 80 */
                {
                                .data = {.userdata = 17, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 3},
+                                               .priority = 320},
                                .src_port_low = 80,
                                .src_port_high = 80,
                                .dst_port_low = 0,
@@ -292,7 +328,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with src port 22-1023 */
                {
                                .data = {.userdata = 18, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 220},
                                .src_port_low = 22,
                                .src_port_high = 1023,
                                .dst_port_low = 0,
@@ -301,7 +337,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with src port 1020 */
                {
                                .data = {.userdata = 19, .category_mask = ACL_DENY_MASK,
-                                               .priority = 3},
+                                               .priority = 320},
                                .src_port_low = 1020,
                                .src_port_high = 1020,
                                .dst_port_low = 0,
@@ -310,7 +346,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches everything with src portrange  1000-2000 */
                {
                                .data = {.userdata = 20, .category_mask = ACL_DENY_MASK,
-                                               .priority = 2},
+                                               .priority = 220},
                                .src_port_low = 1000,
                                .src_port_high = 2000,
                                .dst_port_low = 0,
@@ -321,7 +357,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with protocol number either 0x64 or 0xE4 */
                {
                                .data = {.userdata = 21, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 270},
                                .proto = 0x64,
                                .proto_mask = 0x7f,
                                .src_port_low = 0,
@@ -332,7 +368,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with protocol that have 0x5 in them */
                {
                                .data = {.userdata = 22, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 2},
+                                               .priority = 1},
                                .proto = 0x5,
                                .proto_mask = 0x5,
                                .src_port_low = 0,
@@ -343,7 +379,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                /* matches all packets with protocol 5 */
                {
                                .data = {.userdata = 23, .category_mask = ACL_DENY_MASK,
-                                               .priority = 3},
+                                               .priority = 370},
                                .proto = 0x5,
                                .proto_mask = 0xff,
                                .src_port_low = 0,
@@ -355,7 +391,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
 /* rules combining various fields */
                {
                                .data = {.userdata = 24, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 4},
+                                               .priority = 400},
                                /** make sure that unmasked bytes don't fail! */
                                .dst_addr = IPv4(1,2,3,4),
                                .dst_mask_len = 16,
@@ -374,7 +410,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                },
                {
                                .data = {.userdata = 25, .category_mask = ACL_DENY_MASK,
-                                               .priority = 4},
+                                               .priority = 400},
                                .dst_addr = IPv4(5,6,7,8),
                                .dst_mask_len = 24,
                                .src_addr = IPv4(1,2,3,4),
@@ -392,7 +428,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                },
                {
                                .data = {.userdata = 26, .category_mask = ACL_ALLOW_MASK,
-                                               .priority = 5},
+                                               .priority = 500},
                                .dst_addr = IPv4(1,2,3,4),
                                .dst_mask_len = 8,
                                .src_addr = IPv4(5,6,7,8),
@@ -408,7 +444,7 @@ struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
                },
                {
                                .data = {.userdata = 27, .category_mask = ACL_DENY_MASK,
-                                               .priority = 5},
+                                               .priority = 500},
                                .dst_addr = IPv4(5,6,7,8),
                                .dst_mask_len = 32,
                                .src_addr = IPv4(1,2,3,4),