GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen all, default und eth* in /proc/sys/net/ipv[46]/conf/?

Ich habe die Antwort gefunden, während ich noch die Frage geschrieben habe. Ich habe mich entschieden, es trotzdem zu posten, weil andere das vielleicht aufschlussreich finden, und es dann selbst zu beantworten; Ich hoffe, das ist nicht verpönt :)

Der Benutzer Philipp Matthias Hahn auf der Linux-Kernel-Mailingliste hat es zumindest teilweise herausgefunden:

As far as I researched for IPv4 some time ago, the "default" value gets
copied to newly created interfaces only once.
"all" on the other hand allways gets applied in addition to the current
setting, but it depends on the exact setting, if its ORed, ANDed, or
whatevered:
    log_martians         OR
    accept_redirects     AND
    forwarding           ?
    mc_forwarding        AND
    medium_id
    proxy_arp            OR
    shared_media         OR
    secure_redirects     OR
    send_redirects       OR
    bootp_relay          AND
    accept_source_route  AND
    rp_filter            AND
    arp_filter           OR
    arp_announce         MAX
    arp_ignore           MAX
    arp_accept
    app_solicit
    disable_policy
    disable_xfrm
    tag
(see include/linux/inetdevice.h:83 for IN_DEV_{AND,OR,MAX}CONF)

Putting a new value in "all" doesn't change the value you read from
"$interface", but it only gets computed and used internally.

Er deckt accept_ra nicht ab aber zumindest ist jetzt klar wie all und default funktionieren, oder besser gesagt, wie sie nicht so funktionieren, wie ich es erwartet hätte.


Der Handler für accept_ra in net/ipv6/addrconf.c ist proc_dointvec . Der generische Schnittstellencode hat also zuvor ein Array von all generiert und schnittstellenspezifischen Einträge und schreiben in diese mit sysctl oder procfs fügt einfach den von Ihnen angegebenen Wert in das Array ein.

Uns interessiert, wie diese Werte dann verwendet werden

Sie sehen von Anrufern von ipv6_accept_ra() Funktion in include/net/ipv6.h dass jeder Aufrufer eine bestimmte Schnittstelle verwendet, um diese Funktion aufzurufen.

Es gibt also nirgendwo im Kernel diesen net.ipv6.conf.all.accept_ra wird immer verwendet, außer um einen procfs-Eintrag zu speichern, soweit ich sehen kann.

Wenn Sie accept_ra ändern möchten jeder Schnittstelle mit einem Befehl können Sie dies tun:

for TUNABLE in $(sysctl -aN --pattern "accept_ra$")
do
    sysctl -w "$TUNABLE=0"
done

Ich bin ungefähr 4 Jahre zu spät, aber das ist die richtige Antwort:P


Linux
  1. /proc/[pid]/pagemaps und /proc/[pid]/maps | Linux

  2. Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

  3. Was ist die Verbindung zwischen den Verzeichnissen /etc/init.d und /etc/rcX.d in Linux?

  4. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

  5. Sollten Websites gemäß der empfohlenen Verwendung in /var/ oder /usr/ leben?

Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

Was ist der Unterschied zwischen /sbin/nologin und /bin/false?

Der Unterschied zwischen /opt und /usr/local?

Linux – Der Unterschied zwischen „all“, „default“ und „eth*“ In /proc/sys/net/ipv[46]/conf/?

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen