test/ipsec: fix a typo in function name
[dpdk.git] / examples / ip_pipeline / pipeline.c
index b23d6c0..b627310 100644 (file)
@@ -636,7 +636,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv4[] = {
                .size = sizeof(uint8_t),
                .field_index = 0,
                .input_index = 0,
-               .offset = offsetof(struct ipv4_hdr, next_proto_id),
+               .offset = offsetof(struct rte_ipv4_hdr, next_proto_id),
        },
 
        /* Source IP address (IPv4) */
@@ -645,7 +645,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv4[] = {
                .size = sizeof(uint32_t),
                .field_index = 1,
                .input_index = 1,
-               .offset = offsetof(struct ipv4_hdr, src_addr),
+               .offset = offsetof(struct rte_ipv4_hdr, src_addr),
        },
 
        /* Destination IP address (IPv4) */
@@ -654,7 +654,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv4[] = {
                .size = sizeof(uint32_t),
                .field_index = 2,
                .input_index = 2,
-               .offset = offsetof(struct ipv4_hdr, dst_addr),
+               .offset = offsetof(struct rte_ipv4_hdr, dst_addr),
        },
 
        /* Source Port */
@@ -663,8 +663,8 @@ static const struct rte_acl_field_def table_acl_field_format_ipv4[] = {
                .size = sizeof(uint16_t),
                .field_index = 3,
                .input_index = 3,
-               .offset = sizeof(struct ipv4_hdr) +
-                       offsetof(struct tcp_hdr, src_port),
+               .offset = sizeof(struct rte_ipv4_hdr) +
+                       offsetof(struct rte_tcp_hdr, src_port),
        },
 
        /* Destination Port */
@@ -673,8 +673,8 @@ static const struct rte_acl_field_def table_acl_field_format_ipv4[] = {
                .size = sizeof(uint16_t),
                .field_index = 4,
                .input_index = 3,
-               .offset = sizeof(struct ipv4_hdr) +
-                       offsetof(struct tcp_hdr, dst_port),
+               .offset = sizeof(struct rte_ipv4_hdr) +
+                       offsetof(struct rte_tcp_hdr, dst_port),
        },
 };
 
@@ -685,7 +685,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint8_t),
                .field_index = 0,
                .input_index = 0,
-               .offset = offsetof(struct ipv6_hdr, proto),
+               .offset = offsetof(struct rte_ipv6_hdr, proto),
        },
 
        /* Source IP address (IPv6) */
@@ -694,7 +694,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 1,
                .input_index = 1,
-               .offset = offsetof(struct ipv6_hdr, src_addr[0]),
+               .offset = offsetof(struct rte_ipv6_hdr, src_addr[0]),
        },
 
        [2] = {
@@ -702,7 +702,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 2,
                .input_index = 2,
-               .offset = offsetof(struct ipv6_hdr, src_addr[4]),
+               .offset = offsetof(struct rte_ipv6_hdr, src_addr[4]),
        },
 
        [3] = {
@@ -710,7 +710,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 3,
                .input_index = 3,
-               .offset = offsetof(struct ipv6_hdr, src_addr[8]),
+               .offset = offsetof(struct rte_ipv6_hdr, src_addr[8]),
        },
 
        [4] = {
@@ -718,7 +718,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 4,
                .input_index = 4,
-               .offset = offsetof(struct ipv6_hdr, src_addr[12]),
+               .offset = offsetof(struct rte_ipv6_hdr, src_addr[12]),
        },
 
        /* Destination IP address (IPv6) */
@@ -727,7 +727,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 5,
                .input_index = 5,
-               .offset = offsetof(struct ipv6_hdr, dst_addr[0]),
+               .offset = offsetof(struct rte_ipv6_hdr, dst_addr[0]),
        },
 
        [6] = {
@@ -735,7 +735,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 6,
                .input_index = 6,
-               .offset = offsetof(struct ipv6_hdr, dst_addr[4]),
+               .offset = offsetof(struct rte_ipv6_hdr, dst_addr[4]),
        },
 
        [7] = {
@@ -743,7 +743,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 7,
                .input_index = 7,
-               .offset = offsetof(struct ipv6_hdr, dst_addr[8]),
+               .offset = offsetof(struct rte_ipv6_hdr, dst_addr[8]),
        },
 
        [8] = {
@@ -751,7 +751,7 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint32_t),
                .field_index = 8,
                .input_index = 8,
