2009-04-15 10 views
6

Escribo un daemon ejecutándose en una plataforma incrustada que necesita cambiar la ruta predeterminada del dispositivo según la interfaz a la que se conecta en un momento dado. ¿Cómo puedo hacer esto programáticamente? Sé que puedo usar el sistema ("route del default & & ruta add default gateway blah"); etc, pero ¿hay una manera más directa?Cómo editar programáticamente la tabla de enrutamiento

ACTUALIZACIÓN: He resuelto mi problema particular al descubrir un parche para pppd que permite una opción replacedefaultroute. El parche también incluye código para modificar programáticamente la tabla de enrutamiento. Está incluido en este informe gentoo bug http://bugs.gentoo.org/227321

Respuesta

7

Echa un vistazo a SIOCADDRT ioctls/SIOCDELRT ("Programación Unix Red" Stevens' sería una buena referencia.)

+1

Impresionante, obtengo acceso a nivel de shell o tengo que analizar/proc/net/route y uso ioctls! Supongo que puedo extraer algún código de otros proyectos. Actualmente mirando cómo lo hace pppd. – MattSmith

0

Recomendaría simplemente usar ese comando de ruta. Eso es lo que está ahí, y cualquier otra cosa solo será un truco.

1

I mecanografiado

man route 

causa Sé que a veces puedo obtener una pista en el " ver también "sección sobre cómo hacer lo mismo programáticamente. Vi que había una página de manual en la página 4 para "ruta" (la ruta (4) estaba en la sección ver también). Así que intenté

man 4 route 

y parecía prometedor para hacer lo que el comando route puede hacer programáticamente.

Nota Acabo de notar que esto es solo para sistemas BSD. Aquí hay una URL con la página de manual http://www.manpagez.com/man/4/route/. Esto puede o no ser útil. Tal vez puedas googlear algunas de las cosas aquí y agregar la palabra "linux".

+0

Tengo ruta de hombre pero no ruta de hombre 4. ¿Puede decirme qué biblioteca o archivo de encabezado necesito? – MattSmith

+0

Tienes razón, es mi culpa. Estaba revisando un sistema BSD. ¿Su ruta hombre tiene un "ver también" que parece prometedor? –

+0

Sería útil, ya que parece que en Linux debe usar ioctls y analizar la tabla de rutas en/proc – MattSmith

Cuestiones relacionadas