Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
One armed NAT (VPP-1035)
[vpp.git]
/
src
/
plugins
/
nat
/
nat64.c
diff --git
a/src/plugins/nat/nat64.c
b/src/plugins/nat/nat64.c
index
bfcfa9b
..
952ca8f
100644
(file)
--- a/
src/plugins/nat/nat64.c
+++ b/
src/plugins/nat/nat64.c
@@
-136,7
+136,7
@@
nat64_add_del_pool_addr (ip4_address_t * addr, u32 vrf_id, u8 is_add)
/* *INDENT-OFF* */
pool_foreach (interface, nm->interfaces,
({
/* *INDENT-OFF* */
pool_foreach (interface, nm->interfaces,
({
- if (
interface->is_inside
)
+ if (
nat_interface_is_inside(interface)
)
continue;
snat_add_del_addr_to_fib (addr, 32, interface->sw_if_index, is_add);
continue;
snat_add_del_addr_to_fib (addr, 32, interface->sw_if_index, is_add);
@@
-170,7
+170,7
@@
nat64_add_del_interface (u32 sw_if_index, u8 is_inside, u8 is_add)
snat_address_t *ap;
const char *feature_name, *arc_name;
snat_address_t *ap;
const char *feature_name, *arc_name;
- /* Check if
address
already exists */
+ /* Check if
interface
already exists */
/* *INDENT-OFF* */
pool_foreach (i, nm->interfaces,
({
/* *INDENT-OFF* */
pool_foreach (i, nm->interfaces,
({
@@
-185,19
+185,29
@@
nat64_add_del_interface (u32 sw_if_index, u8 is_inside, u8 is_add)
if (is_add)
{
if (interface)
if (is_add)
{
if (interface)
-
return VNET_API_ERROR_VALUE_EXIST
;
+
goto set_flags
;
pool_get (nm->interfaces, interface);
interface->sw_if_index = sw_if_index;
pool_get (nm->interfaces, interface);
interface->sw_if_index = sw_if_index;
- interface->is_inside = is_inside;
-
+ interface->flags = 0;
+ set_flags:
+ if (is_inside)
+ interface->flags |= NAT_INTERFACE_FLAG_IS_INSIDE;
+ else
+ interface->flags |= NAT_INTERFACE_FLAG_IS_OUTSIDE;
}
else
{
if (!interface)
return VNET_API_ERROR_NO_SUCH_ENTRY;
}
else
{
if (!interface)
return VNET_API_ERROR_NO_SUCH_ENTRY;
- pool_put (nm->interfaces, interface);
+ if ((nat_interface_is_inside (interface)
+ && nat_interface_is_outside (interface)))
+ interface->flags &=
+ is_inside ? ~NAT_INTERFACE_FLAG_IS_INSIDE :
+ ~NAT_INTERFACE_FLAG_IS_OUTSIDE;
+ else
+ pool_put (nm->interfaces, interface);
}
if (!is_inside)
}
if (!is_inside)