Accessiing routing information

Posted on 1998-07-21
Last Modified: 2010-04-21
I have to access the routing information in my program. The file route.h contains the hashed linked list structure as defined in most of the books. But on my Unixware 1.14 version, the structure doesn't contain the "rt_next" member which points to the next routing entry. If this is the case how can you know the exact structure in the system for the routing tables. Where do I get information for this(manuals, header files etc)
Question by:vividh
  • 4
  • 2

Expert Comment

ID: 2009121
You are almost certainly better off parsing the output of
"netstat -r".


Accepted Solution

seedy earned 200 total points
ID: 2009122
> The file route.h contains the hashed linked list structure
Which structure are you referring to?  I am familiar with UnixWare 2.1.

On 2.1 you would use ioctl(SIOCGRTTAB)call on /dev/ip to retrieve the routing information.  The info will be retunred in an array of struct rtrecord.  SIOCGRTSIZ can be used to get the number of route entries.

Check on the sockio.h for the #defines for the above calls.  If they are present, they should work on 1.1x too.

BTW, you should be previllaged to read this info.

Expert Comment

ID: 2009123
Let me know if you need a code segment that shows how this is done.
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.


Author Comment

ID: 2009124
Seedy can you send me the code segment which will extract me the routing tables from the kernel.

Expert Comment

ID: 2009125
Here you go!

--- code segment start ---
int     fd, iRet;
struct  strioctl ioc;
struct  rtrecord *rtent;
int     iEntries;
int     ii;

if ((fd = open("/dev/ip", O_RDONLY)) < 0) {

/* First find how many entries are in the routing table */
ioc.ic_cmd = SIOCGRTSIZ;
ioc.ic_timout = 0;
ioc.ic_len = 0;
ioc.ic_dp = (caddr_t) NULL ;
if ((iEntries = ioctl(fd, I_STR, (caddr_t) &ioc)) < 0) {

/* Make space for as many entries */
rtent = (struct rtrecord *) malloc(sizeof(struct rtrecord) * iEntries);
if ( rtent == NULL ) {

/* Get the entries */
ioc.ic_cmd = SIOCGRTTAB;
ioc.ic_timout = 0;
ioc.ic_len = sizeof(struct rtrecord) * iEntries;
ioc.ic_dp = (caddr_t) rtent ;
if ((iRet = ioctl(fd, I_STR, (caddr_t) &ioc)) < 0) {

/* Entries are in rtent ; loop over each entry and do what you want */
for ( ii = 0; ii < iEntries; ii++) {
        /*******   ADD YOUR CODE HERE *****/

--- code segment end ---

Author Comment

ID: 2009126
The SIOCGRTSIZ defination is not available in Unixware 1.1.2/1.1.4. With 2.1 it is perfect but my limitation is that I am currently working on 1.1.2/1.1.4. If you have worked on these pls help me so.


Expert Comment

ID: 2009127
I am sorry, as I said already, I am familiar only with 2.1.  And I do not have a 1.x around here to look into.

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Vmware Vswitch  VS  Redhat  Bridge 1 115
Solaris 10.  Nmap installation fails 2 72
Unix Command -- Challenging  question 7 96
How to Insert a File Using Text Editor 9 93
Installing FreeBSD… FreeBSD is a darling of an operating system. The stability and usability make it a clear choice for servers and desktops (for the cunning). Savvy?  The Ports collection makes available every popular FOSS application and packag…
Java performance on Solaris - Managing CPUs There are various resource controls in operating system which directly/indirectly influence the performance of application. one of the most important resource controls is "CPU".   In a multithreaded…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question