GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è la differenza tra all, default e eth* in /proc/sys/net/ipv[46]/conf/?

Ho trovato la risposta mentre stavo ancora scrivendo la domanda. Ho deciso di pubblicarlo comunque perché altri potrebbero trovarlo perspicace e quindi rispondere io stesso; Spero che questo non sia disapprovato :)

L'utente Philipp Matthias Hahn sulla mailing list linux-kernel l'ha capito almeno in parte:

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.

Non copre accept_ra ma almeno ora è chiaro come all e default funzionano, o meglio, come non funzionano come mi sarei aspettato.


Il gestore per accept_ra in net/ipv6/addrconf.c è proc_dointvec . Quindi il codice di interfaccia generico ha precedentemente generato un array di all e voci specifiche dell'interfaccia, e scrivendoci dentro con sysctl o procfs inserisce semplicemente il valore specificato nell'array.

Ci preoccupiamo di come questi valori vengono poi utilizzati

Vedrai dai chiamanti di ipv6_accept_ra() funzione in include/net/ipv6.h che ogni chiamante utilizza un'interfaccia specifica per chiamare quella funzione.

Quindi non c'è da nessuna parte nel kernel che net.ipv6.conf.all.accept_ra è mai usato tranne che per memorizzare una voce procfs, per quanto posso vedere.

Se vuoi cambiare accept_ra di ogni interfaccia con un solo comando, puoi farlo:

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

Sono in ritardo di circa 4 anni ma questa è la risposta corretta :P


Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. /proc/[pid]/pagemaps e /proc/[pid]/maps | Linux

  3. Qual è il significato di /usr/sbin, /usr/local/sbin e /usr/local/bin?

  4. Qual è la differenza tra /tmp e /run?

  5. Differenza tra /etc/hosts e /etc/resolv.conf

Linux:la differenza tra "all", "default" ed "eth*" in /proc/sys/net/ipv[46]/conf/?

/proc/cpuinfo e /proc/meminfo in Linux

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Qual è la connessione tra le directory /etc/init.d e /etc/rcX.d in Linux?

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?