#include <time.h>
#include <sys/time.h>
#include <sys/types.h>
#include <stdlib.h>
#include <ctype.h>
#include <arpa/inet.h>
#include <unistd.h>
#include "rpcclt_openapi.h"
#include "proc_util.h"
{
uint32_t ip4_addr;
uint8_t addr8[16];
int af;
{
af = AF_INET;
ip4_addr = htonl(addr->
addr.
ipv4);
memcpy(addr8, &ip4_addr, sizeof(ip4_addr));
break;
af = AF_INET6;
memcpy(addr8, addr->addr.
ipv6.
u.
addr8,
sizeof(addr8));
break;
default:
return(NULL);
}
return(inet_ntop(af, addr8, buffer, INET6_ADDRSTRLEN));
}
void printRoutingAppMenu()
{
printf("Usage: routing_example API <test number> [<arg1>][<arg2>] ... \n");
printf("Test API 1: Add IP address on an interface: routing_example API 1 <interface> "
"<address family> <address type> <IP Address> <Pfx length> <arg1>\n");
printf("Test API 2: Delete IP address on an interface: routing_example API 2 <interface> "
"<address family> <address type> <IP Address> <Pfx length> <arg1>\n");
printf("Test API 3: Enable/Disable IP Routing Globally: routing_example API 3 <address family> <mode>\n");
printf("Test API 4: Add a test static ARP entry {192.168.1.1 00:11:22:33:44:55} : routing_example API 4\n");
printf("Test API 5: Delete the test static ARP entry {192.168.1.1 00:11:22:33:44:55}: routing_example API 5\n");
printf("Test API 6: Display all ARP entries: routing_example API 6\n");
printf("Test API 7: Enable/Disable IP Redirects mode: routing_example API 7 <mode>\n");
printf("Test API 8: Enable/Disable IP ICMP Echo Reply mode: routing_example API 8 <mode>\n");
printf("Test API 9: Enable/Disable IP Helper mode: routing_example API 9 <mode>\n");
printf("Test API 10: Add IP Helper address: routing_example API 10 <IP Address> <UDP Port>\n");
printf("Test API 11: Delete IP Helper address: routing_example API 11 <IP Address> <UDP Port>\n");
printf("Test API 12: Configure Interface MTU: routing_example API 12 <interface> <address family> <MTU>\n");
printf("Test API 13: Enable/Disable IP Net Directed BCast mode: routing_example API 13 <interface> <mode>\n");
printf("Test API 14: Enable/Disable IP Proxy ARP mode: routing_example API 14 <interface> <mode>\n");
printf("Test API 15: Enable/Disable IP Redirects mode: routing_example API 15 <interface> <mode>\n");
printf("Test API 16: Enable/Disable IP Destination Unreachable mode: routing_example API 16 <interface> <mode>\n");
printf("Test API 17: Enable/Disable IP Interface Routing mode: routing_example API 17 <interface> <mode>\n");
printf("Test API 18: Add Interface IP Helper address: routing_example API 18 <interface> <IP Address> <UDP Port>\n");
printf("Test API 19: Delete Interface IP Helper address: routing_example API 19 <interface> <IP Address> <UDP Port>\n");
printf("Test API 20: Add Interface IP Helper Discard entry: routing_example API 20 <interface> <UDP Port>\n");
printf("Test API 21: Delete Interface IP Helper Discard entry: routing_example API 21 <interface> <UDP Port>\n");
printf("Test API 22: Add an IP route: routing_example API 22 <Address Family> <IP Address> <Pfx length> "
"<Next Hop> <rtePref> <interface> <mpls-label1> <mpls-label2> <mpls-label3>\n");
printf("Test API 23: Delete an IP route: routing_example API 23 <Address Family> <IP Address> <Pfx length> "
"<Next Hop> <interface> <mpls-label1> <mpls-label2> <mpls-label3>\n");
printf("Test API 24: Create a VLAN Routing Interface: routing_example API 24 <VLAN Id> \n");
printf("Test API 25: Delete a VLAN Routing Interface: routing_example API 25 <VLAN Id> \n");
printf("Test API 26: Test Routing Configuration OpEN APIs sanity: routing_example API 26 \n");
printf("Test API 27: Create a BFD session: routing_example API 27 <Address family> <Intf> <Dest IP> <Src IP> \n");
printf("Test API 28: Delete a BFD session: routing_example API 28 <Address family> <Intf> <Dest IP> <Src IP> \n");
printf("Test API 29: Show BFD neighbors: routing_example API 29\n");
printf("Test API 30: Find a BFD session: routing_example API 30 <Address family> <Dest IP>\n");
printf("Test API 31: Iterate the configred VRFs\n");
printf("Test API 32: Show the ifnum for a VLAN Routing Interface: routing_example API 32 <VLAN Id>\n");
return;
}
char *IPStr, uint32_t pfxLen,
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.
size = strlen(str) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
{
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
printf("IP = %u, PfxLen = %u\n", ipAddr.ipAddr.addr.ipv4, pfxLen);
}
else
{
if (inet_pton(AF_INET6, IPStr, (void*)&(ipAddr.ipAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
}
ipAddr.pfxLen = pfxLen;
}
}
{
printf("Bad return code trying to add Interface IP. (result = %d)\n", result);
}
else
{
printf("Interface IP added successfully \n");
}
return;
}
char *IPStr, uint32_t pfxLen,
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
{
if (strcmp(IPStr, "all") != 0)
{
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
printf("IP = %u, PfxLen = %u\n", ipAddr.ipAddr.addr.ipv4, pfxLen);
ipAddr.pfxLen = pfxLen;
}
}
else
{
if (strcmp(IPStr, "all") != 0)
{
if (inet_pton(AF_INET6, IPStr, (void*)&(ipAddr.ipAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
ipAddr.pfxLen = pfxLen;
}
}
}
if (strcmp(IPStr, "all") == 0)
{
}
else
{
}
{
printf("Bad return code trying to delete Interface IP. (result = %d)\n", result);
}
else
{
printf("Interface IP deleted successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure Global Routing Mode. (result = %d)\n", result);
}
else
{
printf("Global Routing Mode configured successfully \n");
}
return;
}
{
char IPStr[] = "192.168.1.1";
char mac_address[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
memset(&ipAddr, 0, sizeof(ipAddr));
if (inet_pton(AF_INET, IPStr, (void*)&(ipAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
ipAddr.addr.ipv4 = ntohl(ipAddr.addr.ipv4);
mac_addr.pstart = mac_address;
mac_addr.size = 6;
{
printf("Bad return code trying to add ARP entry. (result = %d)\n", result);
}
else
{
printf("ARP entry added successfully \n");
}
return;
}
{
char IPStr[] = "192.168.1.1";
memset(&ipAddr, 0, sizeof(ipAddr));
if (inet_pton(AF_INET, IPStr, (void*)&(ipAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
ipAddr.addr.ipv4 = ntohl(ipAddr.addr.ipv4);
{
printf("Bad return code trying to delete ARP entry. (result = %d)\n", result);
}
else
{
printf("ARP entry deleted successfully \n");
}
return;
}
{
uint32_t intf = 0;
char ipAddrStr[24];
char macStr[18];
memset(&ipAddr, 0, sizeof(ipAddr));
memset(macStr, 0, 18);
mac_addr.pstart = macStr;
mac_addr.size = 18;
{
ipv4Addr = htonl(ipAddr.addr.ipv4);
if (inet_ntop(AF_INET, &ipv4Addr, ipAddrStr, sizeof(ipAddrStr)) == 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
printf("IP: %s, MAC: %s Intf:%d \n", ipAddrStr, macStr, intf);
}
return;
}
{
{
printf("Bad return code trying to configure IP Redirects Mode. (result = %d)\n", result);
}
else
{
printf("IP Redirects Mode configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP ICMP Echo Reply Mode. (result = %d)\n", result);
}
else
{
printf("IP ICMP Echo Reply Mode configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP Helper Mode. (result = %d)\n", result);
}
else
{
printf("IP Helper Mode configured successfully \n");
}
return;
}
char *IPStr, uint32_t udpPort)
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
{
printf("Bad return code trying to add IP Helper Address. (result = %d)\n", result);
}
else
{
printf("IP Helper Address configured successfully \n");
}
return;
}
char *IPStr, uint32_t udpPort)
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
{
printf("Bad return code trying to delete IP Helper Address. (result = %d)\n", result);
}
else
{
printf("IP Helper Address deleted successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP interface MTU. (result = %d)\n", result);
}
else
{
printf("IP interface MTU configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP interface Net Directed BCast Mode. (result = %d)\n", result);
}
else
{
printf("IP interface Net Directed BCast Mode configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP interface Proxy ARP Mode. (result = %d)\n", result);
}
else
{
printf("IP interface Proxy ARP Mode configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP interface Redirects Mode. (result = %d)\n", result);
}
else
{
printf("IP interface Redirects Mode configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP interface Destination Unreachable Mode. (result = %d)\n", result);
}
else
{
printf("IP interface Unreachable Mode configured successfully \n");
}
return;
}
{
{
printf("Bad return code trying to configure IP interface Routing Mode. (result = %d)\n", result);
}
else
{
printf("IP interface Routing Mode configured successfully \n");
}
return;
}
uint32_t intf, char *IPStr, uint32_t udpPort)
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
{
printf("Bad return code trying to add IP Helper Address. (result = %d)\n", result);
}
else
{
printf("IP Helper Address configured successfully \n");
}
return;
}
uint32_t intf, char *IPStr, uint32_t udpPort)
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
{
printf("Bad return code trying to delete IP Helper Address. (result = %d)\n", result);
}
else
{
printf("IP Helper Address deleted successfully \n");
}
return;
}
uint32_t intf, uint32_t udpPort)
{
{
printf("Bad return code trying to add IP Helper Discard. (result = %d)\n", result);
}
else
{
printf("IP Helper Discard configured successfully \n");
}
return;
}
uint32_t intf, uint32_t udpPort)
{
{
printf("Bad return code trying to delete IP Helper Discard. (result = %d)\n", result);
}
else
{
printf("IP Helper Discard deleted successfully \n");
}
return;
}
char *NextHopStr, uint32_t rtPref,
{
char str[40], str1[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
memset(str1, 0, sizeof(str1));
strncpy(str1, NextHopStr, sizeof(str1) - 1);
nextHopBuffdesc.pstart = str1;
nextHopBuffdesc.size = strlen(str1) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
printf("IP = %u, PfxLen = %u\n", ipAddr.ipAddr.addr.ipv4, pfxLen);
ipAddr.pfxLen = pfxLen;
if (strcmp(NextHopStr, "null0") == 0)
{
nHptr = (void*)0;
}
else
{
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
nHptr = &nextHop;
}
printf("Next Hop = %u\n", nextHop.addr.ipv4);
}
else
{
if (inet_pton(AF_INET6, IPStr, (void*)&(ipAddr.ipAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
}
ipAddr.pfxLen = pfxLen;
if (strcmp(NextHopStr, "null0") == 0)
{
nHptr = (void*)0;
}
else
{
memset(&nextHop, 0, sizeof(nextHop));
if (inet_pton(AF_INET6, NextHopStr, (void*)&(nextHop.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert Next Hop.\n");
}
nHptr = &nextHop;
}
}
{
printf("IP route added successfully \n");
}
else
{
printf("Bad return code trying to add IP route. (result = %d)\n", result);
}
return;
}
{
char str[40], str1[40];
memset(str, 0, sizeof(str));
strncpy(str, IPStr, sizeof(str) - 1);
ipBuffdesc.pstart = str;
ipBuffdesc.size = strlen(str) + 1;
memset(str1, 0, sizeof(str1));
strncpy(str1, NextHopStr, sizeof(str1) - 1);
nextHopBuffdesc.pstart = str1;
nextHopBuffdesc.size = strlen(str1) + 1;
memset(&ipAddr, 0, sizeof(ipAddr));
{
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
printf("IP = %u, PfxLen = %u\n", ipAddr.ipAddr.addr.ipv4, pfxLen);
ipAddr.pfxLen = pfxLen;
if (strcmp(NextHopStr, "null0") == 0)
{
nHptr = (void*)0;
}
else
{
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
nHptr = &nextHop;
}
printf("Next Hop = %u\n", nextHop.addr.ipv4);
}
else
{
if (inet_pton(AF_INET6, IPStr, (void*)&(ipAddr.ipAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
}
ipAddr.pfxLen = pfxLen;
if (strcmp(NextHopStr, "null0") == 0)
{
nHptr = (void*)0;
}
else
{
memset(&nextHop, 0, sizeof(nextHop));
if (inet_pton(AF_INET6, NextHopStr, (void*)&(nextHop.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert Next Hop.\n");
}
nHptr = &nextHop;
}
}
{
printf("Bad return code trying to delete IP route. (result = %d)\n", result);
}
else
{
printf("IP route deleted successfully \n");
}
return;
}
uint32_t vlanId)
{
{
printf("Bad return code trying to create VLAN Routing Interface %u. (result = %d)\n", vlanId, result);
}
else
{
printf("VLAN Routing Interface created successfully \n");
}
return;
}
uint32_t vlanId)
{
{
printf("Bad return code trying to delete VLAN Routing Interface %u. (result = %d)\n", vlanId, result);
}
else
{
printf("VLAN Routing Interface deleted successfully \n");
}
return;
}
uint32_t vlanId)
{
uint32_t ifNum;
char ifNameStr[OPEN_INTF_NAME_MAX_LENGTH];
ifName.pstart = ifNameStr;
ifName.size = sizeof(ifNameStr);
{
printf("Bad return code trying to get Interface Number for VLAN %u. (result = %d)\n", vlanId, result);
}
else
{
printf("VLAN Routing Interface Number for VLAN %u is %d\n", vlanId, ifNum);
{
printf("Logical interface name for interface %u is %s\n", ifNum, ifNameStr);
}
else
{
printf("Bad return code trying to get interface name for ifNum %u. (result = %d)\n", ifNum, result);
}
}
return;
}
uint32_t ifNum, char *dstIpStr , char *srcIpStr)
{
uint32_t sessId;
memset(&ep, 0x0, sizeof(ep));
ep.
dstIpAddr.family = af;
ep.
srcIpAddr.family = af;
ep.
type = OPEN_BFD_TUNNEL_TYPE_UDP;
{
if (inet_pton(AF_INET, dstIpStr, (void*)&(ep.dstIpAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
if (inet_pton(AF_INET, srcIpStr, (void*)&(ep.srcIpAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
ep.dstIpAddr.addr.ipv4 = ntohl(ep.dstIpAddr.addr.ipv4);
ep.srcIpAddr.addr.ipv4 = ntohl(ep.srcIpAddr.addr.ipv4);
}
{
if (inet_pton(AF_INET6, dstIpStr, (void*)&(ep.dstIpAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
if (inet_pton(AF_INET6, srcIpStr, (void*)&(ep.srcIpAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
}
{
printf("Failed to enable BFD %d\n", rc);
}
{
printf("Successfully created BFD session %d\n", sessId);
}
else
{
printf("Failed to create BFD session %d \n", rc);
}
}
{
uint32_t sessIdOut;
memset(&ipAddr, 0x0, sizeof(ipAddr));
ipAddr.family = af;
{
if (inet_pton(AF_INET, dstIpStr, (void*)&(ipAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
ipAddr.addr.ipv4 = ntohl(ipAddr.addr.ipv4);
}
{
if (inet_pton(AF_INET6, dstIpStr, (void*)&(ipAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
}
{
printf("Failed to find BFD session rc=%d\n", rc);
}
else
{
printf("Successfully found BFD session %d\n", sessIdOut);
}
}
{
int count = 0;
vrfNameBuf.pstart = vrfName;
vrfNameBuf.size = 1;
vrfNameNextBuf.pstart = vrfNameNext;
printf("List of VRFs\n");
printf("************\n\n");
while (1)
{
{
{
printf("%s: invalid argument passed to openapiVrfNameNextGet\n",
__FUNCTION__);
}
break;
}
printf("%d: %s\n", ++count, vrfNameNext);
strncpy(vrfName, vrfNameNext, sizeof(vrfName));
vrfNameBuf.size = strlen(vrfName) + 1;
}
printf("\n%d VRFs found\n", count);
}
uint32_t ifNum, char *dstIpStr , char *srcIpStr)
{
uint32_t sessId;
memset(&ep, 0x0, sizeof(ep));
ep.compId = 0;
ep.vrfId = 0;
ep.intIfNum = ifNum;
ep.dstIpAddr.family = af;
ep.srcIpAddr.family = af;
ep.type = OPEN_BFD_TUNNEL_TYPE_UDP;
sessId = OPEN_BFD_SESSION_ID_INVALID;
{
if (inet_pton(AF_INET, dstIpStr, (void*)&(ep.dstIpAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
if (inet_pton(AF_INET, srcIpStr, (void*)&(ep.srcIpAddr.addr.ipv4)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
ep.dstIpAddr.addr.ipv4 = ntohl(ep.dstIpAddr.addr.ipv4);
ep.srcIpAddr.addr.ipv4 = ntohl(ep.srcIpAddr.addr.ipv4);
}
{
if (inet_pton(AF_INET6, dstIpStr, (void*)&(ep.dstIpAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
if (inet_pton(AF_INET6, srcIpStr, (void*)&(ep.srcIpAddr.addr.ipv6)) < 0)
{
printf("Bad return code trying to convert IP.\n");
return;
}
}
{
printf("Successfully deleted BFD session\n");
}
else
{
printf("Failed to delete BFD session %d\n", rc);
}
}
{
uint32_t sessId;
uint32_t count = 0;
char *pStrInfo_bfd_header_1 = "SessionId:%u State:%s Local Disc:%u Remote Disc:%u\r\n";
char *pStrInfo_bfd_header_2 = " Destination IP:%s \r\n";
char *pStrInfo_bfd_header_3 = " Source IP:%s \r\n";
char *pStrInfo_bfd_header_4 = " Interface:%u VrfId:%u Uptime:%u secs\r\n";
char *pStrInfo_bfd_header_5 = " Min Transmit Interval:%u milliseconds\r\n";
char *pStrInfo_bfd_header_6 = " Min Receive Interval:%u milliseconds\r\n";
char *pStrInfo_bfd_header_7 = " Detection interval multiplier:%u \r\n";
char *pStrInfo_bfd_header_8 = " In Packets:%u Out Packets:%u Dropped Packets:%u\r\n";
char *pStrInfo_bfd_header_9 = " Echo In Packets:%u Echo Out Packets:%u \r\n";
char strSrcIp[80] = {0};
char strDstIp[80] = {0};
char strState[80] = {0};
for (sessId=1; sessId < 96; sessId++)
{
memset(&info, 0x0, sizeof(info));
memset(&stats, 0x0, sizeof(stats));
{
count++;
ipAddressFormat(&info.
key.
srcIpAddr, strSrcIp);
ipAddressFormat(&info.
key.
dstIpAddr, strDstIp);
snprintf(strState, sizeof(strState), "%s",
(info.
state == OPEN_BFD_SESSION_STATE_UP) ?
"UP" :
"DOWN");
printf(pStrInfo_bfd_header_2, strDstIp);
printf(pStrInfo_bfd_header_3, strSrcIp);
printf(pStrInfo_bfd_header_4, info.
key.
intIfNum, info.
key.
vrfId, info.
upTime );
printf(pStrInfo_bfd_header_8, stats.
inPkts, stats.
outPkts, stats.
dropPkts );
printf(pStrInfo_bfd_header_9, stats.
echoInPkts, stats.
echoOutPkts);
}
}
if (count == 0)
{
printf("No BFD sessions found.\r\n");
}
}
{
uint32_t invalidControlMode = 10;
uint32_t invalidAddressFamily = 10;
uint32_t invalidIntfAddressType = 10;
uint32_t intf = 1, udpPort = 10, mtu = 1500;
char str[32];
printf("Testing Routing Configuration OpEN APIs sanity:\n\n");
printf("Testing openapiRtrAdminModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Address family NONE :(result = %d)\n", result);
printf("Invalid Address family :(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiRtrAdminModeSet() sanity successful\n\n");
printf("Testing openapiRtrIntfIpAddrAdd():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Address family NONE :(result = %d)\n", result);
printf("Invalid Address family :(result = %d)\n", result);
invalidIntfAddressType,
printf("Invalid Address Type:(result = %d)\n", result);
printf("NULL IP Address:(result = %d)\n", result);
&ipAddrPfx, invalidControlMode);
printf("NULL Ext Mode:(result = %d)\n", result);
printf("openapiRtrIntfIpAddrAdd() sanity successful\n\n");
printf("Testing openapiRtrIntfIpAddrDel():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Address family NONE :(result = %d)\n", result);
printf("Invalid Address family :(result = %d)\n", result);
invalidIntfAddressType,
printf("Invalid Address Type:(result = %d)\n", result);
printf("NULL IP Address:(result = %d)\n", result);
&ipAddrPfx, invalidControlMode);
printf("NULL Ext Mode:(result = %d)\n", result);
printf("openapiRtrIntfIpAddrDel() sanity successful\n\n");
printf("Testing openapiArpEntryAdd():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("NULL Mac Address:(result = %d)\n", result);
buffDesc.pstart = NULL;
buffDesc.size = 6;
printf("NULL Mac Address buffer:(result = %d)\n", result);
buffDesc.pstart = str;
buffDesc.size = 0;
printf("NULL Mac Address buffer length:(result = %d)\n", result);
printf("openapiArpEntryAdd() sanity successful\n\n");
printf("Testing openapiArpEntryDel():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiArpEntryDel() sanity successful\n\n");
printf("Testing openapiArpEntryNextGet():\n");
buffDesc.pstart = str;
buffDesc.size = 18;
printf("NULL Client Handle:(result = %d)\n", result);
printf("NULL Intf:(result = %d)\n", result);
printf("NULL ipAddr:(result = %d)\n", result);
printf("NULL Mac Address:(result = %d)\n", result);
buffDesc.pstart = NULL;
buffDesc.size = 18;
printf("NULL Mac Address buffer:(result = %d)\n", result);
buffDesc.pstart = str;
buffDesc.size = 0;
printf("NULL Mac Address buffer length:(result = %d)\n", result);
printf("openapiArpEntryNextGet() sanity successful\n\n");
printf("Testing openapiIpRedirectsModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiIpRedirectsModeSet() sanity successful\n\n");
printf("Testing openapiIpICMPEchoReplyModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiIpICMPEchoReplyModeSet() sanity successful\n\n");
printf("Testing openapiIpHelperModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiIpHelperModeSet() sanity successful\n\n");
printf("Testing openapiIpHelperAddressAdd():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiIpHelperAddressAdd() sanity successful\n\n");
printf("Testing openapiIpHelperAddressDel():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiIpHelperAddressDel() sanity successful\n\n");
printf("Testing openapiRtrIntfIpHelperAddressAdd():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiRtrIntfIpHelperAddressAdd() sanity successful\n\n");
printf("Testing openapiRtrIntfIpHelperAddressDel():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiRtrIntfIpHelperAddressDel() sanity successful\n\n");
printf("Testing openapiRtrIntfIpHelperDiscardAdd():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiRtrIntfIpHelperDiscardAdd() sanity successful\n\n");
printf("Testing openapiRtrIntfIpHelperDiscardDel():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiRtrIntfIpHelperDiscardDel() sanity successful\n\n");
printf("Testing openapiRtrIntfMTUSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Address family :(result = %d)\n", result);
printf("openapiRtrIntfMTUSet() sanity successful\n\n");
printf("Testing openapiRtrIntfIpNetDirBroadcastModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiRtrIntfIpNetDirBroadcastModeSet() sanity successful\n\n");
printf("Testing openapiRtrIntfIpProxyArpModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiRtrIntfIpProxyArpModeSet() sanity successful\n\n");
printf("Testing openapiRtrIntfIpRedirectsModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiRtrIntfIpRedirectsModeSet() sanity successful\n\n");
printf("Testing openapiRtrIntfIpDestUnreachableModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiRtrIntfIpDestUnreachableModeSet() sanity successful\n\n");
printf("Testing openapiRtrIntfRtrAdminModeSet():\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("Invalid Control Mode:(result = %d)\n", result);
printf("openapiRtrIntfRtrAdminModeSet() sanity successful\n\n");
printf("Testing openapiIpRouteAdd():\n");
printf("NULL Client Handle:(result = %d)\n", result);
result =
openapiIpRouteAdd(clientHandle, invalidAddressFamily, &ipAddrPfx, &ipAddr, 0, intf, NULL);
printf("Invalid Address Family:(result = %d)\n", result);
printf("NULL IP Address Pfx:(result = %d)\n", result);
printf("NULL Next Hop:(result = %d)\n", result);
printf("openapiIpRouteAdd() sanity successful\n\n");
printf("Testing openapiIpRouteDel():\n");
printf("NULL Client Handle:(result = %d)\n", result);
result =
openapiIpRouteDel(clientHandle, invalidAddressFamily, &ipAddrPfx, &ipAddr, intf, NULL);
printf("Invalid Address Family:(result = %d)\n", result);
printf("NULL IP Address Pfx:(result = %d)\n", result);
printf("NULL Next Hop:(result = %d)\n", result);
printf("openapiIpRouteDel() sanity successful\n\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiRtrVlanIntfCreate() sanity successful\n\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("NULL ifnum: (result = %d)\n", result);
printf("Invalid VLAN ifnum: (result = %d)\n", result);
printf("openapiRtrVlanIntfIfNumGet() sanity successful\n\n");
printf("NULL Client Handle:(result = %d)\n", result);
printf("openapiRtrVlanIntfDelete() sanity successful\n\n");
return;
}
int main(int argc, char **argv)
{
int rc;
uint32_t ifNum, testNum, addrFamily;
uint32_t addrType, pfxLen, extArg, mode;
uint32_t udpPort, mtu, pref, vlanId;
if (argc < 2 )
{
printRoutingAppMenu();
exit(1);
}
l7proc_crashlog_register();
{
printf("\nFailed to initialize RPC to OpEN. Exiting (result = %d)\n", rc);
exit(2);
}
{
sleep(1);
}
if (strcmp("API", argv[1]) == 0)
{
if (argc < 3 )
{
printRoutingAppMenu();
exit(1);
}
testNum = atoi(argv[2]);
switch (testNum)
{
case 1:
if (argc != 9)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
addrFamily = atoi(argv[4]);
addrType = atoi(argv[5]);
pfxLen = atoi(argv[7]);
extArg = atoi(argv[8]);
rtrIntfIpAddrAdd(&clientHandle, addrFamily, ifNum, addrType, argv[6], pfxLen, extArg);
break;
case 2:
if (argc != 9)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
addrFamily = atoi(argv[4]);
addrType = atoi(argv[5]);
pfxLen = atoi(argv[7]);
extArg = atoi(argv[8]);
rtrIntfIpAddrDel(&clientHandle, addrFamily, ifNum, addrType, argv[6], pfxLen, extArg);
break;
case 3:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
addrFamily = atoi(argv[3]);
mode = atoi(argv[4]);
rtrAdminModeSet(&clientHandle, addrFamily, mode);
break;
case 4:
if (argc != 3)
{
printRoutingAppMenu();
exit(1);
}
arpEntryAdd(&clientHandle);
break;
case 5:
if (argc != 3)
{
printRoutingAppMenu();
exit(1);
}
arpEntryDel(&clientHandle);
break;
case 6:
if (argc != 3)
{
printRoutingAppMenu();
exit(1);
}
arpEntryShow(&clientHandle);
break;
case 7:
if (argc != 4)
{
printRoutingAppMenu();
exit(1);
}
mode = atoi(argv[3]);
ipRedirectsModeSet(&clientHandle, mode);
break;
case 8:
if (argc != 4)
{
printRoutingAppMenu();
exit(1);
}
mode = atoi(argv[3]);
ipICMPEchoReplyModeSet(&clientHandle, mode);
break;
case 9:
if (argc != 4)
{
printRoutingAppMenu();
exit(1);
}
mode = atoi(argv[3]);
ipHelperModeSet(&clientHandle, mode);
break;
case 10:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
udpPort = atoi(argv[4]);
ipHelperAddressAdd(&clientHandle, argv[3], udpPort);
break;
case 11:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
udpPort = atoi(argv[4]);
ipHelperAddressDel(&clientHandle, argv[3], udpPort);
break;
case 12:
if (argc != 6)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
addrFamily = atoi(argv[4]);
mtu = atoi(argv[5]);
rtrIntfMTUSet(&clientHandle, addrFamily, ifNum, mtu);
break;
case 13:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
mode = atoi(argv[4]);
rtrIntfIpNetDirBroadcastModeSet(&clientHandle, ifNum, mode);
break;
case 14:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
mode = atoi(argv[4]);
rtrIntfIpProxyArpModeSet(&clientHandle, ifNum, mode);
break;
case 15:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
mode = atoi(argv[4]);
rtrIntfIpRefirectsModeSet(&clientHandle, ifNum, mode);
break;
case 16:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
mode = atoi(argv[4]);
rtrIntfIpDestUnreachableModeSet(&clientHandle, ifNum, mode);
break;
case 17:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
mode = atoi(argv[4]);
rtrIntfRtrAdminModeSet(&clientHandle, ifNum, mode);
break;
case 18:
if (argc != 6)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
udpPort = atoi(argv[5]);
rtrIntfIpHelperAddressAdd(&clientHandle, ifNum, argv[4], udpPort);
break;
case 19:
if (argc != 6)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
udpPort = atoi(argv[5]);
rtrIntfIpHelperAddressDel(&clientHandle, ifNum, argv[4], udpPort);
break;
case 20:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
udpPort = atoi(argv[4]);
rtrIntfIpHelperDiscardAdd(&clientHandle, ifNum, udpPort);
break;
case 21:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
ifNum = atoi(argv[3]);
udpPort = atoi(argv[4]);
rtrIntfIpHelperDiscardDel(&clientHandle, ifNum, udpPort);
break;
case 22:
if ((argc < 9) || (argc > 12))
{
printRoutingAppMenu();
exit(1);
}
addrFamily = atoi(argv[3]);
pfxLen = atoi(argv[5]);
pref = atoi(argv[7]);
ifNum = atoi(argv[8]);
memset(&mpls, 0, sizeof(mpls));
if (argc >= 10)
{
mpls.
label[0] = atoi(argv[9]);
}
if (argc >= 11)
{
mpls.label[1] = atoi(argv[10]);
}
if (argc == 12)
{
mpls.label[2] = atoi(argv[11]);
}
rtrIpRouteAdd(&clientHandle, addrFamily, argv[4],
pfxLen, argv[6], pref, ifNum, &mpls);
break;
case 23:
if ((argc < 8) || (argc > 11))
{
printRoutingAppMenu();
exit(1);
}
addrFamily = atoi(argv[3]);
pfxLen = atoi(argv[5]);
ifNum = atoi(argv[7]);
memset(&mpls, 0, sizeof(mpls));
if (argc >= 9)
{
mpls.label[0] = atoi(argv[8]);
}
if (argc >= 10)
{
mpls.label[1] = atoi(argv[9]);
}
if (argc == 11)
{
mpls.label[2] = atoi(argv[10]);
}
rtrIpRouteDel(&clientHandle, addrFamily, argv[4],
pfxLen, argv[6], ifNum, &mpls);
break;
case 24:
if (argc != 4)
{
printRoutingAppMenu();
exit(1);
}
vlanId = atoi(argv[3]);
rtrVlanIntfCreate(&clientHandle, vlanId);
break;
case 25:
if (argc != 4)
{
printRoutingAppMenu();
exit(1);
}
vlanId = atoi(argv[3]);
rtrVlanIntfDelete(&clientHandle, vlanId);
break;
case 26:
if (argc != 3)
{
printRoutingAppMenu();
exit(1);
}
routingOpENAPIsTestSanity(&clientHandle);
break;
case 27:
case 28:
if (argc != 7)
{
printRoutingAppMenu();
exit(1);
}
addrFamily = atoi(argv[3]);
ifNum = atoi(argv[4]);
if (testNum == 27)
rtrBfdSessionCreate(&clientHandle, addrFamily, ifNum, argv[5], argv[6]);
else
rtrBfdSessionDelete(&clientHandle, addrFamily, ifNum, argv[5], argv[6]);
break;
case 29:
if (argc != 3)
{
printRoutingAppMenu();
exit(1);
}
rtrBfdSessionShow(&clientHandle);
break;
case 30:
if (argc != 5)
{
printRoutingAppMenu();
exit(1);
}
addrFamily = atoi(argv[3]);
rtrBfdSessionFind(&clientHandle, addrFamily, argv[4]);
break;
case 31:
iterateVRFs(&clientHandle);
break;
case 32:
if (argc != 4)
{
printRoutingAppMenu();
exit(1);
}
vlanId = atoi(argv[3]);
rtrVlanIfNumShow(&clientHandle, vlanId);
break;
default:
printRoutingAppMenu();
break;
}
}
else
{
printRoutingAppMenu();
}
return 0;
}