Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
ip: change ip API enums address_family and ip_proto size to u8
[vpp.git]
/
src
/
vnet
/
ip
/
ip_in_out_acl.c
diff --git
a/src/vnet/ip/ip_in_out_acl.c
b/src/vnet/ip/ip_in_out_acl.c
index
b50f5b1
..
8f550e2
100644
(file)
--- a/
src/vnet/ip/ip_in_out_acl.c
+++ b/
src/vnet/ip/ip_in_out_acl.c
@@
-50,10
+50,10
@@
format_ip_outacl_trace (u8 * s, va_list * args)
return format_ip_in_out_acl_trace (s, 1 /* is_output */ , args);
}
return format_ip_in_out_acl_trace (s, 1 /* is_output */ , args);
}
-vlib_node_registration_t ip4_inacl_node;
-vlib_node_registration_t ip4_outacl_node;
-vlib_node_registration_t ip6_inacl_node;
-vlib_node_registration_t ip6_outacl_node;
+
extern
vlib_node_registration_t ip4_inacl_node;
+
extern
vlib_node_registration_t ip4_outacl_node;
+
extern
vlib_node_registration_t ip6_inacl_node;
+
extern
vlib_node_registration_t ip6_outacl_node;
#define foreach_ip_inacl_error \
_(MISS, "input ACL misses") \
#define foreach_ip_inacl_error \
_(MISS, "input ACL misses") \
@@
-401,6
+401,10
@@
ip_in_out_acl_inline (vlib_main_t * vm,
else
h0 = b0->data;
else
h0 = b0->data;
+ /* advance the match pointer so the matching happens on IP header */
+ if (is_output)
+ h0 += vnet_buffer (b0)->l2_classify.pad.l2_len;
+
hash0 = vnet_classify_hash_packet (t0, (u8 *) h0);
e0 = vnet_classify_find_entry
(t0, (u8 *) h0, hash0, now);
hash0 = vnet_classify_hash_packet (t0, (u8 *) h0);
e0 = vnet_classify_find_entry
(t0, (u8 *) h0, hash0, now);
@@
-424,11
+428,19
@@
ip_in_out_acl_inline (vlib_main_t * vm,
IP6_ERROR_INACL_SESSION_DENY) : IP6_ERROR_NONE;
b0->error = error_node->errors[error0];
IP6_ERROR_INACL_SESSION_DENY) : IP6_ERROR_NONE;
b0->error = error_node->errors[error0];
- if (e0->action == CLASSIFY_ACTION_SET_IP4_FIB_INDEX
- || e0->action ==
- CLASSIFY_ACTION_SET_IP6_FIB_INDEX)
- vnet_buffer (b0)->sw_if_index[VLIB_TX] =
- e0->metadata;
+ if (!is_output)
+ {
+ if (e0->action ==
+ CLASSIFY_ACTION_SET_IP4_FIB_INDEX
+ || e0->action ==
+ CLASSIFY_ACTION_SET_IP6_FIB_INDEX)
+ vnet_buffer (b0)->sw_if_index[VLIB_TX] =
+ e0->metadata;
+ else if (e0->action ==
+ CLASSIFY_ACTION_SET_METADATA)
+ vnet_buffer (b0)->ip.adj_index[VLIB_TX] =
+ e0->metadata;
+ }
break;
}
}
break;
}
}
@@
-474,16
+486,15
@@
ip_in_out_acl_inline (vlib_main_t * vm,
return frame->n_vectors;
}
return frame->n_vectors;
}
-static uword
-
ip4_inacl (vlib_main_t * vm, vlib_node_runtime_t * node,
vlib_frame_t * frame)
+VLIB_NODE_FN (ip4_inacl_node) (vlib_main_t * vm, vlib_node_runtime_t * node,
+
vlib_frame_t * frame)
{
return ip_in_out_acl_inline (vm, node, frame, 1 /* is_ip4 */ ,
0 /* is_output */ );
}
{
return ip_in_out_acl_inline (vm, node, frame, 1 /* is_ip4 */ ,
0 /* is_output */ );
}
-static uword
-ip4_outacl (vlib_main_t * vm, vlib_node_runtime_t * node,
- vlib_frame_t * frame)
+VLIB_NODE_FN (ip4_outacl_node) (vlib_main_t * vm, vlib_node_runtime_t * node,
+ vlib_frame_t * frame)
{
return ip_in_out_acl_inline (vm, node, frame, 1 /* is_ip4 */ ,
1 /* is_output */ );
{
return ip_in_out_acl_inline (vm, node, frame, 1 /* is_ip4 */ ,
1 /* is_output */ );
@@
-492,7
+503,6
@@
ip4_outacl (vlib_main_t * vm, vlib_node_runtime_t * node,
/* *INDENT-OFF* */
VLIB_REGISTER_NODE (ip4_inacl_node) = {
/* *INDENT-OFF* */
VLIB_REGISTER_NODE (ip4_inacl_node) = {
- .function = ip4_inacl,
.name = "ip4-inacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_inacl_trace,
.name = "ip4-inacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_inacl_trace,
@@
-506,7
+516,6
@@
VLIB_REGISTER_NODE (ip4_inacl_node) = {
};
VLIB_REGISTER_NODE (ip4_outacl_node) = {
};
VLIB_REGISTER_NODE (ip4_outacl_node) = {
- .function = ip4_outacl,
.name = "ip4-outacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_outacl_trace,
.name = "ip4-outacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_outacl_trace,
@@
-520,19
+529,15
@@
VLIB_REGISTER_NODE (ip4_outacl_node) = {
};
/* *INDENT-ON* */
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (ip4_inacl_node, ip4_inacl);
-VLIB_NODE_FUNCTION_MULTIARCH (ip4_outacl_node, ip4_outacl);
-
-static uword
-ip6_inacl (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame)
+VLIB_NODE_FN (ip6_inacl_node) (vlib_main_t * vm, vlib_node_runtime_t * node,
+ vlib_frame_t * frame)
{
return ip_in_out_acl_inline (vm, node, frame, 0 /* is_ip4 */ ,
0 /* is_output */ );
}
{
return ip_in_out_acl_inline (vm, node, frame, 0 /* is_ip4 */ ,
0 /* is_output */ );
}
-static uword
-ip6_outacl (vlib_main_t * vm, vlib_node_runtime_t * node,
- vlib_frame_t * frame)
+VLIB_NODE_FN (ip6_outacl_node) (vlib_main_t * vm, vlib_node_runtime_t * node,
+ vlib_frame_t * frame)
{
return ip_in_out_acl_inline (vm, node, frame, 0 /* is_ip4 */ ,
1 /* is_output */ );
{
return ip_in_out_acl_inline (vm, node, frame, 0 /* is_ip4 */ ,
1 /* is_output */ );
@@
-540,7
+545,6
@@
ip6_outacl (vlib_main_t * vm, vlib_node_runtime_t * node,
/* *INDENT-OFF* */
VLIB_REGISTER_NODE (ip6_inacl_node) = {
/* *INDENT-OFF* */
VLIB_REGISTER_NODE (ip6_inacl_node) = {
- .function = ip6_inacl,
.name = "ip6-inacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_inacl_trace,
.name = "ip6-inacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_inacl_trace,
@@
-554,7
+558,6
@@
VLIB_REGISTER_NODE (ip6_inacl_node) = {
};
VLIB_REGISTER_NODE (ip6_outacl_node) = {
};
VLIB_REGISTER_NODE (ip6_outacl_node) = {
- .function = ip6_outacl,
.name = "ip6-outacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_outacl_trace,
.name = "ip6-outacl",
.vector_size = sizeof (u32),
.format_trace = format_ip_outacl_trace,
@@
-568,9
+571,7
@@
VLIB_REGISTER_NODE (ip6_outacl_node) = {
};
/* *INDENT-ON* */
};
/* *INDENT-ON* */
-VLIB_NODE_FUNCTION_MULTIARCH (ip6_inacl_node, ip6_inacl);
-VLIB_NODE_FUNCTION_MULTIARCH (ip6_outacl_node, ip6_outacl);
-
+#ifndef CLIB_MARCH_VARIANT
static clib_error_t *
ip_in_out_acl_init (vlib_main_t * vm)
{
static clib_error_t *
ip_in_out_acl_init (vlib_main_t * vm)
{
@@
-578,6
+579,7
@@
ip_in_out_acl_init (vlib_main_t * vm)
}
VLIB_INIT_FUNCTION (ip_in_out_acl_init);
}
VLIB_INIT_FUNCTION (ip_in_out_acl_init);
+#endif /* CLIB_MARCH_VARIANT */
/*
/*