GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara semua, default dan eth* di /proc/sys/net/ipv[46]/conf/?

Saya telah menemukan jawabannya sambil tetap menulis pertanyaan. Saya telah memutuskan untuk tetap mempostingnya karena orang lain mungkin menemukan wawasan ini, dan kemudian menjawabnya sendiri; Saya harap ini tidak disukai :)

Pengguna Philipp Matthias Hahn di milis linux-kernel telah mengetahuinya setidaknya sebagian:

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.

Dia tidak menutupi accept_ra tapi setidaknya sudah jelas sekarang bagaimana all dan default bekerja, atau lebih tepatnya, bagaimana mereka tidak berfungsi seperti yang saya harapkan.


Pawang untuk accept_ra di net/ipv6/addrconf.c adalah proc_dointvec . Jadi kode antarmuka generik sebelumnya telah menghasilkan larik all dan entri khusus antarmuka, dan menuliskannya dengan sysctl atau procfs hanya menempatkan nilai yang Anda tentukan dalam larik.

Kami prihatin dengan bagaimana nilai-nilai itu kemudian digunakan

Anda akan melihat dari penelepon ipv6_accept_ra() fungsi di include/net/ipv6.h bahwa setiap penelepon menggunakan antarmuka khusus untuk memanggil fungsi tersebut.

Jadi tidak ada tempat di kernel yang net.ipv6.conf.all.accept_ra pernah digunakan kecuali untuk menyimpan entri procfs, sejauh yang saya bisa lihat.

Jika Anda ingin mengubah accept_ra dari setiap antarmuka dengan satu perintah, Anda dapat melakukan ini:

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

Saya sekitar 4 tahun terlambat tetapi ini adalah jawaban yang benar :P


Linux
  1. Apa perbedaan antara #!/usr/bin/env bash dan #!/usr/bin/bash?

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Apa arti dari /usr/sbin, /usr/local/sbin dan /usr/local/bin?

  1. Perbedaan antara /bin dan /usr/bin

  2. Apa perbedaan antara /tmp dan /run?

  3. Perbedaan antara /etc/hosts dan /etc/resolv.conf

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  3. Apa Perbedaan Antara /sbin/nologin Dan /bin/false?