#include <stdlib.h>
#include <unistd.h>
#include "rpcclt_openapi.h"
#include "proc_util.h"
void printDNSAppMenu()
{
printf("Usage: dns_example <test#> <arg1> <arg2> ... \n");
printf("Test 1: Set DNS default domain name: dns_example 1 <domain-name> \n");
printf("Test 2: Get DNS default domain name: dns_example 2 \n");
printf("Test 3: Clear DNS default domain name: dns_example 3 \n");
printf("Test 4: Add DNS IP name server: dns_example 4 <ip-address> \n");
printf("Test 5: Delete DNS IP name server: dns_example 5 <ip-address> \n");
printf("Test 6: Get the DNS IP name servers: dns_example 6 \n");
printf("Test 7: Set the host name to IP address mapping: dns_example 7 <hostname> <ip-address> \n");
printf("Test 8: Delete the host name to IP address mapping: dns_example 8 <hostname> \n");
printf("Test 9: Show static DNS host name to IP address mappings: dns_example 9 \n");
printf("Test 10: Get the IP address for the given DNS client host name: dns_example 10 <hostname> \n");
printf("Test 11: Test DNS OpEN API Sanity: dns_example 11 \n");
printf("Test 12: Set DNS Admin Mode: dns_example 12 <mode> \n");
printf("Test 13: Get DNS Admin Mode: dns_example 13 \n");
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, domainName, (sizeof(str) - 1));
dnsDefDomainName.
pstart = str;
dnsDefDomainName.
size = strlen(str)+1;
{
printf("Bad return code trying to set DNS default domain name. (result = %d)\n", result);
}
else
{
printf("DNS default domain name is set successfully. (result = %d)\n", result);
}
return;
}
{
uint32_t domainNameMaxLen = 0;
char *str;
{
printf(" Bad return code trying to get DNS domain name maximum length. (result = %d)\n", result);
return;
}
if ((str = (char *)malloc(domainNameMaxLen)) == NULL)
{
printf("Could not allocate memory. \n");
return;
}
memset(str, 0, domainNameMaxLen);
dnsDefDomainName.pstart = str;
dnsDefDomainName.size = domainNameMaxLen;
{
printf("Bad return code trying to get DNS default domain name. (result = %d)\n", result);
}
else
{
printf("DNS default domain name: %s \n", (char *)dnsDefDomainName.pstart);
}
free(str);
return;
}
{
{
printf("Bad return code trying to delete DNS default domain name. (result = %d)\n", result);
}
else
{
printf("DNS default domain name deleted successfully. (result = %d)\n", result);
}
return;
}
{
char str[40];
memset(str, 0, sizeof(str));
strncpy(str, ipStr, (sizeof(str) - 1));
ipAddrStr.pstart = str;
ipAddrStr.size = sizeof(str);
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
{
printf("Bad return code trying to add DNS IP name server. (result = %d)\n", result);
}
else
{
printf("DNS IP name server added successfully. (result = %d)\n", result);
}
return;
}
char *ipStr)
{
char str[40];
if (strcmp(ipStr, "all") == 0)
{
}
else
{
memset(str, 0, sizeof(str));
strncpy(str, ipStr, (sizeof(str) - 1));
ipAddrStr.pstart = str;
ipAddrStr.size = sizeof(str);
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
}
{
printf("Bad return code trying to delete DNS IP name server. (result = %d)\n", result);
}
else
{
printf("DNS IP name server deleted successfully. (result = %d)\n", result);
}
return;
}
{
char ip6AddrStr[40];
uint32_t maxIpNameServers = 0;
struct in_addr ipAddrStr;
{
printf("Bad return code trying to get maximum IP name servers supported. (result = %d) \n", result);
return;
}
memset(&ipAddr, 0, sizeof(ipAddr));
{
printf("Bad return code trying to get first IP name server. (result = %d) \n", result);
return;
}
printf("Maximum IP name serves supported: %d\n", maxIpNameServers);
printf("DNS IP name servers:\n");
printf("--------------------\n");
do
{
{
ipAddrStr.s_addr = htonl(ipAddr.
addr.
ipv4);
printf("%s\n", inet_ntoa(ipAddrStr));
}
else
{
memset(ip6AddrStr, 0, sizeof(ip6AddrStr));
if (inet_ntop(AF_INET6, (
void*)&(ipAddr.addr.
ipv6), ip6AddrStr,
sizeof(ip6AddrStr)) == NULL)
{
printf("Bad return code trying to convert IPv6 address.\n");
return;
}
printf("%s\n", ip6AddrStr);
}
return;
}
{
char str[256];
char str1[40];
memset(str, 0, sizeof(str));
strncpy(str, hostname, (sizeof(str) - 1));
dnsHostName.pstart = str;
dnsHostName.size = strlen(str)+1;
memset(&ipAddr, 0, sizeof(ipAddr));
memset(str1, 0, sizeof(str1));
strncpy(str1, ipStr, (sizeof(str1) - 1));
ipAddrStr.pstart = str1;
ipAddrStr.size = sizeof(str1);
{
printf("Bad return code trying to convert IP address. (result = %d)\n", result);
return;
}
{
printf("Bad return code trying to set IP host address mapping. (result = %d)\n", result);
}
else
{
printf("Host name to IP address mapping successful. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, hostname, (sizeof(str) - 1));
dnsHostName.pstart = str;
dnsHostName.size = strlen(str)+1;
{
printf("Bad return code trying to remove IP host address mapping. (result = %d)\n", result);
}
else
{
printf("Host name to IP address mapping removed successfully. (result = %d)\n", result);
}
return;
}
{
uint32_t dnsHostNameMaxSize = 0;
char *hostNameStr;
char ip6AddrStr[40];
struct in_addr ipAddrStr;
{
printf(" Bad return code trying to get displayable DNS domain name maximum length. (result = %d)\n", result);
return;
}
if ((hostNameStr = (char *)malloc(dnsHostNameMaxSize)) == NULL)
{
printf("Could not allocate memory. \n");
return;
}
memset(hostNameStr, 0, dnsHostNameMaxSize);
hostName.pstart = hostNameStr;
hostName.size = dnsHostNameMaxSize;
{
printf("Bad return code trying to get first static host name. (result = %d)\n", result);
free(hostNameStr);
return;
}
do
{
printf("Hostname: %s\n", (char *) hostName.pstart);
printf("IP Address: ");
{
printf("Bad return code trying to get ip address mapped to the host name. (result = %d)\n", result);
}
else
{
{
ipAddrStr.s_addr = htonl(ipAddr.addr.ipv4);
printf("%s\n", inet_ntoa(ipAddrStr));
}
{
memset(ip6AddrStr, 0, sizeof(ip6AddrStr));
if (inet_ntop(AF_INET6, (void*)&(ipAddr.addr.ipv6), ip6AddrStr, sizeof(ip6AddrStr)) == NULL)
{
printf("Bad return code trying to convert IPv6 address.\n");
free(hostNameStr);
return;
}
printf("%s\n", ip6AddrStr);
}
}
printf("\n");
hostName.size = dnsHostNameMaxSize;
free(hostNameStr);
return;
}
{
uint32_t iPMaxSize = 0;
char str[256];
char *ipStr;
memset(str, 0, sizeof(str));
strncpy(str, hostname, (sizeof(str) - 1));
dnsHostName.pstart = str;
dnsHostName.size = strlen(str)+1;
{
printf(" Bad return code trying to get IP maximum length. (result = %d)\n", result);
return;
}
if ((ipStr = (char *)malloc(iPMaxSize)) == NULL)
{
printf("Could not allocate memory for IP address. \n");
return;
}
memset(ipStr, 0, iPMaxSize);
dnsAddress.pstart = ipStr;
dnsAddress.size = iPMaxSize;
{
printf("Bad return code trying to get IP address. (result = %d)\n", result);
}
else
{
printf("Host name %s IP address %s\n", (char *)dnsHostName.pstart, (char *)dnsAddress.pstart);
}
free(ipStr);
return;
}
{
{
printf("Bad return code trying to set DNS Client Admin Mode. (result = %d)\n", result);
}
else
{
printf("DNS Client Admin Mode is set successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to get DNS Client Admin Mode. (result = %d)\n", result);
}
else
{
printf("DNS Client Admin Mode: %d. (result = %d)\n", mode, result);
}
return;
}
{
uint32_t dnsDomainNameMaxSize = 0;
uint32_t maxIpNameServers = 0;
char *str;
{
printf(" Bad return code trying to get DNS domain name maximum length. (result = %d)\n", result);
return;
}
if ((str = (char *)malloc(dnsDomainNameMaxSize)) == NULL)
{
printf("Could not allocate memory for DNS domain name. \n");
return;
}
memset(str, 0, dnsDomainNameMaxSize);
buffdesc.pstart = str;
buffdesc.size = dnsDomainNameMaxSize;
memset(&ipAddr, 0, sizeof(ipAddr));
printf("\nTesting openapiDNSDefaultDomainNameSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to DNS default domain name. (result = %d)\n", result);
printf("openapiDNSDefaultDomainNameSet() sanity successful. \n");
printf("\nTesting openapiDNSDefaultDomainNameGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to DNS default domain name. (result = %d)\n", result);
printf("openapiDNSDefaultDomainNameGet() sanity successful. \n");
printf("\nTesting openapiDNSDomainNameMaxSizeGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL default domain name maximum length. (result = %d)\n", result);
printf("openapiDNSDomainNameMaxSizeGet() sanity successful. \n");
printf("\nTesting openapiDNSDefaultDomainNameDelete(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("openapiDNSDefaultDomainNameDelete() sanity successful. \n");
printf("\nTesting openapiDNSIpNameServerAdd(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL ipAddr. (result = %d)\n", result);
printf("openapiDNSIpNameServerAdd() sanity successful. \n");
printf("\nTesting openapiDNSIpNameServerDelete(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL ipAddr. (result = %d)\n", result);
printf("openapiDNSIpNameServerDelete() sanity successful. \n");
printf("\nTesting openapiDNSIpNameServersNextGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL ipAddr. (result = %d)\n", result);
printf("openapiDNSIpNameServersNextGet() sanity successful. \n");
printf("\nTesting openapiDNSIpNameServersMaxSupportedGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL maximum IP name servers. (result = %d)\n", result);
printf("openapiDNSIpNameServersMaxSupportedGet() sanity successful. \n");
printf("\nTesting openapiDNSStaticHostAddressMappingSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to DNS hostname. (result = %d)\n", result);
printf("NULL ipAddr. (result = %d)\n", result);
printf("openapiDNSStaticHostAddressMappingSet() sanity successful. \n");
printf("\nTesting openapiDNSStaticHostAddressMappingRemove(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to DNS hostname. (result = %d)\n", result);
printf("openapiDNSStaticHostAddressMappingRemove() sanity successful. \n");
printf("\nTesting openapiDNSStaticHostNextGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to DNS hostname. (result = %d)\n", result);
printf("openapiDNSStaticHostNextGet() sanity successful. \n");
printf("\nTesting openapiDNSStaticHostIpAddrGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to DNS hostname. (result = %d)\n", result);
printf("NULL ipAddr. (result = %d)\n", result);
printf("openapiDNSStaticHostIpAddrGet() sanity successful. \n");
printf("\nTesting openapiDNSAdminModeSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid DNS Client admin mode. (result = %d)\n", result);
printf("openapiDNSAdminModeSet() sanity successful.\n");
printf("\nTesting openapiDNSAdminModeGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL DNS Client admin mode. (result = %d)\n", result);
printf("openapiDNSAdminModeGet sanity successful.\n");
free(str);
return;
}
int main(int argc, char **argv)
{
uint32_t testNum;
char switch_os_revision_string[100];
uint32_t arg1;
if (argc < 2)
{
printDNSAppMenu();
exit(1);
}
testNum = atoi(argv[1]);
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 DNS API 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");
switch (testNum)
{
case 1:
if (argc != 3)
{
printDNSAppMenu();
exit(1);
}
dnsDefaultDomainNameSet(&clientHandle, argv[2]);
break;
case 2:
if (argc != 2)
{
printDNSAppMenu();
exit(1);
}
dnsDefaultDomainNameGet(&clientHandle);
break;
case 3:
if (argc != 2)
{
printDNSAppMenu();
exit(1);
}
dnsDefaultDomainNameDelete(&clientHandle);
break;
case 4:
if (argc != 3)
{
printDNSAppMenu();
exit(1);
}
dnsIpNameServerAdd(&clientHandle, argv[2]);
break;
case 5:
if (argc != 3)
{
printDNSAppMenu();
exit(1);
}
dnsIpNameServerDelete(&clientHandle, argv[2]);
break;
case 6:
if (argc != 2)
{
printDNSAppMenu();
exit(1);
}
dnsIpNameServersGet(&clientHandle);
break;
case 7:
if (argc != 4)
{
printDNSAppMenu();
exit(1);
}
dnsStaticHostAddressMappingSet(&clientHandle, argv[2], argv[3]);
break;
case 8:
if (argc != 3)
{
printDNSAppMenu();
exit(1);
}
dnsStaticHostAddressMappingRemove(&clientHandle, argv[2]);
break;
case 9:
if (argc != 2)
{
printDNSAppMenu();
exit(1);
}
dnsStaticHostToIpMappingsShow(&clientHandle);
break;
case 10:
if (argc != 3)
{
printDNSAppMenu();
exit(1);
}
dnsClientInetNameLookup(&clientHandle, argv[2]);
break;
case 11:
if (argc != 2)
{
printDNSAppMenu();
exit(1);
}
dnsOpENAPIsSanity(&clientHandle);
break;
case 12:
if (argc != 3)
{
printDNSAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
dnsAdminModeSet(&clientHandle, arg1);
break;
case 13:
if (argc != 2)
{
printDNSAppMenu();
exit(1);
}
dnsAdminModeGet(&clientHandle);
break;
default:
printDNSAppMenu();
break;
}
L7PROC_LOGF(L7PROC_LOG_SEVERITY_INFO, 0, "Stopping DNS API example application");
return 0;
}