Linux : how to set default route from C?

How can I set (and replace the existing) default network route from a C program? I'd like to do it without shell commands if possible (this is a low memory embedded system). Also can you set the default route without specifying the gateway IP address? In my application I want to make either ppp0 or eth0 the default route, depending on whether the cable is plugged into eth0 or not.

Thanks, Fred

Answers


You could strace the route command you are wanting to mimic. This gives you the relevant syscalls useful to change routing.

You may be interested by the proc(5) interface, e.g. its /proc/net/route pseudo-file.

See also ip(7).


You can make IOCTL calls to set the default route from a C program.

void main()
{
   int sockfd;
   struct rtentry rt;

   sockfd = socket(AF_INET, SOCK_DGRAM, 0);
   if (sockfd == -1)
   {
      perror("socket creation failed\n");
      return;
   }

   struct sockaddr_in *sockinfo = (struct sockaddr_in *)&rt.rt_gateway;
   sockinfo->sin_family = AF_INET;
   sockinfo->sin_addr.s_addr = inet_addr("Your Address");

   sockinfo = (struct sockaddr_in *)&rt.rt_dst;
   sockinfo->sin_family = AF_INET;
   sockinfo->sin_addr.s_addr = INADDR_ANY;

   sockinfo = (struct sockaddr_in *)&rt.rt_genmask;
   sockinfo->sin_family = AF_INET;
   sockinfo->sin_addr.s_addr = INADDR_ANY;

   rt.rt_flags = RTF_UP | RTF_GATEWAY;
   rt.rt_dev = "eth0";

   if(ioctl(sockfd, SIOCADDRT, &rt) < 0 )
       perror("ioctl");

   return;
}

Need Your Help

Centering a table in Firefox

html css html-table alignment

I've got a small table on one of my pages and I'd like it centered so have coded &lt;table cellpadding="0" cellspacing="0" align="center"&gt;which works fine in IE but the table still left aligns in

Reuse scenarios by using mocha

javascript testing mocha code-reuse

Recently I've started to use JS and mocha.