Re: [Nfdump-discuss] Carrier Grade NAT Bulk Port Allocation (Cisco)
netflow collecting and processing tools
Brought to you by:
phaag
|
From: Jacob L. <jac...@gm...> - 2014-02-10 09:38:12
|
diff --git a/bin/netflow_v9.c b/bin/netflow_v9.c
index 4a84128..9351b84 100644
--- a/bin/netflow_v9.c
+++ b/bin/netflow_v9.c
@@ -314,6 +314,11 @@ static struct v9_element_map_s {
{ NF_F_XLATE_DST_ADDR_IPV6, "ASA V6 xdst addr", _16bytes, _16bytes, move128, zero128, EX_NSEL_XLATE_IP_v6 },
{ NF_F_XLATE_SRC_PORT, "ASA xsrc port", _2bytes, _2bytes, move16, zero16, EX_NSEL_XLATE_PORTS },
{ NF_F_XLATE_DST_PORT, "ASA xdst port", _2bytes, _2bytes, move16, zero16, EX_NSEL_XLATE_PORTS },
+
+ { NF_F_XLATE_BPA_PORT_BLOCK_START, "ASA BPA block start", _2bytes, _2bytes, move16, zero16, EX_NSEL_XLATE_PORTS },
+ { NF_F_XLATE_BPA_PORT_BLOCK_STEP, "ASA BPA block skip", _2bytes, _2bytes, move16, zero16, EX_NSEL_XLATE_PORTS },
+ { NF_F_XLATE_BPA_PORT_BLOCK_SIZE, "ASA BPA block size", _2bytes, _2bytes, move16, zero16, EX_NSEL_XLATE_PORTS },
+
// ASA 8.4 mapping
{ NF_F_XLATE_SRC_ADDR_84, "ASA V4 xsrc addr", _4bytes, _4bytes, move32, zero32, EX_NSEL_XLATE_IP_v4 },
{ NF_F_XLATE_DST_ADDR_84, "ASA V4 xdst addr", _4bytes, _4bytes, move32, zero32, EX_NSEL_XLATE_IP_v4 },
@@ -1001,6 +1006,10 @@ size_t size_required;
} else {
PushSequence( table, NF_F_XLATE_SRC_PORT, &offset, NULL);
PushSequence( table, NF_F_XLATE_DST_PORT, &offset, NULL);
+ PushSequence( table, NF_F_XLATE_BPA_PORT_BLOCK_START, &offset, NULL);
+ PushSequence( table, NF_F_XLATE_BPA_PORT_BLOCK_STEP, &offset, NULL);
+ PushSequence( table, NF_F_XLATE_BPA_PORT_BLOCK_SIZE, &offset, NULL);
+ offset += 2;
}
break;
case EX_NSEL_XLATE_IP_v4:
diff --git a/bin/netflow_v9.h b/bin/netflow_v9.h
index a922979..ec4dcfb 100644
--- a/bin/netflow_v9.h
+++ b/bin/netflow_v9.h
@@ -271,6 +271,10 @@ typedef struct common_header_s {
#define NF_F_XLATE_DST_ADDR_IPV6 282
#define NF_F_FW_EVENT 233
+#define NF_F_XLATE_BPA_PORT_BLOCK_START 361
+#define NF_F_XLATE_BPA_PORT_BLOCK_STEP 363
+#define NF_F_XLATE_BPA_PORT_BLOCK_SIZE 364
+
// ASA 8.4 compat elements
#define NF_F_XLATE_SRC_ADDR_84 40001
#define NF_F_XLATE_DST_ADDR_84 40002
diff --git a/bin/nf_common.c b/bin/nf_common.c
index fae559e..793bd64 100644
--- a/bin/nf_common.c
+++ b/bin/nf_common.c
@@ -1093,7 +1093,11 @@ extension_map_t *extension_map = r->map_ref;
snprintf(_s, slen-1,
" src xlt port = %5u\n"
" dst xlt port = %5u\n"
-, r->xlate_src_port, r->xlate_dst_port );
+" dst bpa start= %5u\n"
+" dst bpa skip = %5u\n"
+" dst bpa size = %5u\n"
+, r->xlate_src_port, r->xlate_dst_port
+, r->xlate_bpa_start, r->xlate_bpa_skip, r->xlate_bpa_size );
_slen = strlen(data_string);
_s = data_string + _slen;
slen = STRINGSIZE - _slen;
diff --git a/bin/nffile.h b/bin/nffile.h
index 17016b8..463762a 100644
--- a/bin/nffile.h
+++ b/bin/nffile.h
@@ -967,6 +967,10 @@ typedef struct tpl_ext_37_s {
typedef struct tpl_ext_38_s {
uint16_t xlate_src_port;
uint16_t xlate_dst_port;
+ uint16_t xlate_bpa_start;
+ uint16_t xlate_bpa_skip;
+ uint16_t xlate_bpa_size;
+ uint16_t fill;
uint8_t data[4]; // points to further data
} tpl_ext_38_t;
@@ -1835,6 +1839,10 @@ typedef struct master_record_s {
# define OffsetXLATEPort NSEL_BASE_OFFSET+2
uint16_t xlate_src_port; // index OffsetXLATEPort 0xffff'0000'0000'0000
uint16_t xlate_dst_port; // index OffsetXLATEPort 0x0000'ffff'0000'0000
+ uint16_t xlate_bpa_start;
+ uint16_t xlate_bpa_skip;
+ uint16_t xlate_bpa_size;
+ uint16_t xlate_bpa_fill;
uint32_t xlate_flags;
# define OffsetXLATESRCIP NSEL_BASE_OFFSET+3
ip_addr_t xlate_src_ip; // ipv4 OffsetXLATESRCIP +1 0x0000'0000'ffff'ffff
diff --git a/bin/nffile_inline.c b/bin/nffile_inline.c
index 6b6ea2d..2c02c59 100755
--- a/bin/nffile_inline.c
+++ b/bin/nffile_inline.c
@@ -361,6 +361,9 @@ void *p = (void *)input_record;
tpl_ext_38_t *tpl = (tpl_ext_38_t *)p;
output_record->xlate_src_port = tpl->xlate_src_port;
output_record->xlate_dst_port = tpl->xlate_dst_port;
+ output_record->xlate_bpa_start = tpl->xlate_bpa_start;
+ output_record->xlate_bpa_skip = tpl->xlate_bpa_skip;
+ output_record->xlate_bpa_size = tpl->xlate_bpa_size;
p = (void *)tpl->data;
} break;
case EX_NSEL_XLATE_IP_v4: {
@@ -692,6 +695,9 @@ int i;
tpl_ext_38_t *tpl = (tpl_ext_38_t *)p;
tpl->xlate_src_port = master_record->xlate_src_port;
tpl->xlate_dst_port = master_record->xlate_dst_port;
+ tpl->xlate_bpa_start = master_record->xlate_bpa_start;
+ tpl->xlate_bpa_skip = master_record->xlate_bpa_skip;
+ tpl->xlate_bpa_size = master_record->xlate_bpa_size;
p = (void *)tpl->data;
} break;
case EX_NSEL_XLATE_IP_v4: { |