2009-04-15 12 views
6

Piszę demona działającego na wbudowanej platformie, która musi zmienić domyślną trasę urządzenia zgodnie z interfejsem, z którym łączy się w danym momencie. Jak mogę to zrobić programowo? Wiem, że mogę używać systemu ("route del default & & route add default gateway blah"); itp. ale czy istnieje bardziej bezpośredni sposób?Jak programowo edytować tabelę routingu

AKTUALIZACJA: Rozwiązałem mój konkretny problem, odkrywając poprawkę do pppd, która pozwala na opcję replaceefaultroute. Poprawka zawiera również kod programowo modyfikujący tabelę routingu. Jest on zawarty w tym raporcie o błędzie gentoo http://bugs.gentoo.org/227321

Odpowiedz

7

odjazdu SIOCADDRT Ioctl/SIOCDELRT ("Programowanie Unix Network" Stevens' byłoby dobre referencje.)

+1

Awesome, dostaję dostęp do poziomu powłoki lub muszę parsować/proc/net/route i używać ioctls! Przypuszczam, że mogę zgrać kod z innych projektów. Obecnie przyglądam się, jak to robi pppd. – MattSmith

0

Polecam po prostu używając tego polecenia trasy. To jest to, co tam jest, i wszystko inne będzie po prostu hackowaniem.

1

Wpisałem

man route 

bo wiem, czasami mogę uzyskać podpowiedź w " zobacz także "sekcję, jak programowo zrobić to samo. Widziałem, że na stronie 4 znajduje się strona podręcznika dla "trasy" (trasa (4) była w sekcji zobacz także). Przetestowano i wyglądało obiecująco, ponieważ polecenie trasy może działać programowo.

Uwaga Właśnie zauważyłem, że jest to tylko dla systemów BSD. Oto adres URL ze stroną podręczną http://www.manpagez.com/man/4/route/. To może, ale nie musi być pomocne. Może możesz tam dodać niektóre rzeczy i dodać słowo "linux".

+0

Mam trasę człowieka, ale nie człowieka 4. Czy możesz mi powiedzieć, której biblioteki lub pliku nagłówkowego potrzebuję? – MattSmith

+0

Masz rację, moja wina. Sprawdzałem system BSD. Czy twoja droga człowieka ma "widzisz także", który wygląda obiecująco? –

+0

Byłoby to przydatne, ponieważ wygląda na to, że musisz używać ioctls i parsować tabelę tras w/proc – MattSmith