aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/faces
diff options
context:
space:
mode:
Diffstat (limited to 'hicn-plugin/src/faces')
-rw-r--r--hicn-plugin/src/faces/app/face_prod.c3
-rw-r--r--hicn-plugin/src/faces/app/face_prod_node.c26
-rw-r--r--hicn-plugin/src/faces/face.c3
-rw-r--r--hicn-plugin/src/faces/face_node.c24
-rw-r--r--hicn-plugin/src/faces/iface_node.c46
5 files changed, 55 insertions, 47 deletions
diff --git a/hicn-plugin/src/faces/app/face_prod.c b/hicn-plugin/src/faces/app/face_prod.c
index 1e569b82b..73e2a1262 100644
--- a/hicn-plugin/src/faces/app/face_prod.c
+++ b/hicn-plugin/src/faces/app/face_prod.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 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:
@@ -285,6 +285,7 @@ hicn_face_prod_add (fib_prefix_t *prefix, u32 sw_if, u32 *cs_reserved,
}
face = hicn_face_get (&local_app_ip, sw_if, &hicn_face_hashtb, adj_index);
+ assert (face);
*faceid = hicn_dpoi_get_index (face);
diff --git a/hicn-plugin/src/faces/app/face_prod_node.c b/hicn-plugin/src/faces/app/face_prod_node.c
index 8adb7dce7..93e80d1ac 100644
--- a/hicn-plugin/src/faces/app/face_prod_node.c
+++ b/hicn-plugin/src/faces/app/face_prod_node.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 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:
@@ -100,16 +100,16 @@ match_ip6_name (u8 *name, const fib_prefix_t *prefix)
}
static_always_inline u32
-hicn_face_prod_next_from_data_hdr (vlib_buffer_t *b)
+hicn_face_prod_next_from_data_hdr (vlib_main_t *vm, vlib_buffer_t *b)
{
u8 is_v6;
int match_res = 1;
int ret = 0;
- hicn_name_t *name;
+ hicn_name_t name;
hicn_face_prod_state_t *prod_face = NULL;
// 1 - ensure the packet is hicn and its format is correct
- ret = hicn_data_parse_pkt (b);
+ ret = hicn_data_parse_pkt (b, vlib_buffer_length_in_chain (vm, b));
if (PREDICT_FALSE (ret))
{
return HICN_FACE_PROD_NEXT_ERROR_DROP;
@@ -124,14 +124,14 @@ hicn_face_prod_next_from_data_hdr (vlib_buffer_t *b)
// of this face
const fib_prefix_t *prefix = &prod_face->prefix;
is_v6 = hicn_buffer_is_v6 (b);
- name = &hicn_get_buffer (b)->name;
+ hicn_packet_get_name (&hicn_get_buffer (b)->pkbuf, &name);
if (PREDICT_TRUE (!is_v6 && ip46_address_is_ip4 (&prefix->fp_addr)))
{
- match_res = match_ip4_name (&name->prefix.ip4.as_u32, prefix);
+ match_res = match_ip4_name (&name.prefix.v4.as_u32, prefix);
}
else if (PREDICT_TRUE (is_v6 && !ip46_address_is_ip4 (&prefix->fp_addr)))
{
- match_res = match_ip6_name (name->prefix.ip6.as_u8, prefix);
+ match_res = match_ip6_name (name.prefix.v6.as_u8, prefix);
}
// 4 - if match found, forward data to next hicn node
@@ -230,10 +230,10 @@ hicn_face_prod_input_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node,
hicnb3->flags = HICN_FACE_FLAGS_DEFAULT;
// parse packets and get next node
- next0 = hicn_face_prod_next_from_data_hdr (b0);
- next1 = hicn_face_prod_next_from_data_hdr (b1);
- next2 = hicn_face_prod_next_from_data_hdr (b2);
- next3 = hicn_face_prod_next_from_data_hdr (b3);
+ next0 = hicn_face_prod_next_from_data_hdr (vm, b0);
+ next1 = hicn_face_prod_next_from_data_hdr (vm, b1);
+ next2 = hicn_face_prod_next_from_data_hdr (vm, b2);
+ next3 = hicn_face_prod_next_from_data_hdr (vm, b3);
stats.pkts_data_count += 4;
// counters
@@ -304,7 +304,7 @@ hicn_face_prod_input_node_fn (vlib_main_t *vm, vlib_node_runtime_t *node,
hicnb0 = hicn_get_buffer (b0);
hicnb0->flags = HICN_FACE_FLAGS_DEFAULT;
- next0 = hicn_face_prod_next_from_data_hdr (b0);
+ next0 = hicn_face_prod_next_from_data_hdr (vm, b0);
stats.pkts_data_count++;
// counters
@@ -357,4 +357,4 @@ VLIB_REGISTER_NODE(hicn_face_prod_input_node) =
* fd.io coding-style-patch-verification: ON
*
* Local Variables: eval: (c-set-style "gnu") End:
- */ \ No newline at end of file
+ */
diff --git a/hicn-plugin/src/faces/face.c b/hicn-plugin/src/faces/face.c
index 4ee1c283f..58c1c34c8 100644
--- a/hicn-plugin/src/faces/face.c
+++ b/hicn-plugin/src/faces/face.c
@@ -303,9 +303,6 @@ hicn_face_add (const dpo_id_t *dpo_nh, ip46_address_t *nat_address, int sw_if,
hicn_face_id_t *pfaceid)
{
- hicn_face_flags_t flags = (hicn_face_flags_t) 0;
- flags |= HICN_FACE_FLAGS_FACE;
-
hicn_face_t *face;
face =
diff --git a/hicn-plugin/src/faces/face_node.c b/hicn-plugin/src/faces/face_node.c
index e2fb79d17..0d2e70fbe 100644
--- a/hicn-plugin/src/faces/face_node.c
+++ b/hicn-plugin/src/faces/face_node.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 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:
@@ -25,6 +25,9 @@
#include "../hicn.h"
#include "../parser.h"
+#include <hicn/error.h>
+#include <hicn/util/ip_address.h>
+
/**
* @File
*
@@ -140,7 +143,7 @@ typedef enum
ip_hdr = (IP_HEADER_##ipv *) vlib_buffer_get_current (b0); \
\
/* Parse packet and cache useful info in opaque2 */ \
- ret0 = hicn_data_parse_pkt (b0); \
+ ret0 = hicn_data_parse_pkt (b0, vlib_buffer_length_in_chain (vm, b0)); \
is_icmp0 = ret0 == HICN_ERROR_PARSER_MAPME_PACKET; \
ret0 = (ret0 == HICN_ERROR_NONE) || \
(ret0 == HICN_ERROR_PARSER_MAPME_PACKET); \
@@ -235,8 +238,8 @@ typedef enum
ip_hdr1 = (IP_HEADER_##ipv *) vlib_buffer_get_current (b1); \
\
/* Parse packet and cache useful info in opaque2 */ \
- ret0 = hicn_data_parse_pkt (b0); \
- ret1 = hicn_data_parse_pkt (b1); \
+ ret0 = hicn_data_parse_pkt (b0, vlib_buffer_length_in_chain (vm, b0)); \
+ ret1 = hicn_data_parse_pkt (b1, vlib_buffer_length_in_chain (vm, b1)); \
is_icmp0 = ret0 == HICN_ERROR_PARSER_MAPME_PACKET; \
is_icmp1 = ret1 == HICN_ERROR_PARSER_MAPME_PACKET; \
ret0 = (ret0 == HICN_ERROR_NONE) || \
@@ -545,18 +548,17 @@ hicn_face_rewrite_interest (vlib_main_t *vm, vlib_buffer_t *b0,
* hicn_face_match_probe(b0, face, next)) */
/* return; */
- hicn_header_t *hicn = vlib_buffer_get_current (b0);
+ hicn_packet_buffer_t *pkbuf = &hicn_get_buffer (b0)->pkbuf;
u8 is_v4 = ip46_address_is_ip4 (&face->nat_addr) &&
!ip6_address_is_loopback (&face->nat_addr.ip6);
// hicn_face_ip_t *ip_face = (hicn_face_ip_t *) face->data;
- ip46_address_t temp_addr;
- ip46_address_reset (&temp_addr);
- hicn_type_t type = hicn_get_buffer (b0)->type;
- int ret = hicn_ops_vft[type.l1]->rewrite_interest (
- type, &hicn->protocol, &face->nat_addr, &temp_addr);
+ hicn_ip_address_t temp_addr;
+ ip46_address_reset (&(temp_addr.as_ip46));
+ hicn_ip_address_t *face_nat_addr = (hicn_ip_address_t *) &face->nat_addr;
+ int ret = hicn_interest_rewrite (pkbuf, face_nat_addr, &temp_addr);
if (ret == HICN_LIB_ERROR_REWRITE_CKSUM_REQUIRED)
{
ensure_offload_flags (b0, is_v4);
@@ -887,4 +889,4 @@ VLIB_REGISTER_NODE (hicn6_face_output_node) = {
* Local Variables:
* eval: (c-set-style "gnu")
* End:
- */ \ No newline at end of file
+ */
diff --git a/hicn-plugin/src/faces/iface_node.c b/hicn-plugin/src/faces/iface_node.c
index 2f651beb8..598a68db6 100644
--- a/hicn-plugin/src/faces/iface_node.c
+++ b/hicn-plugin/src/faces/iface_node.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Cisco and/or its affiliates.
+ * Copyright (c) 2021-2022 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:
@@ -21,6 +21,9 @@
#include "../cache_policies/cs_lru.h"
#include "../parser.h"
+#include <hicn/error.h>
+#include <hicn/util/ip_address.h>
+
/**
* @File
*
@@ -200,7 +203,8 @@ typedef enum
ip_hdr = (IP_HEADER_##ipv *) vlib_buffer_get_current (b0); \
\
/* Parse packet and cache useful info in opaque2 */ \
- ret0 = hicn_interest_parse_pkt (b0); \
+ ret0 = \
+ hicn_interest_parse_pkt (b0, vlib_buffer_length_in_chain (vm, b0)); \
is_icmp0 = (ret0 == HICN_ERROR_PARSER_MAPME_PACKET); \
ret0 = (ret0 == HICN_ERROR_NONE) || \
(ret0 == HICN_ERROR_PARSER_MAPME_PACKET); \
@@ -304,8 +308,10 @@ typedef enum
stats.pkts_interest_count += 2; \
\
/* Parse packet and cache useful info in opaque2 */ \
- ret0 = hicn_interest_parse_pkt (b0); \
- ret1 = hicn_interest_parse_pkt (b1); \
+ ret0 = \
+ hicn_interest_parse_pkt (b0, vlib_buffer_length_in_chain (vm, b0)); \
+ ret1 = \
+ hicn_interest_parse_pkt (b1, vlib_buffer_length_in_chain (vm, b1)); \
is_icmp0 = ret0 == HICN_ERROR_PARSER_MAPME_PACKET; \
is_icmp1 = ret1 == HICN_ERROR_PARSER_MAPME_PACKET; \
ret0 = (ret0 == HICN_ERROR_NONE) || \
@@ -655,17 +661,19 @@ hicn_rewrite_iface_data4 (vlib_main_t *vm, vlib_buffer_t *b0,
vnet_buffer (b0)->ip.adj_index[VLIB_TX] = iface->dpo.dpoi_index;
*next = iface->dpo.dpoi_next_node;
- hicn_header_t *hicn = vlib_buffer_get_current (b0);
- ip46_address_t temp_addr;
- ip46_address_reset (&temp_addr);
- hicn_type_t type = hicn_get_buffer (b0)->type;
+ hicn_packet_buffer_t *pkbuf = &hicn_get_buffer (b0)->pkbuf;
+
+ hicn_ip_address_t temp_addr;
+ ip46_address_reset (&(temp_addr.as_ip46));
+
+ hicn_ip_address_t *iface_nat_addr = (hicn_ip_address_t *) &(iface->nat_addr);
+
u8 flags = hicn_get_buffer (b0)->flags;
u8 reset_pl = flags & HICN_BUFFER_FLAGS_FROM_CS;
- ret = hicn_ops_vft[type.l1]->rewrite_data (type, &hicn->protocol,
- &(iface->nat_addr), &(temp_addr),
- iface->pl_id, reset_pl);
+ ret = hicn_data_rewrite (pkbuf, iface_nat_addr, &(temp_addr), iface->pl_id,
+ reset_pl);
if (ret == HICN_LIB_ERROR_REWRITE_CKSUM_REQUIRED)
{
@@ -693,17 +701,17 @@ hicn_rewrite_iface_data6 (vlib_main_t *vm, vlib_buffer_t *b0,
vnet_buffer (b0)->ip.adj_index[VLIB_TX] = iface->dpo.dpoi_index;
*next = iface->dpo.dpoi_next_node;
- hicn_header_t *hicn = vlib_buffer_get_current (b0);
+ hicn_packet_buffer_t *pkbuf = &hicn_get_buffer (b0)->pkbuf;
+
+ hicn_ip_address_t temp_addr;
+ ip46_address_reset (&(temp_addr.as_ip46));
- ip46_address_t temp_addr;
- ip46_address_reset (&temp_addr);
- hicn_type_t type = hicn_get_buffer (b0)->type;
+ hicn_ip_address_t *iface_nat_addr = (hicn_ip_address_t *) &(iface->nat_addr);
u8 flags = hicn_get_buffer (b0)->flags;
u8 reset_pl = flags & HICN_BUFFER_FLAGS_FROM_CS;
- ret = hicn_ops_vft[type.l1]->rewrite_data (type, &hicn->protocol,
- &(iface->nat_addr), &(temp_addr),
- iface->pl_id, reset_pl);
+ ret = hicn_data_rewrite (pkbuf, iface_nat_addr, &(temp_addr), iface->pl_id,
+ reset_pl);
if (ret == HICN_LIB_ERROR_REWRITE_CKSUM_REQUIRED)
{
@@ -1007,4 +1015,4 @@ VLIB_REGISTER_NODE (hicn6_iface_output_node) = {
* Local Variables:
* eval: (c-set-style "gnu")
* End:
- */ \ No newline at end of file
+ */