Quering Routes in QNX

How do I get all the routes the IP stack has programatically? I tried it
out with sysctl call (the way BSD does it), but for some reason, sysctl is
returning me an incomplete list of routes. Following is the code I am using
query the routes.

-Vinay

#define ROUNDUP(a) \

((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))

RouteShow()

{

size_t needed;

int mib[6];

char *buf, *next, *lim;

struct rt_msghdr *rtm;


mib[0] = CTL_NET;

mib[1] = PF_ROUTE;

mib[2] = 0;

mib[3] = 0;

mib[4] = NET_RT_DUMP;

mib[5] = 0;


if(sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)

{

TRC_SMSG(ctlpl, 1, “sysctl-estimate failed” << strerror(errno) << endl);

return;

}


buf = new char[needed];

if(!buf)

return;


if(sysctl(mib, 6, buf, &needed, NULL, 0) < 0)

{

TRC_SMSG(ctlpl, 1, “sysctl failed” << strerror(errno) << endl);

return;

}

lim = buf + needed;

cout << “QNX IP Stack Routing Tables” << endl;

for(next = buf; next < lim; next += rtm->rtm_msglen)

{

rtm = (struct rt_msghdr *)next;

struct sockaddr *sa = (struct sockaddr *)(rtm + 1);

cout << "SeqNo " << rtm->rtm_seq << endl;

cout << "PidNo " << rtm->rtm_pid << endl;

if(rtm->rtm_addrs == RTA_DST)

{

struct sockaddr_in *sin = (struct sockaddr_in *)sa;

cout << " Dst: " << InetToString(sin->sin_addr.s_addr);

}

else

{

sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa);

struct sockaddr_in *sin = (struct sockaddr_in *)sa;

cout << " Gw: " << InetToString(sin->sin_addr.s_addr) << endl;

}

cout << endl;

}

}