I use the following code to add host route to the routing table, it works on
QNX 6.1a, but failed on QNX 6.2 with error message “error is: 103, Operation
not supported”. Any idea why?
#include <net/route.h>
#include <sys/sockio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char * argv[])
{
int sock;
int rc = 0;
struct ortentry rt;
struct sockaddr_in *rt_gateway;
struct sockaddr_in *rt_dst;
struct sockaddr_in *rt_netmask;
/* add host to gw */
char ipbuf[30]=“10.3.247.19”;
char gwbuf[30]=“10.3.38.1”;
char mskbuf[30]=“255.255.255.255”;
int cmd = SIOCADDRT;
/* delete host to gw /
/
char ipbuf[30]=“10.3.247.19”;
char gwbuf[30]="";
char mskbuf[30]="";
int cmd = SIOCDELRT;
*/
sock = socket( AF_INET, SOCK_DGRAM, 0 );
if ( sock < 0 )
return sock;
memset( &rt, 0, sizeof(rt) );
rt.rt_flags = RTF_HOST | RTF_UP;
rt_gateway = (struct sockaddr_in *)&rt.rt_gateway;
rt_dst = (struct sockaddr_in *)&rt.rt_dst;
rt_netmask = (struct sockaddr_in *)&rt.rt_netmask;
rt_gateway->sin_family = AF_INET;
rt_dst->sin_family = AF_INET;
rt_netmask->sin_family = AF_INET;
rt_gateway->sin_len = sizeof(rt.rt_gateway);
rt_dst->sin_len = sizeof(rt.rt_dst);
rt_netmask->sin_len = sizeof(rt.rt_netmask);
rt_gateway->sin_addr.s_addr = ntohl(inet_network(gwbuf));
rt_dst->sin_addr.s_addr = ntohl(inet_network(ipbuf));
rt_netmask->sin_addr.s_addr = ntohl(inet_network(mskbuf));
if ( (rc = ioctl( sock, cmd, &rt )) == -1 ) {
printf ( “error is: %d, %s \n”, errno, strerror(errno) );
}
close( sock );
return rc;
}