Solved

Accessiing routing information

Posted on 1998-07-21
7
285 Views
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)
0
Comment
Question by:vividh
  • 4
  • 2
7 Comments
 
LVL 2

Expert Comment

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

0
 
LVL 2

Accepted Solution

by:
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.
0
 
LVL 2

Expert Comment

by:seedy
ID: 2009123
Let me know if you need a code segment that shows how this is done.
0
ScreenConnect 6.0 Free Trial

Check out the updates in one game-changing release, ScreenConnect 6.0, based on partner feedback. New features include a redesigned UI that improves session organization and overall user experience. See the enhancements for yourself!

 

Author Comment

by:vividh
ID: 2009124
Seedy can you send me the code segment which will extract me the routing tables from the kernel.
0
 
LVL 2

Expert Comment

by:seedy
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) {
        return(-1);
}

/* 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) {
        return(-1);
}

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

/* 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) {
        return(-1);
}

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

--- code segment end ---
0
 

Author Comment

by:vividh
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.

0
 
LVL 2

Expert Comment

by:seedy
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.
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

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

Suggested Solutions

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…
Why Shell Scripting? Shell scripting is a powerful method of accessing UNIX systems and it is very flexible. Shell scripts are required when we want to execute a sequence of commands in Unix flavored operating systems. “Shell” is the command line i…
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…
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

831 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