Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to programmatically edit the routing table

I am writing a daemon running on an embedded platform that needs to change the default route of the device according to which interface it is connecting on at a given time. How can I do this programatically? I know I can use system("route del default && route add default gateway blah"); etc but is there a more direct way?

UPDATE: I solved my particular problem by discovering a patch to pppd that allows a replacedefaultroute option. The patch also includes code for programmatically modifying the routing table. It is included in this gentoo bug report http://bugs.gentoo.org/227321

like image 355
Matthew Smith Avatar asked Apr 15 '09 01:04

Matthew Smith


2 Answers

Check out SIOCADDRT/SIOCDELRT ioctls (Stevens' "Unix Network Programming" would be a good reference.)

like image 189
Lance Richardson Avatar answered Oct 04 '22 00:10

Lance Richardson


I typed

man route

cause I know sometimes I can get a hint in the "see also" section for how to do the same thing programatically. I saw there was a man page on page 4 for "route" (route(4) was in the see also section). So tried

man 4 route

and it looked promising for doing what the route command can do programmitically.

Note I just noticed this is only for BSD systems. Here is a URL with the manpage http://www.manpagez.com/man/4/route/. This may or may not be helpful. Maybe you can google some of the stuff in here and add the word "linux".

like image 30
Doug T. Avatar answered Oct 03 '22 22:10

Doug T.