-               .offset = offsetof(struct ipv6_hdr, dst_addr[12]),
+               .offset = offsetof(struct rte_ipv6_hdr, dst_addr[12]),
        },
 
        /* Source Port */
@@ -760,8 +760,8 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint16_t),
                .field_index = 9,
                .input_index = 9,
-               .offset = sizeof(struct ipv6_hdr) +
-                       offsetof(struct tcp_hdr, src_port),
+               .offset = sizeof(struct rte_ipv6_hdr) +
+                       offsetof(struct rte_tcp_hdr, src_port),
        },
 
        /* Destination Port */
@@ -770,8 +770,8 @@ static const struct rte_acl_field_def table_acl_field_format_ipv6[] = {
                .size = sizeof(uint16_t),
                .field_index = 10,
                .input_index = 9,
-               .offset = sizeof(struct ipv6_hdr) +
-                       offsetof(struct tcp_hdr, dst_port),
+               .offset = sizeof(struct rte_ipv6_hdr) +
+                       offsetof(struct rte_tcp_hdr, dst_port),
        },
 };
 
@@ -1041,7 +1041,95 @@ pipeline_table_create(const char *pipeline_name,
        memcpy(&table->params, params, sizeof(*params));
        table->ap = ap;
        table->a = action;
+       TAILQ_INIT(&table->rules);
+       table->rule_default = NULL;
+
        pipeline->n_tables++;
 
        return 0;
 }
+
+struct table_rule *
+table_rule_find(struct table *table,
+    struct table_rule_match *match)
+{
+       struct table_rule *rule;
+
+       TAILQ_FOREACH(rule, &table->rules, node)
+               if (memcmp(&rule->match, match, sizeof(*match)) == 0)
+                       return rule;
+
+       return NULL;
+}
+
+void
+table_rule_add(struct table *table,
+    struct table_rule *new_rule)
+{
+       struct table_rule *existing_rule;
+
+       existing_rule = table_rule_find(table, &new_rule->match);
+       if (existing_rule == NULL)
+               TAILQ_INSERT_TAIL(&table->rules, new_rule, node);
+       else {
+               TAILQ_INSERT_AFTER(&table->rules, existing_rule, new_rule, node);
+               TAILQ_REMOVE(&table->rules, existing_rule, node);
+               free(existing_rule);
+       }
+}
+
+void
+table_rule_add_bulk(struct table *table,
+    struct table_rule_list *list,
+    uint32_t n_rules)
+{
+       uint32_t i;
+
+       for (i = 0; i < n_rules; i++) {
+               struct table_rule *existing_rule, *new_rule;
+
+               new_rule = TAILQ_FIRST(list);
+               if (new_rule == NULL)
+                       break;
+
+               TAILQ_REMOVE(list, new_rule, node);
+
+               existing_rule = table_rule_find(table, &new_rule->match);
+               if (existing_rule == NULL)
+                       TAILQ_INSERT_TAIL(&table->rules, new_rule, node);
+               else {
+                       TAILQ_INSERT_AFTER(&table->rules, existing_rule, new_rule, node);
+                       TAILQ_REMOVE(&table->rules, existing_rule, node);
+                       free(existing_rule);
+               }
+       }
+}
+
+void
+table_rule_delete(struct table *table,
+    struct table_rule_match *match)
+{
+       struct table_rule *rule;
+
+       rule = table_rule_find(table, match);
+       if (rule == NULL)
+               return;
+
+       TAILQ_REMOVE(&table->rules, rule, node);
+       free(rule);
+}
+
+void
+table_rule_default_add(struct table *table,
+       struct table_rule *rule)
+{
+       free(table->rule_default);
+       table->rule_default = rule;
+}
+
+void
+table_rule_default_delete(struct table *table)
+{
+       free(table->rule_default);
+       table->rule_default = NULL;
+}