proc檔案accept_dad控制dad(duplicate address detection)報文的接收,核心中根據目錄all和介面(ens33)名稱目錄下的accept_dad的兩個值中的最大值來決定最終的值。accept_dad的取值有以下三個:
0 - 關閉dad
1 - 開啟dad
2 - 開啟dad,並且,在基於mac位址的本地鏈路位址檢測到衝突時,關閉ipv6功能。
$ cat /proc/sys/net/ipv6/conf/all/accept_dad
0$ cat /proc/sys/net/ipv6/conf/default/accept_dad
1$ cat /proc/sys/net/ipv6/conf/ens33/accept_dad1$
$ cat /proc/sys/net/ipv6/conf/lo/accept_dad
-1
另外,對於回環介面lo,accept_dad的值為乙個非法值:-1。以下可見,目錄all下的accept_dad預設值為0,而default目錄下的值為1。
static struct ipv6_devconf ipv6_devconf __read_mostly =
static struct ipv6_devconf ipv6_devconf_dflt __read_mostly =
如果dad失敗,並且1a)裝置自身配置的accept_dad大於1,或者1b)裝置所在命名空間的all下的accept_dad大於1,並且2)裝置的disable_ipv6為零(開啟狀態),並且3)此位址不是stable privacy位址,即位址生成方式不是in6_addr_gen_mode_stable_privacy。
在確定當前位址與使用生成方式in6_addr_gen_mode_eui64生成的本地鏈路位址相等之後,關閉ipv6。
static void addrconf_dad_work(struct work_struct *w)
else if (ifp->state == inet6_ifaddr_state_errdad) {
action = dad_abort;
ifp->state = inet6_ifaddr_state_postdad;
if ((dev_net(idev->dev)->ipv6.devconf_all->accept_dad > 1 ||
idev->cnf.accept_dad > 1) &&
!idev->cnf.disable_ipv6 &&
!(ifp->flags & ifa_f_stable_privacy)) {
addr.s6_addr32[0] = htonl(0xfe800000);
addr.s6_addr32[1] = 0;
if (!ipv6_generate_eui64(addr.s6_addr + 8, idev->dev) &&
ipv6_addr_equal(&ifp->addr, &addr)) {
/* dad failed for link-local based on mac */
idev->cnf.disable_ipv6 = 1;
pr_info("%s: ipv6 being disabled!\n", ifp->idev->dev->name);
核心版本 5.10 ICMP控制報文協議
icmp經常被認為是ip層的乙個組成部分。它傳遞差錯以及其他需要注意的資訊。icmp報文通常被ip層或更高層 協議 tcp或udp 使用。一些icmp報文把差錯報文返回給 使用者程序。icmp報文是在ip資料報內部被傳輸的,它封 裝在ip資料報內。icmp報文的格式如圖所示。所有報文的前4個位元組都...
MQTT控制報文(連線)
1.connect 連線服務端 1.1 可變報文 協議名 協議級別 連線標誌 保持連線 1.1.1 協議名 內容固定,標識是mqtt協議 前2個位元組表示長度,後4個位元組ascii碼的mqtt 1.1.2 協議級別 8位的無符號值表示協議的修訂版本,對於3.1.1版協議,協議級別欄位的值是4 0x...
網路控制報文協議(ICMP)
ping也屬於乙個通訊協議,是tcp ip協議的一部分。利用 ping 命令可以檢查網路是否連通,可以很好地幫助我們分析和判定網路故障。應用格式 ping空格ip位址。tracert 跟蹤路由 是路由跟蹤實用程式,用於確定 ip資料報訪問目標所採取的路徑。tracert 命令使用用 ip 生存時間 ...