vpp/plugins/vcgn-plugin/vcgn/cnat_syslog.h
Ole Troan ea3e1fc875 Plugins: Clean up the plugin directory so that each plugin has its own
directory and GNU autotools setup.

Change-Id: I6c59d1297389c9413db0c0b9bdf3b759080bf1b8
Signed-off-by: Ole Troan <ot@cisco.com>
2016-06-27 15:04:00 +00:00

191 lines
5.3 KiB
C

/*
*------------------------------------------------------------------
* cnat_syslog.h
*
* Copyright (c) 2011-2013 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:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*------------------------------------------------------------------
*/
#ifndef __CNAT_SYSLOG_H__
#define __CNAT_SYSLOG_H__
#include <vlib/vlib.h>
#include <vnet/vnet.h>
#include <vnet/pg/pg.h>
#include <vppinfra/error.h>
#include "cnat_db.h"
#include "nat64_db.h"
#include "cnat_log_common.h"
#include "dslite_defs.h"
#define SYSLOG_CONFIG_DEBUG_PRINTF(level, ...) \
if (config_debug_level > level) PLATFORM_DEBUG_PRINT(__VA_ARGS__);
/* one time call at the beginning */
void cnat_syslog_logging_init();
/*
* unconditional call
* will check logging config inside
*/
void cnat_syslog_log_mapping_create(cnat_main_db_entry_t * db,
cnat_vrfmap_t *vrfmap);
/*
* unconditional call
* will check logging config inside
*/
void cnat_syslog_log_mapping_delete(cnat_main_db_entry_t * db,
cnat_vrfmap_t *vrfmap);
void cnat_syslog_ds_lite_mapping_create(cnat_main_db_entry_t *db,
dslite_table_entry_t *dslite_entry, cnat_session_entry_t *sdb
#ifndef NO_BULK_LOGGING
, int bulk_alloc
#endif
);
void cnat_syslog_ds_lite_port_limit_exceeded(
dslite_key_t * key,
dslite_table_entry_t *dslite_entry);
#define SYSLOG_TIMESTAMP_LENGTH 20
#define CNAT_SYSLOG_VERSION_NUMBER 1
#define CNAT_SYSLOG_PRIORITY 16*8+6
/* facility = local0 + severity = info */
#define MAX_SYSLOG_HOSTNAME_LEN 32
/* 6 for priority + space
* 2 for version + space
* 21 YYYY MMM DD HH:MM:SS + space
* 33 for hostname + space
* 4 for App Name (-) + space + Proc ID (-) + space
* 7 for Msg ID (DSLite is the longest Msg ID so far + space
* 2 for Structured data (-) + space
*/
#define MAX_SYSLOG_HEADER_LEN 75
/* 18 for Event Name (Portblockrunout is the longest as of now)
* 3 for L4 (including space)
* 16 for original souce IP + space
* 33 for inside vrf name + space
* 40 for original source IPV6 + space
* 16 for translated source IP + space
* 6 for original port + space
* 6 for translated first source port + space
* 5 for translated last source port
* 2 for [] enclosure
*/
#define MAX_SYSLOG_RECORD_LEN 145
typedef enum {
NAT44,
DSLite
} syslog_service_type_t;
typedef enum {
userbased_assign,
userbased_withdraw,
sessionbased_assign,
sessionbased_withdraw,
sessionbased_assignD,
sessionbased_withdrawD,
port_block_runout,
tcp_seq_mismatch,
max_syslog_event_type
} syslog_event_type_t;
/*
* This structure store the Syslog Logging information on per
* collector basis. This structure is allocated from a pool and index
* to this structure is stored VRF MAP structures
*/
typedef struct {
/*
* nat64_id will be 0 for nat44 config and i_vrf_id, i_vrf will be 0
* for nat64 config. Nat64_id will be used while nat64 collector is
* search and i_vrf* for nat44 collector
*/
/* Similarly for ds_lite, ds_lite_id will be used and nat64_id,
* ivrf_id shall be set to 0
*/
u32 i_vrf_id; /* Inside VRF ID corresponding to this collector */
u16 i_vrf; /* Inside VRF (uidb_index) corresponding to this collector */
u16 ds_lite_id; /* DS Lite instance for this collector */
u16 port; /* Destination port number of the collector */
/*
* This field determines the maximum size of the Syslog information
* that can be stored in a logging packet
*/
u16 max_length_minus_max_record_size;
u32 ipv4_address; /* Destination IP address of the collector */
/*
* Timestamp in UNIX seconds corresponding to when the current
* logging packet was created
*/
u32 current_logging_context_timestamp;
/*
* Indicates if the entry is already deleted
*/
u8 deleted;
u8 header_priority;
u16 pkt_length;
char header_hostname[MAX_SYSLOG_HOSTNAME_LEN];
char vrf_name[VRF_NAME_LEN_STORED];
u16 vrf_name_len;
u8 logging_policy;
/*
* current logging context
*/
spp_ctx_t *current_logging_context;
spp_ctx_t *queued_logging_context;
} cnat_syslog_logging_info_t;
/*
* Global structure for CGN APP configuration
*/
typedef struct {
u16 cnat_syslog_disp_node_index;
/*
* Whether we have initialized the Syslog information
*/
u8 cnat_syslog_init_done;
} cnat_syslog_global_info_t;
typedef struct {
u64 logging_context_creation_fail_count;
u64 downstream_constipation_count;
u64 logging_context_creation_deferred_count;
} cnat_syslog_global_counters_t;
extern cnat_syslog_logging_info_t *cnat_syslog_logging_info_pool;
extern cnat_syslog_global_info_t cnat_syslog_global_info;
#define SYSLOG_DEF_PATH_MTU 1500
#endif /* __CNAT_SYSLOG_H__ */