#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "rpcclt_openapi.h"
#include "proc_util.h"
typedef struct
{
uint32_t interface_exists;
char name [256];
} interface_entry_t;
interface_entry_t *interface_table;
void link_up_interface_show (uint32_t max_interfaces)
{
uint32_t i;
printf ("\n\nThe following interfaces are Link-UP\n");
for (i = 0; i < max_interfaces; i++)
{
if (!interface_table[i].interface_exists)
{
continue;
}
if (interface_table[i].interface_link_status !=
OPEN_LINK_UP)
{
continue;
}
printf ("ifindex:%d - Name:%s - Link Up.\n", i, interface_table[i].name);
}
}
{
uint32_t intf_num;
interface_table = malloc(sizeof(interface_entry_t) * max_interfaces);
printf ("Created Interface Table for %d interfaces.\n", max_interfaces);
openapiEventListClear (&open_event);
openapiEventSet (&open_event, OPEN_EVENT_INTERFACE);
{
printf ("Failed to register for OPEN_EVENT_INTERFACE event.\n");
abort ();
}
intf_num = 0;
{
interface_table[intf_num].interface_exists = 1;
&interface_table[intf_num].interface_link_status))
{
interface_table[intf_num].interface_exists = 0;
}
linkNameBuff.
pstart = interface_table[intf_num].name;
linkNameBuff.
size =
sizeof(interface_table[intf_num].name);
{
interface_table[intf_num].interface_exists = 0;
}
}
link_up_interface_show (max_interfaces);
}
uint32_t max_interfaces)
{
int i;
for (i = 0; i < max_interfaces; i++)
{
if (!interface_table[i].interface_exists)
{
continue;
}
&interface_table[i].interface_link_status))
{
interface_table[i].interface_exists = 0;
}
linkNameBuff.pstart = interface_table[i].name;
linkNameBuff.size = sizeof(interface_table[i].name);
{
interface_table[i].interface_exists = 0;
}
}
}
uint32_t max_interfaces,
uint32_t monitor_duration)
{
struct timespec start_time, current_time;
uint32_t intf_num, delete_pending;
if (clock_gettime (CLOCK_MONOTONIC, &start_time))
{
perror ("Can't get start time.\n");
abort ();
}
do
{
{
{
{
printf ("Got Purge event for OPEN_EVENT_INTERFACE\n");
interface_table_validate (client, max_interfaces);
}
{
printf ("Got Change Pending event for OPEN_EVENT_INTERFACE\n");
}
}
intf_num = 0;
{
if (delete_pending)
{
printf ("Deleting ifindex:%d - Name:%s\n",
intf_num, interface_table[intf_num].name);
interface_table[intf_num].interface_exists = 0;
}
else
{
&interface_table[intf_num].interface_link_status))
{
interface_table[intf_num].interface_exists = 0;
}
else
{
printf ("ifindex:%d - Name:%s - Link %s.\n",
intf_num, interface_table[intf_num].name,
(interface_table[intf_num].interface_link_status ==
OPEN_LINK_UP)?
"UP":
"DOWN");
if (!interface_table[intf_num].interface_exists)
{
interface_table[intf_num].interface_exists = 1;
linkNameBuff.pstart = interface_table[intf_num].name;
linkNameBuff.size = sizeof(interface_table[intf_num].name);
{
interface_table[intf_num].interface_exists = 0;
}
}
}
}
}
}
if (clock_gettime (CLOCK_MONOTONIC, ¤t_time))
{
perror ("Can't get current time.\n");
abort ();
}
} while ((current_time.tv_sec - start_time.tv_sec) < monitor_duration);
}
int main(int argc, char **argv)
{
char switch_os_revision_string[100];
uint32_t monitor_duration = 60;
uint32_t max_interfaces;
if ((argc != 1) && (argc != 2))
{
printf("Usage: %s [monitor-duration-seconds]\n", argv[0]);
exit(1);
}
if (argc == 2)
{
monitor_duration = atoi(argv[1]);
}
printf ("Monitoring Link Status for %d seconds.\n", monitor_duration);
l7proc_crashlog_register();
{
printf("\nFailed to initialize RPC to OpEN. Exiting (result = %d)\n", result);
exit(2);
}
{
sleep(1);
}
L7PROC_LOGF(L7PROC_LOG_SEVERITY_INFO, 0, "Starting Link Status Monitor example application");
printf("\n");
switch_os_revision.pstart = switch_os_revision_string;
switch_os_revision.size = sizeof(switch_os_revision_string);
printf("Network OS version = %s\n", switch_os_revision_string);
else
printf("Network OS version retrieve error\n");
printf("\n");
L7PROC_LOGF(L7PROC_LOG_SEVERITY_INFO, 0, "Stopping Link Status example application");
{
printf ("Can't get Interface Count.\n");
return 0;
}
interface_table_create (&clientHandle, max_interfaces);
interface_table_monitor (&clientHandle, max_interfaces, monitor_duration);
link_up_interface_show (max_interfaces);
return 0;
}