aboutsummaryrefslogtreecommitdiffstats
path: root/vnfs/VES5.0/evel/evel-library/code/VESreporting_vAFX/afx_bgpsyslog.c
diff options
context:
space:
mode:
Diffstat (limited to 'vnfs/VES5.0/evel/evel-library/code/VESreporting_vAFX/afx_bgpsyslog.c')
-rw-r--r--vnfs/VES5.0/evel/evel-library/code/VESreporting_vAFX/afx_bgpsyslog.c353
1 files changed, 0 insertions, 353 deletions
diff --git a/vnfs/VES5.0/evel/evel-library/code/VESreporting_vAFX/afx_bgpsyslog.c b/vnfs/VES5.0/evel/evel-library/code/VESreporting_vAFX/afx_bgpsyslog.c
deleted file mode 100644
index 9cbb63c5..00000000
--- a/vnfs/VES5.0/evel/evel-library/code/VESreporting_vAFX/afx_bgpsyslog.c
+++ /dev/null
@@ -1,353 +0,0 @@
- /*****************************************************************************//***
- * Copyright(c) <2017>, AT&T Intellectual Property. All other rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement: This product includes
- * software developed by the AT&T.
- * 4. Neither the name of AT&T nor the names of its contributors may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY AT&T INTELLECTUAL PROPERTY ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL AT&T INTELLECTUAL PROPERTY BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-
-#include "evel.h"
-#include "afx_ves_reporter.h"
-
-/* tracks syslog file */
-static unsigned long long prevpos=0;
-/* memory for word parsing */
-static char ** bgp_res = NULL;
-/* Search list of words */
-char* searchlist[MAX_SYSLOG_WORDS];
-int numWords=0;
-
-/**************************************************************************//**
- * Sends syslog message with parsed syslog info
- *
- * @param info Pointer to the line
- * @param tag Matched TAG field
- * @param sevrty Severity of parsed line Emergency etc.
- *
- * @retvalue int
- *****************************************************************************/
-void report_syslog( char *info, char *tag, char *sevrty )
-{
- EVENT_SYSLOG * psyslog = NULL;
- EVEL_ERR_CODES evel_rc = EVEL_SUCCESS;
- char vesevid[128];
-
- sprintf(vesevid,"Syslog_vAfx_%s",oam_intfaddr);
- psyslog = evel_new_syslog("Syslog_vAfx", vesevid,
- EVEL_SOURCE_VIRTUAL_MACHINE,
- escape_json(info),
- tag);
- if (psyslog != NULL)
- {
- evel_header_type_set((EVENT_HEADER *)psyslog, "applicationVnf");
- evel_nfnamingcode_set((EVENT_HEADER *)psyslog, "AFX");
- evel_nfcnamingcode_set((EVENT_HEADER *)psyslog, "AFX");
- evel_syslog_event_source_host_set(psyslog, "Virtual host");
- evel_syslog_facility_set(psyslog, EVEL_SYSLOG_FACILITY_LOCAL0);
- evel_syslog_proc_set(psyslog, tag);
- //evel_syslog_proc_id_set(psyslog, 1423);
- evel_syslog_version_set(psyslog, 1);
- //evel_syslog_addl_filter_set(psyslog, "Name1=Value1|Name2=Value2|Name3=Value3");
- evel_syslog_severity_set(psyslog, sevrty);
- //evel_syslog_sdid_set(psyslog, "ourSDID@32473");
- //evel_syslog_s_data_set(psyslog,info);
- evel_rc = evel_post_event((EVENT_HEADER *)psyslog);
- if (evel_rc != EVEL_SUCCESS)
- {
- EVEL_ERROR(" AFX: Post failed %d (%s)", evel_rc, evel_error_string());
- }
- }
- else
- {
- EVEL_ERROR("New Syslog failed");
- }
- EVEL_DEBUG("AFX: Processed full Syslog\n");
-
-}
-
-/**************************************************************************//**
- * Parses Syslog line for exabgp messages
- * Raises BGP Fault event for peer connection setup and teardown
- * Sends Syslog events for matching lines
- *
- * @param line Pointer to line
- *
- * @retvalue int Returns if matching line
- *****************************************************************************/
-int processLine(char *line)
-{
- int n_spaces = 0, i;
- char *pos;
- char *p;
- int srchcondn = 0;
- int peer_conn = 0;
- int peer_reset = 0;
- char vesevid[128];
- char sevrty[128];
- char *line_bk = NULL;
- int status = 1; /** VFA Status is ACTIVE **/
-
- if ((pos=strchr(line, '\n')) != NULL)
- *pos = '\0';
- line_bk = strdup(line);
-
- if( !strstr(line,"EVEL") && !strstr(line,"commonEventHeader") && strstr(line,"exabgp") )
- {
- if( strstr(line,"Connected to peer neighbor") ) peer_conn = 1;
- else if( strstr(line,"peer reset") ) peer_reset = 1;
-
- if( peer_conn || peer_reset )
- {
- n_spaces = 0;
- p = strtok (line, " ");
- /* split string and append tokens to 'res' */
-
- while (p) {
- bgp_res = realloc (bgp_res, sizeof (char*) * ++n_spaces);
-
- if (bgp_res == NULL){
- EVEL_DEBUG("Memory allocation failed");
- exit (-1); /* memory allocation failed */
- }
-
- bgp_res[n_spaces-1] = p;
-
- p = strtok (NULL, " ");
- }
-
- /* realloc one extra element for the last NULL */
- bgp_res = realloc (bgp_res, sizeof (char*) * (n_spaces+1));
- bgp_res[n_spaces] = 0;
-
- if( n_spaces > 0 && (peer_conn || peer_reset) )
- {
- EVEL_DEBUG ("Exabgp %d %d %d\n", peer_conn, peer_reset, n_spaces);
- for (i = 0; i < (n_spaces+1); ++i)
- {
- if( bgp_res[i] != NULL )EVEL_DEBUG ("res[%d] = %s\n", i, bgp_res[i]);
- }
- if( peer_conn == 1 && n_spaces >= 21 )
- //if( !strcmp(bgp_res[21],"(out)") )
- {
- char buf[256];
- EVEL_DEBUG("****************sending clear fault\n");
- sprintf(vesevid,"Fault_vAfx_bgp_nbr_%s",oam_intfaddr);
- sprintf(buf," %s %s %s %s %s %s %s %s %s %s %s ", bgp_res[10], bgp_res[11], bgp_res[12], bgp_res[13], bgp_res[14],bgp_res[15], bgp_res[16], bgp_res[17], bgp_res[18], bgp_res[19], bgp_res[20]);
- report_fault("Fault_vAfx_bgp_nbr", vesevid, EVEL_SEVERITY_NORMAL, "routing", "lo:0", "Bgp neighbor up alarm","bgp session to remote router is up",bgp_res[16],bgp_res[18],bgp_res[10], status);
- }
- if( peer_reset == 1 && n_spaces >= 21 )
- //if( !strcmp(bgp_res[21],"Shutdown]") )
- { char buf[256];
- EVEL_DEBUG("****************sending fault\n");
- sprintf(vesevid,"Fault_vAfx_bgp_nbr_%s",oam_intfaddr);
- sprintf(buf," %s %s %s %s %s %s %s ", bgp_res[15], bgp_res[16], bgp_res[17], bgp_res[18], bgp_res[19],bgp_res[20], bgp_res[21]);
- report_fault("Fault_vAfx_bgp_nbr", vesevid, EVEL_SEVERITY_MAJOR,"routing","lo:0","Bgp neighbor down alarm","bgp session to remote router is down",bgp_res[9],bgp_res[4],bgp_res[7], status);
- }
- }
- }
-
- }// end exabgp
-
-
- if( !strstr(line_bk,"EVEL") && !strstr(line,"commonEventHeader") && numWords > 0 ){
- for (i=0;i<numWords;i++)
- {
- if( strstr(line_bk,searchlist[i]) != NULL &&
- strstr(line_bk,"commonEventHeader") == NULL )
- {
- srchcondn = 1;
- pos = searchlist[i];
- break;
- }
- printf("srch:%s:%d:%d\n",searchlist[i],srchcondn,numWords);
- }
-
- if( srchcondn )
- {
- strcpy(sevrty,"Informational");
- if( strcasestr(line,"Emergency") != NULL ) strcpy(sevrty,"Emergency");
- else if( strcasestr(line_bk,"Alert") != NULL ) strcpy(sevrty,"Alert");
- else if( strcasestr(line_bk,"Critical") != NULL ) strcpy(sevrty,"Critical");
- else if( strcasestr(line_bk,"Error") != NULL ) strcpy(sevrty,"Error");
- else if( strcasestr(line_bk,"Warn") != NULL ) strcpy(sevrty,"Warning");
- else if( strcasestr(line_bk,"Notice") != NULL ) strcpy(sevrty,"Notice");
- else if( strcasestr(line_bk,"Debug") != NULL ) strcpy(sevrty,"Debug");
- report_syslog(line_bk,pos,sevrty);
- }
- }
-
- if(!srchcondn)
- free(line_bk);
- return srchcondn;
-
-}
-
-
-/**************************************************************************//**
- * function to read last n lines from the file
- * at any point without reading the entire file
- *****************************************************************************/
-void bgp_tail(FILE* in, int n)
-{
- int count = 0; // To count '\n' characters
-
- // unsigned long long pos (stores upto 2^64 – 1
- // chars) assuming that long long int takes 8
- // bytes
- unsigned long long pos;
- char str[2*BGPBUFSIZE] = {0};
-
- // Go to End of file
- if (fseek(in, 0, SEEK_END))
- perror("fseek() failed");
- else
- {
- // pos will contain no. of chars in
- // input file.
- pos = ftell(in);
-
- // search for '\n' characters
- while (pos>prevpos)
- {
- // Move 'pos' away from end of file.
- if (!fseek(in, --pos, SEEK_SET))
- {
- if (fgetc(in) == '\n')
-
- // stop reading when n newlines
- // is found
- if (count++ == n)
- break;
- }
- else
- perror("fseek() failed");
- }
- //printf("pos %d prevpos %d\n",pos,prevpos);
-
- // print last n lines
- prevpos = pos;
- //printf("Printing %d lines %d -\n", n,pos);
- while (fgets(str, sizeof(str), in))
- {
- //printf("%s\n", str);
- processLine(strdup(str));
- prevpos += strlen(str);
- }
- }
- //printf("\n\n");
-}
-
-
-/**************************************************************************//**
- * Thread function to Monitor Syslog for BGP connections
- * Reads the filter words from AFX Filter input file
- * Starts tailing syslog for BGP messages and filter words
- *
- * @param threadarg Thread arguments for startup message
- *
- *****************************************************************************/
-void *BgpLoggingAfxThread(void *threadarg)
-{
- FILE* fp;
- int i=0,j;
- char line[64];
- char *pos;
- FILE *file;
- int taskid, sum;
- char *hello_msg;
- struct thread_data *my_data;
-
- my_data = (struct thread_data *) threadarg;
- taskid = my_data->thread_id;
- sum = my_data->sum;
- hello_msg = my_data->message;
- EVEL_DEBUG("Thread %d: %s Sum=%d\n", taskid, hello_msg, sum);
-
- sleep(1);
-
- /* Opens filter file and reads word list */
- file = fopen(AFX_SYSLOG_FILE, "r");
-
- while(fgets(line, sizeof line, file)!=NULL) {
- //check to be sure reading correctly
- //printf("%s", line);
- if ((pos=strchr(line, '\n')) != NULL)
- *pos = '\0';
- remove_spaces(line);
- //add each filename into array of programs
- if( strlen(line) > 0 )
- {
- searchlist[numWords]=strdup(line);
- //count number of programs in file
- numWords++;
- }
- }
- fclose(file);
-
- //check to be sure going into array correctly
- for (int j=0 ; j<numWords; j++) {
- EVEL_DEBUG("Search %s\n", searchlist[j]);
- }
-
-
- // Open file in read mode
- fp = fopen("/var/log/syslog", "r");
- if (fp == NULL)
- {
- printf("Error while opening file");
- exit(EXIT_FAILURE);
- }
-
- // call tail() each time
- while(1)
- {
- // read last index lines from the file
- bgp_tail(fp, 8);
-
- // sleep for 3 seconds
- // note difference in timestamps in logs
- sleep(1);
- }
-
- /* close the file before ending program */
- fclose(fp);
-
- if( bgp_res != NULL ) free(bgp_res);
-
- return 0;
-}
-
-