2009-04-15 18 views
6

Ich schreibe einen Dämon, der auf einer eingebetteten Plattform ausgeführt wird und die Standardroute des Geräts entsprechend der Schnittstelle ändern muss, zu der er sich gerade verbindet. Wie kann ich das programmatisch machen? Ich weiß, dass ich System verwenden kann ("route del default & & Route hinzufügen Standard-Gateway blah"); usw. Aber gibt es einen direkteren Weg?So bearbeiten Sie die Routingtabelle programmgesteuert

UPDATE: Ich habe mein spezielles Problem gelöst, indem ich einen Patch für pppd gefunden habe, der eine Option replacedefaultroute erlaubt. Der Patch enthält außerdem Code zum programmgesteuerten Ändern der Routingtabelle. Es ist in diesem Gentoo Fehlerbericht enthalten http://bugs.gentoo.org/227321

Antwort

7

Check out SIOCADDRT/SIOCDELRT ioctls (Stevens' "Unix Network Programming" wäre eine gute Referenz sein.)

+1

Ehrfürchtig, ich bekomme entweder Zugriff auf Shell-Ebene oder ich muss/proc/net/route analysieren und ioctls verwenden! Ich nehme an, ich kann Code von anderen Projekten kopieren. Momentan schauen wir uns an, wie pppd es macht. – MattSmith

0

Ich würde empfehlen, nur mit dieser Route Befehl. Dafür ist es da und alles andere wird nur ein Hack sein.

1

Ich tippte

man route 

weil ich weiß, manchmal kann ich einen Hinweis auf die bekommen " Siehe auch "Abschnitt, um das Gleiche programmatisch zu tun. Ich sah dort eine Manpage auf Seite 4 für "route" (Route (4) war im see auch Abschnitt). So versucht

man 4 route 

und es sah vielversprechend für das aus, was der route-Befehl programmatisch tun kann.

Hinweis Ich habe gerade festgestellt, dass dies nur für BSD-Systeme ist. Hier ist eine URL mit der Manpage http://www.manpagez.com/man/4/route/. Dies kann hilfreich sein oder auch nicht. Vielleicht kannst du hier ein paar Sachen googlen und das Wort "linux" hinzufügen.

+0

Ich habe Mann Route aber nicht Mann 4 Route. Können Sie mir sagen, welche Bibliothek oder Header-Datei ich brauche? – MattSmith

+0

Sie haben Recht, meine Schuld. Ich habe nach einem BSD-System gesucht. Hat deine Mannroute ein "Siehst auch", das überhaupt vielversprechend aussieht? –

+0

Es wäre praktisch, wie es auf Linux scheint, müssen Sie ioctls verwenden und die Routentabelle in/proc analysieren – MattSmith

Verwandte Themen